* lib/integer_length_l.c: Include <intrin.h>.
(integer_length): Define as inline function, like in
lib/integer_length.c.
+2020-08-03 Bruno Haible <bruno@clisp.org>
+
+ integer_length_ll: Optimize for MSVC in 32-bit mode.
+ * lib/integer_length_l.c: Include <intrin.h>.
+ (integer_length): Define as inline function, like in
+ lib/integer_length.c.
+
2020-08-03 Bruno Haible <bruno@clisp.org>
integer_length: Optimize for MSVC.
# define GCC_BUILTIN __builtin_clzl
#endif
+#if defined _MSC_VER
+# include <intrin.h>
+/* Copied from integer_length.c. */
+static inline int
+integer_length (unsigned int x)
+{
+ /* _BitScanReverse
+ <https://docs.microsoft.com/en-us/cpp/intrinsics/bitscanreverse-bitscanreverse64> */
+ unsigned long bit;
+ if (_BitScanReverse (&bit, x))
+ return bit + 1;
+ else
+ return 0;
+}
+#endif
+
#define NBITS (sizeof (TYPE) * CHAR_BIT)
/* Modify shift count to be in bounds, even in dead code, otherwise GCC