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 | |
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')
-rw-r--r-- | include/asm-generic/bitops/fls64.h | 22 | ||||
-rw-r--r-- | include/asm-x86/bitops_64.h | 15 |
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 | ||
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_ */ |
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 | */ | ||
48 | static 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> |