From 8686536d7d7b29c15dcbb2cc428e4295cb16f75d Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 30 Sep 2023 19:38:09 +0200 Subject: [PATCH] Jit: Always initialize fastmem arena If dcache is enabled when the game starts, initializing the fastmem arena is still useful in case the user changes the dcache setting. And initializing it doesn't really cost anything. --- .../Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp | 4 ++-- Source/Core/Core/PowerPC/Jit64/Jit.cpp | 7 +++++-- Source/Core/Core/PowerPC/JitArm64/Jit.cpp | 7 +++++-- Source/Core/Core/PowerPC/JitCommon/JitBase.cpp | 8 +------- Source/Core/Core/PowerPC/JitCommon/JitBase.h | 8 +------- 5 files changed, 14 insertions(+), 20 deletions(-) diff --git a/Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp b/Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp index 632fbb23f1..8fbed42f06 100644 --- a/Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp +++ b/Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp @@ -82,7 +82,7 @@ CachedInterpreter::~CachedInterpreter() = default; void CachedInterpreter::Init() { - RefreshConfig(InitFastmemArena::No); + RefreshConfig(); m_code.reserve(CODE_SIZE / sizeof(Instruction)); @@ -384,5 +384,5 @@ void CachedInterpreter::ClearCache() { m_code.clear(); m_block_cache.Clear(); - RefreshConfig(InitFastmemArena::No); + RefreshConfig(); } diff --git a/Source/Core/Core/PowerPC/Jit64/Jit.cpp b/Source/Core/Core/PowerPC/Jit64/Jit.cpp index 6dbb998d3a..fa96bd4b20 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit.cpp @@ -251,7 +251,10 @@ bool Jit64::BackPatch(SContext* ctx) void Jit64::Init() { - RefreshConfig(InitFastmemArena::Yes); + auto& memory = m_system.GetMemory(); + jo.fastmem_arena = memory.InitFastmemArena(); + + RefreshConfig(); EnableBlockLink(); @@ -304,7 +307,7 @@ void Jit64::ClearCache() m_const_pool.Clear(); ClearCodeSpace(); Clear(); - RefreshConfig(InitFastmemArena::No); + RefreshConfig(); asm_routines.Regenerate(); ResetFreeMemoryRanges(); } diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp index efc24f988a..4c927ed427 100644 --- a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp @@ -47,7 +47,10 @@ JitArm64::~JitArm64() = default; void JitArm64::Init() { - RefreshConfig(InitFastmemArena::Yes); + auto& memory = m_system.GetMemory(); + jo.fastmem_arena = memory.InitFastmemArena(); + + RefreshConfig(); const size_t child_code_size = jo.memcheck ? FARCODE_SIZE_MMU : FARCODE_SIZE; AllocCodeSpace(CODE_SIZE + child_code_size); @@ -155,7 +158,7 @@ void JitArm64::ClearCache() const Common::ScopedJITPageWriteAndNoExecute enable_jit_page_writes; ClearCodeSpace(); m_far_code.ClearCodeSpace(); - RefreshConfig(InitFastmemArena::No); + RefreshConfig(); GenerateAsm(); diff --git a/Source/Core/Core/PowerPC/JitCommon/JitBase.cpp b/Source/Core/Core/PowerPC/JitCommon/JitBase.cpp index 88d28ea8ac..bcdafd9725 100644 --- a/Source/Core/Core/PowerPC/JitCommon/JitBase.cpp +++ b/Source/Core/Core/PowerPC/JitCommon/JitBase.cpp @@ -115,7 +115,7 @@ bool JitBase::DoesConfigNeedRefresh() }); } -void JitBase::RefreshConfig(InitFastmemArena init_fastmem_arena) +void JitBase::RefreshConfig() { for (const auto& [member, config_info] : JIT_SETTINGS) this->*member = Config::Get(*config_info); @@ -132,12 +132,6 @@ void JitBase::RefreshConfig(InitFastmemArena init_fastmem_arena) analyzer.SetFloatExceptionsEnabled(m_enable_float_exceptions); analyzer.SetDivByZeroExceptionsEnabled(m_enable_div_by_zero_exceptions); - if (init_fastmem_arena != InitFastmemArena::No) - { - auto& memory = m_system.GetMemory(); - jo.fastmem_arena = m_fastmem_enabled && memory.InitFastmemArena(); - } - bool any_watchpoints = m_system.GetPowerPC().GetMemChecks().HasAny(); jo.fastmem = m_fastmem_enabled && jo.fastmem_arena && (m_ppc_state.msr.DR || !any_watchpoints) && EMM::IsExceptionHandlerSupported(); diff --git a/Source/Core/Core/PowerPC/JitCommon/JitBase.h b/Source/Core/Core/PowerPC/JitCommon/JitBase.h index f96c068b98..6c95559438 100644 --- a/Source/Core/Core/PowerPC/JitCommon/JitBase.h +++ b/Source/Core/Core/PowerPC/JitCommon/JitBase.h @@ -163,14 +163,8 @@ protected: static const std::array*>, 22> JIT_SETTINGS; - enum class InitFastmemArena - { - No, - Yes, - }; - bool DoesConfigNeedRefresh(); - void RefreshConfig(InitFastmemArena init_fastmem_arena); + void RefreshConfig(); void InitBLROptimization(); void ProtectStack();