OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [newlib-1.17.0/] [newlib/] [libc/] [machine/] [h8300/] [memset.S] - Diff between revs 158 and 816

Only display areas with differences | Details | Blame | View Log

Rev 158 Rev 816
#include "setarch.h"
#include "setarch.h"
#include "defines.h"
#include "defines.h"
#if defined (__H8300SX__)
#if defined (__H8300SX__)
        .global _memset
        .global _memset
_memset:
_memset:
        ; Use er3 is a temporary since er0 must remain unchanged on exit.
        ; Use er3 is a temporary since er0 must remain unchanged on exit.
        mov.l   er0,er3
        mov.l   er0,er3
        ; Fill er1 with the byte to copy.
        ; Fill er1 with the byte to copy.
        mov.b   r1l,r1h
        mov.b   r1l,r1h
        mov.w   r1,e1
        mov.w   r1,e1
        ; Account for any excess bytes and words that will be copied after
        ; Account for any excess bytes and words that will be copied after
        ; the main loop.  r2 >= 0 if there is a longword to copy.
        ; the main loop.  r2 >= 0 if there is a longword to copy.
        sub     #4,LEN(r2)
        sub     #4,LEN(r2)
        blo     longs_done
        blo     longs_done
        ; Copy one byte if doing so will make er3 word-aligned.
        ; Copy one byte if doing so will make er3 word-aligned.
        ; This isn't needed for correctness but it makes the main loop
        ; This isn't needed for correctness but it makes the main loop
        ; slightly faster.
        ; slightly faster.
        bld     #0,r3l
        bld     #0,r3l
        bcc     word_aligned
        bcc     word_aligned
        mov.b   r1l,@er3+
        mov.b   r1l,@er3+
        sub     #1,LEN(r2)
        sub     #1,LEN(r2)
        blo     longs_done
        blo     longs_done
word_aligned:
word_aligned:
        ; Likewise one word for longword alignment.
        ; Likewise one word for longword alignment.
        bld     #1,r3l
        bld     #1,r3l
        bcc     long_copy
        bcc     long_copy
        mov.w   r1,@er3+
        mov.w   r1,@er3+
        sub     #2,LEN(r2)
        sub     #2,LEN(r2)
        blo     longs_done
        blo     longs_done
long_copy:
long_copy:
        ; Copy longwords.
        ; Copy longwords.
        mov.l   er1,@er3+
        mov.l   er1,@er3+
        sub     #4,LEN(r2)
        sub     #4,LEN(r2)
        bhs     long_copy
        bhs     long_copy
longs_done:
longs_done:
        ; At this point, we need to copy r2 & 3 bytes.  Copy a word
        ; At this point, we need to copy r2 & 3 bytes.  Copy a word
        ; if necessary.
        ; if necessary.
        bld     #1,r2l
        bld     #1,r2l
        bcc     words_done
        bcc     words_done
        mov.w   r1,@er3+
        mov.w   r1,@er3+
words_done:
words_done:
        ; Copy a byte.
        ; Copy a byte.
        bld     #0,r2l
        bld     #0,r2l
        bcc     bytes_done
        bcc     bytes_done
        mov.b   r1l,@er3+
        mov.b   r1l,@er3+
bytes_done:
bytes_done:
        rts
        rts
#else
#else
; A0P pointer to cursor
; A0P pointer to cursor
; A1P thing to copy
; A1P thing to copy
        .global _memset
        .global _memset
_memset:
_memset:
;       MOVP    @(2/4,r7),A2P   ; dst
;       MOVP    @(2/4,r7),A2P   ; dst
;       MOVP    @(4/8,r7),A1    ; src thing
;       MOVP    @(4/8,r7),A1    ; src thing
;       MOVP    @(6/12,r7),A3P  ; len
;       MOVP    @(6/12,r7),A3P  ; len
        MOVP    A2P,A2P
        MOVP    A2P,A2P
        beq     quit
        beq     quit
        ; A3 points to the end of the area
        ; A3 points to the end of the area
        MOVP    A0P,A3P
        MOVP    A0P,A3P
        ADDP    A2P,A3P
        ADDP    A2P,A3P
        ; see if we can do it in words
        ; see if we can do it in words
        ; by oring in the start of the buffer to the end address
        ; by oring in the start of the buffer to the end address
        or      A0L,A2L
        or      A0L,A2L
        btst    #0,A2L
        btst    #0,A2L
        bne     byteloop
        bne     byteloop
        ; we can do it a word at a time
        ; we can do it a word at a time
        mov.b   A1L,A1H
        mov.b   A1L,A1H
wordloop:
wordloop:
        mov.w   A1,@-A3P
        mov.w   A1,@-A3P
        CMPP    A3P,A0P
        CMPP    A3P,A0P
        bne     wordloop
        bne     wordloop
quit:   rts
quit:   rts
byteloop:
byteloop:
        mov.b   A1L,@-A3P
        mov.b   A1L,@-A3P
        CMPP    A3P,A0P
        CMPP    A3P,A0P
        bne     byteloop
        bne     byteloop
        rts
        rts
#endif
#endif
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.