gallium/util: added util_bitcount()
authorBrian Paul <brianp@vmware.com>
Tue, 24 Nov 2009 01:04:22 +0000 (18:04 -0700)
committerBrian Paul <brianp@vmware.com>
Tue, 24 Nov 2009 01:04:22 +0000 (18:04 -0700)
src/gallium/auxiliary/util/u_math.h

index 731a114..9ed1ab6 100644 (file)
@@ -491,6 +491,26 @@ util_next_power_of_two(unsigned x)
 
 
 /**
+ * Return number of bits set in n.
+ */
+static INLINE unsigned
+util_bitcount(unsigned n)
+{
+#if defined(PIPE_CC_GCC)
+   return __builtin_popcount(n);
+#else
+   /* XXX there are more clever ways of doing this */
+   unsigned bits = 0;
+   while (n) {
+      bits += (n & 1);
+      n = n >> 1;
+   }
+   return bits;
+#endif
+}
+
+
+/**
  * Clamp X to [MIN, MAX].
  * This is a macro to allow float, int, uint, etc. types.
  */