Patchwork [06/10] bitops: Write bitops_flsl in terms of clzl

login
register
mail settings
Submitter Richard Henderson
Date Feb. 14, 2013, 1:47 a.m.
Message ID <1360806463-23632-7-git-send-email-rth@twiddle.net>
Download mbox | patch
Permalink /patch/220346/
State New
Headers show

Comments

Richard Henderson - Feb. 14, 2013, 1:47 a.m.
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 include/qemu/bitops.h | 29 +----------------------------
 1 file changed, 1 insertion(+), 28 deletions(-)

Patch

diff --git a/include/qemu/bitops.h b/include/qemu/bitops.h
index 8b88791..b50629b 100644
--- a/include/qemu/bitops.h
+++ b/include/qemu/bitops.h
@@ -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);
 }
 
 /**