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 | |
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')
-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_ */ |