From 9de77b7c23252cbedaee993f7c56b2deb0ce2bef Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Wed, 2 Apr 2014 01:49:56 +0200 Subject: [PATCH] x64FPURoundMode: always set x87 precision Set the x87 precision, even on x64. Since we are using x87 instructions in the JIT now, we can't guarantee that x87 precision will never influence Dolphin on x64. --- Source/Core/Common/x64FPURoundMode.cpp | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/Source/Core/Common/x64FPURoundMode.cpp b/Source/Core/Common/x64FPURoundMode.cpp index 403473ab1a..1dd2fd18f0 100644 --- a/Source/Core/Common/x64FPURoundMode.cpp +++ b/Source/Core/Common/x64FPURoundMode.cpp @@ -34,10 +34,6 @@ namespace FPURoundMode void SetPrecisionMode(PrecisionMode mode) { - #ifdef _M_X86_32 - // sets the floating-point lib to 53-bit - // PowerPC has a 53bit floating pipeline only - // eg: sscanf is very sensitive #ifdef _WIN32 _control87(_PC_53, MCW_PC); #else @@ -47,14 +43,10 @@ namespace FPURoundMode 2 << 8, // 53 bits 3 << 8, // 64 bits }; - unsigned short _mode; - asm ("fstcw %0" : "=m" (_mode)); - _mode = (_mode & ~PRECISION_MASK) | precision_table[mode]; - asm ("fldcw %0" : : "m" (_mode)); - #endif - #else - //x64 doesn't need this - fpu is done with SSE - //but still - set any useful sse options here + unsigned short cw; + asm ("fnstcw %0" : "=m" (cw)); + cw = (cw & ~PRECISION_MASK) | precision_table[mode]; + asm ("fldcw %0" : : "m" (cw)); #endif }