EE/Rec: Move opcode defs to common header

Signed-off-by: SternXD <stern@sidestore.io>
This commit is contained in:
SternXD
2026-09-03 14:24:07 +02:00
committed by lightningterror
parent b67a81f6e7
commit eb3fc0dbea
23 changed files with 284 additions and 524 deletions
-11
View File
@@ -1010,21 +1010,10 @@ set(pcsx2x86Sources
# x86 headers
set(pcsx2x86Headers
x86/BaseblockEx.h
x86/iCOP0.h
x86/iCore.h
x86/iFPU.h
x86/iMMI.h
x86/iR3000A.h
x86/iR5900Arit.h
x86/iR5900AritImm.h
x86/iR5900Branch.h
x86/iR5900.h
x86/iR5900Analysis.h
x86/iR5900Jump.h
x86/iR5900LoadStore.h
x86/iR5900Move.h
x86/iR5900MultDiv.h
x86/iR5900Shift.h
x86/microVU_Alloc.inl
x86/microVU_Analyze.inl
x86/microVU_Branch.inl
-13
View File
@@ -6,19 +6,6 @@
#include "R5900OpcodeTables.h"
#include "R5900.h"
// TODO(Stenzek): Move headers to common code.
#include "x86/iR5900AritImm.h"
#include "x86/iR5900Arit.h"
#include "x86/iR5900MultDiv.h"
#include "x86/iR5900Shift.h"
#include "x86/iR5900Branch.h"
#include "x86/iR5900Jump.h"
#include "x86/iR5900LoadStore.h"
#include "x86/iR5900Move.h"
#include "x86/iMMI.h"
#include "x86/iCOP0.h"
#include "x86/iFPU.h"
namespace R5900
{
namespace Opcodes
+279
View File
@@ -118,6 +118,285 @@ namespace R5900
void recTEQI();
void recTNEI();
// Arithmetic with immediate (OP rt, rs, immediate)
void recADDI();
void recADDIU();
void recDADDI();
void recDADDIU();
void recANDI();
void recORI();
void recXORI();
void recSLTI();
void recSLTIU();
// Register arithmetic (OP rd, rs, rt)
void recADD();
void recADDU();
void recDADD();
void recDADDU();
void recSUB();
void recSUBU();
void recDSUB();
void recDSUBU();
void recAND();
void recOR();
void recXOR();
void recNOR();
void recSLT();
void recSLTU();
// Register mult/div (OP rs, rt)
void recMULT();
void recMULTU();
void recDIV();
void recDIVU();
// Shift arithmetic (OP rd, rt, sa / OP rd, rt, rs)
void recSLL();
void recSRL();
void recSRA();
void recDSLL();
void recDSRL();
void recDSRA();
void recDSLL32();
void recDSRL32();
void recDSRA32();
void recSLLV();
void recSRLV();
void recSRAV();
void recDSLLV();
void recDSRLV();
void recDSRAV();
// Branch (OP rs, rt, offset)
void recBEQ();
void recBEQL();
void recBNE();
void recBNEL();
void recBLTZ();
void recBLTZL();
void recBLTZAL();
void recBLTZALL();
void recBGTZ();
void recBGTZL();
void recBLEZ();
void recBLEZL();
void recBGEZ();
void recBGEZL();
void recBGEZAL();
void recBGEZALL();
// Jump (OP target / OP rs)
void recJ();
void recJAL();
void recJR();
void recJALR();
// Load and store for GPR (OP rt, offset(base))
void recLB();
void recLBU();
void recLH();
void recLHU();
void recLW();
void recLWU();
void recLWL();
void recLWR();
void recLD();
void recLDR();
void recLDL();
void recLQ();
void recSB();
void recSH();
void recSW();
void recSWL();
void recSWR();
void recSD();
void recSDL();
void recSDR();
void recSQ();
void recLWC1();
void recSWC1();
void recLQC2();
void recSQC2();
// Move (OP rd, rs)
void recLUI();
void recMFLO();
void recMFHI();
void recMTLO();
void recMTHI();
void recMOVN();
void recMOVZ();
// These are instructions contained in the MMI "opcode space" but are not
// actually MMI instructions. They are just specialized versions of standard
// instructions that "fit" into the second pipeline of the EE.
void recMADD1();
void recMADDU1();
void recMADD();
void recMADDU();
void recMTHI1();
void recMTLO1();
void recMFHI1();
void recMFLO1();
void recMULT1();
void recMULTU1();
void recDIV1();
void recDIVU1();
// Multimedia Extensions (MMI)
namespace MMI
{
void recPLZCW();
void recMMI0();
void recMMI1();
void recMMI2();
void recMMI3();
void recPMFHL();
void recPMTHL();
void recPMAXW();
void recPMINW();
void recPPACW();
void recPEXTLH();
void recPPACH();
void recPEXTLB();
void recPPACB();
void recPEXT5();
void recPPAC5();
void recPABSW();
void recPADSBH();
void recPABSH();
void recPADDUW();
void recPSUBUW();
void recPSUBUH();
void recPEXTUH();
void recPSUBUB();
void recPEXTUB();
void recQFSRV();
void recPMADDW();
void recPSLLVW();
void recPSRLVW();
void recPMSUBW();
void recPINTH();
void recPMULTW();
void recPDIVW();
void recPMADDH();
void recPHMADH();
void recPMSUBH();
void recPHMSBH();
void recPEXEH();
void recPREVH();
void recPMULTH();
void recPDIVBW();
void recPEXEW();
void recPROT3W();
void recPMADDUW();
void recPSRAVW();
void recPINTEH();
void recPMULTUW();
void recPDIVUW();
void recPEXCH();
void recPEXCW();
void recPSRLH();
void recPSRLW();
void recPSRAH();
void recPSRAW();
void recPSLLH();
void recPSLLW();
void recPMAXH();
void recPCGTB();
void recPCGTH();
void recPCGTW();
void recPADDSB();
void recPADDSH();
void recPADDSW();
void recPSUBSB();
void recPSUBSH();
void recPSUBSW();
void recPADDB();
void recPADDH();
void recPADDW();
void recPSUBB();
void recPSUBH();
void recPSUBW();
void recPEXTLW();
void recPEXTUW();
void recPMINH();
void recPCEQB();
void recPCEQH();
void recPCEQW();
void recPADDUB();
void recPADDUH();
void recPMFHI();
void recPMFLO();
void recPAND();
void recPXOR();
void recPCPYLD();
void recPNOR();
void recPMTHI();
void recPMTLO();
void recPCPYUD();
void recPOR();
void recPCPYH();
} // namespace MMI
// System Control Coprocessor (COP0)
namespace COP0
{
void recMFC0();
void recMTC0();
void recBC0F();
void recBC0T();
void recBC0FL();
void recBC0TL();
void recTLBR();
void recTLBWI();
void recTLBWR();
void recTLBP();
void recERET();
void recDI();
void recEI();
} // namespace COP0
// Floating Point Unit Coprocessor (COP1 / FPU)
namespace COP1
{
void recMFC1();
void recCFC1();
void recMTC1();
void recCTC1();
void recCOP1_BC1();
void recCOP1_S();
void recCOP1_W();
void recC_EQ();
void recC_F();
void recC_LT();
void recC_LE();
void recADD_S();
void recSUB_S();
void recMUL_S();
void recDIV_S();
void recSQRT_S();
void recABS_S();
void recMOV_S();
void recNEG_S();
void recRSQRT_S();
void recADDA_S();
void recSUBA_S();
void recMULA_S();
void recMADD_S();
void recMSUB_S();
void recMADDA_S();
void recMSUBA_S();
void recCVT_S();
void recCVT_W();
void recMAX_S();
void recMIN_S();
void recBC1F();
void recBC1T();
void recBC1FL();
void recBC1TL();
} // namespace COP1
} }
///////////////////////////////////////////////////////////////////////////
-11
View File
@@ -910,18 +910,7 @@
<ClInclude Include="R5900.h" />
<ClInclude Include="R5900OpcodeTables.h" />
<ClInclude Include="COP0.h" />
<ClInclude Include="x86\iCOP0.h" />
<ClInclude Include="x86\iFPU.h" />
<ClInclude Include="x86\iMMI.h" />
<ClInclude Include="x86\iR5900.h" />
<ClInclude Include="x86\iR5900Arit.h" />
<ClInclude Include="x86\iR5900AritImm.h" />
<ClInclude Include="x86\iR5900Branch.h" />
<ClInclude Include="x86\iR5900Jump.h" />
<ClInclude Include="x86\iR5900LoadStore.h" />
<ClInclude Include="x86\iR5900Move.h" />
<ClInclude Include="x86\iR5900MultDiv.h" />
<ClInclude Include="x86\iR5900Shift.h" />
<ClInclude Include="IopBios.h" />
<ClInclude Include="IopCounters.h" />
<ClInclude Include="IopDma.h" />
-33
View File
@@ -1559,42 +1559,9 @@
<ClInclude Include="COP0.h">
<Filter>System\Ps2\EmotionEngine\EE</Filter>
</ClInclude>
<ClInclude Include="x86\iCOP0.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="x86\iFPU.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="x86\iMMI.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="x86\iR5900.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="x86\iR5900Arit.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="x86\iR5900AritImm.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="x86\iR5900Branch.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="x86\iR5900Jump.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="x86\iR5900LoadStore.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="x86\iR5900Move.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="x86\iR5900MultDiv.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="x86\iR5900Shift.h">
<Filter>System\Ps2\EmotionEngine\EE\Dynarec</Filter>
</ClInclude>
<ClInclude Include="IopBios.h">
<Filter>System\Ps2\Iop</Filter>
</ClInclude>
+1 -1
View File
@@ -8,9 +8,9 @@
// suffice.
#include "Common.h"
#include "COP0.h"
#include "R5900OpcodeTables.h"
#include "iR5900.h"
#include "iCOP0.h"
namespace Interp = R5900::Interpreter::OpcodeImpl::COP0;
using namespace x86Emitter;
-35
View File
@@ -1,35 +0,0 @@
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#pragma once
#include "COP0.h"
/*********************************************************
* COP0 opcodes *
* *
*********************************************************/
namespace R5900 {
namespace Dynarec {
namespace OpcodeImpl {
namespace COP0 {
void recMFC0();
void recMTC0();
void recBC0F();
void recBC0T();
void recBC0FL();
void recBC0TL();
void recTLBR();
void recTLBWI();
void recTLBWR();
void recTLBP();
void recERET();
void recDI();
void recEI();
} // namespace COP0
} // namespace OpcodeImpl
} // namespace Dynarec
} // namespace R5900
-1
View File
@@ -4,7 +4,6 @@
#include "Common.h"
#include "R5900OpcodeTables.h"
#include "iR5900.h"
#include "iFPU.h"
using namespace x86Emitter;
-53
View File
@@ -1,53 +0,0 @@
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#pragma once
alignas(16) extern const u32 g_minvals[4];
alignas(16) extern const u32 g_maxvals[4];
namespace R5900 {
namespace Dynarec {
namespace OpcodeImpl {
namespace COP1 {
void recMFC1();
void recCFC1();
void recMTC1();
void recCTC1();
void recCOP1_BC1();
void recCOP1_S();
void recCOP1_W();
void recC_EQ();
void recC_F();
void recC_LT();
void recC_LE();
void recADD_S();
void recSUB_S();
void recMUL_S();
void recDIV_S();
void recSQRT_S();
void recABS_S();
void recMOV_S();
void recNEG_S();
void recRSQRT_S();
void recADDA_S();
void recSUBA_S();
void recMULA_S();
void recMADD_S();
void recMSUB_S();
void recMADDA_S();
void recMSUBA_S();
void recCVT_S();
void recCVT_W();
void recMAX_S();
void recMIN_S();
void recBC1F();
void recBC1T();
void recBC1FL();
void recBC1TL();
} // namespace COP1
} // namespace OpcodeImpl
} // namespace Dynarec
} // namespace R5900
-1
View File
@@ -5,7 +5,6 @@
#include "R5900OpcodeTables.h"
#include "common/emitter/x86emitter.h"
#include "iR5900.h"
#include "iFPU.h"
/* This is a version of the FPU that emulates an exponent of 0xff and overflow/underflow flags */
-1
View File
@@ -4,7 +4,6 @@
#include "Common.h"
#include "R5900OpcodeTables.h"
#include "iR5900.h"
#include "iMMI.h"
#include "common/BitUtils.h"
using namespace x86Emitter;
-126
View File
@@ -1,126 +0,0 @@
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#pragma once
namespace R5900 {
namespace Dynarec {
namespace OpcodeImpl {
// These are instructions contained the MMI "opcode space" but are not
// actually MMI instructions. They are just specialized versions of standard
// instructions that "fit" into the second pipeline of the EE.
void recMADD1();
void recMADDU1();
void recMADD();
void recMADDU();
void recMTHI1();
void recMTLO1();
void recMFHI1();
void recMFLO1();
void recMULT1();
void recMULTU1();
void recDIV1();
void recDIVU1();
namespace MMI {
void recPLZCW();
void recMMI0();
void recMMI1();
void recMMI2();
void recMMI3();
void recPMFHL();
void recPMTHL();
void recPMAXW();
void recPMINW();
void recPPACW();
void recPEXTLH();
void recPPACH();
void recPEXTLB();
void recPPACB();
void recPEXT5();
void recPPAC5();
void recPABSW();
void recPADSBH();
void recPABSH();
void recPADDUW();
void recPSUBUW();
void recPSUBUH();
void recPEXTUH();
void recPSUBUB();
void recPEXTUB();
void recQFSRV();
void recPMADDW();
void recPSLLVW();
void recPSRLVW();
void recPMSUBW();
void recPINTH();
void recPMULTW();
void recPDIVW();
void recPMADDH();
void recPHMADH();
void recPMSUBH();
void recPHMSBH();
void recPEXEH();
void recPREVH();
void recPMULTH();
void recPDIVBW();
void recPEXEW();
void recPROT3W();
void recPMADDUW();
void recPSRAVW();
void recPINTEH();
void recPMULTUW();
void recPDIVUW();
void recPEXCH();
void recPEXCW();
void recPSRLH();
void recPSRLW();
void recPSRAH();
void recPSRAW();
void recPSLLH();
void recPSLLW();
void recPMAXH();
void recPCGTB();
void recPCGTH();
void recPCGTW();
void recPADDSB();
void recPADDSH();
void recPADDSW();
void recPSUBSB();
void recPSUBSH();
void recPSUBSW();
void recPADDB();
void recPADDH();
void recPADDW();
void recPSUBB();
void recPSUBH();
void recPSUBW();
void recPEXTLW();
void recPEXTUW();
void recPMINH();
void recPCEQB();
void recPCEQH();
void recPCEQW();
void recPADDUB();
void recPADDUH();
void recPMFHI();
void recPMFLO();
void recPAND();
void recPXOR();
void recPCPYLD();
void recPNOR();
void recPMTHI();
void recPMTLO();
void recPCPYUD();
void recPOR();
void recPCPYH();
} // namespace MMI
} // namespace OpcodeImpl
} // namespace Dynarec
} // namespace R5900
+4
View File
@@ -21,6 +21,10 @@ extern u32 target; // branch target
extern u32 s_nBlockCycles; // cycles of current block recompiling
extern bool s_nBlockInterlocked; // Current block has VU0 interlocking
// FPU clamping constants
alignas(16) extern const u32 g_minvals[4];
alignas(16) extern const u32 g_maxvals[4];
// x86 can use shorter displacement if it fits in an s8, so offset 144 bytes into the cpuRegs
// This will allow us to reach r1-r16 with a shorter encoding
// TODO: Actually figure out what things are used most often, maybe rearrange the cpuRegs struct, and point at that
-32
View File
@@ -1,32 +0,0 @@
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#pragma once
/*********************************************************
* Register arithmetic *
* Format: OP rd, rs, rt *
*********************************************************/
namespace R5900 {
namespace Dynarec {
namespace OpcodeImpl {
void recADD();
void recADDU();
void recDADD();
void recDADDU();
void recSUB();
void recSUBU();
void recDSUB();
void recDSUBU();
void recAND();
void recOR();
void recXOR();
void recNOR();
void recSLT();
void recSLTU();
} // namespace OpcodeImpl
} // namespace Dynarec
} // namespace R5900
-27
View File
@@ -1,27 +0,0 @@
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#pragma once
/*********************************************************
* Arithmetic with immediate operand *
* Format: OP rt, rs, immediate *
*********************************************************/
namespace R5900 {
namespace Dynarec {
namespace OpcodeImpl {
void recADDI();
void recADDIU();
void recDADDI();
void recDADDIU();
void recANDI();
void recORI();
void recXORI();
void recSLTI();
void recSLTIU();
} // namespace OpcodeImpl
} // namespace Dynarec
} // namespace R5900
-34
View File
@@ -1,34 +0,0 @@
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#pragma once
/*********************************************************
* Shift arithmetic with constant shift *
* Format: OP rd, rt, sa *
*********************************************************/
namespace R5900 {
namespace Dynarec {
namespace OpcodeImpl {
void recBEQ();
void recBEQL();
void recBNE();
void recBNEL();
void recBLTZ();
void recBLTZL();
void recBLTZAL();
void recBLTZALL();
void recBGTZ();
void recBGTZL();
void recBLEZ();
void recBLEZL();
void recBGEZ();
void recBGEZL();
void recBGEZAL();
void recBGEZALL();
} // namespace OpcodeImpl
} // namespace Dynarec
} // namespace R5900
-22
View File
@@ -1,22 +0,0 @@
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#pragma once
/*********************************************************
* Jump to target *
* Format: OP target *
*********************************************************/
namespace R5900 {
namespace Dynarec {
namespace OpcodeImpl {
void recJ();
void recJAL();
void recJR();
void recJALR();
} // namespace OpcodeImpl
} // namespace Dynarec
} // namespace R5900
-43
View File
@@ -1,43 +0,0 @@
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#pragma once
/*********************************************************
* Load and store for GPR *
* Format: OP rt, offset(base) *
*********************************************************/
namespace R5900 {
namespace Dynarec {
namespace OpcodeImpl {
void recLB();
void recLBU();
void recLH();
void recLHU();
void recLW();
void recLWU();
void recLWL();
void recLWR();
void recLD();
void recLDR();
void recLDL();
void recLQ();
void recSB();
void recSH();
void recSW();
void recSWL();
void recSWR();
void recSD();
void recSDL();
void recSDR();
void recSQ();
void recLWC1();
void recSWC1();
void recLQC2();
void recSQC2();
} // namespace OpcodeImpl
} // namespace Dynarec
} // namespace R5900
-20
View File
@@ -1,20 +0,0 @@
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#pragma once
namespace R5900 {
namespace Dynarec {
namespace OpcodeImpl {
void recLUI();
void recMFLO();
void recMFHI();
void recMTLO();
void recMTHI();
void recMOVN();
void recMOVZ();
} // namespace OpcodeImpl
} // namespace Dynarec
} // namespace R5900
-22
View File
@@ -1,22 +0,0 @@
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#pragma once
/*********************************************************
* Register mult/div & Register trap logic *
* Format: OP rs, rt *
*********************************************************/
namespace R5900 {
namespace Dynarec {
namespace OpcodeImpl {
void recMULT();
void recMULTU();
void recDIV();
void recDIVU();
} // namespace OpcodeImpl
} // namespace Dynarec
} // namespace R5900
-34
View File
@@ -1,34 +0,0 @@
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#pragma once
/*********************************************************
* Shift arithmetic with constant shift *
* Format: OP rd, rt, sa *
*********************************************************/
namespace R5900 {
namespace Dynarec {
namespace OpcodeImpl {
void recSLL();
void recSRL();
void recSRA();
void recDSLL();
void recDSRL();
void recDSRA();
void recDSLL32();
void recDSRL32();
void recDSRA32();
void recSLLV();
void recSRLV();
void recSRAV();
void recDSLLV();
void recDSRLV();
void recDSRAV();
} // namespace OpcodeImpl
} // namespace Dynarec
} // namespace R5900
-1
View File
@@ -4,7 +4,6 @@
#include "Common.h"
#include "R5900OpcodeTables.h"
#include "x86/iR5900.h"
#include "x86/iR5900LoadStore.h"
using namespace x86Emitter;
-3
View File
@@ -7,9 +7,6 @@
#include "VU.h"
#include "VUmicro.h"
#include "vtlb.h"
#include "x86/iCOP0.h"
#include "x86/iFPU.h"
#include "x86/iMMI.h"
#include "x86/iR5900.h"
using namespace x86Emitter;