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