diff options
Diffstat (limited to 'include/sbi/sbi_bitops.h')
-rw-r--r-- | include/sbi/sbi_bitops.h | 82 |
1 files changed, 6 insertions, 76 deletions
diff --git a/include/sbi/sbi_bitops.h b/include/sbi/sbi_bitops.h index 879430d..251e4d8 100644 --- a/include/sbi/sbi_bitops.h +++ b/include/sbi/sbi_bitops.h @@ -37,47 +37,12 @@ (((~0UL) - (1UL << (l)) + 1) & (~0UL >> (BITS_PER_LONG - 1 - (h)))) /** - * ffs - Find first bit set - * @x: the word to search - * - * This is defined the same way as - * the libc and compiler builtin ffs routines, therefore - * differs in spirit from the above ffz (man ffs). - */ -static inline int ffs(int x) -{ - int r = 1; - - if (!x) - return 0; - if (!(x & 0xffff)) { - x >>= 16; - r += 16; - } - if (!(x & 0xff)) { - x >>= 8; - r += 8; - } - if (!(x & 0xf)) { - x >>= 4; - r += 4; - } - if (!(x & 3)) { - x >>= 2; - r += 2; - } - if (!(x & 1)) - r += 1; - return r; -} - -/** - * __ffs - find first bit in word. + * sbi_ffs - find first (less-significant) set bit in a long word. * @word: The word to search * * Undefined if no bit exists, so code should check against 0 first. */ -static inline int __ffs(unsigned long word) +static inline int sbi_ffs(unsigned long word) { int num = 0; @@ -109,55 +74,20 @@ static inline int __ffs(unsigned long word) } /* - * ffz - find first zero in word. + * sbi_ffz - find first zero in word. * @word: The word to search * * Undefined if no zero exists, so code should check against ~0UL first. */ -#define ffz(x) __ffs(~(x)) - -/** - * fls - find last (most-significant) bit set - * @x: the word to search - * - * This is defined the same way as ffs. - * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. - */ - -static inline int fls(int x) -{ - int r = 32; - - if (!x) - return 0; - if (!(x & 0xffff0000u)) { - x <<= 16; - r -= 16; - } - if (!(x & 0xff000000u)) { - x <<= 8; - r -= 8; - } - if (!(x & 0xf0000000u)) { - x <<= 4; - r -= 4; - } - if (!(x & 0xc0000000u)) { - x <<= 2; - r -= 2; - } - if (!(x & 0x80000000u)) - r -= 1; - return r; -} +#define sbi_ffz(x) sbi_ffs(~(x)) /** - * __fls - find last (most-significant) set bit in a long word + * sbi_fls - find last (most-significant) set bit in a long word * @word: the word to search * * Undefined if no set bit exists, so code should check against 0 first. */ -static inline unsigned long __fls(unsigned long word) +static inline unsigned long sbi_fls(unsigned long word) { int num = BITS_PER_LONG - 1; |