Re: vectorized CRC on ARM64

Nathan Bossart <nathandbossart@gmail.com>

From: Nathan Bossart <nathandbossart@gmail.com>
To: John Naylor <johncnaylorls@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-04-02T16:17:00Z
Lists: pgsql-hackers
On Thu, Apr 02, 2026 at 10:53:24AM -0500, Nathan Bossart wrote:
> I think the new pg_comp_crc32_choose() is infinitely recursing on macOS
> because USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK is not defined but
> pg_crc32c_armv8_available() returns false.  If I trace through that
> function, I see that it's going straight to the
> 
> 	#else
> 		return false;
> 	#endif
> 
> at the end.  And sure enough, both HAVE_ELF_AUX_INFO and HAVE_GETAUXVAL
> aren't defined in pg_config.h.  I think we might need to use sysctlbyname()
> to determine PMULL support on macOS, but at this stage of the development
> cycle, I would probably lean towards just compiling in the sb8
> implementation.

Hm.  On second thought, that probably regresses macOS builds because it was
presumably using the armv8 path without runtime checks before...

-- 
nathan



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Use C11 alignas instead of pg_attribute_aligned

  2. Add missing guard for __builtin_constant_p

  3. Exit early from pg_comp_crc32c_pmull for small inputs

  4. Fix unused function warning on Arm platforms

  5. Compute CRC32C on ARM using the Crypto Extension where available