]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blame - include/bitops.h
build: Add fls check into autoconf
[thirdparty/xfsprogs-dev.git] / include / bitops.h
CommitLineData
5e656dbb
BN
1#ifndef __BITOPS_H__
2#define __BITOPS_H__
3
4/*
5 * fls: find last bit set.
6 */
7
5121281b 8#ifndef HAVE_FLS
5e656dbb
BN
9static inline int fls(int x)
10{
11 int r = 32;
12
13 if (!x)
14 return 0;
15 if (!(x & 0xffff0000u)) {
16 x <<= 16;
17 r -= 16;
18 }
19 if (!(x & 0xff000000u)) {
20 x <<= 8;
21 r -= 8;
22 }
23 if (!(x & 0xf0000000u)) {
24 x <<= 4;
25 r -= 4;
26 }
27 if (!(x & 0xc0000000u)) {
28 x <<= 2;
29 r -= 2;
30 }
31 if (!(x & 0x80000000u)) {
5e656dbb
BN
32 r -= 1;
33 }
34 return r;
35}
5121281b 36#endif /* HAVE_FLS */
5e656dbb
BN
37
38static inline int fls64(__u64 x)
39{
40 __u32 h = x >> 32;
41 if (h)
42 return fls(h) + 32;
43 return fls(x);
44}
45
46static inline unsigned fls_long(unsigned long l)
47{
48 if (sizeof(l) == 4)
49 return fls(l);
50 return fls64(l);
51}
52
4071f725
DC
53/*
54 * ffz: find first zero bit.
55 * Result is undefined if no zero bit exists.
56 */
57#define ffz(x) ffs(~(x))
58
5e656dbb 59#endif