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 __always_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