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