home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-generic / bitops / fls.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  626 b   |  42 lines

  1. #ifndef _ASM_GENERIC_BITOPS_FLS_H_
  2. #define _ASM_GENERIC_BITOPS_FLS_H_
  3.  
  4. /**
  5.  * fls - find last (most-significant) bit set
  6.  * @x: the word to search
  7.  *
  8.  * This is defined the same way as ffs.
  9.  * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.
  10.  */
  11.  
  12. static inline int fls(int x)
  13. {
  14.     int r = 32;
  15.  
  16.     if (!x)
  17.         return 0;
  18.     if (!(x & 0xffff0000u)) {
  19.         x <<= 16;
  20.         r -= 16;
  21.     }
  22.     if (!(x & 0xff000000u)) {
  23.         x <<= 8;
  24.         r -= 8;
  25.     }
  26.     if (!(x & 0xf0000000u)) {
  27.         x <<= 4;
  28.         r -= 4;
  29.     }
  30.     if (!(x & 0xc0000000u)) {
  31.         x <<= 2;
  32.         r -= 2;
  33.     }
  34.     if (!(x & 0x80000000u)) {
  35.         x <<= 1;
  36.         r -= 1;
  37.     }
  38.     return r;
  39. }
  40.  
  41. #endif /* _ASM_GENERIC_BITOPS_FLS_H_ */
  42.