aboutsummaryrefslogtreecommitdiff
path: root/test/source/TestAtomicAsm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/source/TestAtomicAsm.cpp')
-rw-r--r--test/source/TestAtomicAsm.cpp4921
1 files changed, 0 insertions, 4921 deletions
diff --git a/test/source/TestAtomicAsm.cpp b/test/source/TestAtomicAsm.cpp
deleted file mode 100644
index d4db04e..0000000
--- a/test/source/TestAtomicAsm.cpp
+++ /dev/null
@@ -1,4921 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Copyright (c) Electronic Arts Inc. All rights reserved.
-/////////////////////////////////////////////////////////////////////////////
-
-
-#include "EASTLTest.h"
-
-#include <EASTL/atomic.h>
-
-#include <cstddef>
-
-
-struct UserType128
-{
- uint32_t a,b,c,d;
-
- friend bool operator==(const UserType128& a, const UserType128& b)
- {
- return (a.a == b.a) && (a.b == b.b) && (a.c == b.c) && (a.d == b.d);
- }
-};
-
-
-/**
- * There is no nice way to verify the emitted asm for each of the given operations.
- * This test file is meant to put each operation into its own function so its easy
- * to verify in a disassembler for manual inspection.
- */
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32StoreRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- atomic.store(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomicU32StoreRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- atomic.store(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomicU32StoreSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- atomic.store(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomicU32Store()
-{
- eastl::atomic<uint32_t> atomic;
-
- atomic.store(1);
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomicU32StoreOrders()
-{
- TestAtomicU32StoreRelaxed();
-
- TestAtomicU32StoreRelease();
-
- TestAtomicU32StoreSeqCst();
-
- TestAtomicU32Store();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64StoreRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- atomic.store(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomicU64StoreRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- atomic.store(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomicU64StoreSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- atomic.store(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomicU64Store()
-{
- eastl::atomic<uint64_t> atomic;
-
- atomic.store(1);
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomicU64StoreOrders()
-{
- TestAtomicU64StoreRelaxed();
-
- TestAtomicU64StoreRelease();
-
- TestAtomicU64StoreSeqCst();
-
- TestAtomicU64Store();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT)
-
-EA_NO_INLINE static void TestAtomic128StoreRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- atomic.store(UserType128{1, 1, 1, 1}, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomic128StoreRelease()
-{
- eastl::atomic<UserType128> atomic;
-
- atomic.store(UserType128{1, 1, 1, 1}, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomic128StoreSeqCst()
-{
- eastl::atomic<UserType128> atomic;
-
- atomic.store(UserType128{1, 1, 1, 1}, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomic128Store()
-{
- eastl::atomic<UserType128> atomic;
-
- atomic.store(UserType128{1, 1, 1, 1});
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-EA_NO_INLINE static void TestAtomic128StoreOrders()
-{
- TestAtomic128StoreRelaxed();
-
- TestAtomic128StoreRelease();
-
- TestAtomic128StoreSeqCst();
-
- TestAtomic128Store();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32LoadRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t load = atomic.load(eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomicU32LoadAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t load = atomic.load(eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomicU32LoadSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t load = atomic.load(eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomicU32Load()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t load = atomic.load();
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomicU32LoadOrders()
-{
- TestAtomicU32LoadRelaxed();
-
- TestAtomicU32LoadAcquire();
-
- TestAtomicU32LoadSeqCst();
-
- TestAtomicU32Load();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64LoadRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t load = atomic.load(eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomicU64LoadAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t load = atomic.load(eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomicU64LoadSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t load = atomic.load(eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomicU64Load()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t load = atomic.load();
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomicU64LoadOrders()
-{
- TestAtomicU64LoadRelaxed();
-
- TestAtomicU64LoadAcquire();
-
- TestAtomicU64LoadSeqCst();
-
- TestAtomicU64Load();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT)
-
-EA_NO_INLINE static void TestAtomic128LoadRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 load = atomic.load(eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomic128LoadAcquire()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 load = atomic.load(eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomic128LoadSeqCst()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 load = atomic.load(eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomic128Load()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 load = atomic.load();
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-EA_NO_INLINE static void TestAtomic128LoadOrders()
-{
- TestAtomic128LoadRelaxed();
-
- TestAtomic128LoadAcquire();
-
- TestAtomic128LoadSeqCst();
-
- TestAtomic128Load();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32ExchangeRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t exchange = atomic.exchange(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU32ExchangeAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t exchange = atomic.exchange(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU32ExchangeRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t exchange = atomic.exchange(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU32ExchangeAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t exchange = atomic.exchange(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU32ExchangeSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t exchange = atomic.exchange(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU32Exchange()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t exchange = atomic.exchange(1);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU32ExchangeOrders()
-{
- TestAtomicU32ExchangeRelaxed();
-
- TestAtomicU32ExchangeAcquire();
-
- TestAtomicU32ExchangeRelease();
-
- TestAtomicU32ExchangeAcqRel();
-
- TestAtomicU32ExchangeSeqCst();
-
- TestAtomicU32Exchange();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64ExchangeRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t exchange = atomic.exchange(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU64ExchangeAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t exchange = atomic.exchange(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU64ExchangeRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t exchange = atomic.exchange(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU64ExchangeAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t exchange = atomic.exchange(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU64ExchangeSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t exchange = atomic.exchange(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU64Exchange()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t exchange = atomic.exchange(1);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomicU64ExchangeOrders()
-{
- TestAtomicU64ExchangeRelaxed();
-
- TestAtomicU64ExchangeAcquire();
-
- TestAtomicU64ExchangeRelease();
-
- TestAtomicU64ExchangeAcqRel();
-
- TestAtomicU64ExchangeSeqCst();
-
- TestAtomicU64Exchange();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT)
-
-EA_NO_INLINE static void TestAtomic128ExchangeRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 exchange = atomic.exchange(UserType128{1, 1, 1, 1}, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomic128ExchangeAcquire()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 exchange = atomic.exchange(UserType128{1, 1, 1, 1}, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomic128ExchangeRelease()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 exchange = atomic.exchange(UserType128{1, 1, 1, 1}, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomic128ExchangeAcqRel()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 exchange = atomic.exchange(UserType128{1, 1, 1, 1}, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomic128ExchangeSeqCst()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 exchange = atomic.exchange(UserType128{1, 1, 1, 1}, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomic128Exchange()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 exchange = atomic.exchange(UserType128{1, 1, 1, 1});
-
- eastl::compiler_barrier_data_dependency(exchange);
-}
-
-EA_NO_INLINE static void TestAtomic128ExchangeOrders()
-{
- TestAtomic128ExchangeRelaxed();
-
- TestAtomic128ExchangeAcquire();
-
- TestAtomic128ExchangeRelease();
-
- TestAtomic128ExchangeAcqRel();
-
- TestAtomic128ExchangeSeqCst();
-
- TestAtomic128Exchange();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32OperatorT()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t load = atomic;
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64OperatorT()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t load = atomic;
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT)
-
-EA_NO_INLINE static void TestAtomic128OperatorT()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 load = atomic;
-
- eastl::compiler_barrier_data_dependency(load);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32OperatorEqual()
-{
- eastl::atomic<uint32_t> atomic;
-
- atomic = 1;
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64OperatorEqual()
-{
- eastl::atomic<uint64_t> atomic;
-
- atomic = 1;
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT)
-
-EA_NO_INLINE static void TestAtomic128OperatorEqual()
-{
- eastl::atomic<UserType128> atomic;
-
- atomic = UserType128{1, 1, 1, 1};
-
- eastl::compiler_barrier_data_dependency(atomic);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongRelaxedRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_relaxed, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongAcquireRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acquire, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongAcquireAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acquire, eastl::memory_order_acquire);
-
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongReleaseRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_release, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongAcqRelRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acq_rel, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongAcqRelAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acq_rel, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongSeqCstRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongSeqCstAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongSeqCstSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrong()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeStrongOrders()
-{
- TestAtomicU32CompareExchangeStrongRelaxedRelaxed();
-
- TestAtomicU32CompareExchangeStrongAcquireRelaxed();
-
- TestAtomicU32CompareExchangeStrongAcquireAcquire();
-
- TestAtomicU32CompareExchangeStrongReleaseRelaxed();
-
- TestAtomicU32CompareExchangeStrongAcqRelRelaxed();
-
- TestAtomicU32CompareExchangeStrongAcqRelAcquire();
-
- TestAtomicU32CompareExchangeStrongSeqCstRelaxed();
-
- TestAtomicU32CompareExchangeStrongSeqCstAcquire();
-
- TestAtomicU32CompareExchangeStrongSeqCstSeqCst();
-
- TestAtomicU32CompareExchangeStrongRelaxed();
-
- TestAtomicU32CompareExchangeStrongAcquire();
-
- TestAtomicU32CompareExchangeStrongRelease();
-
- TestAtomicU32CompareExchangeStrongAcqRel();
-
- TestAtomicU32CompareExchangeStrongSeqCst();
-
- TestAtomicU32CompareExchangeStrong();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongRelaxedRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_relaxed, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongAcquireRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acquire, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongAcquireAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acquire, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongReleaseRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_release, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongAcqRelRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acq_rel, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongAcqRelAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acq_rel, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongSeqCstRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongSeqCstAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongSeqCstSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrong()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_strong(expected, 1);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeStrongOrders()
-{
- TestAtomicU64CompareExchangeStrongRelaxedRelaxed();
-
- TestAtomicU64CompareExchangeStrongAcquireRelaxed();
-
- TestAtomicU64CompareExchangeStrongAcquireAcquire();
-
- TestAtomicU64CompareExchangeStrongReleaseRelaxed();
-
- TestAtomicU64CompareExchangeStrongAcqRelRelaxed();
-
- TestAtomicU64CompareExchangeStrongAcqRelAcquire();
-
- TestAtomicU64CompareExchangeStrongSeqCstRelaxed();
-
- TestAtomicU64CompareExchangeStrongSeqCstAcquire();
-
- TestAtomicU64CompareExchangeStrongSeqCstSeqCst();
-
- TestAtomicU64CompareExchangeStrongRelaxed();
-
- TestAtomicU64CompareExchangeStrongAcquire();
-
- TestAtomicU64CompareExchangeStrongRelease();
-
- TestAtomicU64CompareExchangeStrongAcqRel();
-
- TestAtomicU64CompareExchangeStrongSeqCst();
-
- TestAtomicU64CompareExchangeStrong();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT)
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongRelaxedRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_relaxed, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongAcquireRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acquire, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongAcquireAcquire()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acquire, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongReleaseRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_release, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongAcqRelRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acq_rel, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongAcqRelAcquire()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acq_rel, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongSeqCstRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_seq_cst, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongSeqCstAcquire()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_seq_cst, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongSeqCstSeqCst()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_seq_cst, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongAcquire()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongRelease()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongAcqRel()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongSeqCst()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrong()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_strong(expected, UserType128{1, 1, 1, 1});
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeStrongOrders()
-{
- TestAtomic128CompareExchangeStrongRelaxedRelaxed();
-
- TestAtomic128CompareExchangeStrongAcquireRelaxed();
-
- TestAtomic128CompareExchangeStrongAcquireAcquire();
-
- TestAtomic128CompareExchangeStrongReleaseRelaxed();
-
- TestAtomic128CompareExchangeStrongAcqRelRelaxed();
-
- TestAtomic128CompareExchangeStrongAcqRelAcquire();
-
- TestAtomic128CompareExchangeStrongSeqCstRelaxed();
-
- TestAtomic128CompareExchangeStrongSeqCstAcquire();
-
- TestAtomic128CompareExchangeStrongSeqCstSeqCst();
-
- TestAtomic128CompareExchangeStrongRelaxed();
-
- TestAtomic128CompareExchangeStrongAcquire();
-
- TestAtomic128CompareExchangeStrongRelease();
-
- TestAtomic128CompareExchangeStrongAcqRel();
-
- TestAtomic128CompareExchangeStrongSeqCst();
-
- TestAtomic128CompareExchangeStrong();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakRelaxedRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_relaxed, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakAcquireRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acquire, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakAcquireAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acquire, eastl::memory_order_acquire);
-
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakReleaseRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_release, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakAcqRelRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acq_rel, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakAcqRelAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acq_rel, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakSeqCstRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakSeqCstAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakSeqCstSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeak()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU32CompareExchangeWeakOrders()
-{
- TestAtomicU32CompareExchangeWeakRelaxedRelaxed();
-
- TestAtomicU32CompareExchangeWeakAcquireRelaxed();
-
- TestAtomicU32CompareExchangeWeakAcquireAcquire();
-
- TestAtomicU32CompareExchangeWeakReleaseRelaxed();
-
- TestAtomicU32CompareExchangeWeakAcqRelRelaxed();
-
- TestAtomicU32CompareExchangeWeakAcqRelAcquire();
-
- TestAtomicU32CompareExchangeWeakSeqCstRelaxed();
-
- TestAtomicU32CompareExchangeWeakSeqCstAcquire();
-
- TestAtomicU32CompareExchangeWeakSeqCstSeqCst();
-
- TestAtomicU32CompareExchangeWeakRelaxed();
-
- TestAtomicU32CompareExchangeWeakAcquire();
-
- TestAtomicU32CompareExchangeWeakRelease();
-
- TestAtomicU32CompareExchangeWeakAcqRel();
-
- TestAtomicU32CompareExchangeWeakSeqCst();
-
- TestAtomicU32CompareExchangeWeak();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakRelaxedRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_relaxed, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakAcquireRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acquire, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakAcquireAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acquire, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakReleaseRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_release, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakAcqRelRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acq_rel, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakAcqRelAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acq_rel, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakSeqCstRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakSeqCstAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakSeqCstSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_seq_cst, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeak()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t expected = 0;
- bool ret = atomic.compare_exchange_weak(expected, 1);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomicU64CompareExchangeWeakOrders()
-{
- TestAtomicU64CompareExchangeWeakRelaxedRelaxed();
-
- TestAtomicU64CompareExchangeWeakAcquireRelaxed();
-
- TestAtomicU64CompareExchangeWeakAcquireAcquire();
-
- TestAtomicU64CompareExchangeWeakReleaseRelaxed();
-
- TestAtomicU64CompareExchangeWeakAcqRelRelaxed();
-
- TestAtomicU64CompareExchangeWeakAcqRelAcquire();
-
- TestAtomicU64CompareExchangeWeakSeqCstRelaxed();
-
- TestAtomicU64CompareExchangeWeakSeqCstAcquire();
-
- TestAtomicU64CompareExchangeWeakSeqCstSeqCst();
-
- TestAtomicU64CompareExchangeWeakRelaxed();
-
- TestAtomicU64CompareExchangeWeakAcquire();
-
- TestAtomicU64CompareExchangeWeakRelease();
-
- TestAtomicU64CompareExchangeWeakAcqRel();
-
- TestAtomicU64CompareExchangeWeakSeqCst();
-
- TestAtomicU64CompareExchangeWeak();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT)
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakRelaxedRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_relaxed, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakAcquireRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acquire, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakAcquireAcquire()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acquire, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakReleaseRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_release, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakAcqRelRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acq_rel, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakAcqRelAcquire()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acq_rel, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakSeqCstRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_seq_cst, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakSeqCstAcquire()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_seq_cst, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakSeqCstSeqCst()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_seq_cst, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakRelaxed()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakAcquire()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakRelease()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakAcqRel()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakSeqCst()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1}, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeak()
-{
- eastl::atomic<UserType128> atomic;
-
- UserType128 expected = UserType128{0, 0, 0, 0};
- bool ret = atomic.compare_exchange_weak(expected, UserType128{1, 1, 1, 1});
-
- eastl::compiler_barrier_data_dependency(ret);
-}
-
-EA_NO_INLINE static void TestAtomic128CompareExchangeWeakOrders()
-{
- TestAtomic128CompareExchangeWeakRelaxedRelaxed();
-
- TestAtomic128CompareExchangeWeakAcquireRelaxed();
-
- TestAtomic128CompareExchangeWeakAcquireAcquire();
-
- TestAtomic128CompareExchangeWeakReleaseRelaxed();
-
- TestAtomic128CompareExchangeWeakAcqRelRelaxed();
-
- TestAtomic128CompareExchangeWeakAcqRelAcquire();
-
- TestAtomic128CompareExchangeWeakSeqCstRelaxed();
-
- TestAtomic128CompareExchangeWeakSeqCstAcquire();
-
- TestAtomic128CompareExchangeWeakSeqCstSeqCst();
-
- TestAtomic128CompareExchangeWeakRelaxed();
-
- TestAtomic128CompareExchangeWeakAcquire();
-
- TestAtomic128CompareExchangeWeakRelease();
-
- TestAtomic128CompareExchangeWeakAcqRel();
-
- TestAtomic128CompareExchangeWeakSeqCst();
-
- TestAtomic128CompareExchangeWeak();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32FetchAddRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_add(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAddAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_add(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAddRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_add(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAddAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_add(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAddSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_add(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAdd()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_add(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAddOrders()
-{
- TestAtomicU32FetchAddRelaxed();
-
- TestAtomicU32FetchAddAcquire();
-
- TestAtomicU32FetchAddRelease();
-
- TestAtomicU32FetchAddAcqRel();
-
- TestAtomicU32FetchAddSeqCst();
-
- TestAtomicU32FetchAdd();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64FetchAddRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_add(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAddAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_add(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAddRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_add(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAddAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_add(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAddSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_add(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAdd()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_add(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAddOrders()
-{
- TestAtomicU64FetchAddRelaxed();
-
- TestAtomicU64FetchAddAcquire();
-
- TestAtomicU64FetchAddRelease();
-
- TestAtomicU64FetchAddAcqRel();
-
- TestAtomicU64FetchAddSeqCst();
-
- TestAtomicU64FetchAdd();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128FetchAddRelaxed()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_add(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAddAcquire()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_add(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAddRelease()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_add(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAddAcqRel()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_add(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAddSeqCst()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_add(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAdd()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_add(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAddOrders()
-{
- TestAtomic128FetchAddRelaxed();
-
- TestAtomic128FetchAddAcquire();
-
- TestAtomic128FetchAddRelease();
-
- TestAtomic128FetchAddAcqRel();
-
- TestAtomic128FetchAddSeqCst();
-
- TestAtomic128FetchAdd();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32AddFetchRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.add_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AddFetchAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.add_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AddFetchRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.add_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AddFetchAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.add_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AddFetchSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.add_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AddFetch()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.add_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AddFetchOrders()
-{
- TestAtomicU32AddFetchRelaxed();
-
- TestAtomicU32AddFetchAcquire();
-
- TestAtomicU32AddFetchRelease();
-
- TestAtomicU32AddFetchAcqRel();
-
- TestAtomicU32AddFetchSeqCst();
-
- TestAtomicU32AddFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64AddFetchRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.add_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AddFetchAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.add_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AddFetchRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.add_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AddFetchAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.add_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AddFetchSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.add_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AddFetch()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.add_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AddFetchOrders()
-{
- TestAtomicU64AddFetchRelaxed();
-
- TestAtomicU64AddFetchAcquire();
-
- TestAtomicU64AddFetchRelease();
-
- TestAtomicU64AddFetchAcqRel();
-
- TestAtomicU64AddFetchSeqCst();
-
- TestAtomicU64AddFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128AddFetchRelaxed()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.add_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AddFetchAcquire()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.add_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AddFetchRelease()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.add_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AddFetchAcqRel()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.add_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AddFetchSeqCst()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.add_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AddFetch()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.add_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AddFetchOrders()
-{
- TestAtomic128AddFetchRelaxed();
-
- TestAtomic128AddFetchAcquire();
-
- TestAtomic128AddFetchRelease();
-
- TestAtomic128AddFetchAcqRel();
-
- TestAtomic128AddFetchSeqCst();
-
- TestAtomic128AddFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32FetchSubRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_sub(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchSubAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_sub(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchSubRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_sub(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchSubAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_sub(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchSubSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_sub(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchSub()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_sub(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchSubOrders()
-{
- TestAtomicU32FetchSubRelaxed();
-
- TestAtomicU32FetchSubAcquire();
-
- TestAtomicU32FetchSubRelease();
-
- TestAtomicU32FetchSubAcqRel();
-
- TestAtomicU32FetchSubSeqCst();
-
- TestAtomicU32FetchSub();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64FetchSubRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_sub(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchSubAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_sub(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchSubRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_sub(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchSubAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_sub(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchSubSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_sub(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchSub()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_sub(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchSubOrders()
-{
- TestAtomicU64FetchSubRelaxed();
-
- TestAtomicU64FetchSubAcquire();
-
- TestAtomicU64FetchSubRelease();
-
- TestAtomicU64FetchSubAcqRel();
-
- TestAtomicU64FetchSubSeqCst();
-
- TestAtomicU64FetchSub();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128FetchSubRelaxed()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_sub(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchSubAcquire()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_sub(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchSubRelease()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_sub(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchSubAcqRel()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_sub(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchSubSeqCst()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_sub(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchSub()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_sub(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchSubOrders()
-{
- TestAtomic128FetchSubRelaxed();
-
- TestAtomic128FetchSubAcquire();
-
- TestAtomic128FetchSubRelease();
-
- TestAtomic128FetchSubAcqRel();
-
- TestAtomic128FetchSubSeqCst();
-
- TestAtomic128FetchSub();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32SubFetchRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.sub_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32SubFetchAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.sub_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32SubFetchRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.sub_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32SubFetchAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.sub_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32SubFetchSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.sub_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32SubFetch()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.sub_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32SubFetchOrders()
-{
- TestAtomicU32SubFetchRelaxed();
-
- TestAtomicU32SubFetchAcquire();
-
- TestAtomicU32SubFetchRelease();
-
- TestAtomicU32SubFetchAcqRel();
-
- TestAtomicU32SubFetchSeqCst();
-
- TestAtomicU32SubFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64SubFetchRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.sub_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64SubFetchAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.sub_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64SubFetchRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.sub_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64SubFetchAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.sub_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64SubFetchSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.sub_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64SubFetch()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.sub_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64SubFetchOrders()
-{
- TestAtomicU64SubFetchRelaxed();
-
- TestAtomicU64SubFetchAcquire();
-
- TestAtomicU64SubFetchRelease();
-
- TestAtomicU64SubFetchAcqRel();
-
- TestAtomicU64SubFetchSeqCst();
-
- TestAtomicU64SubFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128SubFetchRelaxed()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.sub_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128SubFetchAcquire()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.sub_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128SubFetchRelease()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.sub_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128SubFetchAcqRel()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.sub_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128SubFetchSeqCst()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.sub_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128SubFetch()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.sub_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128SubFetchOrders()
-{
- TestAtomic128SubFetchRelaxed();
-
- TestAtomic128SubFetchAcquire();
-
- TestAtomic128SubFetchRelease();
-
- TestAtomic128SubFetchAcqRel();
-
- TestAtomic128SubFetchSeqCst();
-
- TestAtomic128SubFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32FetchAndRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_and(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAndAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_and(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAndRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_and(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAndAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_and(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAndSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_and(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAnd()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_and(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchAndOrders()
-{
- TestAtomicU32FetchAndRelaxed();
-
- TestAtomicU32FetchAndAcquire();
-
- TestAtomicU32FetchAndRelease();
-
- TestAtomicU32FetchAndAcqRel();
-
- TestAtomicU32FetchAndSeqCst();
-
- TestAtomicU32FetchAnd();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64FetchAndRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_and(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAndAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_and(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAndRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_and(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAndAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_and(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAndSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_and(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAnd()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_and(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchAndOrders()
-{
- TestAtomicU64FetchAndRelaxed();
-
- TestAtomicU64FetchAndAcquire();
-
- TestAtomicU64FetchAndRelease();
-
- TestAtomicU64FetchAndAcqRel();
-
- TestAtomicU64FetchAndSeqCst();
-
- TestAtomicU64FetchAnd();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128FetchAndRelaxed()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_and(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAndAcquire()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_and(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAndRelease()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_and(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAndAcqRel()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_and(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAndSeqCst()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_and(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAnd()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_and(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchAndOrders()
-{
- TestAtomic128FetchAndRelaxed();
-
- TestAtomic128FetchAndAcquire();
-
- TestAtomic128FetchAndRelease();
-
- TestAtomic128FetchAndAcqRel();
-
- TestAtomic128FetchAndSeqCst();
-
- TestAtomic128FetchAnd();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32AndFetchRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.and_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AndFetchAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.and_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AndFetchRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.and_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AndFetchAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.and_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AndFetchSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.and_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AndFetch()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.and_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32AndFetchOrders()
-{
- TestAtomicU32AndFetchRelaxed();
-
- TestAtomicU32AndFetchAcquire();
-
- TestAtomicU32AndFetchRelease();
-
- TestAtomicU32AndFetchAcqRel();
-
- TestAtomicU32AndFetchSeqCst();
-
- TestAtomicU32AndFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64AndFetchRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.and_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AndFetchAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.and_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AndFetchRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.and_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AndFetchAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.and_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AndFetchSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.and_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AndFetch()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.and_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64AndFetchOrders()
-{
- TestAtomicU64AndFetchRelaxed();
-
- TestAtomicU64AndFetchAcquire();
-
- TestAtomicU64AndFetchRelease();
-
- TestAtomicU64AndFetchAcqRel();
-
- TestAtomicU64AndFetchSeqCst();
-
- TestAtomicU64AndFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128AndFetchRelaxed()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.and_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AndFetchAcquire()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.and_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AndFetchRelease()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.and_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AndFetchAcqRel()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.and_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AndFetchSeqCst()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.and_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AndFetch()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.and_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128AndFetchOrders()
-{
- TestAtomic128AndFetchRelaxed();
-
- TestAtomic128AndFetchAcquire();
-
- TestAtomic128AndFetchRelease();
-
- TestAtomic128AndFetchAcqRel();
-
- TestAtomic128AndFetchSeqCst();
-
- TestAtomic128AndFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32OrFetchRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.or_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32OrFetchAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.or_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32OrFetchRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.or_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32OrFetchAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.or_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32OrFetchSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.or_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32OrFetch()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.or_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32OrFetchOrders()
-{
- TestAtomicU32OrFetchRelaxed();
-
- TestAtomicU32OrFetchAcquire();
-
- TestAtomicU32OrFetchRelease();
-
- TestAtomicU32OrFetchAcqRel();
-
- TestAtomicU32OrFetchSeqCst();
-
- TestAtomicU32OrFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64OrFetchRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.or_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64OrFetchAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.or_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64OrFetchRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.or_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64OrFetchAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.or_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64OrFetchSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.or_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64OrFetch()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.or_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64OrFetchOrders()
-{
- TestAtomicU64OrFetchRelaxed();
-
- TestAtomicU64OrFetchAcquire();
-
- TestAtomicU64OrFetchRelease();
-
- TestAtomicU64OrFetchAcqRel();
-
- TestAtomicU64OrFetchSeqCst();
-
- TestAtomicU64OrFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128OrFetchRelaxed()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.or_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128OrFetchAcquire()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.or_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128OrFetchRelease()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.or_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128OrFetchAcqRel()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.or_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128OrFetchSeqCst()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.or_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128OrFetch()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.or_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128OrFetchOrders()
-{
- TestAtomic128OrFetchRelaxed();
-
- TestAtomic128OrFetchAcquire();
-
- TestAtomic128OrFetchRelease();
-
- TestAtomic128OrFetchAcqRel();
-
- TestAtomic128OrFetchSeqCst();
-
- TestAtomic128OrFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32FetchOrRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_or(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchOrAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_or(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchOrRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_or(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchOrAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_or(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchOrSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_or(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchOr()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_or(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchOrOrders()
-{
- TestAtomicU32FetchOrRelaxed();
-
- TestAtomicU32FetchOrAcquire();
-
- TestAtomicU32FetchOrRelease();
-
- TestAtomicU32FetchOrAcqRel();
-
- TestAtomicU32FetchOrSeqCst();
-
- TestAtomicU32FetchOr();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64FetchOrRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_or(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchOrAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_or(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchOrRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_or(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchOrAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_or(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchOrSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_or(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchOr()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_or(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchOrOrders()
-{
- TestAtomicU64FetchOrRelaxed();
-
- TestAtomicU64FetchOrAcquire();
-
- TestAtomicU64FetchOrRelease();
-
- TestAtomicU64FetchOrAcqRel();
-
- TestAtomicU64FetchOrSeqCst();
-
- TestAtomicU64FetchOr();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128FetchOrRelaxed()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_or(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchOrAcquire()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_or(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchOrRelease()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_or(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchOrAcqRel()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_or(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchOrSeqCst()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_or(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchOr()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_or(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchOrOrders()
-{
- TestAtomic128FetchOrRelaxed();
-
- TestAtomic128FetchOrAcquire();
-
- TestAtomic128FetchOrRelease();
-
- TestAtomic128FetchOrAcqRel();
-
- TestAtomic128FetchOrSeqCst();
-
- TestAtomic128FetchOr();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32FetchXorRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_xor(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchXorAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_xor(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchXorRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_xor(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchXorAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_xor(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchXorSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_xor(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchXor()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.fetch_xor(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32FetchXorOrders()
-{
- TestAtomicU32FetchXorRelaxed();
-
- TestAtomicU32FetchXorAcquire();
-
- TestAtomicU32FetchXorRelease();
-
- TestAtomicU32FetchXorAcqRel();
-
- TestAtomicU32FetchXorSeqCst();
-
- TestAtomicU32FetchXor();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64FetchXorRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_xor(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchXorAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_xor(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchXorRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_xor(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchXorAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_xor(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchXorSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_add(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchXor()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.fetch_xor(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64FetchXorOrders()
-{
- TestAtomicU64FetchXorRelaxed();
-
- TestAtomicU64FetchXorAcquire();
-
- TestAtomicU64FetchXorRelease();
-
- TestAtomicU64FetchXorAcqRel();
-
- TestAtomicU64FetchXorSeqCst();
-
- TestAtomicU64FetchXor();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128FetchXorRelaxed()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_xor(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchXorAcquire()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_xor(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchXorRelease()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_xor(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchXorAcqRel()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_xor(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchXorSeqCst()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_xor(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchXor()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.fetch_xor(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128FetchXorOrders()
-{
- TestAtomic128FetchXorRelaxed();
-
- TestAtomic128FetchXorAcquire();
-
- TestAtomic128FetchXorRelease();
-
- TestAtomic128FetchXorAcqRel();
-
- TestAtomic128FetchXorSeqCst();
-
- TestAtomic128FetchXor();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32XorFetchRelaxed()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.xor_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32XorFetchAcquire()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.xor_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32XorFetchRelease()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.xor_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32XorFetchAcqRel()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.xor_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32XorFetchSeqCst()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.xor_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32XorFetch()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic.xor_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU32XorFetchOrders()
-{
- TestAtomicU32XorFetchRelaxed();
-
- TestAtomicU32XorFetchAcquire();
-
- TestAtomicU32XorFetchRelease();
-
- TestAtomicU32XorFetchAcqRel();
-
- TestAtomicU32XorFetchSeqCst();
-
- TestAtomicU32XorFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64XorFetchRelaxed()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.xor_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64XorFetchAcquire()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.xor_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64XorFetchRelease()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.xor_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64XorFetchAcqRel()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.xor_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64XorFetchSeqCst()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.xor_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64XorFetch()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic.xor_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomicU64XorFetchOrders()
-{
- TestAtomicU64XorFetchRelaxed();
-
- TestAtomicU64XorFetchAcquire();
-
- TestAtomicU64XorFetchRelease();
-
- TestAtomicU64XorFetchAcqRel();
-
- TestAtomicU64XorFetchSeqCst();
-
- TestAtomicU64XorFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128XorFetchRelaxed()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.xor_fetch(1, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128XorFetchAcquire()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.xor_fetch(1, eastl::memory_order_acquire);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128XorFetchRelease()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.xor_fetch(1, eastl::memory_order_release);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128XorFetchAcqRel()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.xor_fetch(1, eastl::memory_order_acq_rel);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128XorFetchSeqCst()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.xor_fetch(1, eastl::memory_order_seq_cst);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128XorFetch()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic.xor_fetch(1);
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-EA_NO_INLINE static void TestAtomic128XorFetchOrders()
-{
- TestAtomic128XorFetchRelaxed();
-
- TestAtomic128XorFetchAcquire();
-
- TestAtomic128XorFetchRelease();
-
- TestAtomic128XorFetchAcqRel();
-
- TestAtomic128XorFetchSeqCst();
-
- TestAtomic128XorFetch();
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32OperatorPlusPlus()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic++;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64OperatorPlusPlus()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic++;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128OperatorPlusPlus()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic++;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32PlusPlusOperator()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = ++atomic;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64PlusPlusOperator()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = ++atomic;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128PlusPlusOperator()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = ++atomic;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32OperatorMinusMinus()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic--;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64OperatorMinusMinus()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic--;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128OperatorMinusMinus()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic--;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32MinusMinusOperator()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = --atomic;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64MinusMinusOperator()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = --atomic;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128MinusMinusOperator()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = --atomic;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32OperatorPlusAssignment()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic += 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64OperatorPlusAssignment()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic += 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128OperatorPlusAssignment()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic += 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32OperatorMinusAssignment()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic -= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64OperatorMinusAssignment()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic -= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128OperatorMinusAssignment()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic -= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32OperatorAndAssignment()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic &= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64OperatorAndAssignment()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic &= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128OperatorAndAssignment()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic &= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32OperatorOrAssignment()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic |= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64OperatorOrAssignment()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic |= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128OperatorOrAssignment()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic |= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomicU32OperatorXorAssignment()
-{
- eastl::atomic<uint32_t> atomic;
-
- uint32_t val = atomic ^= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_64BIT)
-
-EA_NO_INLINE static void TestAtomicU64OperatorXorAssignment()
-{
- eastl::atomic<uint64_t> atomic;
-
- uint64_t val = atomic ^= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
-
-EA_NO_INLINE static void TestAtomic128OperatorXorAssignment()
-{
- eastl::atomic<__uint128_t> atomic;
-
- __uint128_t val = atomic ^= 1;
-
- eastl::compiler_barrier_data_dependency(val);
-}
-
-#endif
-
-EA_NO_INLINE static void TestAtomicSignalFenceRelaxed()
-{
- eastl::atomic_signal_fence(eastl::memory_order_relaxed);
-}
-
-EA_NO_INLINE static void TestAtomicSignalFenceAcquire()
-{
- eastl::atomic_signal_fence(eastl::memory_order_acquire);
-}
-
-EA_NO_INLINE static void TestAtomicSignalFenceRelease()
-{
- eastl::atomic_signal_fence(eastl::memory_order_release);
-}
-
-EA_NO_INLINE static void TestAtomicSignalFenceAcqRel()
-{
- eastl::atomic_signal_fence(eastl::memory_order_acq_rel);
-}
-
-EA_NO_INLINE static void TestAtomicSignalFenceSeqCst()
-{
- eastl::atomic_signal_fence(eastl::memory_order_seq_cst);
-}
-
-EA_NO_INLINE static void TestAtomicThreadFenceRelaxed()
-{
- eastl::atomic_thread_fence(eastl::memory_order_relaxed);
-}
-
-EA_NO_INLINE static void TestAtomicThreadFenceAcquire()
-{
- eastl::atomic_thread_fence(eastl::memory_order_acquire);
-}
-
-EA_NO_INLINE static void TestAtomicThreadFenceRelease()
-{
- eastl::atomic_thread_fence(eastl::memory_order_release);
-}
-
-EA_NO_INLINE static void TestAtomicThreadFenceAcqRel()
-{
- eastl::atomic_thread_fence(eastl::memory_order_acq_rel);
-}
-
-EA_NO_INLINE static void TestAtomicThreadFenceSeqCst()
-{
- eastl::atomic_thread_fence(eastl::memory_order_seq_cst);
-}
-
-EA_NO_INLINE static void TestAtomicPointerReadDepends()
-{
- eastl::atomic<void*> atomic;
-
- void* p = atomic.load(eastl::memory_order_read_depends);
-
- eastl::compiler_barrier_data_dependency(p);
-}
-
-struct ReadDependsStruct
-{
- int a;
- int b;
-};
-
-eastl::atomic<ReadDependsStruct*> gAtomicPtr;
-
-EA_NO_INLINE int TestAtomicReadDependsStruct()
-{
- ReadDependsStruct* p = gAtomicPtr.load(eastl::memory_order_read_depends);
-
- int a = p->a;
- int b = p->b;
-
- return a + b;
-}
-
-EA_NO_INLINE static void TestCompilerBarrierDataDependency()
-{
- {
- UserType128 t{4, 5, 7, 8};
-
- eastl::compiler_barrier_data_dependency(t);
- }
-
- {
- void* p = (void*)0xdeadbeef;
-
- eastl::compiler_barrier_data_dependency(p);
- }
-
- {
- bool b = false;
-
- eastl::compiler_barrier_data_dependency(b);
- }
-}
-
-struct ReadDependsIntrusive
-{
- int a;
- int b;
- struct ReadDependsIntrusive* next;
- int c;
- int d;
-};
-
-eastl::atomic<ReadDependsIntrusive**> gListHead;
-
-EA_NO_INLINE static int TestAtomicReadDependsIntrusive()
-{
- ReadDependsIntrusive** intrusivePtr = gListHead.load(eastl::memory_order_read_depends);
- ReadDependsIntrusive* ptr = ((ReadDependsIntrusive*)(((char*)intrusivePtr) - offsetof(ReadDependsIntrusive, next)));
-
- int a = ptr->a;
- int b = ptr->b;
- int c = ptr->c;
- int d = ptr->d;
-
- return a + b + c + d;
-}
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
-EA_NO_INLINE static void TestAtomic32LoadStoreSameAddressSeqCst()
-{
- eastl::atomic<uint32_t> atomic{0};
-
- uint32_t ret1 = atomic.load(eastl::memory_order_relaxed);
-
- atomic.store(4, eastl::memory_order_relaxed);
-
- uint32_t ret2 = atomic.load(eastl::memory_order_relaxed);
-
- uint32_t ret3 = atomic.load(eastl::memory_order_relaxed);
-
- atomic.store(5, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret1);
- eastl::compiler_barrier_data_dependency(ret2);
- eastl::compiler_barrier_data_dependency(ret3);
-}
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT)
-
-EA_NO_INLINE static void TestAtomic128LoadStoreSameAddressSeqCst()
-{
- eastl::atomic<UserType128> atomic{UserType128{0, 0, 0, 0}};
-
- UserType128 ret1 = atomic.load(eastl::memory_order_relaxed);
-
- atomic.store(UserType128{1, 0, 2, 4}, eastl::memory_order_relaxed);
-
- UserType128 ret2 = atomic.load(eastl::memory_order_relaxed);
-
- UserType128 ret3 = atomic.load(eastl::memory_order_relaxed);
-
- atomic.store(UserType128{1, 1, 2, 4}, eastl::memory_order_relaxed);
-
- eastl::compiler_barrier_data_dependency(ret1);
- eastl::compiler_barrier_data_dependency(ret2);
- eastl::compiler_barrier_data_dependency(ret3);
-}
-
-#endif
-
-int TestAtomicAsm()
-{
- int nErrorCount = 0;
-
- // Stores
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32StoreOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64StoreOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT)
- TestAtomic128StoreOrders();
- #endif
- }
-
- // Loads
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32LoadOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64LoadOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT)
- TestAtomic128LoadOrders();
- #endif
- }
-
- // exchange
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32ExchangeOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64ExchangeOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT)
- TestAtomic128ExchangeOrders();
- #endif
- }
-
- // operator T
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32OperatorT();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64OperatorT();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT)
- TestAtomic128OperatorT();
- #endif
- }
-
- // operator=
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32OperatorEqual();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64OperatorEqual();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT)
- TestAtomic128OperatorEqual();
- #endif
- }
-
- // compare_exchange_weak
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32CompareExchangeWeakOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64CompareExchangeWeakOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT)
- TestAtomic128CompareExchangeWeakOrders();
- #endif
- }
-
- // compare_exchange_strong
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32CompareExchangeStrongOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64CompareExchangeStrongOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT)
- TestAtomic128CompareExchangeStrongOrders();
- #endif
- }
-
- // fetch_add
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32FetchAddOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64FetchAddOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128FetchAddOrders();
- #endif
- }
-
- // add_fetch
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32AddFetchOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64AddFetchOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128AddFetchOrders();
- #endif
- }
-
- // fetch_sub
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32FetchSubOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64FetchSubOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128FetchSubOrders();
- #endif
- }
-
- // sub_fetch
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32SubFetchOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64SubFetchOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128SubFetchOrders();
- #endif
- }
-
- // fetch_and
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32FetchAndOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64FetchAndOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128FetchAndOrders();
- #endif
- }
-
- // and_fetch
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32AndFetchOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64AndFetchOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128AndFetchOrders();
- #endif
- }
-
- // fetch_or
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32FetchOrOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64FetchOrOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128FetchOrOrders();
- #endif
- }
-
- // or_fetch
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32OrFetchOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64OrFetchOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128OrFetchOrders();
- #endif
- }
-
- // fetch_xor
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32FetchXorOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64FetchXorOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128FetchXorOrders();
- #endif
- }
-
- // xor_fetch
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32XorFetchOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64XorFetchOrders();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128XorFetchOrders();
- #endif
- }
-
- // operator++/++operator
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32OperatorPlusPlus();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64OperatorPlusPlus();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128OperatorPlusPlus();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32PlusPlusOperator();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64PlusPlusOperator();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128PlusPlusOperator();
- #endif
- }
-
- // operator--/--operator
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32OperatorMinusMinus();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64OperatorMinusMinus();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128OperatorMinusMinus();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32MinusMinusOperator();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64MinusMinusOperator();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128MinusMinusOperator();
- #endif
- }
-
- // operator+=
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32OperatorPlusAssignment();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64OperatorPlusAssignment();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128OperatorPlusAssignment();
- #endif
- }
-
- // operator-=
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32OperatorMinusAssignment();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64OperatorMinusAssignment();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128OperatorMinusAssignment();
- #endif
- }
-
- // operator&=
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32OperatorAndAssignment();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64OperatorAndAssignment();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128OperatorAndAssignment();
- #endif
- }
-
- // operator|=
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32OperatorOrAssignment();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64OperatorOrAssignment();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128OperatorOrAssignment();
- #endif
- }
-
- // operator^=
- {
- #if defined(EASTL_ATOMIC_HAS_32BIT)
- TestAtomicU32OperatorXorAssignment();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_64BIT)
- TestAtomicU64OperatorXorAssignment();
- #endif
-
- #if defined(EASTL_ATOMIC_HAS_128BIT) && (defined(EA_COMPILER_GNUC) || defined(EA_COMPILER_CLANG))
- TestAtomic128OperatorXorAssignment();
- #endif
- }
-
- // atomic_signal_fence
- {
- TestAtomicSignalFenceRelaxed();
-
- TestAtomicSignalFenceAcquire();
-
- TestAtomicSignalFenceRelease();
-
- TestAtomicSignalFenceAcqRel();
-
- TestAtomicSignalFenceSeqCst();
- }
-
- // atomic_thread_fence
- {
- TestAtomicThreadFenceRelaxed();
-
- TestAtomicThreadFenceAcquire();
-
- TestAtomicThreadFenceRelease();
-
- TestAtomicThreadFenceAcqRel();
-
- TestAtomicThreadFenceSeqCst();
- }
-
- // atomic pointer read depends
- {
- TestAtomicPointerReadDepends();
- }
-
- // atomic pointer read depends
- {
- ReadDependsStruct rds {3, 2};
-
- gAtomicPtr.store(&rds, eastl::memory_order_release);
-
- int ret = TestAtomicReadDependsStruct();
- eastl::compiler_barrier_data_dependency(ret);
- }
-
- {
- ReadDependsIntrusive rdi {3, 2, &rdi, 1, 0};
-
- gListHead.store(&(rdi.next), eastl::memory_order_release);
-
- int ret = TestAtomicReadDependsIntrusive();
- eastl::compiler_barrier_data_dependency(ret);
- }
-
- {
- TestCompilerBarrierDataDependency();
- }
-
-#if defined(EASTL_ATOMIC_HAS_32BIT)
-
- TestAtomic32LoadStoreSameAddressSeqCst();
-
-#endif
-
-#if defined(EASTL_ATOMIC_HAS_128BIT)
-
- TestAtomic128LoadStoreSameAddressSeqCst();
-
-#endif
-
- return nErrorCount;
-}