diff options
| author | Tillmann Karras <tilkax@gmail.com> | 2014-04-02 01:49:56 +0200 |
|---|---|---|
| committer | Tillmann Karras <tilkax@gmail.com> | 2014-05-01 01:10:00 +0200 |
| commit | 9de77b7c23252cbedaee993f7c56b2deb0ce2bef (patch) | |
| tree | e3d80f2523c13405430712e80139f92bcf759cfd /Source/Core | |
| parent | ed762a3edace1782a69d3f15da45872ee69537d1 (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.cpp | 16 |
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 } |
