t/io_uring: only calculate per-file depth if we have files
[fio.git] / lib / ffz.h
1 #ifndef FIO_FFZ_H
2 #define FIO_FFZ_H
3
4 #include <inttypes.h>
5
6 static inline int ffs64(uint64_t word)
7 {
8         int r = 0;
9
10         if ((word & 0xffffffff) == 0) {
11                 r += 32;
12                 word >>= 32;
13         }
14         if (!(word & 0xffff)) {
15                 word >>= 16;
16                 r += 16;
17         }
18         if (!(word & 0xff)) {
19                 word >>= 8;
20                 r += 8;
21         }
22         if (!(word & 0xf)) {
23                 word >>= 4;
24                 r += 4;
25         }
26         if (!(word & 3)) {
27                 word >>= 2;
28                 r += 2;
29         }
30         if (!(word & 1))
31                 r += 1;
32
33         return r;
34 }
35
36 #ifndef ARCH_HAVE_FFZ
37
38 static inline int ffz(unsigned long bitmask)
39 {
40         return ffs64(~bitmask);
41 }
42
43 #else
44 #define ffz(bitmask)    arch_ffz(bitmask)
45 #endif
46
47 static inline int ffz64(uint64_t bitmask)
48 {
49         return ffs64(~bitmask);
50 }
51
52 #endif