42 lines
713 B
ArmAsm
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
|