diff --git a/Source/Core/Core/BootManager.cpp b/Source/Core/Core/BootManager.cpp index 7bf601afbf..ee78f0b17f 100644 --- a/Source/Core/Core/BootManager.cpp +++ b/Source/Core/Core/BootManager.cpp @@ -49,7 +49,8 @@ struct ConfigCache { bool valid, bCPUThread, bSkipIdle, bEnableFPRF, bMMU, bDCBZOFF, m_EnableJIT, bDSPThread, bVBeamSpeedHack, bSyncGPU, bFastDiscSpeed, bMergeBlocks, bDSPHLE, bHLE_BS2, bTLBHack, bProgressive; - int iCPUCore, Volume; + CPUBackend iCPUCore; + int Volume; int iWiimoteSource[MAX_BBMOTES]; SIDevices Pads[MAX_SI_CHANNELS]; unsigned int framelimit, frameSkip; @@ -154,7 +155,7 @@ bool BootCore(const std::string& _rFilename) core_section->Get("DSPHLE", &StartUp.bDSPHLE, StartUp.bDSPHLE); core_section->Get("DSPThread", &StartUp.bDSPThread, StartUp.bDSPThread); core_section->Get("GFXBackend", &StartUp.m_strVideoBackend, StartUp.m_strVideoBackend); - core_section->Get("CPUCore", &StartUp.iCPUCore, StartUp.iCPUCore); + core_section->Get("CPUCore", (int*)&StartUp.iCPUCore, StartUp.iCPUCore); core_section->Get("HLE_BS2", &StartUp.bHLE_BS2, StartUp.bHLE_BS2); core_section->Get("ProgressiveScan", &StartUp.bProgressive, StartUp.bProgressive); if (core_section->Get("FrameLimit", &SConfig::GetInstance().m_Framelimit, SConfig::GetInstance().m_Framelimit)) diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp index 727b1b1f91..03ae5c1079 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -479,11 +479,11 @@ void SConfig::LoadCoreSettings(IniFile& ini) core->Get("HLE_BS2", &m_LocalCoreStartupParameter.bHLE_BS2, false); #ifdef _M_X86 - core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 1); + core->Get("CPUCore", (int*)&m_LocalCoreStartupParameter.iCPUCore, CPU_JIT_X64); #elif _M_ARM_32 - core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 3); + core->Get("CPUCore", (int*)&m_LocalCoreStartupParameter.iCPUCore, CPU_JIT_ARM); #else - core->Get("CPUCore", &m_LocalCoreStartupParameter.iCPUCore, 0); + core->Get("CPUCore", (int*)&m_LocalCoreStartupParameter.iCPUCore, CPU_INTERPRETER); #endif core->Get("Fastmem", &m_LocalCoreStartupParameter.bFastmem, true); core->Get("DSPThread", &m_LocalCoreStartupParameter.bDSPThread, false); diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp index 9e3c1ec808..71291312a6 100644 --- a/Source/Core/Core/Core.cpp +++ b/Source/Core/Core/Core.cpp @@ -424,11 +424,16 @@ void EmuThread() CBoot::BootUp(); // Setup our core, but can't use dynarec if we are compare server - if (_CoreParameter.iCPUCore && (!_CoreParameter.bRunCompareServer || - _CoreParameter.bRunCompareClient)) + if (_CoreParameter.iCPUCore != CPU_INTERPRETER && + (!_CoreParameter.bRunCompareServer || + _CoreParameter.bRunCompareClient)) + { PowerPC::SetMode(PowerPC::MODE_JIT); + } else + { PowerPC::SetMode(PowerPC::MODE_INTERPRETER); + } // Update the window again because all stuff is initialized Host_UpdateDisasmDialog(); diff --git a/Source/Core/Core/CoreParameter.cpp b/Source/Core/Core/CoreParameter.cpp index 5a213b5e92..10839f5e26 100644 --- a/Source/Core/Core/CoreParameter.cpp +++ b/Source/Core/Core/CoreParameter.cpp @@ -65,7 +65,7 @@ void SCoreStartupParameter::LoadDefaults() iGDBPort = -1; #endif - iCPUCore = 1; + iCPUCore = CPU_JIT_X64; bCPUThread = false; bSkipIdle = false; bRunCompareServer = false; diff --git a/Source/Core/Core/CoreParameter.h b/Source/Core/Core/CoreParameter.h index 46ec3976fe..adca9de5bc 100644 --- a/Source/Core/Core/CoreParameter.h +++ b/Source/Core/Core/CoreParameter.h @@ -83,6 +83,15 @@ enum Hotkey NUM_HOTKEYS, }; +enum CPUBackend : u8 +{ + CPU_INTERPRETER = 0, + CPU_JIT_X64 = 1, + CPU_JIT_IL_X64 = 2, + CPU_JIT_ARM = 3, + CPU_JIT_IL_ARM = 4, +}; + struct SCoreStartupParameter { void* hInstance; // HINSTANCE but we don't want to include @@ -95,11 +104,7 @@ struct SCoreStartupParameter bool bAutomaticStart; bool bBootToPause; - // 0 = Interpreter - // 1 = Jit - // 2 = JitIL - // 3 = JIT ARM - int iCPUCore; + CPUBackend iCPUCore; // JIT (shared between JIT and JITIL) bool bJITNoBlockCache, bJITBlockLinking; diff --git a/Source/Core/Core/Movie.cpp b/Source/Core/Core/Movie.cpp index 98d8c41e9f..9eb6258d44 100644 --- a/Source/Core/Core/Movie.cpp +++ b/Source/Core/Core/Movie.cpp @@ -61,7 +61,7 @@ u64 g_recordingStartTime; // seconds since 1970 that recording started bool bSaveConfig = false, bSkipIdle = false, bDualCore = false, bProgressive = false, bDSPHLE = false, bFastDiscSpeed = false; bool g_bClearSave = false, bSyncGPU = false, bNetPlay = false; std::string videoBackend = "unknown"; -int iCPUCore = 1; +CPUBackend iCPUCore = CPU_JIT_X64; bool g_bDiscChange = false; std::string g_discChange = ""; std::string author = ""; @@ -356,7 +356,7 @@ bool IsFastDiscSpeed() return bFastDiscSpeed; } -int GetCPUMode() +CPUBackend GetCPUMode() { return iCPUCore; } diff --git a/Source/Core/Core/Movie.h b/Source/Core/Core/Movie.h index c2177e4afa..62dc9bdfff 100644 --- a/Source/Core/Core/Movie.h +++ b/Source/Core/Core/Movie.h @@ -8,7 +8,7 @@ #include "Common/ChunkFile.h" #include "Common/Common.h" - +#include "Core/CoreParameter.h" #include "InputCommon/GCPadStatus.h" namespace WiimoteEmu @@ -99,7 +99,7 @@ struct DTMHeader bool bProgressive; bool bDSPHLE; bool bFastDiscSpeed; - u8 CPUCore; // 0 = interpreter, 1 = JIT, 2 = JITIL + CPUBackend CPUCore; bool bEFBAccessEnable; bool bEFBCopyEnable; bool bCopyEFBToTexture; @@ -144,7 +144,7 @@ bool IsProgressive(); bool IsSkipIdle(); bool IsDSPHLE(); bool IsFastDiscSpeed(); -int GetCPUMode(); +CPUBackend GetCPUMode(); bool IsStartingFromClearSave(); bool IsUsingMemcard(int memcard); bool IsSyncGPU(); diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp index f15837116d..83f9adb08a 100644 --- a/Source/Core/Core/NetPlayClient.cpp +++ b/Source/Core/Core/NetPlayClient.cpp @@ -266,7 +266,7 @@ unsigned int NetPlayClient::OnData(sf::Packet& packet) std::lock_guard lkg(m_crit.game); packet >> m_current_game; packet >> g_NetPlaySettings.m_CPUthread; - packet >> g_NetPlaySettings.m_CPUcore; + packet >> (u8&)g_NetPlaySettings.m_CPUcore; packet >> g_NetPlaySettings.m_DSPEnableJIT; packet >> g_NetPlaySettings.m_DSPHLE; packet >> g_NetPlaySettings.m_WriteToMemcard; diff --git a/Source/Core/Core/NetPlayProto.h b/Source/Core/Core/NetPlayProto.h index 14eb998f68..3a9982b6ec 100644 --- a/Source/Core/Core/NetPlayProto.h +++ b/Source/Core/Core/NetPlayProto.h @@ -6,13 +6,13 @@ #include "Common/Common.h" #include "Common/CommonTypes.h" - +#include "Core/CoreParameter.h" #include "Core/HW/EXI_Device.h" struct NetSettings { bool m_CPUthread; - int m_CPUcore; + CPUBackend m_CPUcore; bool m_DSPHLE; bool m_DSPEnableJIT; bool m_WriteToMemcard; @@ -28,7 +28,7 @@ struct Rpt : public std::vector typedef std::vector NetWiimote; -#define NETPLAY_VERSION "Dolphin NetPlay 2014-01-08" +#define NETPLAY_VERSION "Dolphin NetPlay 2014-06-13" const int NETPLAY_INITIAL_GCTIME = 1272737767; diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp index 7d153a1a00..8658f9714a 100644 --- a/Source/Core/Core/NetPlayServer.cpp +++ b/Source/Core/Core/NetPlayServer.cpp @@ -548,7 +548,7 @@ bool NetPlayServer::StartGame(const std::string &path) spac << (MessageId)NP_MSG_START_GAME; spac << m_current_game; spac << m_settings.m_CPUthread; - spac << m_settings.m_CPUcore; + spac << (u8)m_settings.m_CPUcore; spac << m_settings.m_DSPEnableJIT; spac << m_settings.m_DSPHLE; spac << m_settings.m_WriteToMemcard; diff --git a/Source/Core/Core/PowerPC/PowerPC.cpp b/Source/Core/Core/PowerPC/PowerPC.cpp index 22182104aa..6b03f4bd04 100644 --- a/Source/Core/Core/PowerPC/PowerPC.cpp +++ b/Source/Core/Core/PowerPC/PowerPC.cpp @@ -135,7 +135,7 @@ void Init(int cpu_core) switch (cpu_core) { - case 0: + case CPU_INTERPRETER: { cpu_core_base = interpreter; break; diff --git a/Source/Core/DolphinWX/ConfigMain.cpp b/Source/Core/DolphinWX/ConfigMain.cpp index c74400a73f..47beeb8d0a 100644 --- a/Source/Core/DolphinWX/ConfigMain.cpp +++ b/Source/Core/DolphinWX/ConfigMain.cpp @@ -32,6 +32,7 @@ #include "Core/ConfigManager.h" #include "Core/Core.h" +#include "Core/CoreParameter.h" #include "Core/Movie.h" #include "Core/NetPlayProto.h" #include "Core/HW/EXI.h" @@ -57,17 +58,17 @@ struct CPUCore { - int CPUid; + CPUBackend CPUid; const char *name; }; const CPUCore CPUCores[] = { - {0, wxTRANSLATE("Interpreter (VERY slow)")}, + {CPU_INTERPRETER, wxTRANSLATE("Interpreter (VERY slow)")}, #ifdef _M_ARM - {3, wxTRANSLATE("Arm JIT (experimental)")}, - {4, wxTRANSLATE("Arm JITIL (experimental)")}, + {CPU_JIT_ARM, wxTRANSLATE("Arm JIT (experimental)")}, + {CPU_JIT_IL_ARM, wxTRANSLATE("Arm JITIL (experimental)")}, #else - {1, wxTRANSLATE("JIT Recompiler (recommended)")}, - {2, wxTRANSLATE("JITIL Recompiler (slower, experimental)")}, + {CPU_JIT_X64, wxTRANSLATE("JIT Recompiler (recommended)")}, + {CPU_JIT_IL_X64, wxTRANSLATE("JITIL Recompiler (slower, experimental)")}, #endif }; @@ -907,7 +908,7 @@ void CConfigMain::CoreSettingsChanged(wxCommandEvent& event) SConfig::GetInstance().m_LocalCoreStartupParameter.iCPUCore = CPUCores[CPUEngine->GetSelection()].CPUid; if (main_frame->g_pCodeWindow) main_frame->g_pCodeWindow->GetMenuBar()->Check(IDM_INTERPRETER, - SConfig::GetInstance().m_LocalCoreStartupParameter.iCPUCore?false:true); + SConfig::GetInstance().m_LocalCoreStartupParameter.iCPUCore == CPU_INTERPRETER); break; case ID_NTSCJ: SConfig::GetInstance().m_LocalCoreStartupParameter.bForceNTSCJ = _NTSCJ->IsChecked(); diff --git a/Source/Core/DolphinWX/Debugger/CodeWindow.cpp b/Source/Core/DolphinWX/Debugger/CodeWindow.cpp index b8185a85cc..234f798aa5 100644 --- a/Source/Core/DolphinWX/Debugger/CodeWindow.cpp +++ b/Source/Core/DolphinWX/Debugger/CodeWindow.cpp @@ -369,7 +369,7 @@ void CCodeWindow::CreateMenu(const SCoreStartupParameter& _LocalCoreStartupParam " and stepping to work as explained in the Developer Documentation. But it can be very" " slow, perhaps slower than 1 fps."), wxITEM_CHECK); - interpreter->Check(_LocalCoreStartupParameter.iCPUCore == 0); + interpreter->Check(_LocalCoreStartupParameter.iCPUCore == CPU_INTERPRETER); pCoreMenu->AppendSeparator(); pCoreMenu->Append(IDM_JITBLOCKLINKING, _("&JIT Block Linking off"),