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
#include <asm/types.h>
6
7
/**
8
* generic___ffs - find first bit in word.
9
* @word: The word to search
10
*
11
* Undefined if no bit exists, so code should check against 0 first.
12
*/
13
static __always_inline unsigned int generic___ffs(unsigned long word)
14
{
15
unsigned int num = 0;
16
17
#if BITS_PER_LONG == 64
18
if ((word & 0xffffffff) == 0) {
19
num += 32;
20
word >>= 32;
21
}
22
#endif
23
if ((word & 0xffff) == 0) {
24
num += 16;
25
word >>= 16;
26
}
27
if ((word & 0xff) == 0) {
28
num += 8;
29
word >>= 8;
30
}
31
if ((word & 0xf) == 0) {
32
num += 4;
33
word >>= 4;
34
}
35
if ((word & 0x3) == 0) {
36
num += 2;
37
word >>= 2;
38
}
39
if ((word & 0x1) == 0)
40
num += 1;
41
return num;
42
}
43
44
#ifndef __HAVE_ARCH___FFS
45
#define __ffs(word) generic___ffs(word)
46
#endif
47
48
#endif /* _ASM_GENERIC_BITOPS___FFS_H_ */
49
50