diff options
| author | Lioncache <mai.iam2048@gmail.com> | 2023-12-18 14:05:03 -0500 |
|---|---|---|
| committer | Lioncache <mai.iam2048@gmail.com> | 2023-12-18 19:11:49 -0500 |
| commit | f4277a901aa9f36e25d2acdb53c0ea2b0aa30573 (patch) | |
| tree | bb9a4fbd50c005100c6dee8ba735b652f74d149d /Source | |
| parent | 04300114f78d1d9562aab6192ad589b87fc12baf (diff) | |
Core/HLE/HLE: Remove global system accessors
We can get rid of the global system accessors by requiring passing in
relevant state that the function needs and making callsites do the work.
This *does* add a global accessor to the PPCAnalyzer, however, this already
has global accessors present elsewhere within its code, so they can be removed
all at once in a follow up change.
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/Core/HLE/HLE.cpp | 8 | ||||
| -rw-r--r-- | Source/Core/Core/HLE/HLE.h | 9 | ||||
| -rw-r--r-- | Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp | 4 | ||||
| -rw-r--r-- | Source/Core/Core/PowerPC/Interpreter/Interpreter.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/Core/PowerPC/Jit64/Jit.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/Core/PowerPC/JitArm64/Jit.cpp | 2 | ||||
| -rw-r--r-- | Source/Core/Core/PowerPC/PPCAnalyst.cpp | 3 |
7 files changed, 19 insertions, 11 deletions
diff --git a/Source/Core/Core/HLE/HLE.cpp b/Source/Core/Core/HLE/HLE.cpp index c25a3232f5..1707709f2d 100644 --- a/Source/Core/Core/HLE/HLE.cpp +++ b/Source/Core/Core/HLE/HLE.cpp @@ -200,7 +200,7 @@ HookFlag GetHookFlagsByIndex(u32 index) return os_patches[index].flags; } -TryReplaceFunctionResult TryReplaceFunction(u32 address) +TryReplaceFunctionResult TryReplaceFunction(u32 address, PowerPC::CoreMode mode) { const u32 hook_index = GetHookByFunctionAddress(address); if (hook_index == 0) @@ -211,16 +211,16 @@ TryReplaceFunctionResult TryReplaceFunction(u32 address) return {}; const HookFlag flags = GetHookFlagsByIndex(hook_index); - if (!IsEnabled(flags)) + if (!IsEnabled(flags, mode)) return {}; return {type, hook_index}; } -bool IsEnabled(HookFlag flag) +bool IsEnabled(HookFlag flag, PowerPC::CoreMode mode) { return flag != HLE::HookFlag::Debug || Config::IsDebuggingEnabled() || - Core::System::GetInstance().GetPowerPC().GetMode() == PowerPC::CoreMode::Interpreter; + mode == PowerPC::CoreMode::Interpreter; } u32 UnPatch(Core::System& system, std::string_view patch_name) diff --git a/Source/Core/Core/HLE/HLE.h b/Source/Core/Core/HLE/HLE.h index 725ef1aa54..a43ada5adf 100644 --- a/Source/Core/Core/HLE/HLE.h +++ b/Source/Core/Core/HLE/HLE.h @@ -13,6 +13,11 @@ class CPUThreadGuard; class System; } // namespace Core +namespace PowerPC +{ +enum class CoreMode; +} + namespace HLE { using HookFunction = void (*)(const Core::CPUThreadGuard&); @@ -65,10 +70,10 @@ u32 GetHookByFunctionAddress(u32 address); HookType GetHookTypeByIndex(u32 index); HookFlag GetHookFlagsByIndex(u32 index); -bool IsEnabled(HookFlag flag); +bool IsEnabled(HookFlag flag, PowerPC::CoreMode mode); // Performs the backend-independent preliminary checking for whether a function // can be HLEd. If it can be, the information needed for HLEing it is returned. -TryReplaceFunctionResult TryReplaceFunction(u32 address); +TryReplaceFunctionResult TryReplaceFunction(u32 address, PowerPC::CoreMode mode); } // namespace HLE diff --git a/Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp b/Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp index 8a836b6fe5..291321f97a 100644 --- a/Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp +++ b/Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp @@ -269,7 +269,9 @@ bool CachedInterpreter::CheckIdle(CachedInterpreter& cached_interpreter, u32 idl bool CachedInterpreter::HandleFunctionHooking(u32 address) { - const auto result = HLE::TryReplaceFunction(address); + // CachedInterpreter inherits from JitBase and is considered a JIT by relevant code. + // (see JitInterface and how m_mode is set within PowerPC.cpp) + const auto result = HLE::TryReplaceFunction(address, PowerPC::CoreMode::JIT); if (!result) return false; diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter.cpp b/Source/Core/Core/PowerPC/Interpreter/Interpreter.cpp index 6b475e1204..3b1f6ed4f4 100644 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter.cpp +++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter.cpp @@ -106,7 +106,7 @@ void Interpreter::Trace(const UGeckoInstruction& inst) bool Interpreter::HandleFunctionHooking(u32 address) { - const auto result = HLE::TryReplaceFunction(address); + const auto result = HLE::TryReplaceFunction(address, PowerPC::CoreMode::Interpreter); if (!result) return false; diff --git a/Source/Core/Core/PowerPC/Jit64/Jit.cpp b/Source/Core/Core/PowerPC/Jit64/Jit.cpp index 5938080b0e..83e99da156 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit.cpp @@ -1274,7 +1274,7 @@ void Jit64::IntializeSpeculativeConstants() bool Jit64::HandleFunctionHooking(u32 address) { - const auto result = HLE::TryReplaceFunction(address); + const auto result = HLE::TryReplaceFunction(address, PowerPC::CoreMode::JIT); if (!result) return false; diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp index 311f5d40d8..26e7ce2aeb 100644 --- a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp @@ -781,7 +781,7 @@ void JitArm64::WriteConditionalExceptionExit(int exception, ARM64Reg temp_gpr, A bool JitArm64::HandleFunctionHooking(u32 address) { - const auto result = HLE::TryReplaceFunction(address); + const auto result = HLE::TryReplaceFunction(address, PowerPC::CoreMode::JIT); if (!result) return false; diff --git a/Source/Core/Core/PowerPC/PPCAnalyst.cpp b/Source/Core/Core/PowerPC/PPCAnalyst.cpp index eaf49c7c46..3bf85b3dfb 100644 --- a/Source/Core/Core/PowerPC/PPCAnalyst.cpp +++ b/Source/Core/Core/PowerPC/PPCAnalyst.cpp @@ -998,7 +998,8 @@ u32 PPCAnalyzer::Analyze(u32 address, CodeBlock* block, CodeBuffer* buffer, crDiscardable = BitSet8{}; } - const bool hle = !!HLE::TryReplaceFunction(op.address); + const auto ppc_mode = Core::System::GetInstance().GetPowerPC().GetMode(); + const bool hle = !!HLE::TryReplaceFunction(op.address, ppc_mode); const bool may_exit_block = hle || op.canEndBlock || op.canCauseException; const bool opWantsFPRF = op.wantsFPRF; |
