109020adbSAkinobu Mita #ifndef _ASM_GENERIC_BITOPS_FFS_H_ 209020adbSAkinobu Mita #define _ASM_GENERIC_BITOPS_FFS_H_ 309020adbSAkinobu Mita 409020adbSAkinobu Mita /** 509020adbSAkinobu Mita * ffs - find first bit set 609020adbSAkinobu Mita * @x: the word to search 709020adbSAkinobu Mita * 809020adbSAkinobu Mita * This is defined the same way as 909020adbSAkinobu Mita * the libc and compiler builtin ffs routines, therefore 1009020adbSAkinobu Mita * differs in spirit from the above ffz (man ffs). 1109020adbSAkinobu Mita */ 1209020adbSAkinobu Mita static inline int ffs(int x) 1309020adbSAkinobu Mita { 1409020adbSAkinobu Mita int r = 1; 1509020adbSAkinobu Mita 1609020adbSAkinobu Mita if (!x) 1709020adbSAkinobu Mita return 0; 1809020adbSAkinobu Mita if (!(x & 0xffff)) { 1909020adbSAkinobu Mita x >>= 16; 2009020adbSAkinobu Mita r += 16; 2109020adbSAkinobu Mita } 2209020adbSAkinobu Mita if (!(x & 0xff)) { 2309020adbSAkinobu Mita x >>= 8; 2409020adbSAkinobu Mita r += 8; 2509020adbSAkinobu Mita } 2609020adbSAkinobu Mita if (!(x & 0xf)) { 2709020adbSAkinobu Mita x >>= 4; 2809020adbSAkinobu Mita r += 4; 2909020adbSAkinobu Mita } 3009020adbSAkinobu Mita if (!(x & 3)) { 3109020adbSAkinobu Mita x >>= 2; 3209020adbSAkinobu Mita r += 2; 3309020adbSAkinobu Mita } 3409020adbSAkinobu Mita if (!(x & 1)) { 3509020adbSAkinobu Mita x >>= 1; 3609020adbSAkinobu Mita r += 1; 3709020adbSAkinobu Mita } 3809020adbSAkinobu Mita return r; 3909020adbSAkinobu Mita } 4009020adbSAkinobu Mita 4109020adbSAkinobu Mita #endif /* _ASM_GENERIC_BITOPS_FFS_H_ */ 42