Added cpuid compatibility for older MSVC versions

Change-Id: I891bf936e03411ca611620e7cb2eb5081993a346
This commit is contained in:
Yaowu Xu 2013-11-22 16:45:56 -08:00
parent 0a64f943fc
commit 8caeeb886a

View File

@ -71,6 +71,7 @@ typedef enum {
#endif #endif
#else /* end __SUNPRO__ */ #else /* end __SUNPRO__ */
#if ARCH_X86_64 #if ARCH_X86_64
#if defined(_MSC_VER) && _MSC_VER > 1500
void __cpuidex(int CPUInfo[4], int info_type, int ecxvalue); void __cpuidex(int CPUInfo[4], int info_type, int ecxvalue);
#pragma intrinsic(__cpuidex) #pragma intrinsic(__cpuidex)
#define cpuid(func, func2, a, b, c, d) do {\ #define cpuid(func, func2, a, b, c, d) do {\
@ -79,6 +80,15 @@ void __cpuidex(int CPUInfo[4], int info_type, int ecxvalue);
a = regs[0]; b = regs[1]; c = regs[2]; d = regs[3];\ a = regs[0]; b = regs[1]; c = regs[2]; d = regs[3];\
} while(0) } while(0)
#else #else
void __cpuid(int CPUInfo[4], int info_type);
#pragma intrinsic(__cpuid)
#define cpuid(func, func2, a, b, c, d) do {\
int regs[4];\
__cpuid(regs, func); \
a = regs[0]; b = regs[1]; c = regs[2]; d = regs[3];\
} while (0)
#endif
#else
#define cpuid(func, func2, a, b, c, d)\ #define cpuid(func, func2, a, b, c, d)\
__asm mov eax, func\ __asm mov eax, func\
__asm mov ecx, func2\ __asm mov ecx, func2\