ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / Examples / Multiplatform / Protocol / VP_Os / win32 / intrin.h
diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/Examples/Multiplatform/Protocol/VP_Os/win32/intrin.h b/mardrone/ARDrone_SDK_Version_1_8_20110726/Examples/Multiplatform/Protocol/VP_Os/win32/intrin.h
new file mode 100644 (file)
index 0000000..ed0df41
--- /dev/null
@@ -0,0 +1,52 @@
+
+#ifndef __INTRIN__H__
+#define __INTRIN__H__
+
+
+#ifdef USE_MINGW32
+
+// #undef always_inline
+
+#ifdef __GNUC__
+
+static INLINE uint32_t _BitScanReverse(uint32_t* index, uint32_t mask)
+{
+  __asm__("bsrl %[mask], %[index]" : [index] "=r" (*index) : [mask] "mr" (mask));
+
+  return mask ? 1 : 0;
+}
+
+
+static INLINE uint32_t _byteswap_ulong(uint32_t value)
+{
+  __asm("bswap %0":
+      "=r" (value):
+      "0" (value));
+
+  return value;
+}
+
+#endif // __GNUC__
+
+#else // USE_MINGW32
+#endif // USE_MINGW32
+
+
+static inline uint32_t clz(uint32_t code)
+{
+  uint32_t index = 0;
+  if( code )
+  {
+    _BitScanReverse(&index, code);
+    index ^= 31;
+  }
+
+  return index;
+}
+
+
+#define bswap _byteswap_ulong
+
+
+#endif // ! __INTRIN__H__
+