summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorTillmann Karras <tilkax@gmail.com>2014-04-02 01:49:56 +0200
committerTillmann Karras <tilkax@gmail.com>2014-05-01 01:10:00 +0200
commit9de77b7c23252cbedaee993f7c56b2deb0ce2bef (patch)
treee3d80f2523c13405430712e80139f92bcf759cfd /Source/Core
parented762a3edace1782a69d3f15da45872ee69537d1 (diff)
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.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Common/x64FPURoundMode.cpp16
1 files 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
}