diff options
author | Bruce Forstall <brucefo@microsoft.com> | 2017-01-10 22:38:57 -0800 |
---|---|---|
committer | Bruce Forstall <brucefo@microsoft.com> | 2017-01-25 16:25:03 -0800 |
commit | 71075ab95119af411a5d161f68d2eafea07b610d (patch) | |
tree | 26f89ab4392b3e1f4e81bfe3b483015264cae580 | |
parent | 8f4cb1beaa68e74a16492510c86d9b2fec539e60 (diff) | |
download | coreclr-71075ab95119af411a5d161f68d2eafea07b610d.tar.gz coreclr-71075ab95119af411a5d161f68d2eafea07b610d.tar.bz2 coreclr-71075ab95119af411a5d161f68d2eafea07b610d.zip |
Fix non-deterministic AVX2 detection
The caller required ECX to be zero when calling CPUID, but wasn't calling
the getextcpuid() function to cause that to happen.
-rw-r--r-- | src/vm/cgensys.h | 1 | ||||
-rw-r--r-- | src/vm/codeman.cpp | 2 |
2 files changed, 2 insertions, 1 deletions
diff --git a/src/vm/cgensys.h b/src/vm/cgensys.h index 4dd1ee4b4b..d55d15dd7d 100644 --- a/src/vm/cgensys.h +++ b/src/vm/cgensys.h @@ -105,6 +105,7 @@ inline void GetSpecificCpuInfo(CORINFO_CPU * cpuInfo) #if (defined(_TARGET_X86_) || defined(_TARGET_AMD64_)) && !defined(CROSSGEN_COMPILE) extern "C" DWORD __stdcall getcpuid(DWORD arg, unsigned char result[16]); +extern "C" DWORD __stdcall getextcpuid(DWORD arg1, DWORD arg2, unsigned char result[16]); extern "C" DWORD __stdcall xmmYmmStateSupport(); #endif diff --git a/src/vm/codeman.cpp b/src/vm/codeman.cpp index bae1ced30a..8fc851d86b 100644 --- a/src/vm/codeman.cpp +++ b/src/vm/codeman.cpp @@ -1339,7 +1339,7 @@ void EEJitManager::SetCpuInfo() CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_USE_AVX); if (maxCpuId >= 0x07) { - (void) getcpuid(0x07, buffer); + (void) getextcpuid(0, 0x07, buffer); if ((buffer[4] & 0x20) != 0) { CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_USE_AVX2); |