X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=arch%2Fx86%2Finclude%2Fasm%2Fbitops.h;h=196fcf9d3f64f3198a57c15e46a5aa0a1d917b5d;hb=89aa19d0926b02f5d30460bbdba394819e891561;hp=c7a38f237a5cf0bcbbcf996ff8ffc01698a62220;hpb=909e9bf3ae6195ac6d52f9e453fba2be8e7e947f;p=oweals%2Fu-boot.git diff --git a/arch/x86/include/asm/bitops.h b/arch/x86/include/asm/bitops.h index c7a38f237a..196fcf9d3f 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 @@ -57,6 +61,8 @@ static __inline__ void __set_bit(int nr, volatile void * addr) :"Ir" (nr)); } +#define PLATFORM__SET_BIT + /** * clear_bit - Clears a bit in memory * @nr: Bit to clear @@ -331,6 +337,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,11 +366,17 @@ 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 +static inline int __ilog2(unsigned int x) +{ + return generic_fls(x) - 1; +} + /** * hweightN - returns the hamming weight of a N-bit word * @x: the word to weigh