authorgravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2024-07-13 19:45:45-04:00
committergravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2024-07-13 19:45:45-04:00
logc31871065394c78d7d316b2a1709077437d29ccf
tree26f27f5407b035981de4bf1926f478afa436d159
parent373e53d7c5940c875a3423a6797f7b5d4a7f36c8

zig.h: expand zig_msvc_atomic_load_ into version for relaxed, acquire, and seq_cst


2 files changed, 60 insertions(+), 14 deletions(-)

lib/zig.h+30-7
......@@ -3636,7 +3636,7 @@ typedef int zig_memory_order;
36363636#define zig_atomicrmw_min(res, obj, arg, order, Type, ReprType) res = zig_msvc_atomicrmw_min_ ##Type(obj, arg)
36373637#define zig_atomicrmw_max(res, obj, arg, order, Type, ReprType) res = zig_msvc_atomicrmw_max_ ##Type(obj, arg)
36383638#define zig_atomic_store( obj, arg, order, Type, ReprType) zig_msvc_atomic_store_ ##Type(obj, arg)
3639#define zig_atomic_load(res, obj, order, Type, ReprType) res = zig_msvc_atomic_load_ ##Type(obj)
3639#define zig_atomic_load(res, obj, order, Type, ReprType) res = zig_msvc_atomic_load_ ##order##_##Type(obj)
36403640#if _M_X64
36413641#define zig_fence(order) __faststorefence()
36423642#else
......@@ -3742,7 +3742,15 @@ typedef int zig_memory_order;
37423742 static inline void zig_msvc_atomic_store_##ZigType(Type volatile* obj, Type value) { \
37433743 (void)_InterlockedExchange##suffix((SigType volatile*)obj, (SigType)value); \
37443744 } \
3745 static inline Type zig_msvc_atomic_load_##ZigType(Type volatile* obj) { \
3745 static inline Type zig_msvc_atomic_load_zig_memory_order_relaxed_##ZigType(Type volatile* obj) { \
3746 return __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
3747 } \
3748 static inline Type zig_msvc_atomic_load_zig_memory_order_acquire_##ZigType(Type volatile* obj) { \
3749 Type val = __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
3750 _ReadWriteBarrier(); \
3751 return val; \
3752 } \
3753 static inline Type zig_msvc_atomic_load_zig_memory_order_seq_cst_##ZigType(Type volatile* obj) { \
37463754 Type val = __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
37473755 _ReadWriteBarrier(); \
37483756 return val; \
......@@ -3760,7 +3768,7 @@ zig_msvc_atomics(u64, uint64_t, __int64, 64, 64)
37603768zig_msvc_atomics(i64, int64_t, __int64, 64, 64)
37613769#endif
37623770
3763#define zig_msvc_flt_atomics(Type, SigType, suffix) \
3771#define zig_msvc_flt_atomics(Type, SigType, suffix, iso_suffix) \
37643772 static inline bool zig_msvc_cmpxchg_##Type(zig_##Type volatile* obj, zig_##Type* expected, zig_##Type desired) { \
37653773 SigType exchange; \
37663774 SigType comparand; \
......@@ -3778,15 +3786,30 @@ zig_msvc_atomics(i64, int64_t, __int64, 64, 64)
37783786 memcpy(&value, &arg, sizeof(value)); \
37793787 (void)_InterlockedExchange##suffix((SigType volatile*)obj, value); \
37803788 } \
3781 static inline zig_##Type zig_msvc_atomic_load_##Type(zig_##Type volatile* obj) { \
3789 static inline zig_##Type zig_msvc_atomic_load_zig_memory_order_relaxed_##Type(zig_##Type volatile* obj) { \
37823790 zig_##Type result; \
3783 SigType initial = _InterlockedExchangeAdd##suffix((SigType volatile*)obj, (SigType)0); \
3791 SigType initial = __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
37843792 memcpy(&result, &initial, sizeof(result)); \
37853793 return result; \
3794 } \
3795 static inline zig_##Type zig_msvc_atomic_load_zig_memory_order_acquire_##Type(zig_##Type volatile* obj) { \
3796 zig_##Type result; \
3797 SigType initial = __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
3798 _ReadWriteBarrier(); \
3799 memcpy(&result, &initial, sizeof(result)); \
3800 return result; \
3801 } \
3802 static inline zig_##Type zig_msvc_atomic_load_zig_memory_order_seq_cst_##Type(zig_##Type volatile* obj) { \
3803 zig_##Type result; \
3804 SigType initial = __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
3805 _ReadWriteBarrier(); \
3806 memcpy(&result, &initial, sizeof(result)); \
3807 return result; \
37863808 }
3787zig_msvc_flt_atomics(f32, long, )
3809
3810zig_msvc_flt_atomics(f32, long, , 32)
37883811#if _M_X64
3789zig_msvc_flt_atomics(f64, int64_t, 64)
3812zig_msvc_flt_atomics(f64, int64_t, 64, 64)
37903813#endif
37913814
37923815#if _M_IX86
stage1/zig.h+30-7
......@@ -3636,7 +3636,7 @@ typedef int zig_memory_order;
36363636#define zig_atomicrmw_min(res, obj, arg, order, Type, ReprType) res = zig_msvc_atomicrmw_min_ ##Type(obj, arg)
36373637#define zig_atomicrmw_max(res, obj, arg, order, Type, ReprType) res = zig_msvc_atomicrmw_max_ ##Type(obj, arg)
36383638#define zig_atomic_store( obj, arg, order, Type, ReprType) zig_msvc_atomic_store_ ##Type(obj, arg)
3639#define zig_atomic_load(res, obj, order, Type, ReprType) res = zig_msvc_atomic_load_ ##Type(obj)
3639#define zig_atomic_load(res, obj, order, Type, ReprType) res = zig_msvc_atomic_load_ ##order##_##Type(obj)
36403640#if _M_X64
36413641#define zig_fence(order) __faststorefence()
36423642#else
......@@ -3742,7 +3742,15 @@ typedef int zig_memory_order;
37423742 static inline void zig_msvc_atomic_store_##ZigType(Type volatile* obj, Type value) { \
37433743 (void)_InterlockedExchange##suffix((SigType volatile*)obj, (SigType)value); \
37443744 } \
3745 static inline Type zig_msvc_atomic_load_##ZigType(Type volatile* obj) { \
3745 static inline Type zig_msvc_atomic_load_zig_memory_order_relaxed_##ZigType(Type volatile* obj) { \
3746 return __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
3747 } \
3748 static inline Type zig_msvc_atomic_load_zig_memory_order_acquire_##ZigType(Type volatile* obj) { \
3749 Type val = __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
3750 _ReadWriteBarrier(); \
3751 return val; \
3752 } \
3753 static inline Type zig_msvc_atomic_load_zig_memory_order_seq_cst_##ZigType(Type volatile* obj) { \
37463754 Type val = __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
37473755 _ReadWriteBarrier(); \
37483756 return val; \
......@@ -3760,7 +3768,7 @@ zig_msvc_atomics(u64, uint64_t, __int64, 64, 64)
37603768zig_msvc_atomics(i64, int64_t, __int64, 64, 64)
37613769#endif
37623770
3763#define zig_msvc_flt_atomics(Type, SigType, suffix) \
3771#define zig_msvc_flt_atomics(Type, SigType, suffix, iso_suffix) \
37643772 static inline bool zig_msvc_cmpxchg_##Type(zig_##Type volatile* obj, zig_##Type* expected, zig_##Type desired) { \
37653773 SigType exchange; \
37663774 SigType comparand; \
......@@ -3778,15 +3786,30 @@ zig_msvc_atomics(i64, int64_t, __int64, 64, 64)
37783786 memcpy(&value, &arg, sizeof(value)); \
37793787 (void)_InterlockedExchange##suffix((SigType volatile*)obj, value); \
37803788 } \
3781 static inline zig_##Type zig_msvc_atomic_load_##Type(zig_##Type volatile* obj) { \
3789 static inline zig_##Type zig_msvc_atomic_load_zig_memory_order_relaxed_##Type(zig_##Type volatile* obj) { \
37823790 zig_##Type result; \
3783 SigType initial = _InterlockedExchangeAdd##suffix((SigType volatile*)obj, (SigType)0); \
3791 SigType initial = __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
37843792 memcpy(&result, &initial, sizeof(result)); \
37853793 return result; \
3794 } \
3795 static inline zig_##Type zig_msvc_atomic_load_zig_memory_order_acquire_##Type(zig_##Type volatile* obj) { \
3796 zig_##Type result; \
3797 SigType initial = __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
3798 _ReadWriteBarrier(); \
3799 memcpy(&result, &initial, sizeof(result)); \
3800 return result; \
3801 } \
3802 static inline zig_##Type zig_msvc_atomic_load_zig_memory_order_seq_cst_##Type(zig_##Type volatile* obj) { \
3803 zig_##Type result; \
3804 SigType initial = __iso_volatile_load##iso_suffix((SigType volatile*)obj); \
3805 _ReadWriteBarrier(); \
3806 memcpy(&result, &initial, sizeof(result)); \
3807 return result; \
37863808 }
3787zig_msvc_flt_atomics(f32, long, )
3809
3810zig_msvc_flt_atomics(f32, long, , 32)
37883811#if _M_X64
3789zig_msvc_flt_atomics(f64, int64_t, 64)
3812zig_msvc_flt_atomics(f64, int64_t, 64, 64)
37903813#endif
37913814
37923815#if _M_IX86