From d04e67be3d26b7017f2bb061618181fd71611f9a Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 1 Oct 2023 22:54:09 +0200 Subject: [PATCH] Add fastmem arena setting Just for debugging. --- .../dolphinemu/features/settings/model/BooleanSetting.kt | 2 ++ .../features/settings/ui/SettingsFragmentPresenter.kt | 8 ++++++++ Source/Android/app/src/main/res/values/strings.xml | 1 + Source/Core/Core/Config/MainSettings.cpp | 1 + Source/Core/Core/Config/MainSettings.h | 1 + Source/Core/Core/PowerPC/Jit64/Jit.cpp | 3 +-- Source/Core/Core/PowerPC/JitArm64/Jit.cpp | 3 +-- Source/Core/Core/PowerPC/JitCommon/JitBase.cpp | 6 ++++++ Source/Core/Core/PowerPC/JitCommon/JitBase.h | 2 ++ Source/Core/DolphinQt/MenuBar.cpp | 7 +++++++ Source/Core/DolphinQt/MenuBar.h | 1 + 11 files changed, 31 insertions(+), 4 deletions(-) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.kt index 5ccc6b4aad..2d2a0065b4 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.kt @@ -14,6 +14,7 @@ enum class BooleanSetting( MAIN_SKIP_IPL(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SkipIPL", true), MAIN_DSP_HLE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "DSPHLE", true), MAIN_FASTMEM(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "Fastmem", true), + MAIN_FASTMEM_ARENA(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "FastmemArena", true), MAIN_CPU_THREAD(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "CPUThread", true), MAIN_SYNC_ON_SKIP_IDLE( Settings.FILE_DOLPHIN, @@ -897,6 +898,7 @@ enum class BooleanSetting( companion object { private val NOT_RUNTIME_EDITABLE_ARRAY = arrayOf( MAIN_DSP_HLE, + MAIN_FASTMEM_ARENA, MAIN_CPU_THREAD, MAIN_ENABLE_CHEATS, MAIN_OVERRIDE_REGION_SETTINGS, diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt index 099ae980e6..b85a3999cc 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt @@ -1941,6 +1941,14 @@ class SettingsFragmentPresenter( 0 ) ) + sl.add( + InvertedSwitchSetting( + context, + BooleanSetting.MAIN_FASTMEM_ARENA, + R.string.debug_fastmem_arena, + 0 + ) + ) sl.add(HeaderSetting(context, R.string.debug_jit_header, 0)) sl.add( diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index a81cb58a59..044c1ad65d 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -399,6 +399,7 @@ Debug Warning: Debug settings will slow emulation Disable Fastmem + Disable Fastmem Arena Jit Jit Disabled Jit Load Store Disabled diff --git a/Source/Core/Core/Config/MainSettings.cpp b/Source/Core/Core/Config/MainSettings.cpp index be901fe289..4e545fc402 100644 --- a/Source/Core/Core/Config/MainSettings.cpp +++ b/Source/Core/Core/Config/MainSettings.cpp @@ -38,6 +38,7 @@ const Info MAIN_CPU_CORE{{System::Main, "Core", "CPUCore"}, PowerPC::DefaultCPUCore()}; const Info MAIN_JIT_FOLLOW_BRANCH{{System::Main, "Core", "JITFollowBranch"}, true}; const Info MAIN_FASTMEM{{System::Main, "Core", "Fastmem"}, true}; +const Info MAIN_FASTMEM_ARENA{{System::Main, "Core", "FastmemArena"}, true}; const Info MAIN_ACCURATE_CPU_CACHE{{System::Main, "Core", "AccurateCPUCache"}, false}; const Info MAIN_DSP_HLE{{System::Main, "Core", "DSPHLE"}, true}; const Info MAIN_MAX_FALLBACK{{System::Main, "Core", "MaxFallback"}, 100}; diff --git a/Source/Core/Core/Config/MainSettings.h b/Source/Core/Core/Config/MainSettings.h index 0d591ee5db..b591a00de4 100644 --- a/Source/Core/Core/Config/MainSettings.h +++ b/Source/Core/Core/Config/MainSettings.h @@ -56,6 +56,7 @@ extern const Info MAIN_SKIP_IPL; extern const Info MAIN_CPU_CORE; extern const Info MAIN_JIT_FOLLOW_BRANCH; extern const Info MAIN_FASTMEM; +extern const Info MAIN_FASTMEM_ARENA; extern const Info MAIN_ACCURATE_CPU_CACHE; // Should really be in the DSP section, but we're kind of stuck with bad decisions made in the past. extern const Info MAIN_DSP_HLE; diff --git a/Source/Core/Core/PowerPC/Jit64/Jit.cpp b/Source/Core/Core/PowerPC/Jit64/Jit.cpp index fa96bd4b20..ea65a5c6f0 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit.cpp @@ -251,8 +251,7 @@ bool Jit64::BackPatch(SContext* ctx) void Jit64::Init() { - auto& memory = m_system.GetMemory(); - jo.fastmem_arena = memory.InitFastmemArena(); + InitFastmemArena(); RefreshConfig(); diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp index 4c927ed427..436229c07b 100644 --- a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp @@ -47,8 +47,7 @@ JitArm64::~JitArm64() = default; void JitArm64::Init() { - auto& memory = m_system.GetMemory(); - jo.fastmem_arena = memory.InitFastmemArena(); + InitFastmemArena(); RefreshConfig(); diff --git a/Source/Core/Core/PowerPC/JitCommon/JitBase.cpp b/Source/Core/Core/PowerPC/JitCommon/JitBase.cpp index bcdafd9725..c1cce80401 100644 --- a/Source/Core/Core/PowerPC/JitCommon/JitBase.cpp +++ b/Source/Core/Core/PowerPC/JitCommon/JitBase.cpp @@ -140,6 +140,12 @@ void JitBase::RefreshConfig() jo.div_by_zero_exceptions = m_enable_div_by_zero_exceptions; } +void JitBase::InitFastmemArena() +{ + auto& memory = m_system.GetMemory(); + jo.fastmem_arena = Config::Get(Config::MAIN_FASTMEM_ARENA) && memory.InitFastmemArena(); +} + void JitBase::InitBLROptimization() { m_enable_blr_optimization = diff --git a/Source/Core/Core/PowerPC/JitCommon/JitBase.h b/Source/Core/Core/PowerPC/JitCommon/JitBase.h index 6c95559438..00fea6ef84 100644 --- a/Source/Core/Core/PowerPC/JitCommon/JitBase.h +++ b/Source/Core/Core/PowerPC/JitCommon/JitBase.h @@ -166,6 +166,8 @@ protected: bool DoesConfigNeedRefresh(); void RefreshConfig(); + void InitFastmemArena(); + void InitBLROptimization(); void ProtectStack(); void UnprotectStack(); diff --git a/Source/Core/DolphinQt/MenuBar.cpp b/Source/Core/DolphinQt/MenuBar.cpp index ad8428bee3..2b68cf640d 100644 --- a/Source/Core/DolphinQt/MenuBar.cpp +++ b/Source/Core/DolphinQt/MenuBar.cpp @@ -139,6 +139,7 @@ void MenuBar::OnEmulationStateChanged(Core::State state) m_jit_interpreter_core->setEnabled(running); m_jit_block_linking->setEnabled(!running); m_jit_disable_cache->setEnabled(!running); + m_jit_disable_fastmem_arena->setEnabled(!running); m_jit_clear_cache->setEnabled(running); m_jit_log_coverage->setEnabled(!running); m_jit_search_instruction->setEnabled(running); @@ -847,6 +848,12 @@ void MenuBar::AddJITMenu() connect(m_jit_disable_fastmem, &QAction::toggled, [](bool enabled) { Config::SetBaseOrCurrent(Config::MAIN_FASTMEM, !enabled); }); + m_jit_disable_fastmem_arena = m_jit->addAction(tr("Disable Fastmem Arena")); + m_jit_disable_fastmem_arena->setCheckable(true); + m_jit_disable_fastmem_arena->setChecked(!Config::Get(Config::MAIN_FASTMEM_ARENA)); + connect(m_jit_disable_fastmem_arena, &QAction::toggled, + [](bool enabled) { Config::SetBaseOrCurrent(Config::MAIN_FASTMEM_ARENA, !enabled); }); + m_jit_clear_cache = m_jit->addAction(tr("Clear Cache"), this, &MenuBar::ClearCache); m_jit->addSeparator(); diff --git a/Source/Core/DolphinQt/MenuBar.h b/Source/Core/DolphinQt/MenuBar.h index a5c5730b6b..e505160afa 100644 --- a/Source/Core/DolphinQt/MenuBar.h +++ b/Source/Core/DolphinQt/MenuBar.h @@ -264,6 +264,7 @@ private: QAction* m_jit_block_linking; QAction* m_jit_disable_cache; QAction* m_jit_disable_fastmem; + QAction* m_jit_disable_fastmem_arena; QAction* m_jit_clear_cache; QAction* m_jit_log_coverage; QAction* m_jit_search_instruction;