>From dc87bda7182bf9ad9034ca739f46b3dbb9dc4632 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 4 Aug 2020 01:10:23 +0200 Subject: [PATCH 5/6] integer_length_ll: Optimize for MSVC in 32-bit mode. * lib/integer_length_l.c: Include . (integer_length): Define as inline function, like in lib/integer_length.c. --- ChangeLog | 7 +++++++ lib/integer_length_l.c | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/ChangeLog b/ChangeLog index b2169e3..bfd2ade 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2020-08-03 Bruno Haible + integer_length_ll: Optimize for MSVC in 32-bit mode. + * lib/integer_length_l.c: Include . + (integer_length): Define as inline function, like in + lib/integer_length.c. + +2020-08-03 Bruno Haible + integer_length: Optimize for MSVC. * lib/integer_length.c: Include . (integer_length): With MSVC, use the _BitScanReverse built-in. diff --git a/lib/integer_length_l.c b/lib/integer_length_l.c index 7a60357..ea52ac3 100644 --- a/lib/integer_length_l.c +++ b/lib/integer_length_l.c @@ -37,6 +37,22 @@ # define GCC_BUILTIN __builtin_clzl #endif +#if defined _MSC_VER +# include +/* Copied from integer_length.c. */ +static inline int +integer_length (unsigned int x) +{ + /* _BitScanReverse + */ + 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 -- 2.7.4