5#error The vl_atomic header does not work under C++ compilation due to using the _Atomic keyword.
21#ifdef VL_ATOMIC_TYPEDEF
22#undef VL_ATOMIC_TYPEDEF
25#define VL_ATOMIC _Atomic
26#define VL_ATOMIC_TYPEDEF(x) typedef VL_ATOMIC x
42#define VL_ATOMIC_U8_T vl_atomic_uint8_t
48#define VL_ATOMIC_U16_T vl_atomic_uint16_t
54#define VL_ATOMIC_U32_T vl_atomic_uint32_t
60#define VL_ATOMIC_U64_T vl_atomic_uint64_t
66#define VL_ATOMIC_I8_T vl_atomic_int8_t
72#define VL_ATOMIC_I16_T vl_atomic_int16_t
78#define VL_ATOMIC_I32_T vl_atomic_int32_t
84#define VL_ATOMIC_I64_T vl_atomic_int64_t
98typedef enum VL_MEMORY_ORDER{
157#define vlAtomicLoad(ptr) atomic_load(ptr)
173#define vlAtomicLoadExplicit(ptr, order) atomic_load_explicit(ptr, (memory_order)(order))
184#define vlAtomicStore(ptr, val) atomic_store(ptr, val)
199#define vlAtomicStoreExplicit(ptr, order) atomic_store_explicit(ptr, (memory_order)(order))
212#define vlAtomicFetchAdd(ptr, arg) atomic_fetch_add(ptr, arg)
223#define vlAtomicFetchSub(ptr, arg) atomic_fetch_sub(ptr, arg)
235#define vlAtomicFetchOr(ptr, arg) atomic_fetch_or(ptr, arg)
246#define vlAtomicFetchXor(ptr, arg) atomic_fetch_xor(ptr, arg)
257#define vlAtomicFetchAnd(ptr, arg) atomic_fetch_and(ptr, arg)
267#define vlAtomicFetchAddExplicit(ptr, arg, order) atomic_fetch_add_explicit(ptr, arg, (memory_order)(order))
277#define vlAtomicFetchSubExplicit(ptr, arg, order) atomic_fetch_sub_explicit(ptr, arg, (memory_order)(order))
287#define vlAtomicFetchOrExplicit(ptr, arg, order) atomic_fetch_or_explicit(ptr, arg, (memory_order)(order))
297#define vlAtomicFetchXorExplicit(ptr, arg, order) atomic_fetch_xor_explicit(ptr, arg, (memory_order)(order))
307#define vlAtomicFetchAndExplicit(ptr, arg, order) atomic_fetch_and_explicit(ptr, arg, (memory_order)(order))
329#define vlAtomicCompareExchangeWeak(ptr, expectedPtr, desired) atomic_compare_exchange_weak(ptr, expectedPtr, desired)
348#define vlAtomicCompareExchangeStrong(ptr, expectedPtr, desired) atomic_compare_exchange_strong(ptr, expectedPtr, desired)
368#define vlAtomicCompareExchangeWeakExplicit(ptr, expectedPtr, desired, trueOrder, falseOrder) atomic_compare_exchange_weak_explicit(ptr, expectedPtr, desired, (memory_order)(trueOrder), (memory_order)(falseOrder))
387#define vlAtomicCompareExchangeStrongExplicit(ptr, expectedPtr, desired, trueOrder, falseOrder) atomic_compare_exchange_strong_explicit(ptr, expectedPtr, desired, (memory_order)(trueOrder), (memory_order)(falseOrder))
397#define vlAtomicThreadFence(order) atomic_thread_fence((memory_order)(order))
408#define vlAtomicFlagTestAndSet(ptr) atomic_flag_test_and_set(ptr)
418#define vlAtomicFlagClear(ptr) atomic_flag_clear(ptr)
428#define vlAtomicFlagTestAndSetExplicit(ptr, order) atomic_flag_test_and_set_explicit(ptr, (memory_order)(order))
438#define vlAtomicFlagClearExplicit(ptr, order) atomic_flag_clear_explicit(ptr, (memory_order)(order))
450#define vlAtomicInit(ptr) atomic_init(ptr)
452#undef VL_ATOMIC_TYPEDEF
#define VL_ATOMIC_TYPEDEF(x)
Definition vl_atomic.h:26
vl_memory_order_t
Memory order enumeration. Dictates reordering of memory accesses surrounding and including atomic ope...
Definition vl_atomic.h:98
@ VL_MEMORY_ORDER_RELEASE
Definition vl_atomic.h:124
@ VL_MEMORY_ORDER_ACQUIRE
Definition vl_atomic.h:114
@ VL_MEMORY_ORDER_SEQ_CST
Definition vl_atomic.h:143
@ VL_MEMORY_ORDER_RELAXED
Definition vl_atomic.h:105
@ VL_MEMORY_ORDER_ACQ_REL
Definition vl_atomic.h:134
VL_ISMALL_T vl_ismall_t
Smallest available signed integer type.
Definition vl_numtypes.h:86
VL_UPTR_T vl_uintptr_t
Unsigned integer type suitable for expressing memory addresses.
Definition vl_numtypes.h:101
VL_UINT_T vl_uint_t
Standard unsigned integer type.
Definition vl_numtypes.h:96
VL_BOOL_T vl_bool_t
Definition vl_numtypes.h:128
VL_IPTR_T vl_intptr_t
Signed integer type suitable for expressing memory addresses.
Definition vl_numtypes.h:106
VL_USMALL_T vl_usmall_t
Smallest available unsigned integer type.
Definition vl_numtypes.h:82
VL_ULARGE_T vl_ularge_t
Largest available unsigned integer type.
Definition vl_numtypes.h:74
VL_ILARGE_T vl_ilarge_t
Largest available signed integer type.
Definition vl_numtypes.h:78
VL_INT_T vl_int_t
Standard signed integer type.
Definition vl_numtypes.h:91