diff options
| author | Alexander van Heukelum <heukelum@mailshack.com> | 2008-03-15 13:32:36 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-04-26 13:21:16 -0400 |
| commit | d57594c203b1e7b54373080a797f0cbfa4aade68 (patch) | |
| tree | 61610af68fc93280fb0be00a4f1b523715bef3db /include/asm-generic/bitops | |
| parent | 56a6b1eb7bfb5ace0b5cb9c149f502fbd101b8ab (diff) | |
bitops: use __fls for fls64 on 64-bit archs
Use __fls for fls64 on 64-bit archs. The implementation for
64-bit archs is moved from x86_64 to asm-generic.
Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/asm-generic/bitops')
| -rw-r--r-- | include/asm-generic/bitops/fls64.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/include/asm-generic/bitops/fls64.h b/include/asm-generic/bitops/fls64.h index 1b6b17ce2428..86d403f8b256 100644 --- a/include/asm-generic/bitops/fls64.h +++ b/include/asm-generic/bitops/fls64.h | |||
| @@ -3,6 +3,18 @@ | |||
| 3 | 3 | ||
| 4 | #include <asm/types.h> | 4 | #include <asm/types.h> |
| 5 | 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 | ||
| 6 | static inline int fls64(__u64 x) | 18 | static inline int fls64(__u64 x) |
| 7 | { | 19 | { |
| 8 | __u32 h = x >> 32; | 20 | __u32 h = x >> 32; |
| @@ -10,5 +22,15 @@ static inline int fls64(__u64 x) | |||
| 10 | return fls(h) + 32; | 22 | return fls(h) + 32; |
| 11 | return fls(x); | 23 | return fls(x); |
| 12 | } | 24 | } |
| 25 | #elif BITS_PER_LONG == 64 | ||
| 26 | static 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 | ||
| 13 | 35 | ||
| 14 | #endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */ | 36 | #endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */ |
