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 / ffs.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  615 b   |  42 lines

  1. #ifndef _ASM_GENERIC_BITOPS_FFS_H_
  2. #define _ASM_GENERIC_BITOPS_FFS_H_
  3.  
  4. /**
  5.  * ffs - find first bit set
  6.  * @x: the word to search
  7.  *
  8.  * This is defined the same way as
  9.  * the libc and compiler builtin ffs routines, therefore
  10.  * differs in spirit from the above ffz (man ffs).
  11.  */
  12. static inline int ffs(int x)
  13. {
  14.     int r = 1;
  15.  
  16.     if (!x)
  17.         return 0;
  18.     if (!(x & 0xffff)) {
  19.         x >>= 16;
  20.         r += 16;
  21.     }
  22.     if (!(x & 0xff)) {
  23.         x >>= 8;
  24.         r += 8;
  25.     }
  26.     if (!(x & 0xf)) {
  27.         x >>= 4;
  28.         r += 4;
  29.     }
  30.     if (!(x & 3)) {
  31.         x >>= 2;
  32.         r += 2;
  33.     }
  34.     if (!(x & 1)) {
  35.         x >>= 1;
  36.         r += 1;
  37.     }
  38.     return r;
  39. }
  40.  
  41. #endif /* _ASM_GENERIC_BITOPS_FFS_H_ */
  42.