1
2
3
4
5
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)