From: Stephen Hemminger Date: Fri, 6 Jan 2006 08:12:12 +0000 (-0800) Subject: [PATCH] x86: fls() in asm X-Git-Tag: v2.6.16-rc1~936^2~185 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d832245d7cc16d50b29c1b708ccbe9c75ac376a3;p=linux-2.6 [PATCH] x86: fls() in asm There is a single instruction on i386 to find largest set bit; so it makes sense to use it (like we use bfs for ffs()). Signed-off-by: Stephen Hemminger Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/include/asm-i386/bitops.h b/include/asm-i386/bitops.h index 26eb981171..65679aca4b 100644 --- a/include/asm-i386/bitops.h +++ b/include/asm-i386/bitops.h @@ -367,11 +367,6 @@ static inline unsigned long ffz(unsigned long word) return word; } -/* - * fls: find last bit set. - */ - -#define fls(x) generic_fls(x) #define fls64(x) generic_fls64(x) #ifdef __KERNEL__ @@ -414,6 +409,23 @@ static inline int ffs(int x) return r+1; } +/** + * fls - find last bit set + * @x: the word to search + * + * This is defined the same way as ffs. + */ +static inline int fls(int x) +{ + int r; + + __asm__("bsrl %1,%0\n\t" + "jnz 1f\n\t" + "movl $-1,%0\n" + "1:" : "=r" (r) : "rm" (x)); + return r+1; +} + /** * hweightN - returns the hamming weight of a N-bit word * @x: the word to weigh