21 lines
519 B
ArmAsm
21 lines
519 B
ArmAsm
|
.file "memmove.S"
|
||
|
|
||
|
.section .text
|
||
|
.global _memmove
|
||
|
.type _memmove,@function
|
||
|
_memmove:
|
||
|
mov r1, r4 ; Save a copy of DEST
|
||
|
cmp r1, r2
|
||
|
blt 2f ; If SRC (r2) is less than DEST (r1) then copy backwards
|
||
|
smovf
|
||
|
1:
|
||
|
mov r4, r1 ; Return DEST
|
||
|
rts
|
||
|
2:
|
||
|
add r3, r1 ; The SMOVB instructions requires the DEST in r1 and the
|
||
|
add r3, r2 ; SRC in r2 but it needs them to point the last bytes of
|
||
|
sub #1, r2 ; the regions involved not the first bytes, hence these
|
||
|
sub #1, r1 ; additions and subtractions.
|
||
|
smovb
|
||
|
bra 1b
|