Compile with /fp:precise instead of /fp:fast in release mode on Windows

/fp:fast was introducing FP precision problems, and mixing it with some
/fp:precise code caused strange game behaviors, DSI exceptions and freezes.

This commit should fix most of the issues introduced by 3.0-73 (r95517a97).

Thanks to hatarumoroboshi@hotmail.com for tracking a lot of these Win32 bugs.

Fixes issue 4906.
Fixes issue 5138.
Probably fixes (not tested) issue 5067.
This commit is contained in:
Pierre Bourdon 2012-03-21 22:43:44 +01:00
parent 6202714efd
commit 70b6c4280f
2 changed files with 2 additions and 10 deletions

View File

@ -42,10 +42,6 @@ using namespace MathUtil;
void UpdateSSEState();
#ifdef _MSC_VER
#pragma float_control(precise, on, push)
#endif
// Extremely rare - actually, never seen.
// Star Wars : Rogue Leader spams that at some point :|
void Interpreter::Helper_UpdateCR1(double _fValue)
@ -518,8 +514,4 @@ void Interpreter::fsqrtx(UGeckoInstruction _inst)
rPS0(_inst.FD) = sqrt(b);
UpdateFPRF(rPS0(_inst.FD));
if (_inst.Rc) Helper_UpdateCR1(rPS0(_inst.FD));
}
#ifdef _MSC_VER
#pragma float_control(pop)
#endif
}

View File

@ -19,7 +19,7 @@
<FunctionLevelLinking>false</FunctionLevelLinking>
<PreprocessorDefinitions>_SECURE_SCL=0;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
<FloatingPointModel>Fast</FloatingPointModel>
<FloatingPointModel>Precise</FloatingPointModel>
</ClCompile>
<Link>
<OptimizeReferences>true</OptimizeReferences>