Core: Add DADDI

This commit is contained in:
zilmar 2022-08-15 10:05:16 +09:30
parent 630778a41e
commit e724595ac2
9 changed files with 44 additions and 2 deletions

View File

@ -134,7 +134,7 @@ R4300iOp::Func * R4300iOp::BuildInterpreter()
Jump_Opcode[21] = BNEL;
Jump_Opcode[22] = BLEZL;
Jump_Opcode[23] = BGTZL;
Jump_Opcode[24] = UnknownOpcode;
Jump_Opcode[24] = DADDI;
Jump_Opcode[25] = DADDIU;
Jump_Opcode[26] = LDL;
Jump_Opcode[27] = LDR;
@ -977,6 +977,11 @@ void R4300iOp::BGTZL()
}
}
void R4300iOp::DADDI()
{
_GPR[m_Opcode.rt].DW = _GPR[m_Opcode.rs].DW + (int64_t)((int16_t)m_Opcode.immediate);
}
void R4300iOp::DADDIU()
{
_GPR[m_Opcode.rt].DW = _GPR[m_Opcode.rs].DW + (int64_t)((int16_t)m_Opcode.immediate);

View File

@ -31,6 +31,7 @@ public:
static void BNEL();
static void BLEZL();
static void BGTZL();
static void DADDI();
static void DADDIU();
static void LDL();
static void LDR();

View File

@ -43,7 +43,7 @@ R4300iOp32::Func * R4300iOp32::BuildInterpreter()
Jump_Opcode[21] = BNEL;
Jump_Opcode[22] = BLEZL;
Jump_Opcode[23] = BGTZL;
Jump_Opcode[24] = R4300iOp::UnknownOpcode;
Jump_Opcode[24] = R4300iOp::DADDI;
Jump_Opcode[25] = R4300iOp::DADDIU;
Jump_Opcode[26] = R4300iOp::LDL;
Jump_Opcode[27] = R4300iOp::LDR;

View File

@ -2106,6 +2106,20 @@ void CArmRecompilerOps::LUI()
m_RegWorkingSet.SetMipsRegState(m_Opcode.rt, CRegInfo::STATE_CONST_32_SIGN);
}
void CArmRecompilerOps::DADDI()
{
if (m_Opcode.rs != 0) { WriteBack_GPR(m_Opcode.rs, false); }
if (m_Opcode.rt != 0) { UnMap_GPR(m_Opcode.rt, true); }
if (g_Settings->LoadBool(Game_32Bit))
{
CompileInterpterCall((void *)R4300iOp32::DADDI, "R4300iOp32::DADDI");
}
else
{
CompileInterpterCall((void *)R4300iOp::DADDI, "R4300iOp::DADDI");
}
}
void CArmRecompilerOps::DADDIU()
{
if (m_Opcode.rs != 0) { WriteBack_GPR(m_Opcode.rs, false); }

View File

@ -42,6 +42,7 @@ public:
void ORI();
void XORI();
void LUI();
void DADDI();
void DADDIU();
void LDL();
void LDR();

View File

@ -567,6 +567,7 @@ bool CCodeSection::GenerateNativeCode(uint32_t Test)
case R4300i_BNEL: m_RecompilerOps->Compile_BranchLikely(CRecompilerOps::CompareTypeBNE, false); break;
case R4300i_BGTZL: m_RecompilerOps->Compile_BranchLikely(CRecompilerOps::CompareTypeBGTZ, false); break;
case R4300i_BLEZL: m_RecompilerOps->Compile_BranchLikely(CRecompilerOps::CompareTypeBLEZ, false); break;
case R4300i_DADDI: m_RecompilerOps->DADDI(); break;
case R4300i_DADDIU: m_RecompilerOps->DADDIU(); break;
case R4300i_LDL: m_RecompilerOps->LDL(); break;
case R4300i_LDR: m_RecompilerOps->LDR(); break;

View File

@ -59,6 +59,7 @@ public:
virtual void ORI() = 0;
virtual void XORI() = 0;
virtual void LUI() = 0;
virtual void DADDI() = 0;
virtual void DADDIU() = 0;
virtual void LDL() = 0;
virtual void LDR() = 0;

View File

@ -2614,6 +2614,24 @@ void CX86RecompilerOps::LUI()
m_RegWorkingSet.SetMipsRegState(m_Opcode.rt, CRegInfo::STATE_CONST_32_SIGN);
}
void CX86RecompilerOps::DADDI()
{
if (m_Opcode.rs != 0)
{
UnMap_GPR(m_Opcode.rs, true);
}
if (m_Opcode.rs != 0)
{
UnMap_GPR(m_Opcode.rt, true);
}
m_RegWorkingSet.BeforeCallDirect();
MoveConstToVariable(m_Opcode.Value, &R4300iOp::m_Opcode.Value, "R4300iOp::m_Opcode.Value");
Call_Direct((void *)R4300iOp::DADDI, "R4300iOp::DADDI");
m_RegWorkingSet.AfterCallDirect();
}
void CX86RecompilerOps::DADDIU()
{
if (m_Opcode.rs != 0)

View File

@ -55,6 +55,7 @@ public:
void ORI();
void XORI();
void LUI();
void DADDI();
void DADDIU();
void LDL();
void LDR();