]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
56d205cc | 2 | #include <linux/linkage.h> |
d3867f04 | 3 | #include <asm/export.h> |
56d205cc DM |
4 | |
5 | .register %g2,#scratch | |
6 | ||
7 | .text | |
8 | .align 32 | |
9 | ||
10 | ENTRY(ffs) | |
11 | brnz,pt %o0, 1f | |
12 | mov 1, %o1 | |
13 | retl | |
14 | clr %o0 | |
15 | nop | |
16 | nop | |
17 | ENTRY(__ffs) | |
18 | sllx %o0, 32, %g1 /* 1 */ | |
19 | srlx %o0, 32, %g2 | |
20 | ||
21 | clr %o1 /* 2 */ | |
22 | movrz %g1, %g2, %o0 | |
23 | ||
24 | movrz %g1, 32, %o1 /* 3 */ | |
25 | 1: clr %o2 | |
26 | ||
27 | sllx %o0, (64 - 16), %g1 /* 4 */ | |
28 | srlx %o0, 16, %g2 | |
29 | ||
30 | movrz %g1, %g2, %o0 /* 5 */ | |
31 | clr %o3 | |
32 | ||
33 | movrz %g1, 16, %o2 /* 6 */ | |
34 | clr %o4 | |
35 | ||
36 | and %o0, 0xff, %g1 /* 7 */ | |
37 | srlx %o0, 8, %g2 | |
38 | ||
39 | movrz %g1, %g2, %o0 /* 8 */ | |
40 | clr %o5 | |
41 | ||
42 | movrz %g1, 8, %o3 /* 9 */ | |
43 | add %o2, %o1, %o2 | |
44 | ||
45 | and %o0, 0xf, %g1 /* 10 */ | |
46 | srlx %o0, 4, %g2 | |
47 | ||
48 | movrz %g1, %g2, %o0 /* 11 */ | |
49 | add %o2, %o3, %o2 | |
50 | ||
51 | movrz %g1, 4, %o4 /* 12 */ | |
52 | ||
53 | and %o0, 0x3, %g1 /* 13 */ | |
54 | srlx %o0, 2, %g2 | |
55 | ||
56 | movrz %g1, %g2, %o0 /* 14 */ | |
57 | add %o2, %o4, %o2 | |
58 | ||
59 | movrz %g1, 2, %o5 /* 15 */ | |
60 | ||
61 | and %o0, 0x1, %g1 /* 16 */ | |
62 | ||
63 | add %o2, %o5, %o2 /* 17 */ | |
64 | xor %g1, 0x1, %g1 | |
65 | ||
66 | retl /* 18 */ | |
67 | add %o2, %g1, %o0 | |
68 | ENDPROC(ffs) | |
69 | ENDPROC(__ffs) | |
d3867f04 AV |
70 | EXPORT_SYMBOL(__ffs) |
71 | EXPORT_SYMBOL(ffs) | |
56d205cc DM |
72 | |
73 | .section .popc_6insn_patch, "ax" | |
74 | .word ffs | |
75 | brz,pn %o0, 98f | |
76 | neg %o0, %g1 | |
77 | xnor %o0, %g1, %o1 | |
78 | popc %o1, %o0 | |
79 | 98: retl | |
80 | nop | |
81 | .word __ffs | |
82 | neg %o0, %g1 | |
83 | xnor %o0, %g1, %o1 | |
84 | popc %o1, %o0 | |
85 | retl | |
86 | sub %o0, 1, %o0 | |
87 | nop | |
88 | .previous |