v3-0005-Use-dummy-function-to-avoid-linker-error-move-dec.patch

application/octet-stream

Filename: v3-0005-Use-dummy-function-to-avoid-linker-error-move-dec.patch
Type: application/octet-stream
Part: 1
Message: Re: Proposal for enabling auto-vectorization for checksum calculations

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch v3-0005
Subject: Use dummy function to avoid linker error, move declarations
File+
src/include/storage/checksum_impl.h 16 2
From f7b28c6378db9cc98371e89e830a2ae8a571e9a0 Mon Sep 17 00:00:00 2001
From: Matthew Sterrett <matthew.sterrett@intel.com>
Date: Mon, 19 May 2025 13:23:55 -0700
Subject: [PATCH v3 5/5] 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