gallium/util: add util_last_bit64
authorMarek Olšák <marek.olsak@amd.com>
Sun, 10 May 2015 18:35:15 +0000 (20:35 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Sun, 14 Jun 2015 18:17:29 +0000 (20:17 +0200)
This will be needed by radeonsi.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/auxiliary/util/u_math.h

index 58070a9dafa1e0d13ba3ad272904e279a2100a29..3b4040f0ee2685090fc126d152f28938be5d224c 100644 (file)
@@ -424,6 +424,25 @@ util_last_bit(unsigned u)
 #endif
 }
 
+/**
+ * Find last bit set in a word.  The least significant bit is 1.
+ * Return 0 if no bits are set.
+ */
+static INLINE unsigned
+util_last_bit64(uint64_t u)
+{
+#if defined(HAVE___BUILTIN_CLZLL)
+   return u == 0 ? 0 : 64 - __builtin_clzll(u);
+#else
+   unsigned r = 0;
+   while (u) {
+       r++;
+       u >>= 1;
+   }
+   return r;
+#endif
+}
+
 /**
  * Find last bit in a word that does not match the sign bit. The least
  * significant bit is 1.