Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/asm-generic/bitops/ffs.h
26289 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#ifndef _ASM_GENERIC_BITOPS_FFS_H_
3
#define _ASM_GENERIC_BITOPS_FFS_H_
4
5
/**
6
* generic_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 ffz (man ffs).
12
*/
13
static inline int generic_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
#ifndef __HAVE_ARCH_FFS
43
#define ffs(x) generic_ffs(x)
44
#endif
45
46
#endif /* _ASM_GENERIC_BITOPS_FFS_H_ */
47
48