Go to the documentation of this file.
35 #define AkThreadYield() Sleep(1);
47 #define AK_ATOMIC_FENCE_FULL_BARRIER() __dmb( _ARM_BARRIER_ISH )
48 #elif defined( _M_ARM64 )
49 #define AK_ATOMIC_FENCE_FULL_BARRIER() __dmb( _ARM64_BARRIER_ISH )
51 #define AK_ATOMIC_FENCE_FULL_BARRIER() MemoryBarrier();
54 #if defined( _M_ARM ) || defined( _M_ARM64 )
63 __forceinline
long AkAtomicAdd32(
AkAtomic32* pDest,
long value ) {
return InterlockedExchangeAdd( pDest, value ) + value; }
64 __forceinline
long AkAtomicSub32(
AkAtomic32* pDest,
long value ) {
return InterlockedExchangeAdd( pDest, -value ) - value; }
67 __forceinline
int AkAtomicCas32(
AkAtomic32* pDest,
long proposed,
long expected ) {
return InterlockedCompareExchange( pDest, proposed, expected ) == expected ? 1 : 0; }
70 #if defined( _M_ARM ) || defined( _M_ARM64 )
83 __forceinline
long long AkAtomicAdd64(
AkAtomic64* pDest,
long long value ) {
return InterlockedExchangeAdd64( pDest, value ) + value; }
84 __forceinline
long long AkAtomicSub64(
AkAtomic64* pDest,
long long value ) {
return InterlockedExchangeAdd64( pDest, -value ) - value; }
85 __forceinline
long long AkAtomicAnd64(
AkAtomic64* pDest,
long long value ) {
return InterlockedAnd64(pDest, value) & value; }
86 __forceinline
long long AkAtomicOr64(
AkAtomic64* pDest,
long long value ) {
return InterlockedOr64(pDest, value) | value; }
87 __forceinline
int AkAtomicCas64(
AkAtomic64* pDest,
long long proposed,
long long expected ) {
return InterlockedCompareExchange64( pDest, proposed, expected ) == expected ? 1 : 0; }
89 #if defined( _M_ARM ) || defined( _M_ARM64 )
96 __forceinline
void AkAtomicStorePtr(
AkAtomicPtr* pDest,
void* value ) { InterlockedExchangePointer( (
volatile PVOID* )pDest, value ); }
97 __forceinline
void*
AkAtomicExchangePtr(
AkAtomicPtr* pDest,
void* value ) {
return InterlockedExchangePointer( (
volatile PVOID* )pDest, value ); }
98 __forceinline
int AkAtomicCasPtr(
AkAtomicPtr* pDest,
void* proposed,
void* expected ) {
return InterlockedCompareExchangePointer( (
volatile PVOID* )pDest, proposed, expected ) == expected ? 1 : 0; }
102 __forceinline
int AkAtomicCasPtr(
AkAtomicPtr* pDest,
void* proposed,
void* expected) {
return InterlockedCompareExchangePointer( (
void** )pDest, proposed, expected ) == expected ? 1 : 0; }
105 #if defined(_MSC_VER)
108 #if defined(_M_IX86) || defined(_M_X64)
110 #elif defined( _M_ARM ) || defined( _M_ARM64 )
113 #error Unsupported platform for AkSpinHint
Tell us about your project. We're here to help.
Register your project and we'll help you get started with no strings attached!
Get started with Wwise