summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorLioncache <mai.iam2048@gmail.com>2023-12-18 14:05:03 -0500
committerLioncache <mai.iam2048@gmail.com>2023-12-18 19:11:49 -0500
commitf4277a901aa9f36e25d2acdb53c0ea2b0aa30573 (patch)
treebb9a4fbd50c005100c6dee8ba735b652f74d149d /Source
parent04300114f78d1d9562aab6192ad589b87fc12baf (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.cpp8
-rw-r--r--Source/Core/Core/HLE/HLE.h9
-rw-r--r--Source/Core/Core/PowerPC/CachedInterpreter/CachedInterpreter.cpp4
-rw-r--r--Source/Core/Core/PowerPC/Interpreter/Interpreter.cpp2
-rw-r--r--Source/Core/Core/PowerPC/Jit64/Jit.cpp2
-rw-r--r--Source/Core/Core/PowerPC/JitArm64/Jit.cpp2
-rw-r--r--Source/Core/Core/PowerPC/PPCAnalyst.cpp3
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;