blob: e2c1b8e94a39731fd2dbcfe6bebd8a19c69dd830 [file] [log] [blame]
#ifndef FIO_FFZ_H
#define FIO_FFZ_H
#include <inttypes.h>
static inline int ffs64(uint64_t word)
{
int r = 0;
if ((word & 0xffffffff) == 0) {
r += 32;
word >>= 32;
}
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;
}
#ifndef ARCH_HAVE_FFZ
static inline int ffz(unsigned long bitmask)
{
return ffs64(~bitmask);
}
#else
#define ffz(bitmask) arch_ffz(bitmask)
#endif
static inline int ffz64(uint64_t bitmask)
{
return ffs64(~bitmask);
}
#endif