[PATCH v1] Optimize 64-bit atomic access on RV64

Started by 王红岩5 days ago2 messageshackers
Jump to latest
#1王红岩
wanghongyan2025@iscas.ac.cn

RV64 guarantees that naturally aligned XLEN-wide loads and stores are atomic. Define PG_HAVE_8BYTE_SINGLE_COPY_ATOMICITY for RV64 so the generic 64-bit atomic implementation can use plain loads and stores instead of compare/exchange loops. Keep RV32 on the existing generic fallback.

Co-authored-by: Ni Jincheng <nijincheng@iscas.ac.cn>
Co-authored-by: Yuansheng <yuansheng@isrc.iscas.ac.cn>
---
src/include/port/atomics.h | 2 ++
src/include/port/atomics/arch-riscv.h | 26 ++++++++++++++++++++++++++
2 files changed, 28 insertions(+)
create mode 100644 src/include/port/atomics/arch-riscv.h

diff --git a/src/include/port/atomics.h b/src/include/port/atomics.h
index a605ea81d07..985f4e2416f 100644
--- a/src/include/port/atomics.h
+++ b/src/include/port/atomics.h
@@ -69,6 +69,8 @@
 #include "port/atomics/arch-x86.h"
 #elif defined(__powerpc__) || defined(__powerpc64__)
 #include "port/atomics/arch-ppc.h"
+#elif defined(__riscv)
+#include "port/atomics/arch-riscv.h"
 #endif
 /*
diff --git a/src/include/port/atomics/arch-riscv.h b/src/include/port/atomics/arch-riscv.h
new file mode 100644
index 00000000000..761a9811cff
--- /dev/null
+++ b/src/include/port/atomics/arch-riscv.h
@@ -0,0 +1,26 @@
+/*-------------------------------------------------------------------------
+ *
+ * arch-riscv.h
+ *    Atomic operations considerations specific to RISC-V
+ *
+ * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
+ *
+ * src/include/port/atomics/arch-riscv.h
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/* intentionally no include guards, should only be included by atomics.h */
+#ifndef INSIDE_ATOMICS_H
+#error "should be included via atomics.h"
+#endif
+
+/*
+ * The RV64 base ISA guarantees naturally aligned XLEN-bit loads and stores
+ * are atomic.  PostgreSQL's pg_atomic_uint64 objects are naturally aligned,
+ * so the generic implementation may use a single plain load/store rather
+ * than a compare/exchange loop.  RV32 retains the generic fallback.
+ */
+#if __riscv_xlen == 64
+#define PG_HAVE_8BYTE_SINGLE_COPY_ATOMICITY
+#endif
-- 
2.43.0
#2wenhui qiu
qiuwenhuifx@gmail.com
In reply to: 王红岩 (#1)
Re: [PATCH v1] Optimize 64-bit atomic access on RV64

Hi Wanghongyan

You can follow up this document :

https://wiki.postgresql.org/wiki/Submitting_a_Patch

Thanks