diff options
| author | Christian Kosman <christiankosman@gmail.com> | 2020-10-01 21:06:18 -0700 |
|---|---|---|
| committer | Christian Kosman <christiankosman@gmail.com> | 2020-10-01 21:06:18 -0700 |
| commit | 46404513a49d1b3ef4203f4309bf3752eb0c3f35 (patch) | |
| tree | 2ab74de6c0ef1efe7620dded94718a98c6b1523d | |
| parent | 60deeff6e078271a17cf77c6204edbbde846f0bd (diff) | |
| download | psn00bsdk-46404513a49d1b3ef4203f4309bf3752eb0c3f35.tar.gz | |
Account for forward-looped memmove
| -rw-r--r-- | libpsn00b/libc/memmove.s | 21 |
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 |
