linux/include/asm-generic/bitops/fls64.h
<<
>>
Prefs
   1#ifndef _ASM_GENERIC_BITOPS_FLS64_H_
   2#define _ASM_GENERIC_BITOPS_FLS64_H_
   3
   4#include <asm/types.h>
   5
   6/**
   7 * fls64 - find last set bit in a 64-bit word
   8 * @x: the word to search
   9 *
  10 * This is defined in a similar way as the libc and compiler builtin
  11 * ffsll, but returns the position of the most significant set bit.
  12 *
  13 * fls64(value) returns 0 if value is 0 or the position of the last
  14 * set bit if value is nonzero. The last (most significant) bit is
  15 * at position 64.
  16 */
  17#if BITS_PER_LONG == 32
  18static __always_inline int fls64(__u64 x)
  19{
  20        __u32 h = x >> 32;
  21        if (h)
  22                return fls(h) + 32;
  23        return fls(x);
  24}
  25#elif BITS_PER_LONG == 64
  26static __always_inline int fls64(__u64 x)
  27{
  28        if (x == 0)
  29                return 0;
  30        return __fls(x) + 1;
  31}
  32#else
  33#error BITS_PER_LONG not 32 or 64
  34#endif
  35
  36#endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */
  37