aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kosman <christiankosman@gmail.com>2020-10-01 21:06:18 -0700
committerChristian Kosman <christiankosman@gmail.com>2020-10-01 21:06:18 -0700
commit46404513a49d1b3ef4203f4309bf3752eb0c3f35 (patch)
tree2ab74de6c0ef1efe7620dded94718a98c6b1523d
parent60deeff6e078271a17cf77c6204edbbde846f0bd (diff)
downloadpsn00bsdk-46404513a49d1b3ef4203f4309bf3752eb0c3f35.tar.gz
Account for forward-looped memmove
-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