mesa: Implement _mesa_flsll().
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 30 Mar 2015 23:08:26 +0000 (16:08 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 1 Apr 2015 20:30:13 +0000 (13:30 -0700)
This is _mesa_fls() for 64-bit values.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/main/imports.h

index 29f249980a0d2d07cdb42b1ae6d894d68a977b35..c4d917ebba49d26828f5f4e0951e227084f894c7 100644 (file)
@@ -433,6 +433,30 @@ _mesa_fls(unsigned int n)
 #endif
 }
 
+/**
+ * Find the last (most significant) bit set in a uint64_t value.
+ *
+ * Essentially ffsll() in the reverse direction.
+ */
+static inline unsigned int
+_mesa_flsll(uint64_t n)
+{
+#ifdef HAVE___BUILTIN_CLZLL
+   return n == 0 ? 0 : 64 - __builtin_clzll(n);
+#else
+   unsigned int v = 1;
+
+   if (n == 0)
+      return 0;
+
+   while (n >>= 1)
+       v++;
+
+   return v;
+#endif
+}
+
+
 extern GLhalfARB
 _mesa_float_to_half(float f);