projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
switch to argparse module for CLI parsing
[fio.git]
/
lib
/
ffz.h
diff --git
a/lib/ffz.h
b/lib/ffz.h
index 4324f5a3c67b378b93bda2201c937164f5d43477..16c9ae9ebea8adaefbf11d6c51de26be71a9473b 100644
(file)
--- a/
lib/ffz.h
+++ b/
lib/ffz.h
@@
-1,10
+1,16
@@
#ifndef FIO_FFZ_H
#define FIO_FFZ_H
#ifndef FIO_FFZ_H
#define FIO_FFZ_H
-static inline int __ffs(int word)
+#include <inttypes.h>
+
+static inline int ffs64(uint64_t word)
{
{
- int r =
1
;
+ int r =
0
;
+ if ((word & 0xffffffff) == 0) {
+ r += 32;
+ word >>= 32;
+ }
if (!(word & 0xffff)) {
word >>= 16;
r += 16;
if (!(word & 0xffff)) {
word >>= 16;
r += 16;
@@
-21,17
+27,26
@@
static inline int __ffs(int word)
word >>= 2;
r += 2;
}
word >>= 2;
r += 2;
}
- if (!(word & 1)) {
- word >>= 1;
+ if (!(word & 1))
r += 1;
r += 1;
- }
return r;
}
return r;
}
-static inline int ffz(unsigned int bitmask)
+#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 ffs
(~bitmask) - 1
;
+ return ffs
64(~bitmask)
;
}
#endif
}
#endif