Add MSVC support for pg_leftmost_one_pos32() and friends
authorJohn Naylor <john.naylor@postgresql.org>
Wed, 8 Feb 2023 05:05:58 +0000 (12:05 +0700)
committerJohn Naylor <john.naylor@postgresql.org>
Mon, 20 Feb 2023 07:55:32 +0000 (14:55 +0700)
commit67731974644ce77129d282434065c3f0be04be92
tree7bb36feeb6086a8985dc9fe3386c8146ff71911d
parent204b0cbecb82ab3fde2e12998a89e7227cd64094
Add MSVC support for pg_leftmost_one_pos32() and friends

To allow testing for general support for fast bitscan intrinsics,
add symbols HAVE_BITSCAN_REVERSE and HAVE_BITSCAN_FORWARD.

Also do related cleanup in AllocSetFreeIndex(): Previously, we
tested for HAVE__BUILTIN_CLZ and copied the relevant internals of
pg_leftmost_one_pos32(), with a special fallback that does less
work than the general fallback for that function. Now that we have
a more general test, we just call pg_leftmost_one_pos32() directly
for platforms with intrinsic support. On gcc at least, there is no
difference in the binary for non-assert builds.

Discussion: https://www.postgresql.org/message-id/CAFBsxsEPc%2BFnX_0vmmQ5DHv60sk4rL_RZJ%2BMD6ei%3D76L0kFMvA%40mail.gmail.com
src/backend/utils/mmgr/aset.c
src/include/port/pg_bitutils.h