X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=arch%2Fx86%2Finclude%2Fasm%2Fbitops.h;h=f97dc664391a476198e756c1413920cf4cf58fb8;hb=2a605d4d8889ac5dd4c806b3a37ba75a80716e46;hp=5a7e4cba2b2fb48786206331e64222fda5f9f865;hpb=2c601c7208713ba9b2158c57adcf515f4bdbc212;p=u-boot diff --git a/arch/x86/include/asm/bitops.h b/arch/x86/include/asm/bitops.h index 5a7e4cba2b..f97dc66439 100644 --- a/arch/x86/include/asm/bitops.h +++ b/arch/x86/include/asm/bitops.h @@ -14,6 +14,10 @@ * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1). */ +#include +#include +#include + #ifdef CONFIG_SMP #define LOCK_PREFIX "lock ; " #else @@ -331,6 +335,20 @@ static __inline__ unsigned long ffz(unsigned long word) #ifdef __KERNEL__ +/** + * __ffs - find first set bit in word + * @word: The word to search + * + * Undefined if no bit exists, so code should check against 0 first. + */ +static inline unsigned long __ffs(unsigned long word) +{ + __asm__("rep; bsf %1,%0" + : "=r" (word) + : "rm" (word)); + return word; +} + /** * ffs - find first bit set * @x: the word to search @@ -346,7 +364,8 @@ static __inline__ int ffs(int x) __asm__("bsfl %1,%0\n\t" "jnz 1f\n\t" "movl $-1,%0\n" - "1:" : "=r" (r) : "g" (x)); + "1:" : "=r" (r) : "rm" (x)); + return r+1; } #define PLATFORM_FFS