commit 2a0238e5e3095a9e5a99c3ead64ffd7f98773c64 (tree)
parent 1240134c8b8b6c4ce9f885f695671363ac4fe10a
Author: kcbanner <kcbanner@gmail.com>
Date: Thu, 25 Jul 2024 18:43:10 -0400
zig.h: fixup pointer atomic load definitions
Diffstat:
2 files changed, 48 insertions(+), 8 deletions(-)
diff --git a/lib/zig.h b/lib/zig.h
@@ -3828,8 +3828,18 @@ static inline void zig_msvc_atomic_store_p32(void volatile* obj, void* arg) {
(void)_InterlockedExchangePointer(obj, arg);
}
-static inline void* zig_msvc_atomic_load_p32(void volatile* obj) {
- return (void*)_InterlockedExchangeAdd(obj, 0);
+static inline void* zig_msvc_atomic_load_zig_memory_order_relaxed_p32(void volatile* obj) {
+ return (void*)__iso_volatile_load32(obj);
+}
+
+static inline void* zig_msvc_atomic_load_zig_memory_order_acquire_p32(void volatile* obj) {
+ void* val = (void*)__iso_volatile_load32(obj);
+ _ReadWriteBarrier();
+ return val;
+}
+
+static inline void* zig_msvc_atomic_load_zig_memory_order_seq_cst_p32(void volatile* obj) {
+ return zig_msvc_atomic_load_zig_memory_order_acquire_p32(obj);
}
static inline bool zig_msvc_cmpxchg_p32(void volatile* obj, void* expected, void* desired) {
@@ -3848,8 +3858,18 @@ static inline void zig_msvc_atomic_store_p64(void volatile* obj, void* arg) {
(void)_InterlockedExchangePointer(obj, arg);
}
-static inline void* zig_msvc_atomic_load_p64(void volatile* obj) {
- return (void*)_InterlockedExchangeAdd64(obj, 0);
+static inline void* zig_msvc_atomic_load_zig_memory_order_relaxed_p64(void volatile* obj) {
+ return (void*)__iso_volatile_load64(obj);
+}
+
+static inline void* zig_msvc_atomic_load_zig_memory_order_acquire_p64(void volatile* obj) {
+ void* val = (void*)__iso_volatile_load64(obj);
+ _ReadWriteBarrier();
+ return val;
+}
+
+static inline void* zig_msvc_atomic_load_zig_memory_order_seq_cst_p64(void volatile* obj) {
+ return zig_msvc_atomic_load_zig_memory_order_acquire_p64(obj);
}
static inline bool zig_msvc_cmpxchg_p64(void volatile* obj, void* expected, void* desired) {
diff --git a/stage1/zig.h b/stage1/zig.h
@@ -3828,8 +3828,18 @@ static inline void zig_msvc_atomic_store_p32(void volatile* obj, void* arg) {
(void)_InterlockedExchangePointer(obj, arg);
}
-static inline void* zig_msvc_atomic_load_p32(void volatile* obj) {
- return (void*)_InterlockedExchangeAdd(obj, 0);
+static inline void* zig_msvc_atomic_load_zig_memory_order_relaxed_p32(void volatile* obj) {
+ return (void*)__iso_volatile_load32(obj);
+}
+
+static inline void* zig_msvc_atomic_load_zig_memory_order_acquire_p32(void volatile* obj) {
+ void* val = (void*)__iso_volatile_load32(obj);
+ _ReadWriteBarrier();
+ return val;
+}
+
+static inline void* zig_msvc_atomic_load_zig_memory_order_seq_cst_p32(void volatile* obj) {
+ return zig_msvc_atomic_load_zig_memory_order_acquire_p32(obj);
}
static inline bool zig_msvc_cmpxchg_p32(void volatile* obj, void* expected, void* desired) {
@@ -3848,8 +3858,18 @@ static inline void zig_msvc_atomic_store_p64(void volatile* obj, void* arg) {
(void)_InterlockedExchangePointer(obj, arg);
}
-static inline void* zig_msvc_atomic_load_p64(void volatile* obj) {
- return (void*)_InterlockedExchangeAdd64(obj, 0);
+static inline void* zig_msvc_atomic_load_zig_memory_order_relaxed_p64(void volatile* obj) {
+ return (void*)__iso_volatile_load64(obj);
+}
+
+static inline void* zig_msvc_atomic_load_zig_memory_order_acquire_p64(void volatile* obj) {
+ void* val = (void*)__iso_volatile_load64(obj);
+ _ReadWriteBarrier();
+ return val;
+}
+
+static inline void* zig_msvc_atomic_load_zig_memory_order_seq_cst_p64(void volatile* obj) {
+ return zig_msvc_atomic_load_zig_memory_order_acquire_p64(obj);
}
static inline bool zig_msvc_cmpxchg_p64(void volatile* obj, void* expected, void* desired) {