x86: Use the generic bitops headers

Use the generic bitops and also add custom __ffs() implementation
as per the kernel.

Also align the ffs() implementation with the kernel.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Heiko Schocher <hs@denx.de>
Reviewed-by: Jagan Teki <jteki@openedev.com>
This commit is contained in:
Fabio Estevam 2015-11-05 12:43:25 -02:00 committed by Tom Rini
parent 56adb7b308
commit 6c2f758cee

View file

@ -14,6 +14,10 @@
* bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1).
*/
#include <asm-generic/bitops/fls.h>
#include <asm-generic/bitops/__fls.h>
#include <asm-generic/bitops/fls64.h>
#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