Core: Add DADDI
This commit is contained in:
parent
630778a41e
commit
e724595ac2
|
@ -134,7 +134,7 @@ R4300iOp::Func * R4300iOp::BuildInterpreter()
|
||||||
Jump_Opcode[21] = BNEL;
|
Jump_Opcode[21] = BNEL;
|
||||||
Jump_Opcode[22] = BLEZL;
|
Jump_Opcode[22] = BLEZL;
|
||||||
Jump_Opcode[23] = BGTZL;
|
Jump_Opcode[23] = BGTZL;
|
||||||
Jump_Opcode[24] = UnknownOpcode;
|
Jump_Opcode[24] = DADDI;
|
||||||
Jump_Opcode[25] = DADDIU;
|
Jump_Opcode[25] = DADDIU;
|
||||||
Jump_Opcode[26] = LDL;
|
Jump_Opcode[26] = LDL;
|
||||||
Jump_Opcode[27] = LDR;
|
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()
|
void R4300iOp::DADDIU()
|
||||||
{
|
{
|
||||||
_GPR[m_Opcode.rt].DW = _GPR[m_Opcode.rs].DW + (int64_t)((int16_t)m_Opcode.immediate);
|
_GPR[m_Opcode.rt].DW = _GPR[m_Opcode.rs].DW + (int64_t)((int16_t)m_Opcode.immediate);
|
||||||
|
|
|
@ -31,6 +31,7 @@ public:
|
||||||
static void BNEL();
|
static void BNEL();
|
||||||
static void BLEZL();
|
static void BLEZL();
|
||||||
static void BGTZL();
|
static void BGTZL();
|
||||||
|
static void DADDI();
|
||||||
static void DADDIU();
|
static void DADDIU();
|
||||||
static void LDL();
|
static void LDL();
|
||||||
static void LDR();
|
static void LDR();
|
||||||
|
|
|
@ -43,7 +43,7 @@ R4300iOp32::Func * R4300iOp32::BuildInterpreter()
|
||||||
Jump_Opcode[21] = BNEL;
|
Jump_Opcode[21] = BNEL;
|
||||||
Jump_Opcode[22] = BLEZL;
|
Jump_Opcode[22] = BLEZL;
|
||||||
Jump_Opcode[23] = BGTZL;
|
Jump_Opcode[23] = BGTZL;
|
||||||
Jump_Opcode[24] = R4300iOp::UnknownOpcode;
|
Jump_Opcode[24] = R4300iOp::DADDI;
|
||||||
Jump_Opcode[25] = R4300iOp::DADDIU;
|
Jump_Opcode[25] = R4300iOp::DADDIU;
|
||||||
Jump_Opcode[26] = R4300iOp::LDL;
|
Jump_Opcode[26] = R4300iOp::LDL;
|
||||||
Jump_Opcode[27] = R4300iOp::LDR;
|
Jump_Opcode[27] = R4300iOp::LDR;
|
||||||
|
|
|
@ -2106,6 +2106,20 @@ void CArmRecompilerOps::LUI()
|
||||||
m_RegWorkingSet.SetMipsRegState(m_Opcode.rt, CRegInfo::STATE_CONST_32_SIGN);
|
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()
|
void CArmRecompilerOps::DADDIU()
|
||||||
{
|
{
|
||||||
if (m_Opcode.rs != 0) { WriteBack_GPR(m_Opcode.rs, false); }
|
if (m_Opcode.rs != 0) { WriteBack_GPR(m_Opcode.rs, false); }
|
||||||
|
|
|
@ -42,6 +42,7 @@ public:
|
||||||
void ORI();
|
void ORI();
|
||||||
void XORI();
|
void XORI();
|
||||||
void LUI();
|
void LUI();
|
||||||
|
void DADDI();
|
||||||
void DADDIU();
|
void DADDIU();
|
||||||
void LDL();
|
void LDL();
|
||||||
void LDR();
|
void LDR();
|
||||||
|
|
|
@ -567,6 +567,7 @@ bool CCodeSection::GenerateNativeCode(uint32_t Test)
|
||||||
case R4300i_BNEL: m_RecompilerOps->Compile_BranchLikely(CRecompilerOps::CompareTypeBNE, false); break;
|
case R4300i_BNEL: m_RecompilerOps->Compile_BranchLikely(CRecompilerOps::CompareTypeBNE, false); break;
|
||||||
case R4300i_BGTZL: m_RecompilerOps->Compile_BranchLikely(CRecompilerOps::CompareTypeBGTZ, 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_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_DADDIU: m_RecompilerOps->DADDIU(); break;
|
||||||
case R4300i_LDL: m_RecompilerOps->LDL(); break;
|
case R4300i_LDL: m_RecompilerOps->LDL(); break;
|
||||||
case R4300i_LDR: m_RecompilerOps->LDR(); break;
|
case R4300i_LDR: m_RecompilerOps->LDR(); break;
|
||||||
|
|
|
@ -59,6 +59,7 @@ public:
|
||||||
virtual void ORI() = 0;
|
virtual void ORI() = 0;
|
||||||
virtual void XORI() = 0;
|
virtual void XORI() = 0;
|
||||||
virtual void LUI() = 0;
|
virtual void LUI() = 0;
|
||||||
|
virtual void DADDI() = 0;
|
||||||
virtual void DADDIU() = 0;
|
virtual void DADDIU() = 0;
|
||||||
virtual void LDL() = 0;
|
virtual void LDL() = 0;
|
||||||
virtual void LDR() = 0;
|
virtual void LDR() = 0;
|
||||||
|
|
|
@ -2614,6 +2614,24 @@ void CX86RecompilerOps::LUI()
|
||||||
m_RegWorkingSet.SetMipsRegState(m_Opcode.rt, CRegInfo::STATE_CONST_32_SIGN);
|
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()
|
void CX86RecompilerOps::DADDIU()
|
||||||
{
|
{
|
||||||
if (m_Opcode.rs != 0)
|
if (m_Opcode.rs != 0)
|
||||||
|
|
|
@ -55,6 +55,7 @@ public:
|
||||||
void ORI();
|
void ORI();
|
||||||
void XORI();
|
void XORI();
|
||||||
void LUI();
|
void LUI();
|
||||||
|
void DADDI();
|
||||||
void DADDIU();
|
void DADDIU();
|
||||||
void LDL();
|
void LDL();
|
||||||
void LDR();
|
void LDR();
|
||||||
|
|
Loading…
Reference in New Issue