intrinsics: stop defining _xgetbv/_XCR_XFEATURE_ENABLED_MASK, which are reserved

This commit is contained in:
booto 2018-05-08 08:42:38 +08:00
parent 1ec3a4db6c
commit 823fdda30c
1 changed files with 16 additions and 5 deletions

View File

@ -37,15 +37,26 @@ static inline void __cpuid(int info[4], int function_id)
return __cpuidex(info, function_id, 0); return __cpuidex(info, function_id, 0);
} }
#define _XCR_XFEATURE_ENABLED_MASK 0 #endif // ifndef _WIN32
static u64 _xgetbv(u32 index)
#ifdef _WIN32
static u64 xgetbv(u32 index)
{
return _xgetbv(index);
}
constexpr u32 XCR_XFEATURE_ENABLED_MASK = _XCR_XFEATURE_ENABLED_MASK;
#else
static u64 xgetbv(u32 index)
{ {
u32 eax, edx; u32 eax, edx;
__asm__ __volatile__("xgetbv" : "=a"(eax), "=d"(edx) : "c"(index)); __asm__ __volatile__("xgetbv" : "=a"(eax), "=d"(edx) : "c"(index));
return ((u64)edx << 32) | eax; return ((u64)edx << 32) | eax;
} }
constexpr u32 XCR_XFEATURE_ENABLED_MASK = 0;
#endif // ifndef _WIN32 #endif // ifdef _WIN32
CPUInfo cpu_info; CPUInfo cpu_info;
@ -139,7 +150,7 @@ void CPUInfo::Detect()
// - XGETBV result has the XCR bit set. // - XGETBV result has the XCR bit set.
if (((cpu_id[2] >> 28) & 1) && ((cpu_id[2] >> 27) & 1)) if (((cpu_id[2] >> 28) & 1) && ((cpu_id[2] >> 27) & 1))
{ {
if ((_xgetbv(_XCR_XFEATURE_ENABLED_MASK) & 0x6) == 0x6) if ((xgetbv(XCR_XFEATURE_ENABLED_MASK) & 0x6) == 0x6)
{ {
bAVX = true; bAVX = true;
if ((cpu_id[2] >> 12) & 1) if ((cpu_id[2] >> 12) & 1)