OSDN Git Service

bitops: Write bitops_flsl in terms of clzl
authorRichard Henderson <rth@twiddle.net>
Thu, 14 Feb 2013 01:47:39 +0000 (17:47 -0800)
committerBlue Swirl <blauwirbel@gmail.com>
Sat, 16 Feb 2013 11:12:21 +0000 (11:12 +0000)
Signed-off-by: Richard Henderson <rth@twiddle.net>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
include/qemu/bitops.h

index 8b88791..b50629b 100644 (file)
@@ -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);
 }
 
 /**