Home | History | Annotate | Download | only in lib
      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 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