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 }