From a6516c8d66b6cd26531f0ff84daf29b68a03a55f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 14 Jul 2026 20:24:21 +0200 Subject: [PATCH] __KernelModuleDoState: Only apply function replacement on state load. Improves performance of rewind states --- Core/HLE/ReplaceTables.cpp | 2 +- Core/HLE/sceKernelModule.cpp | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Core/HLE/ReplaceTables.cpp b/Core/HLE/ReplaceTables.cpp index d733822f0b..c97b384e4a 100644 --- a/Core/HLE/ReplaceTables.cpp +++ b/Core/HLE/ReplaceTables.cpp @@ -1712,7 +1712,7 @@ static const ReplacementTableEntry entries[] = { static std::map replacedInstructions; -static std::unordered_map > replacementNameLookup; +static std::unordered_map> replacementNameLookup; void Replacement_Init() { for (int i = 0; i < (int)ARRAY_SIZE(entries); i++) { diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index 7f36b7e1bf..15661bcf99 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -434,18 +434,18 @@ static std::set loadedModules; // STATE END ////////////////////////////////////////////////////////////////////////// -static void __KernelModuleInit() -{ +static void __KernelModuleInit() { actionAfterModule = __KernelRegisterActionType(AfterModuleEntryCall::Create); } -void __KernelModuleDoState(PointerWrap &p) -{ +void __KernelModuleDoState(PointerWrap &p) { auto s = p.Section("sceKernelModule", 1, 2); if (!s) return; Do(p, actionAfterModule); + + // TODO: Only needed during read, right? __KernelRestoreActionType(actionAfterModule, AfterModuleEntryCall::Create); if (s >= 2) { @@ -463,15 +463,13 @@ void __KernelModuleDoState(PointerWrap &p) } } } - } - - if (g_Config.bFuncReplacements) { - MIPSAnalyst::ReplaceFunctions(); + if (g_Config.bFuncReplacements) { + MIPSAnalyst::ReplaceFunctions(); + } } } -void __KernelModuleShutdown() -{ +void __KernelModuleShutdown() { loadedModules.clear(); MIPSAnalyst::Reset(); HLEPlugins::Unload();