Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
__ffs.h
Go to the documentation of this file.
1 #ifndef _ASM_GENERIC_BITOPS___FFS_H_
2 #define _ASM_GENERIC_BITOPS___FFS_H_
3 
4 #include <asm/types.h>
5 
12 static __always_inline unsigned long __ffs(unsigned long word)
13 {
14  int num = 0;
15 
16 #if BITS_PER_LONG == 64
17  if ((word & 0xffffffff) == 0) {
18  num += 32;
19  word >>= 32;
20  }
21 #endif
22  if ((word & 0xffff) == 0) {
23  num += 16;
24  word >>= 16;
25  }
26  if ((word & 0xff) == 0) {
27  num += 8;
28  word >>= 8;
29  }
30  if ((word & 0xf) == 0) {
31  num += 4;
32  word >>= 4;
33  }
34  if ((word & 0x3) == 0) {
35  num += 2;
36  word >>= 2;
37  }
38  if ((word & 0x1) == 0)
39  num += 1;
40  return num;
41 }
42 
43 #endif /* _ASM_GENERIC_BITOPS___FFS_H_ */