]> granicus.if.org Git - postgresql/commit
Add basic support for using the POPCNT and SSE4.2s LZCNT opcodes
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Wed, 13 Feb 2019 19:10:06 +0000 (16:10 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Wed, 13 Feb 2019 19:10:06 +0000 (16:10 -0300)
commit711bab1e4d19b5c9967328315a542d93386b1ac5
tree65ee7e238438642e152ff52b24f042eb1491e28a
parent754ca99314e9e1debe855b0462869ef6e58b7e7a
Add basic support for using the POPCNT and SSE4.2s LZCNT opcodes

These opcodes have been around in the AMD world since 2007, and 2008 in
the case of intel.  They're supported in GCC and Clang via some __builtin
macros.  The opcodes may be unavailable during runtime, in which case we
fall back on a C-based implementation of the code.  In order to get the
POPCNT instruction we must pass the -mpopcnt option to the compiler.  We
do this only for the pg_bitutils.c file.

David Rowley (with fragments taken from a patch by Thomas Munro)

Discussion: https://postgr.es/m/CAKJS1f9WTAGG1tPeJnD18hiQW5gAk59fQ6WK-vfdAKEHyRg2RA@mail.gmail.com
13 files changed:
config/c-compiler.m4
configure
configure.in
src/Makefile.global.in
src/backend/access/heap/visibilitymap.c
src/backend/lib/bloomfilter.c
src/backend/nodes/bitmapset.c
src/include/pg_config.h.in
src/include/pg_config.h.win32
src/include/port/pg_bitutils.h [new file with mode: 0644]
src/port/Makefile
src/port/pg_bitutils.c [new file with mode: 0644]
src/tools/msvc/Mkvcbuild.pm