From 700c1353866bcc4490d6957a1a6a09ef02ffa9bd Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sat, 10 May 2014 20:21:07 -0700 Subject: [PATCH] Revert "x64FPURoundMode: always set x87 precision" This reverts commit 9de77b7c23252cbedaee993f7c56b2deb0ce2bef. Setting x87 precision control is only supported on x86 platforms (not ARM or x64). --- Source/Core/Common/x64FPURoundMode.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Source/Core/Common/x64FPURoundMode.cpp b/Source/Core/Common/x64FPURoundMode.cpp index 1dd2fd18f0..403473ab1a 100644 --- a/Source/Core/Common/x64FPURoundMode.cpp +++ b/Source/Core/Common/x64FPURoundMode.cpp @@ -34,6 +34,10 @@ 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 @@ -43,10 +47,14 @@ namespace FPURoundMode 2 << 8, // 53 bits 3 << 8, // 64 bits }; - unsigned short cw; - asm ("fnstcw %0" : "=m" (cw)); - cw = (cw & ~PRECISION_MASK) | precision_table[mode]; - asm ("fldcw %0" : : "m" (cw)); + 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 #endif }