Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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
  18. static __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
  26. static __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.