42 lines
		
	
	
	
		
			626 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			42 lines
		
	
	
	
		
			626 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #ifndef _ASM_GENERIC_BITOPS_FLS_H_
 | ||
|  | #define _ASM_GENERIC_BITOPS_FLS_H_
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * fls - find last (most-significant) bit set | ||
|  |  * @x: the word to search | ||
|  |  * | ||
|  |  * This is defined the same way as ffs. | ||
|  |  * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. | ||
|  |  */ | ||
|  | 
 | ||
|  | static inline int fls(int x) | ||
|  | { | ||
|  | 	int r = 32; | ||
|  | 
 | ||
|  | 	if (!x) | ||
|  | 		return 0; | ||
|  | 	if (!(x & 0xffff0000u)) { | ||
|  | 		x <<= 16; | ||
|  | 		r -= 16; | ||
|  | 	} | ||
|  | 	if (!(x & 0xff000000u)) { | ||
|  | 		x <<= 8; | ||
|  | 		r -= 8; | ||
|  | 	} | ||
|  | 	if (!(x & 0xf0000000u)) { | ||
|  | 		x <<= 4; | ||
|  | 		r -= 4; | ||
|  | 	} | ||
|  | 	if (!(x & 0xc0000000u)) { | ||
|  | 		x <<= 2; | ||
|  | 		r -= 2; | ||
|  | 	} | ||
|  | 	if (!(x & 0x80000000u)) { | ||
|  | 		x <<= 1; | ||
|  | 		r -= 1; | ||
|  | 	} | ||
|  | 	return r; | ||
|  | } | ||
|  | 
 | ||
|  | #endif /* _ASM_GENERIC_BITOPS_FLS_H_ */
 |