Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5270 | serge | 1 | #ifndef _ASM_GENERIC_BITOPS_FLS64_H_ |
2 | #define _ASM_GENERIC_BITOPS_FLS64_H_ |
||
3 | |||
4 | #include |
||
5 | |||
6 | /** |
||
7 | * fls64 - find last set bit in a 64-bit word |
||
8 | * @x: the word to search |
||
9 | * |
||
10 | * This is defined in a similar way as the libc and compiler builtin |
||
11 | * ffsll, but returns the position of the most significant set bit. |
||
12 | * |
||
13 | * fls64(value) returns 0 if value is 0 or the position of the last |
||
14 | * set bit if value is nonzero. The last (most significant) bit is |
||
15 | * at position 64. |
||
16 | */ |
||
17 | #if BITS_PER_LONG == 32 |
||
18 | static __always_inline int fls64(__u64 x) |
||
19 | { |
||
20 | __u32 h = x >> 32; |
||
21 | if (h) |
||
22 | return fls(h) + 32; |
||
23 | return fls(x); |
||
24 | } |
||
25 | #elif BITS_PER_LONG == 64 |
||
26 | static __always_inline int fls64(__u64 x) |
||
27 | { |
||
28 | if (x == 0) |
||
29 | return 0; |
||
30 | return __fls(x) + 1; |
||
31 | } |
||
32 | #else |
||
33 | #error BITS_PER_LONG not 32 or 64 |
||
34 | #endif |
||
35 | |||
36 | #endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */ |