.align 32
.globl memmove
.type memmove,#function
-memmove:
+memmove: /* o0=dst o1=src o2=len */
mov %o0, %g1
cmp %o0, %o1
- blu,pt %xcc, memcpy
- sub %o0, %o1, %g5
- add %o1, %o2, %g3
- cmp %g3, %o0
bleu,pt %xcc, memcpy
add %o1, %o2, %g5
- add %o0, %o2, %o5
-
+ cmp %g5, %o0
+ bleu,pt %xcc, memcpy
+ add %o0, %o2, %o5
sub %g5, 1, %o1
+
sub %o5, 1, %o0
1: ldub [%o1], %g5
subcc %o2, 1, %o2