xref: /linux/include/asm-generic/bitops/ffs.h (revision ca55b2fef3a9373fcfc30f82fd26bc7fccbda732)
1 #ifndef _ASM_GENERIC_BITOPS_FFS_H_
2 #define _ASM_GENERIC_BITOPS_FFS_H_
3 
4 /**
5  * ffs - find first bit set
6  * @x: the word to search
7  *
8  * This is defined the same way as
9  * the libc and compiler builtin ffs routines, therefore
10  * differs in spirit from the above ffz (man ffs).
11  */
12 static inline int ffs(int x)
13 {
14 	int r = 1;
15 
16 	if (!x)
17 		return 0;
18 	if (!(x & 0xffff)) {
19 		x >>= 16;
20 		r += 16;
21 	}
22 	if (!(x & 0xff)) {
23 		x >>= 8;
24 		r += 8;
25 	}
26 	if (!(x & 0xf)) {
27 		x >>= 4;
28 		r += 4;
29 	}
30 	if (!(x & 3)) {
31 		x >>= 2;
32 		r += 2;
33 	}
34 	if (!(x & 1)) {
35 		x >>= 1;
36 		r += 1;
37 	}
38 	return r;
39 }
40 
41 #endif /* _ASM_GENERIC_BITOPS_FFS_H_ */
42