summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2009-03-25 21:19:51 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2009-03-25 21:19:51 +0000
commit643236347692ac7464f744020dea1c020c863110 (patch)
treef2b2833ab3ace443559af383f4cb606153847037
parent9cfcc2b9aeed232837a9e3adf3c9a172f054a68b (diff)
downloadrockbox-643236347692ac7464f744020dea1c020c863110.zip
rockbox-643236347692ac7464f744020dea1c020c863110.tar.gz
rockbox-643236347692ac7464f744020dea1c020c863110.tar.bz2
rockbox-643236347692ac7464f744020dea1c020c863110.tar.xz
Fix MIPS FFS implementation
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20536 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/mips/ffs-mips.S17
1 files changed, 10 insertions, 7 deletions
diff --git a/firmware/target/mips/ffs-mips.S b/firmware/target/mips/ffs-mips.S
index f154777..92f4e31 100644
--- a/firmware/target/mips/ffs-mips.S
+++ b/firmware/target/mips/ffs-mips.S
@@ -40,11 +40,14 @@
.type find_first_set_bit, %function
find_first_set_bit:
- negu t0, a0 # t0 = a0 & -a0
- and t0, t0, a0 #
-
- clz v0, t0 # Get lead 0's count
+ beqz a0, 0 # if(a0 == 0) goto 1
+ li v0, 32 # v0 = 32
+ negu t0, a0 # t0 = -a0
+ and t0, t0, a0 # t0 = a0 & t0
+ clz v0, t0 # Get lead 0's count (v0=32 if all 0's)
li t0, 31 # t0 = 31
- sub v0, t0, v0 # Return value = t0 - v0
- jr ra
- nop
+ jr ra #
+ sub v0, t0, v0 # v0 = t0 - v0
+1:
+ jr ra #
+ nop #