From 135aa9da8c7bbaf21ff5b2d072526ade5cf14969 Mon Sep 17 00:00:00 2001 From: Daniel Gustafsson Date: Thu, 7 May 2026 22:35:00 +0200 Subject: [PATCH] Remove support for 8 byte tear free read/write on 32-bit The macro for enabling single-copy atomicity on i586+ when using GCC has been incorrect since 2017 (commit e8fdbd58f) without any complaints, and getting it to work is non-trivial. Getting this to work reliably require C11 atomics, which in turn also bumps the required MSVC version. For now, simply remove the attempted support which doesn't work anyways. Author: Daniel Gustafsson Reported-by: Jakub Wartak Suggested-by: Andres Freund Discussion: https://postgr.es/m/CAKZiRmycHOOJyEPc9FUss1_69_U62WoSx32jT7wyES-YkStZKA@mail.gmail.com Discussion: https://posrgr.es/m/CA+hUKGKFvu3zyvv3aaj5hHs9VtWcjFAmisOwOc7aOZNc5AF3NA@mail.gmail.com --- src/include/port/atomics/arch-x86.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/include/port/atomics/arch-x86.h b/src/include/port/atomics/arch-x86.h index bd6f4f56ca2..8cfe402c339 100644 --- a/src/include/port/atomics/arch-x86.h +++ b/src/include/port/atomics/arch-x86.h @@ -236,11 +236,8 @@ pg_atomic_fetch_add_u64_impl(volatile pg_atomic_uint64 *ptr, int64 add_) #endif /* defined(__GNUC__) || defined(__INTEL_COMPILER) */ /* - * 8 byte reads / writes have single-copy atomicity on 32 bit x86 platforms - * since at least the 586. As well as on all x86-64 cpus. + * 8 byte reads / writes have single-copy atomicity on all x86-64 cpus. */ -#if defined(__i568__) || defined(__i668__) || /* gcc i586+ */ \ - (defined(_M_IX86) && _M_IX86 >= 500) || /* msvc i586+ */ \ - defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) /* gcc, msvc */ +#if defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) /* gcc, msvc */ #define PG_HAVE_8BYTE_SINGLE_COPY_ATOMICITY #endif /* 8 byte single-copy atomicity */ -- 2.39.3 (Apple Git-146)