postgresql/src/port
Nathan Bossart 25dc485074 Refactor some SIMD and popcount macros.
This commit does the following:

* Removes TRY_POPCNT_X86_64.  We now assume that the required CPUID
intrinsics are available when HAVE_X86_64_POPCNTQ is defined, as we
have done since v16 for meson builds when
USE_SSE42_CRC32C_WITH_RUNTIME_CHECK is defined and since v17 when
USE_AVX512_POPCNT_WITH_RUNTIME_CHECK is defined.

* Moves the MSVC check for HAVE_X86_64_POPCNTQ to configure-time.
This way, we set it for all relevant platforms in one place.

* Moves the #defines for USE_SSE2 and USE_NEON to c.h so that they
can be used elsewhere without including simd.h.  Consequently, we
can remove the POPCNT_AARCH64 macro.

* Moves the #includes for pg_bitutils.h to below the system headers
in pg_popcount_{aarch64,x86}.c, since we no longer depend on macros
from pg_bitutils.h to decide which system headers to use.

Reviewed-by: John Naylor <johncnaylorls@gmail.com>
Discussion: https://postgr.es/m/aWf_InS1VrbeXAfP%40nathan
2026-01-21 14:21:00 -06:00
..
.gitignore Build src/port files as a library with -fPIC, and use that in libpq. 2018-09-27 11:23:43 -04:00
bsearch_arg.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
chklocale.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
dirent.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
dirmod.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
explicit_bzero.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
getopt.c Fix another case of indirectly casting away const. 2025-12-23 21:38:43 -05:00
getopt_long.c Fix some cases of indirectly casting away const. 2025-12-05 11:17:23 -05:00
getpeereid.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
inet_aton.c Correct include file name in inet_aton fallback. 2017-10-01 17:41:00 -07:00
inet_net_ntop.c Remove configure probe for sockaddr_in6 and require AF_INET6. 2022-08-26 10:18:30 +12:00
kill.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
Makefile Rename pg_popcount_avx512.c to pg_popcount_x86.c. 2026-01-21 14:21:00 -06:00
meson.build Rename pg_popcount_avx512.c to pg_popcount_x86.c. 2026-01-21 14:21:00 -06:00
mkdtemp.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
noblock.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
open.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
path.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pg_bitutils.c Refactor some SIMD and popcount macros. 2026-01-21 14:21:00 -06:00
pg_crc32c_armv8.c MSVC: Support building for AArch64. 2026-01-07 13:42:57 -06:00
pg_crc32c_armv8_choose.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pg_crc32c_loongarch.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pg_crc32c_sb8.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pg_crc32c_sse42.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pg_crc32c_sse42_choose.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pg_localeconv_r.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pg_numa.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pg_popcount_aarch64.c Refactor some SIMD and popcount macros. 2026-01-21 14:21:00 -06:00
pg_popcount_x86.c Refactor some SIMD and popcount macros. 2026-01-21 14:21:00 -06:00
pg_strong_random.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pgcheckdir.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pgmkdirp.c Use strchr instead of strstr for single-char lookups 2025-07-23 12:02:55 +12:00
pgsleep.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pgstrcasecmp.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pgstrsignal.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pqsignal.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
pthread-win32.h Clean up Windows-specific mutex code in libpq and ecpglib. 2024-02-09 11:11:39 -05:00
pthread_barrier_wait.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
qsort.c Use sort_template.h for qsort() and qsort_arg(). 2021-03-03 17:02:32 +13:00
qsort_arg.c Use sort_template.h for qsort() and qsort_arg(). 2021-03-03 17:02:32 +13:00
quotes.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
README Remove AIX support 2024-02-28 15:17:23 +04:00
snprintf.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
strerror.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
strlcat.c pgindent run for 9.4 2014-05-06 12:12:18 -04:00
strlcpy.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
strsep.c Add port/ replacement for strsep() 2024-07-22 09:50:30 +02:00
strtof.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
system.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
tar.c Add and use symbolic constants for tar header offsets and file types. 2023-08-01 13:50:42 -04:00
timingsafe_bcmp.c Add timingsafe_bcmp(), for constant-time memory comparison 2025-04-02 15:32:40 +03:00
win32.ico Revert binary change in copyright year adjustment. 2012-01-01 19:40:13 -05:00
win32common.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32dlopen.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32env.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32error.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32fdatasync.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32fseek.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32gai_strerror.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32getrusage.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32gettimeofday.c Simplify gettimeofday for Windows. 2022-08-07 12:35:36 +12:00
win32link.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32ntdll.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32pread.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32pwrite.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32security.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32setlocale.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32stat.c Update copyright for 2026 2026-01-01 13:24:10 -05:00
win32ver.rc Update copyright for 2026 2026-01-01 13:24:10 -05:00

src/port/README

libpgport
=========

libpgport must have special behavior.  It supplies functions to both
libraries and applications.  However, there are two complexities:

1)  Libraries need to use object files that are compiled with exactly
the same flags as the library.  libpgport might not use the same flags,
so it is necessary to recompile the object files for individual
libraries.  This is done by removing -lpgport from the link line:

        # Need to recompile any libpgport object files
        LIBS := $(filter-out -lpgport, $(LIBS))

and adding infrastructure to recompile the object files:

        OBJS= execute.o typename.o descriptor.o data.o error.o prepare.o memory.o \
                connect.o misc.o path.o exec.o \
                $(filter strlcat.o, $(LIBOBJS))

The problem is that there is no testing of which object files need to be
added, but missing functions usually show up when linking user
applications.

2) For applications, we use -lpgport before -lpq, so the static files
from libpgport are linked first.  This avoids having applications
dependent on symbols that are _used_ by libpq, but not intended to be
exported by libpq.  libpq's libpgport usage changes over time, so such a
dependency is a problem.  Windows, Linux, and macOS use an export
list to control the symbols exported by libpq.