Go to the documentation of this file.
32 #if (defined(AK_CPU_X86_64) || defined(AK_CPU_X86))
40 #define AK_SEC_TO_NANOSEC 1000000000ULL
42 #define AK_THREAD_INIT_CODE(_threadProperties) \
43 if (_threadProperties.dwAffinityMask != AK_THREAD_AFFINITY_DEFAULT) \
46 CPU_ZERO(&affinity); \
47 for (AkUInt32 i = 0; i < 32; ++i) { \
48 if (_threadProperties.dwAffinityMask & ( 1 << i )){\
49 CPU_SET(i, &affinity); \
52 sched_setaffinity(0, sizeof(cpu_set_t), &affinity); \
63 struct timespec clockNow;
64 clock_gettime(CLOCK_MONOTONIC, &clockNow);
76 template<
class destType,
class srcType>
77 inline size_t AkSimpleConvertString( destType* in_pdDest,
const srcType* in_pSrc,
size_t in_MaxSize,
size_t destStrLen(
const destType *),
size_t srcStrLen(
const srcType *) )
80 size_t lenToCopy = srcStrLen(in_pSrc);
82 lenToCopy = (lenToCopy > in_MaxSize-1) ? in_MaxSize-1 : lenToCopy;
83 for(i = 0; i < lenToCopy; i++)
85 in_pdDest[i] = (destType) in_pSrc[i];
87 in_pdDest[lenToCopy] = (destType)0;
92 #define CONVERT_UTF16_TO_CHAR( _astring_, _charstring_ ) \
93 _charstring_ = (char*)AkAlloca( (1 + AKPLATFORM::AkUtf16StrLen((const AkUtf16*)_astring_)) * sizeof(char) ); \
94 AK_UTF16_TO_CHAR( _charstring_, (const AkUtf16*)_astring_, AKPLATFORM::AkUtf16StrLen((const AkUtf16*)_astring_)+1 )
96 #define AK_UTF16_TO_CHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkSimpleConvertString( in_pdDest, in_pSrc, in_MaxSize, strlen, AKPLATFORM::AkUtf16StrLen )
97 #define AK_UTF8_TO_OSCHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkSimpleConvertString( in_pdDest, in_pSrc, in_MaxSize, strlen, strlen )
98 #define AK_UTF16_TO_OSCHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkSimpleConvertString( in_pdDest, in_pSrc, in_MaxSize, strlen, AKPLATFORM::AkUtf16StrLen )
99 #define AK_UTF16_TO_WCHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkSimpleConvertString( in_pdDest, in_pSrc, in_MaxSize, wcslen, AKPLATFORM::AkUtf16StrLen )
100 #define AK_CHAR_TO_UTF16( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkSimpleConvertString( in_pdDest, in_pSrc, in_MaxSize, AKPLATFORM::AkUtf16StrLen, strlen )
101 #define AK_OSCHAR_TO_UTF16( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkSimpleConvertString( in_pdDest, in_pSrc, in_MaxSize, AKPLATFORM::AkUtf16StrLen, strlen )
102 #define AK_WCHAR_TO_UTF16( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkSimpleConvertString( in_pdDest, in_pSrc, in_MaxSize, AKPLATFORM::AkUtf16StrLen, wcslen )
104 #define AK_FILEHANDLE_TO_UINTPTR(_h) ((AkUIntPtr)_h)
105 #define AK_SET_FILEHANDLE_TO_UINTPTR(_h,_u) _h = (AkFileHandle)_u
108 #define AkAlloca( _size_ ) __builtin_alloca( _size_ )
110 #if (defined(AK_CPU_X86_64) || defined(AK_CPU_X86))
112 #if defined(__i386__) && defined(__PIC__)
114 #define __ak_cpuid_count(level, count, a, b, c, d) \
115 __asm__ ("xchg{l}\t{%%}ebx, %k1\n\t" \
117 "xchg{l}\t{%%}ebx, %k1\n\t" \
118 : "=a" (a), "=&r" (b), "=c" (c), "=d" (d) \
119 : "0" (level), "2" (count))
120 #elif defined(__x86_64__) && defined(__PIC__)
122 #define __ak_cpuid_count(level, count, a, b, c, d) \
123 __asm__ ("xchg{q}\t{%%}rbx, %q1\n\t" \
125 "xchg{q}\t{%%}rbx, %q1\n\t" \
126 : "=a" (a), "=&r" (b), "=c" (c), "=d" (d) \
127 : "0" (level), "2" (count))
129 #define __ak_cpuid_count(level, count, a, b, c, d) \
130 __asm__ ("cpuid\n\t" \
131 : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
132 : "0" (level), "2" (count))
136 unsigned int __subleaf,
137 unsigned int *__eax,
unsigned int *__ebx,
138 unsigned int *__ecx,
unsigned int *__edx)
140 unsigned int __max_leaf = __get_cpuid_max(__leaf & 0x80000000, 0);
142 if (__max_leaf == 0 || __max_leaf < __leaf)
152 inline void CPUID(
AkUInt32 in_uLeafOpcode,
AkUInt32 in_uSubLeafOpcode,
unsigned int out_uCPUFeatures[4])
155 &out_uCPUFeatures[0],
156 &out_uCPUFeatures[1],
157 &out_uCPUFeatures[2],
158 &out_uCPUFeatures[3]);
static __inline int __ak_get_cpuid_count(unsigned int __leaf, unsigned int __subleaf, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx)
Platform-dependent helpers.
void CPUID(AkUInt32 in_uLeafOpcode, AkUInt32 in_uSubLeafOpcode, unsigned int out_uCPUFeatures[4])
void PerformanceCounter(AkInt64 *out_piLastTime)
Platform Independent Helper.
int64_t AkInt64
Signed 64-bit integer.
void PerformanceFrequency(AkInt64 *out_piFreq)
Platform Independent Helper.
uint32_t AkUInt32
Unsigned 32-bit integer.
size_t AkSimpleConvertString(destType *in_pdDest, const srcType *in_pSrc, size_t in_MaxSize, size_t destStrLen(const destType *), size_t srcStrLen(const srcType *))
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