diff options
| author | magumagu <magumagu9@gmail.com> | 2014-06-14 21:22:34 -0700 |
|---|---|---|
| committer | magumagu <magumagu9@gmail.com> | 2014-06-15 03:51:51 -0700 |
| commit | d905cbfd5d05b7c22ae6a28fd27208f0aa53e3d2 (patch) | |
| tree | e5ae63cc850c47b58ef356cb00c131929926474c /Source/Core/Common/x64CPUDetect.cpp | |
| parent | d7736ac7144ae5a16f2a60fd02523040ee8e0ea3 (diff) | |
Don't set DAZ on x86 in non-IEEE mode.
I have no idea why we were using it in the first place; it doesn't match
the behavior of PPC NI flag.
Diffstat (limited to 'Source/Core/Common/x64CPUDetect.cpp')
| -rw-r--r-- | Source/Core/Common/x64CPUDetect.cpp | 29 |
1 files changed, 3 insertions, 26 deletions
diff --git a/Source/Core/Common/x64CPUDetect.cpp b/Source/Core/Common/x64CPUDetect.cpp index e64cd9d1ee..8340344481 100644 --- a/Source/Core/Common/x64CPUDetect.cpp +++ b/Source/Core/Common/x64CPUDetect.cpp @@ -162,32 +162,10 @@ void CPUInfo::Detect() if ((cpu_id[2] >> 22) & 1) bMOVBE = true; if ((cpu_id[2] >> 25) & 1) bAES = true; - // To check DAZ support, we first need to check FXSAVE support. if ((cpu_id[3] >> 24) & 1) { // We can use FXSAVE. bFXSR = true; - - GC_ALIGNED16(u8 fx_state[512]); - memset(fx_state, 0, sizeof(fx_state)); -#ifdef _WIN32 -#if _M_X86_32 - _fxsave(fx_state); -#elif _M_X86_64 - _fxsave64(fx_state); -#endif -#else - __asm__("fxsave %0" : "=m" (fx_state)); -#endif - - // lowest byte of MXCSR_MASK - if ((fx_state[0x1C] >> 6) & 1) - { - // On x86, the FTZ field (supported since SSE1) only flushes denormal _outputs_ to zero, - // now that we checked DAZ support (flushing denormal _inputs_ to zero), - // we can set our generic flag. - bFlushToZero = true; - } } // AVX support requires 3 separate checks: @@ -204,6 +182,9 @@ void CPUInfo::Detect() } } } + + bFlushToZero = bSSE; + if (max_ex_fn >= 0x80000004) { // Extract brand string __cpuid(cpu_id, 0x80000002); @@ -269,7 +250,3 @@ std::string CPUInfo::Summarize() return sum; } -bool CPUInfo::IsUnsafe() -{ - return !bFlushToZero; -} |
