diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/mips/ffs-mips.S | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/firmware/target/mips/ffs-mips.S b/firmware/target/mips/ffs-mips.S index 92f4e31729..fd937a4cae 100644 --- a/firmware/target/mips/ffs-mips.S +++ b/firmware/target/mips/ffs-mips.S | |||
@@ -40,14 +40,15 @@ | |||
40 | .type find_first_set_bit, %function | 40 | .type find_first_set_bit, %function |
41 | 41 | ||
42 | find_first_set_bit: | 42 | find_first_set_bit: |
43 | beqz a0, 0 # if(a0 == 0) goto 1 | 43 | beqz a0, l # if(a0 == 0) goto l |
44 | li v0, 32 # v0 = 32 | ||
45 | negu t0, a0 # t0 = -a0 | 44 | negu t0, a0 # t0 = -a0 |
46 | and t0, t0, a0 # t0 = a0 & t0 | 45 | and t0, a0, t0 # t0 = a0 & t0 |
47 | clz v0, t0 # Get lead 0's count (v0=32 if all 0's) | 46 | clz v0, a0 # Get lead 0's count (v0=32 if all 0's) |
48 | li t0, 31 # t0 = 31 | 47 | li t0, 31 # t0 = 31 |
48 | subu v0, t0, v0 # v0 = t0 - v0 | ||
49 | jr ra # | 49 | jr ra # |
50 | sub v0, t0, v0 # v0 = t0 - v0 | 50 | nop # |
51 | 1: | 51 | l: |
52 | jr ra # | 52 | li v0, 32 # v0 = 32 (don't put this after jr ra! |
53 | jr ra # binutils bug?) | ||
53 | nop # | 54 | nop # |