util.h declares this when needed, make sure the definition is compiled
in only in that case.

Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com>
---
 lib/util.c |    2 +-
 lib/util.h |   18 ++++++++++++------
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/lib/util.c b/lib/util.c
index 13d41a7..000504c 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -901,7 +901,7 @@ raw_clz64(uint64_t n)
 }
 #endif
 
-#if !(__GNUC__ >= 4 && defined(__corei7))
+#if NEED_COUNT_1BITS_8
 #define INIT1(X)                                \
     ((((X) & (1 << 0)) != 0) +                  \
      (((X) & (1 << 1)) != 0) +                  \
diff --git a/lib/util.h b/lib/util.h
index 8d810c2..264cdca 100644
--- a/lib/util.h
+++ b/lib/util.h
@@ -371,8 +371,7 @@ log_2_ceil(uint64_t n)
     return log_2_floor(n) + !is_pow2(n);
 }
 
-extern const uint8_t count_1bits_8[256];
-
+#if INTPTR_MAX == INT32_MAX
 /* Returns the number of 1-bits in 'x', between 0 and 32 inclusive. */
 static inline unsigned int
 count_1bits_32(uint32_t x)
@@ -381,6 +380,9 @@ count_1bits_32(uint32_t x)
     /* __builtin_popcount() is fast only when supported by the CPU. */
     return __builtin_popcount(x);
 #else
+#define NEED_COUNT_1BITS_8 1
+    extern const uint8_t count_1bits_8[256];
+
     /* This portable implementation is the fastest one we know of for 32 bits,
      * and faster than GCC __builtin_popcount(). */
     return (count_1bits_8[x & 0xff] +
@@ -394,7 +396,13 @@ count_1bits_32(uint32_t x)
 static inline unsigned int
 count_1bits(uint64_t x)
 {
-    if (sizeof(void *) == 8) { /* 64-bit CPU */
+    return count_1bits_32(x) + count_1bits_32(x >> 32);
+}
+#else
+/* Returns the number of 1-bits in 'x', between 0 and 64 inclusive. */
+static inline unsigned int
+count_1bits(uint64_t x)
+{
 #if __GNUC__ >= 4 && defined(__corei7)
         /* __builtin_popcountll() is fast only when supported by the CPU. */
         return __builtin_popcountll(x);
@@ -410,10 +418,8 @@ count_1bits(uint64_t x)
         x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
         return (x * h01) >> 56;            /* Sum of all bytes. */
 #endif
-    } else { /* 32-bit CPU */
-        return count_1bits_32(x) + count_1bits_32(x >> 32);
-    }
 }
+#endif
 
 /* Returns the rightmost 1-bit in 'x' (e.g. 01011000 => 00001000), or 0 if 'x'
  * is 0. */
-- 
1.7.10.4

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to