Go to the documentation of this file.
32 #ifndef _AK_TOOLS_COMMON_AKPLATFORMFUNCS_H
33 #define _AK_TOOLS_COMMON_AKPLATFORMFUNCS_H
44 #elif defined (AK_XBOX)
45 #include <AK/Tools/XboxOne/AkPlatformFuncs.h>
47 #elif defined (AK_APPLE)
49 #include <AK/Tools/POSIX/AkPlatformFuncs.h>
51 #elif defined( AK_ANDROID ) || defined ( AK_LINUX_AOSP )
54 #elif defined ( AK_HARMONY )
57 #elif defined (AK_PS4)
60 #elif defined (AK_PS5)
63 #elif defined (AK_EMSCRIPTEN)
64 #include <AK/Tools/Emscripten/AkPlatformFuncs.h>
66 #elif defined (AK_LINUX)
69 #include <AK/Tools/GGP/AkPlatformFuncs.h>
72 #include <AK/Tools/POSIX/AkPlatformFuncs.h>
74 #elif defined (AK_QNX)
75 #include <AK/Tools/QNX/AkPlatformFuncs.h>
76 #include <AK/Tools/POSIX/AkPlatformFuncs.h>
82 #error AkPlatformFuncs.h: Undefined platform
85 #ifndef AkPrefetchZero
86 #define AkPrefetchZero(___Dest, ___Size)
89 #ifndef AkPrefetchZeroAligned
90 #define AkPrefetchZeroAligned(___Dest, ___Size)
93 #ifndef AkZeroMemAligned
94 #define AkZeroMemAligned(___Dest, ___Size) AKPLATFORM::AkMemSet(___Dest, 0, ___Size);
96 #ifndef AkZeroMemLarge
97 #define AkZeroMemLarge(___Dest, ___Size) AKPLATFORM::AkMemSet(___Dest, 0, ___Size);
99 #ifndef AkZeroMemSmall
100 #define AkZeroMemSmall(___Dest, ___Size) AKPLATFORM::AkMemSet(___Dest, 0, ___Size);
105 #if __has_builtin( __builtin_alloca_with_align )
106 #define AkAllocaSIMD( _size_ ) __builtin_alloca_with_align( _size_, 128 )
109 #define AkAllocaSIMD( _size_ ) (void*)( ( ( uintptr_t )AkAlloca( _size_ + 16 ) + 0xF ) & ~0xF )
112 #define AkAllocaSIMD( _size_ ) AkAlloca( _size_ )
116 #ifndef AK_THREAD_INIT_CODE
117 #define AK_THREAD_INIT_CODE(_threadProperties)
128 while( in_uWord ){ ++num; in_uWord &= in_uWord-1; }
137 in_uValue |= in_uValue >> 1;
138 in_uValue |= in_uValue >> 2;
139 in_uValue |= in_uValue >> 4;
140 in_uValue |= in_uValue >> 8;
141 in_uValue |= in_uValue >> 16;
148 return ( x << r ) | ( x >> ( 32 - r ) );
153 return ( x << r ) | ( x >> ( 64 - r ) );
167 #if defined _MSC_VER && defined AK_CPU_X86_64
170 unsigned long ret = 0;
171 _BitScanForward64(&ret, in_bits);
174 #elif __clang__ || defined __GNUG__
177 return __builtin_ctzll(in_bits);
182 unsigned long ret = 0;
185 while ((in_bits & 1ULL) == 0)
198 unsigned long ret = 0;
199 _BitScanForward(&ret, in_bits);
203 #elif __clang__ || defined __GNUG__
206 return __builtin_ctzl(in_bits);
211 unsigned long ret = 0;
214 while ((in_bits & 1ULL) == 0)
225 #if !defined(AK_LIMITEDSPINFORZERO)
244 if (currentTime > endSpinTime)
276 if (currentTime > endSpinTime)
311 #ifndef AK_PERF_RECORDING_RESET
312 #define AK_PERF_RECORDING_RESET()
314 #ifndef AK_PERF_RECORDING_START
315 #define AK_PERF_RECORDING_START( __StorageName__, __uExecutionCountStart__, __uExecutionCountStop__ )
317 #ifndef AK_PERF_RECORDING_STOP
318 #define AK_PERF_RECORDING_STOP( __StorageName__, __uExecutionCountStart__, __uExecutionCountStop__ )
321 #endif // _AK_TOOLS_COMMON_AKPLATFORMFUNCS_H
int nPriority
Thread priority.
Platform-dependent helpers.
AkForceInline AkUInt32 AkBitScanForward64(unsigned long long in_bits)
AkForceInline AkUInt32 ROTL32(AkUInt32 x, AkUInt32 r)
int32_t AkInt32
Signed 32-bit integer.
void PerformanceCounter(AkInt64 *out_piLastTime)
Platform Independent Helper.
AkForceInline AkUInt32 GetNextPowerOfTwo(AkUInt32 in_uValue)
AkForceInline void AkGetDefaultThreadProperties(AkThreadProperties &out_threadProperties)
Platform Independent Helper.
void AkLimitedSpinForZero(AkAtomic32 *in_pVal)
bool AkLimitedSpinToAcquire(AkAtomic32 *in_pVal, AkInt32 in_proposed, AkInt32 in_expected)
void AkGetDefaultHighPriorityThreadProperties(AkThreadProperties &out_threadProperties)
int64_t AkInt64
Signed 64-bit integer.
AkForceInline AkUInt32 GetNumNonZeroBits(AkUInt32 in_uWord)
uint64_t AkUInt64
Unsigned 64-bit integer.
AkForceInline AkUInt64 ROTL64(AkUInt64 x, AkUInt64 r)
void AkSpinToAcquire(AkAtomic32 *in_pVal, AkInt32 in_proposed, AkInt32 in_expected)
void AkSpinWaitForZero(AkAtomic32 *in_pVal)
uint32_t AkUInt32
Unsigned 32-bit integer.
AkForceInline AkUInt32 AkBitScanForward(unsigned long in_bits)
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