From: Bruno Haible Date: Mon, 3 Aug 2020 22:05:05 +0000 (+0200) Subject: ffs: Optimize for MSVC. X-Git-Tag: v1.0~3826 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=353cc7c6906f650fa228d295dad270637f9441c7;p=gnulib.git ffs: Optimize for MSVC. * lib/ffs.c: Include . (ffs): With MSVC, use the _BitScanForward built-in. --- diff --git a/ChangeLog b/ChangeLog index 526747ed84..773a9f5cc5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2020-08-03 Bruno Haible + + ffs: Optimize for MSVC. + * lib/ffs.c: Include . + (ffs): With MSVC, use the _BitScanForward built-in. + 2020-08-03 Bruno Haible sigprocmask: Try to avoid breakage for people who use an Autoconf cache. diff --git a/lib/ffs.c b/lib/ffs.c index ba4915ee81..d8a65cac01 100644 --- a/lib/ffs.c +++ b/lib/ffs.c @@ -23,11 +23,23 @@ #include +#if defined _MSC_VER +# include +#endif + int ffs (int i) { #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) return __builtin_ffs (i); +#elif defined _MSC_VER + /* _BitScanForward + */ + unsigned long bit; + if (_BitScanForward (&bit, i)) + return bit + 1; + else + return 0; #else /* gives this deBruijn constant for a branch-less computation, although