diff --git a/Source/Core/Core/Core.vcxproj b/Source/Core/Core/Core.vcxproj index 60a6de3fd5..e9477f128b 100644 --- a/Source/Core/Core/Core.vcxproj +++ b/Source/Core/Core/Core.vcxproj @@ -459,13 +459,10 @@ - - - diff --git a/Source/Core/Core/Core.vcxproj.filters b/Source/Core/Core/Core.vcxproj.filters index b96b206c0f..2578f48fd3 100644 --- a/Source/Core/Core/Core.vcxproj.filters +++ b/Source/Core/Core/Core.vcxproj.filters @@ -931,15 +931,9 @@ PowerPC\Interpreter - - PowerPC\Interpreter - PowerPC\Jit64 - - PowerPC\Jit64 - HW %28Flipper/Hollywood%29\AI - Audio Interface @@ -1252,9 +1246,6 @@ PowerPC\JitIL - - PowerPC\JitIL - PowerPC\Jit64 diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter.cpp b/Source/Core/Core/PowerPC/Interpreter/Interpreter.cpp index fe712ed043..fa08d55252 100644 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter.cpp +++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter.cpp @@ -63,6 +63,7 @@ void Interpreter::RunTable63(UGeckoInstruction inst) void Interpreter::Init() { + InitializeInstructionTables(); m_reserve = false; m_end_block = false; } diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter.h b/Source/Core/Core/PowerPC/Interpreter/Interpreter.h index 6f4de85371..0ce65ba149 100644 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter.h +++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter.h @@ -282,6 +282,8 @@ public: static u32 Helper_Carry(u32 value1, u32 value2); private: + static void InitializeInstructionTables(); + // flag helper static void Helper_UpdateCR0(u32 value); static void Helper_UpdateCR1(); diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter_Tables.cpp b/Source/Core/Core/PowerPC/Interpreter/Interpreter_Tables.cpp index 29c41f73eb..4fb81d6e48 100644 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter_Tables.cpp +++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter_Tables.cpp @@ -6,7 +6,6 @@ #include "Core/PowerPC/Gekko.h" #include "Core/PowerPC/Interpreter/Interpreter.h" -#include "Core/PowerPC/Interpreter/Interpreter_Tables.h" #include "Core/PowerPC/PPCTables.h" struct GekkoOPTemplate @@ -355,8 +354,6 @@ static std::array table63_2 = }}; // clang-format on -namespace InterpreterTables -{ constexpr size_t TotalInstructionFunctionCount() { return primarytable.size() + table4_2.size() + table4_3.size() + table4.size() + table31.size() + @@ -366,7 +363,7 @@ constexpr size_t TotalInstructionFunctionCount() static_assert(TotalInstructionFunctionCount() < m_allInstructions.size(), "m_allInstructions is too small"); -void InitTables() +void Interpreter::InitializeInstructionTables() { // once initialized, tables are read-only static bool initialized = false; @@ -376,22 +373,22 @@ void InitTables() // clear for (int i = 0; i < 64; i++) { - Interpreter::m_op_table[i] = Interpreter::unknown_instruction; + m_op_table[i] = Interpreter::unknown_instruction; m_infoTable[i] = &unknownopinfo; } for (int i = 0; i < 32; i++) { - Interpreter::m_op_table59[i] = Interpreter::unknown_instruction; + m_op_table59[i] = Interpreter::unknown_instruction; m_infoTable59[i] = &unknownopinfo; } for (int i = 0; i < 1024; i++) { - Interpreter::m_op_table4[i] = Interpreter::unknown_instruction; - Interpreter::m_op_table19[i] = Interpreter::unknown_instruction; - Interpreter::m_op_table31[i] = Interpreter::unknown_instruction; - Interpreter::m_op_table63[i] = Interpreter::unknown_instruction; + m_op_table4[i] = Interpreter::unknown_instruction; + m_op_table19[i] = Interpreter::unknown_instruction; + m_op_table31[i] = Interpreter::unknown_instruction; + m_op_table63[i] = Interpreter::unknown_instruction; m_infoTable4[i] = &unknownopinfo; m_infoTable19[i] = &unknownopinfo; m_infoTable31[i] = &unknownopinfo; @@ -400,7 +397,7 @@ void InitTables() for (auto& tpl : primarytable) { - Interpreter::m_op_table[tpl.opcode] = tpl.Inst; + m_op_table[tpl.opcode] = tpl.Inst; m_infoTable[tpl.opcode] = &tpl.opinfo; } @@ -410,7 +407,7 @@ void InitTables() for (auto& tpl : table4_2) { int op = fill + tpl.opcode; - Interpreter::m_op_table4[op] = tpl.Inst; + m_op_table4[op] = tpl.Inst; m_infoTable4[op] = &tpl.opinfo; } } @@ -421,7 +418,7 @@ void InitTables() for (auto& tpl : table4_3) { int op = fill + tpl.opcode; - Interpreter::m_op_table4[op] = tpl.Inst; + m_op_table4[op] = tpl.Inst; m_infoTable4[op] = &tpl.opinfo; } } @@ -429,35 +426,35 @@ void InitTables() for (auto& tpl : table4) { int op = tpl.opcode; - Interpreter::m_op_table4[op] = tpl.Inst; + m_op_table4[op] = tpl.Inst; m_infoTable4[op] = &tpl.opinfo; } for (auto& tpl : table31) { int op = tpl.opcode; - Interpreter::m_op_table31[op] = tpl.Inst; + m_op_table31[op] = tpl.Inst; m_infoTable31[op] = &tpl.opinfo; } for (auto& tpl : table19) { int op = tpl.opcode; - Interpreter::m_op_table19[op] = tpl.Inst; + m_op_table19[op] = tpl.Inst; m_infoTable19[op] = &tpl.opinfo; } for (auto& tpl : table59) { int op = tpl.opcode; - Interpreter::m_op_table59[op] = tpl.Inst; + m_op_table59[op] = tpl.Inst; m_infoTable59[op] = &tpl.opinfo; } for (auto& tpl : table63) { int op = tpl.opcode; - Interpreter::m_op_table63[op] = tpl.Inst; + m_op_table63[op] = tpl.Inst; m_infoTable63[op] = &tpl.opinfo; } @@ -467,7 +464,7 @@ void InitTables() for (auto& tpl : table63_2) { int op = fill + tpl.opcode; - Interpreter::m_op_table63[op] = tpl.Inst; + m_op_table63[op] = tpl.Inst; m_infoTable63[op] = &tpl.opinfo; } } @@ -494,4 +491,3 @@ void InitTables() initialized = true; } -} // namespace InterpreterTables diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter_Tables.h b/Source/Core/Core/PowerPC/Interpreter/Interpreter_Tables.h deleted file mode 100644 index ce7796bf2d..0000000000 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter_Tables.h +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// Licensed under GPLv2+ -// Refer to the license.txt file included. - -#pragma once - -namespace InterpreterTables -{ -void InitTables(); -} diff --git a/Source/Core/Core/PowerPC/Jit64/Jit.cpp b/Source/Core/Core/PowerPC/Jit64/Jit.cpp index 8a424ad805..83bfb5239c 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include "Core/PowerPC/Jit64/Jit.h" + #include #include @@ -22,8 +24,6 @@ #include "Core/HW/GPFifo.h" #include "Core/HW/ProcessorInterface.h" #include "Core/PatchEngine.h" -#include "Core/PowerPC/Jit64/Jit.h" -#include "Core/PowerPC/Jit64/Jit64_Tables.h" #include "Core/PowerPC/Jit64/JitAsm.h" #include "Core/PowerPC/Jit64/JitRegCache.h" #include "Core/PowerPC/Jit64Common/FarCodeCache.h" @@ -216,6 +216,7 @@ bool Jit64::HandleFault(uintptr_t access_address, SContext* ctx) void Jit64::Init() { + InitializeInstructionTables(); EnableBlockLink(); jo.optimizeGatherPipe = true; diff --git a/Source/Core/Core/PowerPC/Jit64/Jit.h b/Source/Core/Core/PowerPC/Jit64/Jit.h index af990d1f12..4fe96f5bfc 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit.h +++ b/Source/Core/Core/PowerPC/Jit64/Jit.h @@ -35,17 +35,14 @@ public: Jit64() : code_buffer(32000) {} ~Jit64() {} void Init() override; - - void EnableOptimization(); - - void EnableBlockLink(); - void Shutdown() override; bool HandleFault(uintptr_t access_address, SContext* ctx) override; - bool HandleStackFault() override; + void EnableOptimization(); + void EnableBlockLink(); + // Jit! void Jit(u32 em_address) override; @@ -234,6 +231,7 @@ public: void eieio(UGeckoInstruction inst); private: + static void InitializeInstructionTables(); void CompileInstruction(PPCAnalyst::CodeOp& op); void AllocStack(); diff --git a/Source/Core/Core/PowerPC/Jit64/Jit64_Tables.cpp b/Source/Core/Core/PowerPC/Jit64/Jit64_Tables.cpp index 93988b44f5..5e2d3d51b6 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit64_Tables.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit64_Tables.cpp @@ -4,7 +4,6 @@ #include "Core/PowerPC/Jit64/Jit.h" #include "Core/PowerPC/Gekko.h" -#include "Core/PowerPC/Jit64/Jit64_Tables.h" static Jit64::Instruction dynaOpTable[64]; static Jit64::Instruction dynaOpTable4[1024]; @@ -376,9 +375,7 @@ void Jit64::CompileInstruction(PPCAnalyst::CodeOp& op) } } -namespace Jit64Tables -{ -void InitTables() +void Jit64::InitializeInstructionTables() { // once initialized, tables are read-only static bool initialized = false; @@ -471,5 +468,3 @@ void InitTables() initialized = true; } - -} // namespace diff --git a/Source/Core/Core/PowerPC/Jit64/Jit64_Tables.h b/Source/Core/Core/PowerPC/Jit64/Jit64_Tables.h deleted file mode 100644 index 90e1d2b766..0000000000 --- a/Source/Core/Core/PowerPC/Jit64/Jit64_Tables.h +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// Licensed under GPLv2+ -// Refer to the license.txt file included. - -#pragma once - -class Jit64; - -namespace PPCAnalyst -{ -struct CodeOp; -} - -namespace Jit64Tables -{ -void InitTables(); -} diff --git a/Source/Core/Core/PowerPC/Jit64IL/JitIL.cpp b/Source/Core/Core/PowerPC/Jit64IL/JitIL.cpp index e864aefe2b..af1f022852 100644 --- a/Source/Core/Core/PowerPC/Jit64IL/JitIL.cpp +++ b/Source/Core/Core/PowerPC/Jit64IL/JitIL.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include "Core/PowerPC/Jit64IL/JitIL.h" + #include #include // For profiling #include @@ -19,8 +21,6 @@ #include "Core/HW/CPU.h" #include "Core/PatchEngine.h" #include "Core/PowerPC/Jit64Common/Jit64PowerPCState.h" -#include "Core/PowerPC/Jit64IL/JitIL.h" -#include "Core/PowerPC/Jit64IL/JitIL_Tables.h" #include "Core/PowerPC/PowerPC.h" #include "Core/PowerPC/Profiler.h" @@ -255,6 +255,7 @@ static void Shutdown() void JitIL::Init() { + InitializeInstructionTables(); EnableBlockLink(); jo.optimizeGatherPipe = true; diff --git a/Source/Core/Core/PowerPC/Jit64IL/JitIL.h b/Source/Core/Core/PowerPC/Jit64IL/JitIL.h index 434c446e98..168f0f2ccc 100644 --- a/Source/Core/Core/PowerPC/Jit64IL/JitIL.h +++ b/Source/Core/Core/PowerPC/Jit64IL/JitIL.h @@ -35,11 +35,10 @@ public: // Initialization, etc void Init() override; + void Shutdown() override; void EnableBlockLink(); - void Shutdown() override; - // Jit! void Jit(u32 em_address) override; @@ -79,5 +78,6 @@ public: void DynaRunTable63(UGeckoInstruction _inst) override; private: + static void InitializeInstructionTables(); void CompileInstruction(PPCAnalyst::CodeOp& op); }; diff --git a/Source/Core/Core/PowerPC/Jit64IL/JitIL_Tables.cpp b/Source/Core/Core/PowerPC/Jit64IL/JitIL_Tables.cpp index d7fe49d435..03a80c6aaf 100644 --- a/Source/Core/Core/PowerPC/Jit64IL/JitIL_Tables.cpp +++ b/Source/Core/Core/PowerPC/Jit64IL/JitIL_Tables.cpp @@ -4,7 +4,6 @@ #include "Core/PowerPC/Jit64IL/JitIL.h" #include "Core/PowerPC/Gekko.h" -#include "Core/PowerPC/Jit64IL/JitIL_Tables.h" #include "Core/PowerPC/PPCTables.h" static JitIL::Instruction dynaOpTable[64]; @@ -399,9 +398,7 @@ void JitIL::CompileInstruction(PPCAnalyst::CodeOp& op) } } -namespace JitILTables -{ -void InitTables() +void JitIL::InitializeInstructionTables() { // once initialized, tables are read-only static bool initialized = false; @@ -494,4 +491,3 @@ void InitTables() initialized = true; } -} diff --git a/Source/Core/Core/PowerPC/Jit64IL/JitIL_Tables.h b/Source/Core/Core/PowerPC/Jit64IL/JitIL_Tables.h deleted file mode 100644 index a66cfa4188..0000000000 --- a/Source/Core/Core/PowerPC/Jit64IL/JitIL_Tables.h +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// Licensed under GPLv2+ -// Refer to the license.txt file included. - -#pragma once - -class JitIL; - -namespace PPCAnalyst -{ -struct CodeOp; -} - -namespace JitILTables -{ -void InitTables(); -} diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp index dcf13f5672..1771ee79bc 100644 --- a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include "Core/PowerPC/JitArm64/Jit.h" + #include #include "Common/Arm64Emitter.h" @@ -19,9 +21,7 @@ #include "Core/HW/Memmap.h" #include "Core/HW/ProcessorInterface.h" #include "Core/PatchEngine.h" -#include "Core/PowerPC/JitArm64/Jit.h" #include "Core/PowerPC/JitArm64/JitArm64_RegCache.h" -#include "Core/PowerPC/JitArm64/JitArm64_Tables.h" #include "Core/PowerPC/JitInterface.h" #include "Core/PowerPC/Profiler.h" @@ -47,6 +47,8 @@ static bool HasCycleCounters() void JitArm64::Init() { + InitializeInstructionTables(); + size_t child_code_size = SConfig::GetInstance().bMMU ? FARCODE_SIZE_MMU : FARCODE_SIZE; AllocCodeSpace(CODE_SIZE + child_code_size); AddChildCodeSpace(&farcode, child_code_size); diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.h b/Source/Core/Core/PowerPC/JitArm64/Jit.h index 7e006432a0..efbc2bb759 100644 --- a/Source/Core/Core/PowerPC/JitArm64/Jit.h +++ b/Source/Core/Core/PowerPC/JitArm64/Jit.h @@ -172,6 +172,7 @@ private: const u8* slowmem_code; }; + static void InitializeInstructionTables(); void CompileInstruction(PPCAnalyst::CodeOp& op); void EmitResetCycleCounters(); diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Tables.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Tables.cpp index 63565589da..0ae6d63e51 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Tables.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Tables.cpp @@ -2,10 +2,9 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. -#include "Core/PowerPC/JitArm64/JitArm64_Tables.h" +#include "Core/PowerPC/JitArm64/Jit.h" #include "Core/PowerPC/Gekko.h" -#include "Core/PowerPC/JitArm64/Jit.h" #include "Core/PowerPC/JitInterface.h" #include "Core/PowerPC/PPCAnalyst.h" #include "Core/PowerPC/PPCTables.h" @@ -385,9 +384,7 @@ void JitArm64::CompileInstruction(PPCAnalyst::CodeOp& op) } } -namespace JitArm64Tables -{ -void InitTables() +void JitArm64::InitializeInstructionTables() { // once initialized, tables are read-only static bool initialized = false; @@ -480,5 +477,3 @@ void InitTables() initialized = true; } - -} // namespace diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Tables.h b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Tables.h deleted file mode 100644 index bf1987bf1f..0000000000 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Tables.h +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2008 Dolphin Emulator Project -// Licensed under GPLv2+ -// Refer to the license.txt file included. - -#pragma once - -class JitArm64; - -namespace PPCAnalyst -{ -struct CodeOp; -} - -namespace JitArm64Tables -{ -void InitTables(); -} diff --git a/Source/Core/Core/PowerPC/JitInterface.cpp b/Source/Core/Core/PowerPC/JitInterface.cpp index d32678a8bd..0eaa4f1cc1 100644 --- a/Source/Core/Core/PowerPC/JitInterface.cpp +++ b/Source/Core/Core/PowerPC/JitInterface.cpp @@ -22,14 +22,11 @@ #if _M_X86 #include "Core/PowerPC/Jit64/Jit.h" -#include "Core/PowerPC/Jit64/Jit64_Tables.h" #include "Core/PowerPC/Jit64IL/JitIL.h" -#include "Core/PowerPC/Jit64IL/JitIL_Tables.h" #endif #if _M_ARM_64 #include "Core/PowerPC/JitArm64/Jit.h" -#include "Core/PowerPC/JitArm64/JitArm64_Tables.h" #endif namespace JitInterface @@ -70,31 +67,7 @@ CPUCoreBase* InitJitCore(int core) g_jit->Init(); return ptr; } -void InitTables(int core) -{ - switch (core) - { -#if _M_X86 - case PowerPC::CORE_JIT64: - Jit64Tables::InitTables(); - break; - case PowerPC::CORE_JITIL64: - JitILTables::InitTables(); - break; -#endif -#if _M_ARM_64 - case PowerPC::CORE_JITARM64: - JitArm64Tables::InitTables(); - break; -#endif - case PowerPC::CORE_CACHEDINTERPRETER: - // has no tables - break; - default: - PanicAlert("Unrecognizable cpu_core: %d", core); - break; - } -} + CPUCoreBase* GetCore() { return g_jit; diff --git a/Source/Core/Core/PowerPC/JitInterface.h b/Source/Core/Core/PowerPC/JitInterface.h index 01fd6bf911..f2d4cdaa93 100644 --- a/Source/Core/Core/PowerPC/JitInterface.h +++ b/Source/Core/Core/PowerPC/JitInterface.h @@ -22,7 +22,6 @@ enum class ExceptionType void DoState(PointerWrap& p); CPUCoreBase* InitJitCore(int core); -void InitTables(int core); CPUCoreBase* GetCore(); // Debugging diff --git a/Source/Core/Core/PowerPC/PPCTables.cpp b/Source/Core/Core/PowerPC/PPCTables.cpp index fda50310d9..e27c949799 100644 --- a/Source/Core/Core/PowerPC/PPCTables.cpp +++ b/Source/Core/Core/PowerPC/PPCTables.cpp @@ -15,7 +15,6 @@ #include "Common/StringUtil.h" #include "Core/PowerPC/Interpreter/Interpreter.h" -#include "Core/PowerPC/Interpreter/Interpreter_Tables.h" #include "Core/PowerPC/JitInterface.h" #include "Core/PowerPC/PowerPC.h" @@ -110,15 +109,6 @@ bool UsesFPU(UGeckoInstruction inst) return (info->flags & FL_USE_FPU) != 0; } -void InitTables(int cpu_core) -{ - // Interpreter ALWAYS needs to be initialized - InterpreterTables::InitTables(); - - if (cpu_core != PowerPC::CORE_INTERPRETER) - JitInterface::InitTables(cpu_core); -} - #define OPLOG #define OP_TO_LOG "mtfsb0x" diff --git a/Source/Core/Core/PowerPC/PPCTables.h b/Source/Core/Core/PowerPC/PPCTables.h index eada803ef5..7b15bce2a0 100644 --- a/Source/Core/Core/PowerPC/PPCTables.h +++ b/Source/Core/Core/PowerPC/PPCTables.h @@ -110,7 +110,6 @@ Interpreter::Instruction GetInterpreterOp(UGeckoInstruction _inst); namespace PPCTables { -void InitTables(int cpu_core); bool IsValidInstruction(UGeckoInstruction _instCode); bool UsesFPU(UGeckoInstruction _inst); @@ -118,5 +117,4 @@ void CountInstruction(UGeckoInstruction _inst); void PrintInstructionRunCounts(); void LogCompiledInstructions(); const char* GetInstructionName(UGeckoInstruction _inst); - -} // namespace +} // namespace PPCTables diff --git a/Source/Core/Core/PowerPC/PowerPC.cpp b/Source/Core/Core/PowerPC/PowerPC.cpp index 2beeb37517..7cb616fbc9 100644 --- a/Source/Core/Core/PowerPC/PowerPC.cpp +++ b/Source/Core/Core/PowerPC/PowerPC.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include "Core/PowerPC/PowerPC.h" + #include "Common/Assert.h" #include "Common/ChunkFile.h" #include "Common/CommonTypes.h" @@ -18,8 +20,6 @@ #include "Core/PowerPC/CPUCoreBase.h" #include "Core/PowerPC/Interpreter/Interpreter.h" #include "Core/PowerPC/JitInterface.h" -#include "Core/PowerPC/PPCTables.h" -#include "Core/PowerPC/PowerPC.h" namespace PowerPC { @@ -148,8 +148,6 @@ static void ResetRegisters() static void InitializeCPUCore(int cpu_core) { - PPCTables::InitTables(cpu_core); - // We initialize the interpreter because // it is used on boot and code window independently. s_interpreter->Init();