glsl: inspect interfaces in contains_foo()
[mesa.git] / src / util / bitscan.h
index 0743fe7d321c2f4fd963596da988edec1403a764..a5dfa1f9e3bf458a8dd4b4bee24b4f8bb38b7240 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <assert.h>
 #include <stdint.h>
+#include <string.h>
 
 #if defined(_MSC_VER)
 #include <intrin.h>
@@ -157,6 +158,12 @@ util_last_bit(unsigned u)
 {
 #if defined(HAVE___BUILTIN_CLZ)
    return u == 0 ? 0 : 32 - __builtin_clz(u);
+#elif defined(_MSC_VER) && (_M_IX86 || _M_ARM || _M_AMD64 || _M_IA64)
+   unsigned long index;
+   if (_BitScanReverse(&index, u))
+      return index + 1;
+   else
+      return 0;
 #else
    unsigned r = 0;
    while (u) {
@@ -177,6 +184,12 @@ util_last_bit64(uint64_t u)
 {
 #if defined(HAVE___BUILTIN_CLZLL)
    return u == 0 ? 0 : 64 - __builtin_clzll(u);
+#elif defined(_MSC_VER) && (_M_AMD64 || _M_ARM || _M_IA64)
+   unsigned long index;
+   if (_BitScanReverse64(&index, u))
+      return index + 1;
+   else
+      return 0;
 #else
    unsigned r = 0;
    while (u) {