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)
200#define vlAtomicStoreExplicit(ptr, val, order) atomic_store_explicit(ptr, val, (memory_order)(order))
213#define vlAtomicFetchAdd(ptr, arg) atomic_fetch_add(ptr, arg)
224#define vlAtomicFetchSub(ptr, arg) atomic_fetch_sub(ptr, arg)
236#define vlAtomicFetchOr(ptr, arg) atomic_fetch_or(ptr, arg)
247#define vlAtomicFetchXor(ptr, arg) atomic_fetch_xor(ptr, arg)
258#define vlAtomicFetchAnd(ptr, arg) atomic_fetch_and(ptr, arg)
268#define vlAtomicFetchAddExplicit(ptr, arg, order) atomic_fetch_add_explicit(ptr, arg, (memory_order)(order))
278#define vlAtomicFetchSubExplicit(ptr, arg, order) atomic_fetch_sub_explicit(ptr, arg, (memory_order)(order))
288#define vlAtomicFetchOrExplicit(ptr, arg, order) atomic_fetch_or_explicit(ptr, arg, (memory_order)(order))
298#define vlAtomicFetchXorExplicit(ptr, arg, order) atomic_fetch_xor_explicit(ptr, arg, (memory_order)(order))
308#define vlAtomicFetchAndExplicit(ptr, arg, order) atomic_fetch_and_explicit(ptr, arg, (memory_order)(order))
324#define vlAtomicExchange(ptr, desired) atomic_exchange(ptr, desired)
337#define vlAtomicExchangeExplicit(ptr, desired, order) atomic_exchange_explicit(ptr, desired, (memory_order)(order))
357#define vlAtomicCompareExchangeWeak(ptr, expectedPtr, desired) atomic_compare_exchange_weak(ptr, expectedPtr, desired)
376#define vlAtomicCompareExchangeStrong(ptr, expectedPtr, desired) atomic_compare_exchange_strong(ptr, expectedPtr, desired)
396#define vlAtomicCompareExchangeWeakExplicit(ptr, expectedPtr, desired, trueOrder, falseOrder) atomic_compare_exchange_weak_explicit(ptr, expectedPtr, desired, (memory_order)(trueOrder), (memory_order)(falseOrder))
415#define vlAtomicCompareExchangeStrongExplicit(ptr, expectedPtr, desired, trueOrder, falseOrder) atomic_compare_exchange_strong_explicit(ptr, expectedPtr, desired, (memory_order)(trueOrder), (memory_order)(falseOrder))
425#define vlAtomicThreadFence(order) atomic_thread_fence((memory_order)(order))
436#define vlAtomicFlagTestAndSet(ptr) atomic_flag_test_and_set(ptr)
446#define vlAtomicFlagClear(ptr) atomic_flag_clear(ptr)
456#define vlAtomicFlagTestAndSetExplicit(ptr, order) atomic_flag_test_and_set_explicit(ptr, (memory_order)(order))
466#define vlAtomicFlagClearExplicit(ptr, order) atomic_flag_clear_explicit(ptr, (memory_order)(order))
479#define vlAtomicInit(ptr, val) atomic_init(ptr, val)
481#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