authorgravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2023-01-19 23:52:30-05:00
committergravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2023-01-23 13:48:36-05:00
logb22b84de9d1a978a554d08e37e993295d99a92c1
tree0aa2affdb6e25f4652e7d893870342c419bb6c95
parent1aa2c32055c53657fd3a9825427454e0d74c20ed

cbe: fixup x86 atomics

- add zig_msvc_atomic_barrier() - fix zig_msvc_atomic_load_p32

1 files changed, 13 insertions(+), 1 deletions(-)

lib/zig.h+13-1
......@@ -225,7 +225,12 @@ typedef char bool;
225225#define zig_atomicrmw_max(obj, arg, order, type) zig_expand_concat(zig_msvc_atomicrmw_max_, type)(obj, arg)
226226#define zig_atomic_store(obj, arg, order, type) zig_expand_concat(zig_msvc_atomic_store_, type)(obj, arg)
227227#define zig_atomic_load(obj, order, type) zig_expand_concat(zig_msvc_atomic_load_, type)(obj)
228#if _M_X64
228229#define zig_fence(order) __faststorefence()
230#else
231#define zig_fence(order) zig_msvc_atomic_barrier()
232#endif
233
229234// TODO: _MSC_VER && (_M_ARM || _M_ARM64)
230235#else
231236#define memory_order_relaxed 0
......@@ -2271,6 +2276,13 @@ zig_msvc_flt_atomics(f64, u64, 64)
22712276#endif
22722277
22732278#if _M_IX86
2279static inline void zig_msvc_atomic_barrier() {
2280 zig_i32 barrier;
2281 __asm {
2282 xchg barrier, eax
2283 }
2284}
2285
22742286static inline void* zig_msvc_atomicrmw_xchg_p32(void** obj, zig_u32* arg) {
22752287 return _InterlockedExchangePointer(obj, arg);
22762288}
......@@ -2279,7 +2291,7 @@ static inline void zig_msvc_atomic_store_p32(void** obj, zig_u32* arg) {
22792291 _InterlockedExchangePointer(obj, arg);
22802292}
22812293
2282static inline void* zig_msvc_atomic_load_p32(void** obj, zig_u32* arg) {
2294static inline void* zig_msvc_atomic_load_p32(void** obj) {
22832295 return (void*)_InterlockedOr((void*)obj, 0);
22842296}
22852297