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