18#error The vl_atomic header does not work under C++ compilation due to the use of the _Atomic keyword.
36#ifdef VL_ATOMIC_TYPEDEF
37#undef VL_ATOMIC_TYPEDEF
40#define VL_ATOMIC _Atomic
41#define VL_ATOMIC_TYPEDEF(x) typedef VL_ATOMIC x
57#define VL_ATOMIC_U8_T vl_atomic_uint8_t
63#define VL_ATOMIC_U16_T vl_atomic_uint16_t
69#define VL_ATOMIC_U32_T vl_atomic_uint32_t
75#define VL_ATOMIC_U64_T vl_atomic_uint64_t
81#define VL_ATOMIC_I8_T vl_atomic_int8_t
87#define VL_ATOMIC_I16_T vl_atomic_int16_t
93#define VL_ATOMIC_I32_T vl_atomic_int32_t
99#define VL_ATOMIC_I64_T vl_atomic_int64_t
113typedef enum VL_MEMORY_ORDER
181#define vlAtomicLoad(ptr) atomic_load(ptr)
197#define vlAtomicLoadExplicit(ptr, order) atomic_load_explicit(ptr, (memory_order)(order))
208#define vlAtomicStore(ptr, val) atomic_store(ptr, val)
224#define vlAtomicStoreExplicit(ptr, val, order) atomic_store_explicit(ptr, val, (memory_order)(order))
238#define vlAtomicFetchAdd(ptr, arg) atomic_fetch_add(ptr, arg)
250#define vlAtomicFetchSub(ptr, arg) atomic_fetch_sub(ptr, arg)
263#define vlAtomicFetchOr(ptr, arg) atomic_fetch_or(ptr, arg)
275#define vlAtomicFetchXor(ptr, arg) atomic_fetch_xor(ptr, arg)
287#define vlAtomicFetchAnd(ptr, arg) atomic_fetch_and(ptr, arg)
298#define vlAtomicFetchAddExplicit(ptr, arg, order) atomic_fetch_add_explicit(ptr, arg, (memory_order)(order))
309#define vlAtomicFetchSubExplicit(ptr, arg, order) atomic_fetch_sub_explicit(ptr, arg, (memory_order)(order))
320#define vlAtomicFetchOrExplicit(ptr, arg, order) atomic_fetch_or_explicit(ptr, arg, (memory_order)(order))
331#define vlAtomicFetchXorExplicit(ptr, arg, order) atomic_fetch_xor_explicit(ptr, arg, (memory_order)(order))
342#define vlAtomicFetchAndExplicit(ptr, arg, order) atomic_fetch_and_explicit(ptr, arg, (memory_order)(order))
359#define vlAtomicExchange(ptr, desired) atomic_exchange(ptr, desired)
373#define vlAtomicExchangeExplicit(ptr, desired, order) atomic_exchange_explicit(ptr, desired, (memory_order)(order))
395#define vlAtomicCompareExchangeWeak(ptr, expectedPtr, desired) atomic_compare_exchange_weak(ptr, expectedPtr, desired)
416#define vlAtomicCompareExchangeStrong(ptr, expectedPtr, desired) \
417 atomic_compare_exchange_strong(ptr, expectedPtr, desired)
439#define vlAtomicCompareExchangeWeakExplicit(ptr, expectedPtr, desired, trueOrder, falseOrder) \
440 atomic_compare_exchange_weak_explicit(ptr, expectedPtr, desired, (memory_order)(trueOrder), \
441 (memory_order)(falseOrder))
462#define vlAtomicCompareExchangeStrongExplicit(ptr, expectedPtr, desired, trueOrder, falseOrder) \
463 atomic_compare_exchange_strong_explicit(ptr, expectedPtr, desired, (memory_order)(trueOrder), \
464 (memory_order)(falseOrder))
475#define vlAtomicThreadFence(order) atomic_thread_fence((memory_order)(order))
486#define vlAtomicFlagTestAndSet(ptr) atomic_flag_test_and_set(ptr)
496#define vlAtomicFlagClear(ptr) atomic_flag_clear(ptr)
506#define vlAtomicFlagTestAndSetExplicit(ptr, order) atomic_flag_test_and_set_explicit(ptr, (memory_order)(order))
516#define vlAtomicFlagClearExplicit(ptr, order) atomic_flag_clear_explicit(ptr, (memory_order)(order))
530#define vlAtomicInit(ptr, val) atomic_init(ptr, val)
532#undef VL_ATOMIC_TYPEDEF
#define VL_ATOMIC_TYPEDEF(x)
Definition vl_atomic.h:41
vl_memory_order_t
Memory order enumeration. Dictates reordering of memory accesses surrounding and including atomic ope...
Definition vl_atomic.h:114
@ VL_MEMORY_ORDER_RELEASE
Definition vl_atomic.h:143
@ VL_MEMORY_ORDER_ACQUIRE
Definition vl_atomic.h:132
@ VL_MEMORY_ORDER_SEQ_CST
Definition vl_atomic.h:167
@ VL_MEMORY_ORDER_RELAXED
Definition vl_atomic.h:122
@ VL_MEMORY_ORDER_ACQ_REL
Definition vl_atomic.h:156
VL_ISMALL_T vl_ismall_t
Smallest available signed integer type.
Definition vl_numtypes.h:148
VL_UPTR_T vl_uintptr_t
Unsigned integer type suitable for expressing memory addresses.
Definition vl_numtypes.h:163
VL_UINT_T vl_uint_t
Standard unsigned integer type.
Definition vl_numtypes.h:158
VL_BOOL_T vl_bool_t
Definition vl_numtypes.h:191
VL_IPTR_T vl_intptr_t
Signed integer type suitable for expressing memory addresses.
Definition vl_numtypes.h:168
VL_USMALL_T vl_usmall_t
Smallest available unsigned integer type.
Definition vl_numtypes.h:144
VL_ULARGE_T vl_ularge_t
Largest available unsigned integer type.
Definition vl_numtypes.h:136
VL_ILARGE_T vl_ilarge_t
Largest available signed integer type.
Definition vl_numtypes.h:140
VL_INT_T vl_int_t
Standard signed integer type.
Definition vl_numtypes.h:153