Jit64: optionally accurate NaNs

When AccurateNaNs is enabled, NaNs are handled accurately by checking
for NaN results and choosing the correct input NaN or replacing x86's
generated -QNaN with +QNaN.
This commit is contained in:
Tillmann Karras
2015-06-07 14:38:09 +02:00
parent 881f6db2ab
commit aec38466d9
7 changed files with 183 additions and 42 deletions

View File

@ -47,7 +47,7 @@ namespace BootManager
// Apply fire liberally
struct ConfigCache
{
bool valid, bCPUThread, bSkipIdle, bSyncGPUOnSkipIdleHack, bFPRF, bMMU, bDCBZOFF, m_EnableJIT, bDSPThread,
bool valid, bCPUThread, bSkipIdle, bSyncGPUOnSkipIdleHack, bFPRF, bAccurateNaNs, bMMU, bDCBZOFF, m_EnableJIT, bDSPThread,
bSyncGPU, bFastDiscSpeed, bDSPHLE, bHLE_BS2, bProgressive;
int iCPUCore, Volume;
int iWiimoteSource[MAX_BBMOTES];
@ -106,6 +106,7 @@ bool BootCore(const std::string& _rFilename)
config_cache.bSyncGPUOnSkipIdleHack = StartUp.bSyncGPUOnSkipIdleHack;
config_cache.iCPUCore = StartUp.iCPUCore;
config_cache.bFPRF = StartUp.bFPRF;
config_cache.bAccurateNaNs = StartUp.bAccurateNaNs;
config_cache.bMMU = StartUp.bMMU;
config_cache.bDCBZOFF = StartUp.bDCBZOFF;
config_cache.bSyncGPU = StartUp.bSyncGPU;
@ -146,6 +147,7 @@ bool BootCore(const std::string& _rFilename)
core_section->Get("SkipIdle", &StartUp.bSkipIdle, StartUp.bSkipIdle);
core_section->Get("SyncOnSkipIdle", &StartUp.bSyncGPUOnSkipIdleHack, StartUp.bSyncGPUOnSkipIdleHack);
core_section->Get("FPRF", &StartUp.bFPRF, StartUp.bFPRF);
core_section->Get("AccurateNaNs", &StartUp.bAccurateNaNs, StartUp.bAccurateNaNs);
core_section->Get("MMU", &StartUp.bMMU, StartUp.bMMU);
core_section->Get("DCBZ", &StartUp.bDCBZOFF, StartUp.bDCBZOFF);
core_section->Get("SyncGPU", &StartUp.bSyncGPU, StartUp.bSyncGPU);
@ -273,6 +275,7 @@ void Stop()
StartUp.bSyncGPUOnSkipIdleHack = config_cache.bSyncGPUOnSkipIdleHack;
StartUp.iCPUCore = config_cache.iCPUCore;
StartUp.bFPRF = config_cache.bFPRF;
StartUp.bAccurateNaNs = config_cache.bAccurateNaNs;
StartUp.bMMU = config_cache.bMMU;
StartUp.bDCBZOFF = config_cache.bDCBZOFF;
StartUp.bSyncGPU = config_cache.bSyncGPU;