bitops: Write bitops_flsl in terms of clzl
Signed-off-by: Richard Henderson <rth@twiddle.net> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
		
							parent
							
								
									5bbf90be97
								
							
						
					
					
						commit
						0cfa6adc7f
					
				| 
						 | 
				
			
			@ -57,34 +57,7 @@ static unsigned long bitops_ctzl(unsigned long word)
 | 
			
		|||
 */
 | 
			
		||||
static inline unsigned long bitops_flsl(unsigned long word)
 | 
			
		||||
{
 | 
			
		||||
	int num = BITS_PER_LONG - 1;
 | 
			
		||||
 | 
			
		||||
#if LONG_MAX > 0x7FFFFFFF
 | 
			
		||||
	if (!(word & (~0ul << 32))) {
 | 
			
		||||
		num -= 32;
 | 
			
		||||
		word <<= 32;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	if (!(word & (~0ul << (BITS_PER_LONG-16)))) {
 | 
			
		||||
		num -= 16;
 | 
			
		||||
		word <<= 16;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(word & (~0ul << (BITS_PER_LONG-8)))) {
 | 
			
		||||
		num -= 8;
 | 
			
		||||
		word <<= 8;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(word & (~0ul << (BITS_PER_LONG-4)))) {
 | 
			
		||||
		num -= 4;
 | 
			
		||||
		word <<= 4;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(word & (~0ul << (BITS_PER_LONG-2)))) {
 | 
			
		||||
		num -= 2;
 | 
			
		||||
 | 
			
		||||
		word <<= 2;
 | 
			
		||||
	}
 | 
			
		||||
	if (!(word & (~0ul << (BITS_PER_LONG-1))))
 | 
			
		||||
		num -= 1;
 | 
			
		||||
	return num;
 | 
			
		||||
    return BITS_PER_LONG - 1 - clzl(word);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue