Added support for VIOR.

This commit is contained in:
Jean-Philip Desjardins 2015-03-14 04:28:51 -04:00
parent 388f60f7cd
commit a249854b68
6 changed files with 19 additions and 6 deletions

View File

@ -404,6 +404,12 @@ void CCOP_VU::VIADDI()
VUShared::IADDI(m_codeGen, m_nIT, m_nIS, m_nImm5);
}
//35
void CCOP_VU::VIOR()
{
VUShared::IOR(m_codeGen, m_nID, m_nIS, m_nIT);
}
//38
void CCOP_VU::VCALLMS()
{
@ -758,7 +764,7 @@ CCOP_VU::InstructionFuncConstant CCOP_VU::m_pOpVector[0x40] =
//0x28
&CCOP_VU::VADD, &CCOP_VU::VMADD, &CCOP_VU::VMUL, &CCOP_VU::VMAX, &CCOP_VU::VSUB, &CCOP_VU::VMSUB, &CCOP_VU::VOPMSUB, &CCOP_VU::VMINI,
//0x30
&CCOP_VU::VIADD, &CCOP_VU::Illegal, &CCOP_VU::VIADDI, &CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::Illegal,
&CCOP_VU::VIADD, &CCOP_VU::Illegal, &CCOP_VU::VIADDI, &CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::VIOR, &CCOP_VU::Illegal, &CCOP_VU::Illegal,
//0x38
&CCOP_VU::VCALLMS, &CCOP_VU::VCALLMSR, &CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::VX0, &CCOP_VU::VX1, &CCOP_VU::VX2, &CCOP_VU::VX3,
};

View File

@ -91,6 +91,7 @@ private:
void VMINI();
void VIADD();
void VIADDI();
void VIOR();
void VCALLMS();
void VCALLMSR();
void VX0();

View File

@ -245,7 +245,7 @@ INSTRUCTION CCOP_VU::m_cReflV[64] =
{ "VIADDI", NULL, CopyMnemonic, ReflOpItIsImm5, NULL, NULL },
{ NULL, NULL, NULL, NULL, NULL, NULL },
{ NULL, NULL, NULL, NULL, NULL, NULL },
{ NULL, NULL, NULL, NULL, NULL, NULL },
{ "VIOR", NULL, CopyMnemonic, ReflOpIdIsIt, NULL, NULL },
{ NULL, NULL, NULL, NULL, NULL, NULL },
{ NULL, NULL, NULL, NULL, NULL, NULL },
//0x38

View File

@ -498,10 +498,7 @@ void CMA_VU::CLower::IAND()
//35
void CMA_VU::CLower::IOR()
{
m_codeGen->PushRel(offsetof(CMIPS, m_State.nCOP2VI[m_nIS]));
m_codeGen->PushRel(offsetof(CMIPS, m_State.nCOP2VI[m_nIT]));
m_codeGen->Or();
m_codeGen->PullRel(offsetof(CMIPS, m_State.nCOP2VI[m_nID]));
VUShared::IOR(m_codeGen, m_nID, m_nIS, m_nIT);
}
//3C

View File

@ -526,6 +526,14 @@ void VUShared::ILWR(CMipsJitter* codeGen, uint8 dest, uint8 it, uint8 is, uint32
ILWbase(codeGen, it);
}
void VUShared::IOR(CMipsJitter* codeGen, uint8 id, uint8 is, uint8 it)
{
codeGen->PushRel(offsetof(CMIPS, m_State.nCOP2VI[is]));
codeGen->PushRel(offsetof(CMIPS, m_State.nCOP2VI[it]));
codeGen->Or();
codeGen->PullRel(offsetof(CMIPS, m_State.nCOP2VI[id]));
}
void VUShared::ITOF0(CMipsJitter* codeGen, uint8 nDest, uint8 nFt, uint8 nFs)
{
codeGen->MD_PushRel(offsetof(CMIPS, m_State.nCOP2[nFs]));

View File

@ -99,6 +99,7 @@ namespace VUShared
void IADDI(CMipsJitter*, uint8, uint8, uint8);
void ILWbase(CMipsJitter*, uint8);
void ILWR(CMipsJitter*, uint8, uint8, uint8, uint32);
void IOR(CMipsJitter*, uint8, uint8, uint8);
void ITOF0(CMipsJitter*, uint8, uint8, uint8);
void ITOF4(CMipsJitter*, uint8, uint8, uint8);
void ITOF12(CMipsJitter*, uint8, uint8, uint8);