| #ifndef _ASM_GENERIC_BITOPS___FFS_H_ | |
| #define _ASM_GENERIC_BITOPS___FFS_H_ | |
| #include <asm/types.h> | |
| /** | |
| * __ffs - find first bit in word. | |
| * @word: The word to search | |
| * | |
| * Undefined if no bit exists, so code should check against 0 first. | |
| */ | |
| static __always_inline unsigned long __ffs(unsigned long word) | |
| { | |
| int num = 0; | |
| #if BITS_PER_LONG == 64 | |
| if ((word & 0xffffffff) == 0) { | |
| num += 32; | |
| word >>= 32; | |
| } | |
| #endif | |
| if ((word & 0xffff) == 0) { | |
| num += 16; | |
| word >>= 16; | |
| } | |
| if ((word & 0xff) == 0) { | |
| num += 8; | |
| word >>= 8; | |
| } | |
| if ((word & 0xf) == 0) { | |
| num += 4; | |
| word >>= 4; | |
| } | |
| if ((word & 0x3) == 0) { | |
| num += 2; | |
| word >>= 2; | |
| } | |
| if ((word & 0x1) == 0) | |
| num += 1; | |
| return num; | |
| } | |
| #endif /* _ASM_GENERIC_BITOPS___FFS_H_ */ |