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