Vijay Kumar | 41413a6 | 2017-10-11 12:50:02 -0600 | [diff] [blame] | 1 | /* fls.S: SPARC default fls definition. |
| 2 | * |
| 3 | * SPARC default fls definition, which follows the same algorithm as |
| 4 | * in generic fls(). This function will be boot time patched on T4 |
| 5 | * and onward. |
| 6 | */ |
| 7 | |
| 8 | #include <linux/linkage.h> |
| 9 | #include <asm/export.h> |
| 10 | |
| 11 | .text |
| 12 | .register %g2, #scratch |
| 13 | .register %g3, #scratch |
| 14 | ENTRY(fls) |
| 15 | brz,pn %o0, 6f |
| 16 | mov 0, %o1 |
| 17 | sethi %hi(0xffff0000), %g3 |
| 18 | mov %o0, %g2 |
| 19 | andcc %o0, %g3, %g0 |
| 20 | be,pt %icc, 8f |
| 21 | mov 32, %o1 |
| 22 | sethi %hi(0xff000000), %g3 |
| 23 | andcc %g2, %g3, %g0 |
| 24 | bne,pt %icc, 3f |
| 25 | sethi %hi(0xf0000000), %g3 |
| 26 | sll %o0, 8, %o0 |
| 27 | 1: |
| 28 | add %o1, -8, %o1 |
| 29 | sra %o0, 0, %o0 |
| 30 | mov %o0, %g2 |
| 31 | 2: |
| 32 | sethi %hi(0xf0000000), %g3 |
| 33 | 3: |
| 34 | andcc %g2, %g3, %g0 |
| 35 | bne,pt %icc, 4f |
| 36 | sethi %hi(0xc0000000), %g3 |
| 37 | sll %o0, 4, %o0 |
| 38 | add %o1, -4, %o1 |
| 39 | sra %o0, 0, %o0 |
| 40 | mov %o0, %g2 |
| 41 | 4: |
| 42 | andcc %g2, %g3, %g0 |
| 43 | be,a,pt %icc, 7f |
| 44 | sll %o0, 2, %o0 |
| 45 | 5: |
| 46 | xnor %g0, %o0, %o0 |
| 47 | srl %o0, 31, %o0 |
| 48 | sub %o1, %o0, %o1 |
| 49 | 6: |
| 50 | jmp %o7 + 8 |
| 51 | sra %o1, 0, %o0 |
| 52 | 7: |
| 53 | add %o1, -2, %o1 |
| 54 | ba,pt %xcc, 5b |
| 55 | sra %o0, 0, %o0 |
| 56 | 8: |
| 57 | sll %o0, 16, %o0 |
| 58 | sethi %hi(0xff000000), %g3 |
| 59 | sra %o0, 0, %o0 |
| 60 | mov %o0, %g2 |
| 61 | andcc %g2, %g3, %g0 |
| 62 | bne,pt %icc, 2b |
| 63 | mov 16, %o1 |
| 64 | ba,pt %xcc, 1b |
| 65 | sll %o0, 8, %o0 |
| 66 | ENDPROC(fls) |
| 67 | EXPORT_SYMBOL(fls) |