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/export.h>
9#include <linux/linkage.h>
10
11 .text
12 .register %g2, #scratch
13 .register %g3, #scratch
14ENTRY(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
271:
28 add %o1, -8, %o1
29 sra %o0, 0, %o0
30 mov %o0, %g2
312:
32 sethi %hi(0xf0000000), %g3
333:
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
414:
42 andcc %g2, %g3, %g0
43 be,a,pt %icc, 7f
44 sll %o0, 2, %o0
455:
46 xnor %g0, %o0, %o0
47 srl %o0, 31, %o0
48 sub %o1, %o0, %o1
496:
50 jmp %o7 + 8
51 sra %o1, 0, %o0
527:
53 add %o1, -2, %o1
54 ba,pt %xcc, 5b
55 sra %o0, 0, %o0
568:
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
66ENDPROC(fls)
67EXPORT_SYMBOL(fls)
68

source code of linux/arch/sparc/lib/fls.S