diff options
| author | memberTwo.mb2 <memberTwo.mb2@gmail.com> | 2008-09-16 20:02:59 +0000 |
|---|---|---|
| committer | memberTwo.mb2 <memberTwo.mb2@gmail.com> | 2008-09-16 20:02:59 +0000 |
| commit | e6a12b553b08bd97d553dc4a9bbb5486a76d3fe6 (patch) | |
| tree | 02c1e727236989413e1078850c0764817a5ca34f /Source | |
| parent | 9323ec5df6038689d68329dc97b0fd99afd67f4d (diff) | |
Idle skipping in DC added (speedup). "Idle skipping" option in menu and ini
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@544 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/Core/Src/CoreParameter.cpp | 1 | ||||
| -rw-r--r-- | Source/Core/Core/Src/CoreParameter.h | 1 | ||||
| -rw-r--r-- | Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp | 23 | ||||
| -rw-r--r-- | Source/Core/Core/Src/PowerPC/PowerPC.cpp | 5 | ||||
| -rw-r--r-- | Source/Core/Core/Src/PowerPC/PowerPC.h | 1 | ||||
| -rw-r--r-- | Source/Core/DolphinWX/Src/BootManager.cpp | 1 | ||||
| -rw-r--r-- | Source/Core/DolphinWX/Src/Config.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/DolphinWX/Src/Frame.cpp | 8 | ||||
| -rw-r--r-- | Source/Core/DolphinWX/Src/Frame.h | 1 | ||||
| -rw-r--r-- | Source/Core/DolphinWX/Src/Globals.h | 1 |
10 files changed, 36 insertions, 8 deletions
diff --git a/Source/Core/Core/Src/CoreParameter.cpp b/Source/Core/Core/Src/CoreParameter.cpp index 61bd110cc0..e22eda26d3 100644 --- a/Source/Core/Core/Src/CoreParameter.cpp +++ b/Source/Core/Core/Src/CoreParameter.cpp @@ -32,6 +32,7 @@ void SCoreStartupParameter::LoadDefaults() bEnableDebugging = false;
bUseJIT = false;
bUseDualCore = false;
+ bSkipIdle = false;
bRunCompareServer = false;
bLockThreads = true;
bWii = false;
diff --git a/Source/Core/Core/Src/CoreParameter.h b/Source/Core/Core/Src/CoreParameter.h index d0eda4e2d7..04eaff8965 100644 --- a/Source/Core/Core/Src/CoreParameter.h +++ b/Source/Core/Core/Src/CoreParameter.h @@ -37,6 +37,7 @@ struct SCoreStartupParameter bool bEnableDebugging;
bool bUseJIT;
bool bUseDualCore;
+ bool bSkipIdle;
bool bNTSC;
bool bHLEBios;
bool bUseFastMem;
diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp index 5ef1afbbc3..112126d180 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp @@ -80,20 +80,27 @@ namespace Jit64 // TODO(ector): Make it dynamically enable/disable idle skipping where appropriate
// Will give nice boost to dual core mode
+ // (mb2): I agree,
+ // IMHO those Idles should be always skipped and replaced by a more controlable "native" Idle methode
+ // ... maybe the throttle one already do that :p
// if (CommandProcessor::AllowIdleSkipping() && PixelEngine::AllowIdleSkipping())
- if (!Core::GetStartupParameter().bUseDualCore &&
+ if (Core::GetStartupParameter().bSkipIdle &&
inst.OPCD == 32 &&
(inst.hex & 0xFFFF0000) == 0x800D0000 &&
Memory::ReadUnchecked_U32(js.compilerPC + 4) == 0x28000000 &&
Memory::ReadUnchecked_U32(js.compilerPC + 8) == 0x4182fff8)
{
- gpr.Flush(FLUSH_ALL);
- fpr.Flush(FLUSH_ALL);
- ABI_CallFunctionC((void *)&PowerPC::OnIdle, PowerPC::ppcState.gpr[a] + (s32)(s16)inst.SIMM_16);
- MOV(32, M(&PowerPC::ppcState.pc), Imm32(js.compilerPC + 12));
- JMP(Asm::testExceptions, true);
- js.compilerPC += 8;
- return;
+
+ gpr.Flush(FLUSH_ALL);
+ fpr.Flush(FLUSH_ALL);
+ if (Core::GetStartupParameter().bUseDualCore)
+ CALL(&PowerPC::OnIdleDC);
+ else
+ ABI_CallFunctionC((void *)&PowerPC::OnIdle, PowerPC::ppcState.gpr[a] + (s32)(s16)inst.SIMM_16);
+ MOV(32, M(&PowerPC::ppcState.pc), Imm32(js.compilerPC + 12));
+ JMP(Asm::testExceptions, true);
+ js.compilerPC += 8;
+ return;
}
s32 offset = (s32)(s16)inst.SIMM_16;
diff --git a/Source/Core/Core/Src/PowerPC/PowerPC.cpp b/Source/Core/Core/Src/PowerPC/PowerPC.cpp index 31d3c46c91..7058f4ec17 100644 --- a/Source/Core/Core/Src/PowerPC/PowerPC.cpp +++ b/Source/Core/Core/Src/PowerPC/PowerPC.cpp @@ -290,5 +290,10 @@ namespace PowerPC CoreTiming::Idle();
}
}
+ //DualCore OnIdle
+ void OnIdleDC(void)
+ {
+ CoreTiming::Idle();
+ }
}
diff --git a/Source/Core/Core/Src/PowerPC/PowerPC.h b/Source/Core/Core/Src/PowerPC/PowerPC.h index 8b841e6cac..531edd320a 100644 --- a/Source/Core/Core/Src/PowerPC/PowerPC.h +++ b/Source/Core/Core/Src/PowerPC/PowerPC.h @@ -92,6 +92,7 @@ namespace PowerPC void Stop();
void OnIdle(u32 _uThreadAddr);
+ void OnIdleDC(void);
}
// Special registers
diff --git a/Source/Core/DolphinWX/Src/BootManager.cpp b/Source/Core/DolphinWX/Src/BootManager.cpp index 3de87842da..e0a70f5664 100644 --- a/Source/Core/DolphinWX/Src/BootManager.cpp +++ b/Source/Core/DolphinWX/Src/BootManager.cpp @@ -81,6 +81,7 @@ bool BootCore(const std::string& _rFilename) if (unique_id.size() == 6 && ini.Load(("Patches/" + unique_id + ".ini").c_str()))
{
ini.Get("Core", "UseDualCore", &StartUp.bUseDualCore, StartUp.bUseDualCore);
+ ini.Get("Core", "SkipIdle", &StartUp.bSkipIdle, StartUp.bSkipIdle);
ini.Get("Core", "OptimizeQuantizers", &StartUp.bOptimizeQuantizers, StartUp.bOptimizeQuantizers);
}
if(main_frame)
diff --git a/Source/Core/DolphinWX/Src/Config.cpp b/Source/Core/DolphinWX/Src/Config.cpp index caa6b8b0b4..b717603f63 100644 --- a/Source/Core/DolphinWX/Src/Config.cpp +++ b/Source/Core/DolphinWX/Src/Config.cpp @@ -67,6 +67,7 @@ void SConfig::SaveSettings() ini.Set("Core", "HLEBios", m_LocalCoreStartupParameter.bHLEBios);
ini.Set("Core", "UseDynarec", m_LocalCoreStartupParameter.bUseJIT);
ini.Set("Core", "UseDualCore", m_LocalCoreStartupParameter.bUseDualCore);
+ ini.Set("Core", "SkipIdle", m_LocalCoreStartupParameter.bSkipIdle);
ini.Set("Core", "LockThreads", m_LocalCoreStartupParameter.bLockThreads);
ini.Set("Core", "DefaultGCM", m_LocalCoreStartupParameter.m_strDefaultGCM);
ini.Set("Core", "OptimizeQuantizers", m_LocalCoreStartupParameter.bOptimizeQuantizers);
@@ -118,6 +119,7 @@ void SConfig::LoadSettings() ini.Get("Core", "HLEBios", &m_LocalCoreStartupParameter.bHLEBios, true);
ini.Get("Core", "UseDynarec", &m_LocalCoreStartupParameter.bUseJIT, true);
ini.Get("Core", "UseDualCore", &m_LocalCoreStartupParameter.bUseDualCore, false);
+ ini.Get("Core", "SkipIdle", &m_LocalCoreStartupParameter.bSkipIdle, true);
ini.Get("Core", "LockThreads", &m_LocalCoreStartupParameter.bLockThreads, true);
ini.Get("Core", "DefaultGCM", &m_LocalCoreStartupParameter.m_strDefaultGCM);
ini.Get("Core", "OptimizeQuantizers", &m_LocalCoreStartupParameter.bOptimizeQuantizers, true);
diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index 8032d81207..a246ea58ed 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -96,6 +96,7 @@ EVT_MENU(IDM_BROWSE, CFrame::OnBrowse) EVT_MENU(IDM_MEMCARD, CFrame::OnMemcard)
EVT_MENU(IDM_TOGGLE_FULLSCREEN, CFrame::OnToggleFullscreen)
EVT_MENU(IDM_TOGGLE_DUALCORE, CFrame::OnToggleDualCore)
+EVT_MENU(IDM_TOGGLE_SKIPIDLE, CFrame::OnToggleSkipIdle)
EVT_MENU(IDM_TOGGLE_TOOLBAR, CFrame::OnToggleToolbar)
EVT_MENU(IDM_TOGGLE_STATUSBAR, CFrame::OnToggleStatusbar)
EVT_MENU(IDM_LOADSLOT1, CFrame::OnLoadState)
@@ -222,6 +223,8 @@ void CFrame::CreateMenu() pOptionsMenu->Append(IDM_TOGGLE_FULLSCREEN, _T("&Fullscreen\tAlt+Enter"));
pOptionsMenu->AppendCheckItem(IDM_TOGGLE_DUALCORE, _T("Dual-&core (unstable!)"));
pOptionsMenu->Check(IDM_TOGGLE_DUALCORE, SConfig::GetInstance().m_LocalCoreStartupParameter.bUseDualCore);
+ pOptionsMenu->AppendCheckItem(IDM_TOGGLE_SKIPIDLE, _T("Idle s&kipping"));
+ pOptionsMenu->Check(IDM_TOGGLE_SKIPIDLE, SConfig::GetInstance().m_LocalCoreStartupParameter.bSkipIdle);
m_pMenuBar->Append(pOptionsMenu, _T("&Options"));
// misc menu
@@ -555,6 +558,11 @@ void CFrame::OnToggleDualCore(wxCommandEvent& WXUNUSED (event)) SConfig::GetInstance().m_LocalCoreStartupParameter.bUseDualCore = !SConfig::GetInstance().m_LocalCoreStartupParameter.bUseDualCore;
SConfig::GetInstance().SaveSettings();
}
+void CFrame::OnToggleSkipIdle(wxCommandEvent& WXUNUSED (event))
+{
+ SConfig::GetInstance().m_LocalCoreStartupParameter.bSkipIdle = !SConfig::GetInstance().m_LocalCoreStartupParameter.bSkipIdle;
+ SConfig::GetInstance().SaveSettings();
+}
void CFrame::OnLoadState(wxCommandEvent& event)
{
diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h index daa3e44ea6..61423e49ca 100644 --- a/Source/Core/DolphinWX/Src/Frame.h +++ b/Source/Core/DolphinWX/Src/Frame.h @@ -66,6 +66,7 @@ class CFrame void OnMemcard(wxCommandEvent& event);
void OnToggleFullscreen(wxCommandEvent& event);
void OnToggleDualCore(wxCommandEvent& event);
+ void OnToggleSkipIdle(wxCommandEvent& event);
void OnToggleThrottle(wxCommandEvent& event);
void OnToggleToolbar(wxCommandEvent& event);
void OnToggleStatusbar(wxCommandEvent& event);
diff --git a/Source/Core/DolphinWX/Src/Globals.h b/Source/Core/DolphinWX/Src/Globals.h index 3f8aff4e54..2759025d90 100644 --- a/Source/Core/DolphinWX/Src/Globals.h +++ b/Source/Core/DolphinWX/Src/Globals.h @@ -57,6 +57,7 @@ enum IDM_CONFIG_PAD_PLUGIN,
IDM_TOGGLE_FULLSCREEN,
IDM_TOGGLE_DUALCORE,
+ IDM_TOGGLE_SKIPIDLE,
IDM_TOGGLE_TOOLBAR,
IDM_TOGGLE_STATUSBAR,
IDM_NOTIFYMAPLOADED,
|
