From f7b28c6378db9cc98371e89e830a2ae8a571e9a0 Mon Sep 17 00:00:00 2001 From: Matthew Sterrett Date: Mon, 19 May 2025 13:23:55 -0700 Subject: [PATCH v4 5/6] Use dummy function to avoid linker error, move declarations --- src/include/storage/checksum_impl.h | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/include/storage/checksum_impl.h b/src/include/storage/checksum_impl.h index 042ee8af120..4070646e23e 100644 --- a/src/include/storage/checksum_impl.h +++ b/src/include/storage/checksum_impl.h @@ -163,7 +163,7 @@ ymm_regs_available(void) static inline bool avx2_available(void) { -#ifdef USE_AVX2_WITH_RUNTIME_CHECK +#if defined (USE_AVX2_WITH_RUNTIME_CHECK) && defined(__x86_64__) unsigned int exx[4] = {0, 0, 0, 0}; if (!xsave_available() || !ymm_regs_available()) return false; @@ -220,7 +220,20 @@ do { \ static uint32 \ pg_checksum_block_##ISANAME(const PGChecksummablePage *page); +#define PG_DEFINE_CHECKSUM_DUMMY(ISANAME) \ +static uint32 \ +pg_checksum_block_##ISANAME(const PGChecksummablePage *page); \ +pg_attribute_target(#ISANAME) \ +static uint32 \ +pg_checksum_block_##ISANAME(const PGChecksummablePage *page) \ +{ \ + Assert(false); /* This function should never be called */ \ + return pg_checksum_block_default(page); /* Just in case it somehow is */ \ +} + #define PG_DEFINE_CHECKSUM_ISA(ISANAME) \ +static uint32 \ +pg_checksum_block_##ISANAME(const PGChecksummablePage *page); \ pg_attribute_target(#ISANAME) \ static uint32 \ pg_checksum_block_##ISANAME(const PGChecksummablePage *page) \ @@ -254,10 +267,11 @@ pg_checksum_block_##ISANAME(const PGChecksummablePage *page) \ return result; \ } -/* Declarations are always defined to make dynamic dispatch code simpler */ PG_DEFINE_CHECKSUM_ISA(default); #ifdef USE_AVX2_WITH_RUNTIME_CHECK PG_DEFINE_CHECKSUM_ISA(avx2); +#else +PG_DEFINE_CHECKSUM_DUMMY(avx2); #endif static uint32 -- 2.43.0