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)
|
static inline unsigned long bitops_flsl(unsigned long word)
|
||||||
{
|
{
|
||||||
int num = BITS_PER_LONG - 1;
|
return BITS_PER_LONG - 1 - clzl(word);
|
||||||
|
|
||||||
#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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue