.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 |