These just use the normal C software version, extended to 64-bit
even on 32-bit archs. The fast variant is still machine word native.
Signed-off-by: Jens Axboe <axboe@fb.com>
#include "arch-generic.h"
#endif
#include "arch-generic.h"
#endif
-#ifdef ARCH_HAVE_FFZ
-#define ffz(bitmask) arch_ffz(bitmask)
-#else
#ifndef ARCH_HAVE_INIT
static inline int arch_init(char *envp[])
#ifndef ARCH_HAVE_INIT
static inline int arch_init(char *envp[])
#ifndef FIO_FFZ_H
#define FIO_FFZ_H
#ifndef FIO_FFZ_H
#define FIO_FFZ_H
-static inline int __ffs(unsigned long word)
+#include <inttypes.h>
+
+static inline int ffs64(uint64_t word)
if ((word & 0xffffffff) == 0) {
r += 32;
word >>= 32;
}
if ((word & 0xffffffff) == 0) {
r += 32;
word >>= 32;
}
if (!(word & 0xffff)) {
word >>= 16;
r += 16;
if (!(word & 0xffff)) {
word >>= 16;
r += 16;
static inline int ffz(unsigned long bitmask)
{
static inline int ffz(unsigned long bitmask)
{
- return __ffs(~bitmask);
+ return ffs64(~bitmask);
+}
+
+#else
+#define ffz(bitmask) arch_ffz(bitmask)
+#endif
+
+static inline int ffz64(uint64_t bitmask)
+{
+ return ffs64(~bitmask);