Home | History | Annotate | Download | only in bitops
      1 #ifndef _ASM_GENERIC_BITOPS___FFS_H_
      2 #define _ASM_GENERIC_BITOPS___FFS_H_
      3 
      4 #include <asm/types.h>
      5 
      6 /**
      7  * __ffs - find first bit in word.
      8  * @word: The word to search
      9  *
     10  * Undefined if no bit exists, so code should check against 0 first.
     11  */
     12 static 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_ */
     44