newlib-cygwin/newlib/libc/machine/sh/strcpy.S

42 lines
713 B
ArmAsm

! Entry: r4: destination
! r5: source
! Exit: r0: destination
! r1-r2,r5: clobbered
#include "asm.h"
ENTRY(strcpy)
mov r4,r0
or r5,r0
tst #3,r0
SL(bf, L_setup_char_loop, mov r4,r0)
mov.l @r5+,r1
mov #0,r2
cmp/str r2,r1
SL(bt, Longword_loop_end, sub r5,r0)
.align 2
Longword_loop:
mov.l r1,@(r0,r5)
mov.l @r5+,r1
cmp/str r2,r1
bt Longword_loop_end
mov.l r1,@(r0,r5)
mov.l @r5+,r1
cmp/str r2,r1
bf Longword_loop
Longword_loop_end:
add #-4,r5
add #3,r0
.align 2
L_char_loop:
mov.b @r5+,r1
L_char_loop_start:
tst r1,r1
SL(bf, L_char_loop, mov.b r1,@(r0,r5))
rts
mov r4,r0
L_setup_char_loop:
mov.b @r5+,r1
bra L_char_loop_start
sub r5,r0