aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAlexander van Heukelum <heukelum@mailshack.com>2008-03-15 13:32:36 -0400
committerIngo Molnar <mingo@elte.hu>2008-04-26 13:21:16 -0400
commitd57594c203b1e7b54373080a797f0cbfa4aade68 (patch)
tree61610af68fc93280fb0be00a4f1b523715bef3db /include
parent56a6b1eb7bfb5ace0b5cb9c149f502fbd101b8ab (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')
-rw-r--r--include/asm-generic/bitops/fls64.h22
-rw-r--r--include/asm-x86/bitops_64.h15
2 files changed, 24 insertions, 13 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
6static inline int fls64(__u64 x) 18static 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
26static 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_ */
diff --git a/include/asm-x86/bitops_64.h b/include/asm-x86/bitops_64.h
index a5fbe7a02a3f..d13352087191 100644
--- a/include/asm-x86/bitops_64.h
+++ b/include/asm-x86/bitops_64.h
@@ -39,25 +39,14 @@ static inline void set_bit_string(unsigned long *bitmap, unsigned long i,
39 39
40#include <asm-generic/bitops/sched.h> 40#include <asm-generic/bitops/sched.h>
41 41
42/**
43 * fls64 - find last bit set in 64 bit word
44 * @x: the word to search
45 *
46 * This is defined the same way as fls.
47 */
48static inline int fls64(__u64 x)
49{
50 if (x == 0)
51 return 0;
52 return __fls(x) + 1;
53}
54
55#define ARCH_HAS_FAST_MULTIPLIER 1 42#define ARCH_HAS_FAST_MULTIPLIER 1
56 43
57#include <asm-generic/bitops/hweight.h> 44#include <asm-generic/bitops/hweight.h>
58 45
59#endif /* __KERNEL__ */ 46#endif /* __KERNEL__ */
60 47
48#include <asm-generic/bitops/fls64.h>
49
61#ifdef __KERNEL__ 50#ifdef __KERNEL__
62 51
63#include <asm-generic/bitops/ext2-non-atomic.h> 52#include <asm-generic/bitops/ext2-non-atomic.h>