Compute CRC32C on ARM using the Crypto Extension where available
John Naylor <john.naylor@postgresql.org>
Author:
John Naylor <john.naylor@postgresql.org>
Date: 2026-04-04T13:47:01Z
Releases:
19 (unreleased)
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
| Path | Change | +/− |
|---|---|---|
| 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
- vectorized CRC on ARM64 28 messages · 2025-05-14 → 2026-07-01