Re: vectorized CRC on ARM64
John Naylor <johncnaylorls@gmail.com>
From: John Naylor <johncnaylorls@gmail.com>
To: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-03-31T11:19:49Z
Lists: pgsql-hackers
Attachments
- v3-0001-Compute-CRC32C-on-ARM-using-the-Crypto-Extension-.patch (text/x-patch) patch v3-0001
I wrote: > autoconf support is a WIP, and I will share that after I do some > testing on an Arm Linux instance. I've only checked paths with objdump and debugging printouts (no perf testing), but this seems to work in v3. My main concern now is whether it's a maintenance hazard to overwrite CFLAGS_CRC in a separate check. In master, we can have one of: CFLAGS_CRC="" CFLAGS_CRC="-march=armv8-a+crc+simd" CFLAGS_CRC="-march=armv8-a+crc" ...and then based on that we set either USE_ARMV8_CRC32C or USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK, and set PG_CRC32C_OBJS. But below that, v3 runs a new test for pmull instructions with the flag "-march=armv8-a+crc+simd+crypto" and if it links, it will reset CFLAGS_CRC to that set of flags. That doesn't seem like the right thing to do, but I don't see a good alternative. I suppose I could sidestep that with function attributes, but that's not as well supported. Another idea would be to turn the relevant line here if test x"$Ac_cachevar" = x"yes"; then CFLAGS_CRC="$1" pgac_arm_pmull_intrinsics=yes fi ...into CFLAGS_CRC="CFLAGS_CRC$1", where in this case $1 is just "+crypto". That seems even more fragile, though. -- John Naylor Amazon Web Services
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Use C11 alignas instead of pg_attribute_aligned
- 182f6944d3d0 19 (unreleased) landed
- 8061bfd15abe master landed
-
Add missing guard for __builtin_constant_p
- 936d8974c3bc 18.4 landed
- 676626426285 19 (unreleased) landed
-
Exit early from pg_comp_crc32c_pmull for small inputs
- 948ef7cdc499 19 (unreleased) landed
-
Fix unused function warning on Arm platforms
- 2849fe4c9785 19 (unreleased) landed
-
Compute CRC32C on ARM using the Crypto Extension where available
- fbc57f2bc2ee 19 (unreleased) landed