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