include/asm-generic/bitops/fls.h
changeset 0 aa628870c1d3
child 2 d1f6d8b6f81c
equal deleted inserted replaced
-1:000000000000 0:aa628870c1d3
       
     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_ */