diff --git a/Source/Core/Core/CMakeLists.txt b/Source/Core/Core/CMakeLists.txt index 37f2c3ebab..0d76fb8c47 100644 --- a/Source/Core/Core/CMakeLists.txt +++ b/Source/Core/Core/CMakeLists.txt @@ -33,7 +33,6 @@ set(SRCS ActionReplay.cpp DSP/DSPMemoryMap.cpp DSP/DSPStacks.cpp DSP/DSPAnalyzer.cpp - DSP/DSPEmitter.cpp DSP/DSPCodeUtil.cpp DSP/LabelMap.cpp DSP/DSPCore.cpp @@ -46,6 +45,7 @@ set(SRCS ActionReplay.cpp DSP/Interpreter/DSPIntLoadStore.cpp DSP/Interpreter/DSPIntMisc.cpp DSP/Interpreter/DSPIntMultiplier.cpp + DSP/Jit/DSPEmitter.cpp DSP/Jit/DSPJitRegCache.cpp DSP/Jit/DSPJitExtOps.cpp DSP/Jit/DSPJitBranch.cpp diff --git a/Source/Core/Core/Core.vcxproj b/Source/Core/Core/Core.vcxproj index 29f554ae9a..47845d7b3d 100644 --- a/Source/Core/Core/Core.vcxproj +++ b/Source/Core/Core/Core.vcxproj @@ -59,7 +59,6 @@ - @@ -72,6 +71,7 @@ + @@ -286,7 +286,6 @@ - @@ -296,6 +295,7 @@ + diff --git a/Source/Core/Core/Core.vcxproj.filters b/Source/Core/Core/Core.vcxproj.filters index 515f3fdf61..ea1040901e 100644 --- a/Source/Core/Core/Core.vcxproj.filters +++ b/Source/Core/Core/Core.vcxproj.filters @@ -210,6 +210,9 @@ DSPCore\Interpreter + + DSPCore\Jit + DSPCore\Jit @@ -237,9 +240,6 @@ DSPCore\Jit - - DSPCore\Jit - FifoPlayer @@ -821,10 +821,10 @@ DSPCore\Interpreter - + DSPCore\Jit - + DSPCore\Jit diff --git a/Source/Core/Core/DSP/DSPCore.cpp b/Source/Core/Core/DSP/DSPCore.cpp index ca901459bf..d6d0e0fe6b 100644 --- a/Source/Core/Core/DSP/DSPCore.cpp +++ b/Source/Core/Core/DSP/DSPCore.cpp @@ -18,11 +18,11 @@ #include "Common/MsgHandler.h" #include "Core/DSP/DSPAnalyzer.h" -#include "Core/DSP/DSPEmitter.h" #include "Core/DSP/DSPHWInterface.h" #include "Core/DSP/DSPHost.h" #include "Core/DSP/Interpreter/DSPIntUtil.h" #include "Core/DSP/Interpreter/DSPInterpreter.h" +#include "Core/DSP/Jit/DSPEmitter.h" SDSP g_dsp; DSPBreakpoints g_dsp_breakpoints; diff --git a/Source/Core/Core/DSP/DSPCore.h b/Source/Core/Core/DSP/DSPCore.h index c6ac49eb99..f53a860b97 100644 --- a/Source/Core/Core/DSP/DSPCore.h +++ b/Source/Core/Core/DSP/DSPCore.h @@ -13,7 +13,8 @@ #include "Core/DSP/DSPBreakpoints.h" #include "Core/DSP/DSPCaptureLogger.h" -#include "Core/DSP/DSPEmitter.h" + +class DSPEmitter; enum : u32 { diff --git a/Source/Core/Core/DSP/DSPMemoryMap.cpp b/Source/Core/Core/DSP/DSPMemoryMap.cpp index 98f3aff1d6..7b5524e2ea 100644 --- a/Source/Core/Core/DSP/DSPMemoryMap.cpp +++ b/Source/Core/Core/DSP/DSPMemoryMap.cpp @@ -64,3 +64,21 @@ void dsp_dmem_write(u16 addr, u16 val) break; } } + +u16 dsp_fetch_code() +{ + u16 opc = dsp_imem_read(g_dsp.pc); + + g_dsp.pc++; + return opc; +} + +u16 dsp_peek_code() +{ + return dsp_imem_read(g_dsp.pc); +} + +void dsp_skip_inst() +{ + g_dsp.pc += opTable[dsp_peek_code()]->size; +} diff --git a/Source/Core/Core/DSP/DSPMemoryMap.h b/Source/Core/Core/DSP/DSPMemoryMap.h index d9ebcef9fb..db6ed4f8f3 100644 --- a/Source/Core/Core/DSP/DSPMemoryMap.h +++ b/Source/Core/Core/DSP/DSPMemoryMap.h @@ -7,27 +7,10 @@ #include "Common/CommonTypes.h" -#include "Core/DSP/DSPCore.h" -#include "Core/DSP/DSPTables.h" - u16 dsp_imem_read(u16 addr); void dsp_dmem_write(u16 addr, u16 val); u16 dsp_dmem_read(u16 addr); -inline u16 dsp_fetch_code() -{ - u16 opc = dsp_imem_read(g_dsp.pc); - - g_dsp.pc++; - return opc; -} - -inline u16 dsp_peek_code() -{ - return dsp_imem_read(g_dsp.pc); -} - -inline void dsp_skip_inst() -{ - g_dsp.pc += opTable[dsp_peek_code()]->size; -} +u16 dsp_fetch_code(); +u16 dsp_peek_code(); +void dsp_skip_inst(); diff --git a/Source/Core/Core/DSP/DSPTables.cpp b/Source/Core/Core/DSP/DSPTables.cpp index be93f5b2c0..60458252d1 100644 --- a/Source/Core/Core/DSP/DSPTables.cpp +++ b/Source/Core/Core/DSP/DSPTables.cpp @@ -8,9 +8,9 @@ #include "Common/CommonTypes.h" -#include "Core/DSP/DSPEmitter.h" #include "Core/DSP/Interpreter/DSPIntExtOps.h" #include "Core/DSP/Interpreter/DSPInterpreter.h" +#include "Core/DSP/Jit/DSPEmitter.h" // clang-format off const DSPOPCTemplate opcodes[] = diff --git a/Source/Core/Core/DSP/DSPTables.h b/Source/Core/Core/DSP/DSPTables.h index 28b67d7fec..4501f5b598 100644 --- a/Source/Core/Core/DSP/DSPTables.h +++ b/Source/Core/Core/DSP/DSPTables.h @@ -7,7 +7,7 @@ #pragma once #include "Core/DSP/DSPCommon.h" -#include "Core/DSP/DSPEmitter.h" +#include "Core/DSP/Jit/DSPEmitter.h" // The non-ADDR ones that end with _D are the opposite one - if the bit specify // ACC0, then ACC_D will be ACC1. diff --git a/Source/Core/Core/DSP/Interpreter/DSPIntExtOps.cpp b/Source/Core/Core/DSP/Interpreter/DSPIntExtOps.cpp index 337e2322a5..7b5cc46960 100644 --- a/Source/Core/Core/DSP/Interpreter/DSPIntExtOps.cpp +++ b/Source/Core/Core/DSP/Interpreter/DSPIntExtOps.cpp @@ -5,6 +5,7 @@ #include "Core/DSP/Interpreter/DSPIntExtOps.h" #include "Core/DSP/DSPMemoryMap.h" +#include "Core/DSP/DSPTables.h" #include "Core/DSP/Interpreter/DSPIntUtil.h" // not needed for game ucodes (it slows down interpreter/dspjit32 + easier to compare int VS diff --git a/Source/Core/Core/DSP/Interpreter/DSPIntUtil.h b/Source/Core/Core/DSP/Interpreter/DSPIntUtil.h index 9c540400e1..31ec638b31 100644 --- a/Source/Core/Core/DSP/Interpreter/DSPIntUtil.h +++ b/Source/Core/Core/DSP/Interpreter/DSPIntUtil.h @@ -5,6 +5,7 @@ #pragma once +#include "Common/Assert.h" #include "Common/CommonTypes.h" #include "Core/DSP/DSPCore.h" diff --git a/Source/Core/Core/DSP/DSPEmitter.cpp b/Source/Core/Core/DSP/Jit/DSPEmitter.cpp similarity index 99% rename from Source/Core/Core/DSP/DSPEmitter.cpp rename to Source/Core/Core/DSP/Jit/DSPEmitter.cpp index f4c558cd37..c1fb7c3156 100644 --- a/Source/Core/Core/DSP/DSPEmitter.cpp +++ b/Source/Core/Core/DSP/Jit/DSPEmitter.cpp @@ -2,7 +2,7 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. -#include "Core/DSP/DSPEmitter.h" +#include "Core/DSP/Jit/DSPEmitter.h" #include @@ -15,7 +15,7 @@ #include "Core/DSP/DSPCore.h" #include "Core/DSP/DSPHost.h" #include "Core/DSP/DSPMemoryMap.h" -#include "Core/DSP/Interpreter/DSPInterpreter.h" +#include "Core/DSP/DSPTables.h" #define MAX_BLOCK_SIZE 250 #define DSP_IDLE_SKIP_CYCLES 0x1000 diff --git a/Source/Core/Core/DSP/DSPEmitter.h b/Source/Core/Core/DSP/Jit/DSPEmitter.h similarity index 100% rename from Source/Core/Core/DSP/DSPEmitter.h rename to Source/Core/Core/DSP/Jit/DSPEmitter.h diff --git a/Source/Core/Core/DSP/Jit/DSPJitArithmetic.cpp b/Source/Core/Core/DSP/Jit/DSPJitArithmetic.cpp index fde040416c..b647327a92 100644 --- a/Source/Core/Core/DSP/Jit/DSPJitArithmetic.cpp +++ b/Source/Core/Core/DSP/Jit/DSPJitArithmetic.cpp @@ -6,8 +6,9 @@ #include "Common/CommonTypes.h" -#include "Core/DSP/DSPEmitter.h" +#include "Core/DSP/DSPCore.h" #include "Core/DSP/DSPMemoryMap.h" +#include "Core/DSP/Jit/DSPEmitter.h" using namespace Gen; diff --git a/Source/Core/Core/DSP/Jit/DSPJitBranch.cpp b/Source/Core/Core/DSP/Jit/DSPJitBranch.cpp index 18ca7053a6..5cc72548a2 100644 --- a/Source/Core/Core/DSP/Jit/DSPJitBranch.cpp +++ b/Source/Core/Core/DSP/Jit/DSPJitBranch.cpp @@ -5,8 +5,10 @@ #include "Common/CommonTypes.h" #include "Core/DSP/DSPAnalyzer.h" -#include "Core/DSP/DSPEmitter.h" +#include "Core/DSP/DSPCore.h" #include "Core/DSP/DSPMemoryMap.h" +#include "Core/DSP/DSPTables.h" +#include "Core/DSP/Jit/DSPEmitter.h" using namespace Gen; diff --git a/Source/Core/Core/DSP/Jit/DSPJitCCUtil.cpp b/Source/Core/Core/DSP/Jit/DSPJitCCUtil.cpp index be4b69e56b..3d7657a074 100644 --- a/Source/Core/Core/DSP/Jit/DSPJitCCUtil.cpp +++ b/Source/Core/Core/DSP/Jit/DSPJitCCUtil.cpp @@ -5,7 +5,7 @@ // Additional copyrights go to Duddie and Tratax (c) 2004 #include "Core/DSP/DSPCore.h" -#include "Core/DSP/DSPEmitter.h" +#include "Core/DSP/Jit/DSPEmitter.h" using namespace Gen; diff --git a/Source/Core/Core/DSP/Jit/DSPJitExtOps.cpp b/Source/Core/Core/DSP/Jit/DSPJitExtOps.cpp index aec658f975..1dc75e43d4 100644 --- a/Source/Core/Core/DSP/Jit/DSPJitExtOps.cpp +++ b/Source/Core/Core/DSP/Jit/DSPJitExtOps.cpp @@ -4,8 +4,8 @@ #include "Common/CommonTypes.h" -#include "Core/DSP/DSPEmitter.h" -#include "Core/DSP/DSPMemoryMap.h" +#include "Core/DSP/DSPCore.h" +#include "Core/DSP/Jit/DSPEmitter.h" using namespace Gen; diff --git a/Source/Core/Core/DSP/Jit/DSPJitLoadStore.cpp b/Source/Core/Core/DSP/Jit/DSPJitLoadStore.cpp index 2d37f18a30..645fdbcaa7 100644 --- a/Source/Core/Core/DSP/Jit/DSPJitLoadStore.cpp +++ b/Source/Core/Core/DSP/Jit/DSPJitLoadStore.cpp @@ -6,9 +6,10 @@ #include "Common/CommonTypes.h" -#include "Core/DSP/DSPEmitter.h" +#include "Core/DSP/DSPCore.h" #include "Core/DSP/DSPMemoryMap.h" #include "Core/DSP/Interpreter/DSPInterpreter.h" +#include "Core/DSP/Jit/DSPEmitter.h" using namespace Gen; diff --git a/Source/Core/Core/DSP/Jit/DSPJitMisc.cpp b/Source/Core/Core/DSP/Jit/DSPJitMisc.cpp index f71f9d3b33..0b064047a2 100644 --- a/Source/Core/Core/DSP/Jit/DSPJitMisc.cpp +++ b/Source/Core/Core/DSP/Jit/DSPJitMisc.cpp @@ -4,9 +4,10 @@ #include "Common/CommonTypes.h" -#include "Core/DSP/DSPEmitter.h" +#include "Core/DSP/DSPCore.h" #include "Core/DSP/DSPMemoryMap.h" #include "Core/DSP/Interpreter/DSPInterpreter.h" +#include "Core/DSP/Jit/DSPEmitter.h" using namespace Gen; diff --git a/Source/Core/Core/DSP/Jit/DSPJitMultiplier.cpp b/Source/Core/Core/DSP/Jit/DSPJitMultiplier.cpp index 3c6b614f72..63047f6d83 100644 --- a/Source/Core/Core/DSP/Jit/DSPJitMultiplier.cpp +++ b/Source/Core/Core/DSP/Jit/DSPJitMultiplier.cpp @@ -9,7 +9,7 @@ #include "Common/CommonTypes.h" #include "Core/DSP/DSPCore.h" -#include "Core/DSP/DSPEmitter.h" +#include "Core/DSP/Jit/DSPEmitter.h" using namespace Gen; diff --git a/Source/Core/Core/DSP/Jit/DSPJitRegCache.cpp b/Source/Core/Core/DSP/Jit/DSPJitRegCache.cpp index 05dce4878b..63b91c424b 100644 --- a/Source/Core/Core/DSP/Jit/DSPJitRegCache.cpp +++ b/Source/Core/Core/DSP/Jit/DSPJitRegCache.cpp @@ -9,8 +9,9 @@ #include "Common/Assert.h" #include "Common/Logging/Log.h" -#include "Core/DSP/DSPEmitter.h" +#include "Core/DSP/DSPCore.h" #include "Core/DSP/DSPMemoryMap.h" +#include "Core/DSP/Jit/DSPEmitter.h" using namespace Gen; diff --git a/Source/Core/Core/DSP/Jit/DSPJitUtil.cpp b/Source/Core/Core/DSP/Jit/DSPJitUtil.cpp index de088f0f4c..9b273e619b 100644 --- a/Source/Core/Core/DSP/Jit/DSPJitUtil.cpp +++ b/Source/Core/Core/DSP/Jit/DSPJitUtil.cpp @@ -4,9 +4,9 @@ #include "Common/CommonTypes.h" -#include "Core/DSP/DSPEmitter.h" +#include "Core/DSP/DSPCore.h" #include "Core/DSP/DSPHWInterface.h" -#include "Core/DSP/DSPMemoryMap.h" +#include "Core/DSP/Jit/DSPEmitter.h" using namespace Gen; diff --git a/Source/Core/Core/HW/DSPLLE/DSPHost.cpp b/Source/Core/Core/HW/DSPLLE/DSPHost.cpp index 83b50bc60a..6bd2394cbd 100644 --- a/Source/Core/Core/HW/DSPLLE/DSPHost.cpp +++ b/Source/Core/Core/HW/DSPLLE/DSPHost.cpp @@ -9,6 +9,7 @@ #include "Core/ConfigManager.h" #include "Core/DSP/DSPAnalyzer.h" #include "Core/DSP/DSPCore.h" +#include "Core/DSP/Jit/DSPEmitter.h" #include "Core/HW/DSP.h" #include "Core/HW/DSPLLE/DSPLLETools.h" #include "Core/HW/DSPLLE/DSPSymbols.h" diff --git a/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp b/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp index 370acfcd86..8af0c9b7ec 100644 --- a/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp +++ b/Source/Core/Core/HW/DSPLLE/DSPLLE.cpp @@ -13,6 +13,7 @@ #include "Common/CommonTypes.h" #include "Common/Event.h" #include "Common/Logging/Log.h" +#include "Common/MemoryUtil.h" #include "Common/Thread.h" #include "Core/ConfigManager.h" #include "Core/Core.h"