qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-ppc] [PATCH v3 5/6] bitops: add BITNR macro


From: Alexey Kardashevskiy
Subject: [Qemu-ppc] [PATCH v3 5/6] bitops: add BITNR macro
Date: Mon, 11 Nov 2013 18:44:34 +1100

This adds a macro to calculate the highest bit set. If used on constant
values, no code will be generated.

Signed-off-by: Alexey Kardashevskiy <address@hidden>
---
 include/qemu/bitops.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/include/qemu/bitops.h b/include/qemu/bitops.h
index 304c90c..98ba42a 100644
--- a/include/qemu/bitops.h
+++ b/include/qemu/bitops.h
@@ -23,6 +23,18 @@
 #define BIT_WORD(nr)           ((nr) / BITS_PER_LONG)
 #define BITS_TO_LONGS(nr)      DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))
 
+#define __BITNR(m, n)  ((m) == ((m) & (1<<(n)))) ? (n) :
+#define BITNR(m) \
+    __BITNR((m), 31) __BITNR((m), 30) __BITNR((m), 29) __BITNR((m), 28) \
+    __BITNR((m), 27) __BITNR((m), 26) __BITNR((m), 25) __BITNR((m), 24) \
+    __BITNR((m), 23) __BITNR((m), 22) __BITNR((m), 21) __BITNR((m), 20) \
+    __BITNR((m), 19) __BITNR((m), 18) __BITNR((m), 17) __BITNR((m), 16) \
+    __BITNR((m), 15) __BITNR((m), 14) __BITNR((m), 13) __BITNR((m), 12) \
+    __BITNR((m), 11) __BITNR((m), 10) __BITNR((m),  9) __BITNR((m),  8) \
+    __BITNR((m),  7) __BITNR((m),  6) __BITNR((m),  5) __BITNR((m),  4) \
+    __BITNR((m),  3) __BITNR((m),  2) __BITNR((m),  1) __BITNR((m),  0) \
+    -1
+
 /**
  * set_bit - Set a bit in memory
  * @nr: the bit to set
-- 
1.8.4.rc4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]