Compute CRC32C on ARM using the Crypto Extension where available

John Naylor <john.naylor@postgresql.org>

Commit: fbc57f2bc2ee498958a4c5326002af39dd99c90b
Author: John Naylor <john.naylor@postgresql.org>
Date: 2026-04-04T13:47:01Z
Compute CRC32C on ARM using the Crypto Extension where available

In similar vein to commit 3c6e8c123, the ARMv8 cryptography extension
has 64x64 -> 128-bit carryless multiplication instructions suitable
for computing CRC. This was tested to be around twice as fast as
scalar CRC instructions for longer inputs.

We now do a runtime check, even for builds that target "armv8-a+crc",
but those builds can still use a direct call for constant inputs,
which we assume are short.

As for x86, the MIT-licensed implementation was generated with the
"generate" program from

https://github.com/corsix/fast-crc32/

Reviewed-by: Nathan Bossart <nathandbossart@gmail.com>
Discussion: https://postgr.es/m/CANWCAZaKhE+RD5KKouUFoxx1EbUNrNhcduM1VQ=DkSDadNEFng@mail.gmail.com

Files

PathChange+/−
config/c-compiler.m4 modified +38 −0
configure modified +62 −2
configure.ac modified +11 −2
meson.build modified +33 −0
src/include/pg_config.h.in modified +3 −0
src/include/port/pg_crc32c.h modified +17 −5
src/port/meson.build modified +1 −0
src/port/pg_crc32c_armv8.c modified +128 −0
src/port/pg_crc32c_armv8_choose.c modified +36 −2

Discussion