Use _BitScanForward and _BitScanReverse on MSVC
diff --git a/src/hb-private.hh b/src/hb-private.hh
index 6430ba8..22948ae 100644
--- a/src/hb-private.hh
+++ b/src/hb-private.hh
@@ -51,6 +51,9 @@
#include <stdio.h>
#include <stdarg.h>
+#if defined(_MSC_VER)
+#include <intrin.h>
+#endif
#define HB_PASTE1(a,b) a##b
#define HB_PASTE(a,b) HB_PASTE1(a,b)
@@ -352,6 +355,10 @@
{
#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
return likely (number) ? (sizeof (unsigned int) * 8 - __builtin_clz (number)) : 0;
+#elif defined_MSC_VER) && defined(__OPTIMIZE__)
+ unsigned long where;
+ if (_BitScanReverse(&where, number)) return 1 + where;
+ return 0;
#else
unsigned int n_bits = 0;
while (number) {
@@ -368,6 +375,11 @@
{
#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
return likely (number) ? __builtin_ctz (number) : 0;
+#elif defined_MSC_VER) && defined(__OPTIMIZE__)
+ unsigned long where;
+ if (_BitScanForward(&where, n)) return where;
+ return 0;
+}
#else
unsigned int n_bits = 0;
if (unlikely (!number)) return 0;