| #ifndef FIO_FFZ_H | |
| #define FIO_FFZ_H | |
| static inline int __ffs(unsigned long word) | |
| { | |
| int r = 0; | |
| #if BITS_PER_LONG == 64 | |
| if ((word & 0xffffffff) == 0) { | |
| r += 32; | |
| word >>= 32; | |
| } | |
| #endif | |
| if (!(word & 0xffff)) { | |
| word >>= 16; | |
| r += 16; | |
| } | |
| if (!(word & 0xff)) { | |
| word >>= 8; | |
| r += 8; | |
| } | |
| if (!(word & 0xf)) { | |
| word >>= 4; | |
| r += 4; | |
| } | |
| if (!(word & 3)) { | |
| word >>= 2; | |
| r += 2; | |
| } | |
| if (!(word & 1)) { | |
| word >>= 1; | |
| r += 1; | |
| } | |
| return r; | |
| } | |
| static inline int ffz(unsigned long bitmask) | |
| { | |
| return __ffs(~bitmask); | |
| } | |
| #endif |