linux/include/asm-generic/bitops/__ffs.h
<<
>>
Prefs
   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 */
  12static __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_ */
  44