aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libpsn00b/libc/memmove.s21
1 files changed, 17 insertions, 4 deletions
diff --git a/libpsn00b/libc/memmove.s b/libpsn00b/libc/memmove.s
index d32e2ca..843ece7 100644
--- a/libpsn00b/libc/memmove.s
+++ b/libpsn00b/libc/memmove.s
@@ -10,20 +10,33 @@
.type memmove, @function
memmove:
move $v0, $a0
+ sltu $v1, $a0, $a1
+ blez $v1, .Linit_backward
+.Lloop_forward:
+ blez $a2, .Lexit
+ addi $a2, -1
+ lbu $v1, 0($a1)
+ addiu $a1, 1
+ sb $v1, 0($a0)
+ addiu $a0, 1
+ b .Lloop_forward
+ nop
+.Linit_backward:
addu $a0, $a2
addu $a1, $a2
addiu $a0, -1
addiu $a1, -1
-.Lloop:
+ b .Lloop_backward
+ nop
+.Lloop_backward:
blez $a2, .Lexit
addi $a2, -1
lbu $v1, 0($a1)
addiu $a1, -1
sb $v1, 0($a0)
addiu $a0, -1
- b .Lloop
+ b .Lloop_backward
nop
.Lexit:
jr $ra
- nop
- \ No newline at end of file
+ nop \ No newline at end of file