gallium/util: Use HAVE___BUILTIN_FFS* macros.
authorJonathan Gray <jsg@jsg.id.au>
Tue, 17 Mar 2015 01:49:39 +0000 (12:49 +1100)
committerEmil Velikov <emil.l.velikov@gmail.com>
Tue, 24 Mar 2015 20:49:32 +0000 (20:49 +0000)
Make use of the builtin ffs macros and split out ffsll
to a seperate block.  Needed for at least OpenBSD which
does not have ffsll in libc.

Signed-off-by: Jonathan Gray <jsg@jsg.id.au>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
src/gallium/auxiliary/util/u_math.h

index 8f62cac..3d27a59 100644 (file)
@@ -383,14 +383,28 @@ unsigned ffs( unsigned u )
 
    return i;
 }
-#elif defined(__MINGW32__) || defined(PIPE_OS_ANDROID)
+#elif defined(__MINGW32__) || defined(PIPE_OS_ANDROID) || \
+    defined(HAVE___BUILTIN_FFS)
 #define ffs __builtin_ffs
-#define ffsll __builtin_ffsll
 #endif
 
 #endif /* FFS_DEFINED */
 
 /**
+ * Find first bit set in long long.  Least significant bit is 1.
+ * Return 0 if no bits set.
+ */
+#ifndef FFSLL_DEFINED
+#define FFSLL_DEFINED 1
+
+#if defined(__MINGW32__) || defined(PIPE_OS_ANDROID) || \
+    defined(HAVE___BUILTIN_FFSLL)
+#define ffsll __builtin_ffsll
+#endif
+
+#endif /* FFSLL_DEFINED */
+
+/**
  * Find last bit set in a word.  The least significant bit is 1.
  * Return 0 if no bits are set.
  */