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  */
ffs(int x)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