mirror of
https://github.com/libretro/Play-.git
synced 2025-02-13 13:06:43 +00:00
Added VMFIR.
git-svn-id: http://svn.purei.org/purei/trunk@1019 b36208d7-6611-0410-8bec-b1987f11c4a2
This commit is contained in:
parent
97e5401808
commit
ef771a41f7
@ -573,6 +573,12 @@ void CCOP_VU::VSQRT()
|
||||
VUShared::SQRT(m_codeGen, m_nFT, m_nFTF, 0);
|
||||
}
|
||||
|
||||
//0F
|
||||
void CCOP_VU::VMFIR()
|
||||
{
|
||||
VUShared::MFIR(m_codeGen, m_nDest, m_nIT, m_nIS);
|
||||
}
|
||||
|
||||
//10
|
||||
void CCOP_VU::VRGET()
|
||||
{
|
||||
@ -712,7 +718,7 @@ CCOP_VU::InstructionFuncConstant CCOP_VU::m_pOpVx1[0x20] =
|
||||
//0x00
|
||||
&CCOP_VU::VADDAbc, &CCOP_VU::VSUBAbc, &CCOP_VU::VMADDAbc, &CCOP_VU::VMSUBAbc, &CCOP_VU::VITOF4, &CCOP_VU::VFTOI4, &CCOP_VU::VMULAbc, &CCOP_VU::VABS,
|
||||
//0x08
|
||||
&CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::VMADDA, &CCOP_VU::VMSUBA, &CCOP_VU::VMR32, &CCOP_VU::VSQI, &CCOP_VU::VSQRT, &CCOP_VU::Illegal,
|
||||
&CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::VMADDA, &CCOP_VU::VMSUBA, &CCOP_VU::VMR32, &CCOP_VU::VSQI, &CCOP_VU::VSQRT, &CCOP_VU::VMFIR,
|
||||
//0x10
|
||||
&CCOP_VU::VRGET, &CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::Illegal, &CCOP_VU::Illegal,
|
||||
//0x18
|
||||
|
@ -122,6 +122,7 @@ private:
|
||||
void VMR32();
|
||||
void VSQI();
|
||||
void VSQRT();
|
||||
void VMFIR();
|
||||
void VRGET();
|
||||
|
||||
//V2
|
||||
|
@ -318,7 +318,7 @@ INSTRUCTION CCOP_VU::m_cReflVX1[32] =
|
||||
{ "VMR32", NULL, CopyMnemonic, ReflOpFtFs, NULL, NULL },
|
||||
{ "VSQI", NULL, CopyMnemonic, ReflOpFsDstItInc, NULL, NULL },
|
||||
{ "VSQRT", NULL, CopyMnemonic, ReflOpQFtf, NULL, NULL },
|
||||
{ NULL, NULL, NULL, NULL, NULL, NULL },
|
||||
{ "VMFIR", NULL, CopyMnemonic, ReflOpFtIs, NULL, NULL },
|
||||
//0x10
|
||||
{ "VRGET", NULL, CopyMnemonic, ReflOpFtR, NULL, NULL },
|
||||
{ NULL, NULL, NULL, NULL, NULL, NULL },
|
||||
|
@ -218,7 +218,6 @@ private:
|
||||
static void ReflOpItOfsIsDst(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
static void ReflOpImm24(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
static void ReflOpVi1Imm24(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
static void ReflOpFtIs(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
static void ReflOpFtDstIsInc(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
static void ReflOpFtDstIsDec(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
static void ReflOpFsDstOfsIt(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
|
@ -665,14 +665,7 @@ void CMA_VU::CLower::SQRT()
|
||||
//0F
|
||||
void CMA_VU::CLower::MFIR()
|
||||
{
|
||||
for(unsigned int i = 0; i < 4; i++)
|
||||
{
|
||||
if(!VUShared::DestinationHasElement(m_nDest, i)) continue;
|
||||
|
||||
VUShared::PushIntegerRegister(m_codeGen, m_nIS);
|
||||
m_codeGen->SignExt16();
|
||||
m_codeGen->PullRel(VUShared::GetVectorElement(m_nIT, i));
|
||||
}
|
||||
VUShared::MFIR(m_codeGen, m_nDest, m_nIT, m_nIS);
|
||||
}
|
||||
|
||||
//10
|
||||
|
@ -128,15 +128,6 @@ void CMA_VU::CLower::ReflOpVi1Imm24(INSTRUCTION* pInstr, CMIPS* pCtx, uint32 nAd
|
||||
sprintf(sText, "VI1, $%0.6X", nImm);
|
||||
}
|
||||
|
||||
void CMA_VU::CLower::ReflOpFtIs(INSTRUCTION* pInstr, CMIPS* pCtx, uint32 nAddress, uint32 nOpcode, char* sText, unsigned int nCount)
|
||||
{
|
||||
uint8 nDest = static_cast<uint8>((nOpcode >> 21) & 0x000F);
|
||||
uint8 nFT = static_cast<uint8>((nOpcode >> 16) & 0x001F);
|
||||
uint8 nIS = static_cast<uint8>((nOpcode >> 11) & 0x001F);
|
||||
|
||||
sprintf(sText, "VF%i%s, VI%i", nFT, m_sDestination[nDest], nIS);
|
||||
}
|
||||
|
||||
void CMA_VU::CLower::ReflOpFtDstIsInc(INSTRUCTION* pInstr, CMIPS* pCtx, uint32 nAddress, uint32 nOpcode, char* sText, unsigned int nCount)
|
||||
{
|
||||
uint8 nDest = static_cast<uint8>((nOpcode >> 21) & 0x000F);
|
||||
|
@ -756,6 +756,18 @@ void VUShared::MSUBAi(CMipsJitter* codeGen, uint8 dest, uint8 fs)
|
||||
true);
|
||||
}
|
||||
|
||||
void VUShared::MFIR(CMipsJitter* codeGen, uint8 dest, uint8 ft, uint8 is)
|
||||
{
|
||||
for(unsigned int i = 0; i < 4; i++)
|
||||
{
|
||||
if(!VUShared::DestinationHasElement(dest, i)) continue;
|
||||
|
||||
PushIntegerRegister(codeGen, is);
|
||||
codeGen->SignExt16();
|
||||
codeGen->PullRel(VUShared::GetVectorElement(ft, i));
|
||||
}
|
||||
}
|
||||
|
||||
void VUShared::MTIR(CMipsJitter* codeGen, uint8 it, uint8 fs, uint8 fsf)
|
||||
{
|
||||
codeGen->PushRel(offsetof(CMIPS, m_State.nCOP2[fs].nV[fsf]));
|
||||
|
@ -119,6 +119,7 @@ namespace VUShared
|
||||
void MSUBA(CMipsJitter*, uint8, uint8, uint8);
|
||||
void MSUBAbc(CMipsJitter*, uint8, uint8, uint8, uint8);
|
||||
void MSUBAi(CMipsJitter*, uint8, uint8);
|
||||
void MFIR(CMipsJitter*, uint8, uint8, uint8);
|
||||
void MTIR(CMipsJitter*, uint8, uint8, uint8);
|
||||
void MUL(CMipsJitter*, uint8, uint8, uint8, uint8);
|
||||
void MULbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint8, uint32);
|
||||
@ -159,6 +160,7 @@ namespace VUShared
|
||||
void ReflOpFsDstItDec(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
void ReflOpFsDstItInc(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
void ReflOpFtFs(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
void ReflOpFtIs(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
void ReflOpClip(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
void ReflOpAccFsI(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
void ReflOpAccFsQ(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
||||
|
@ -120,6 +120,15 @@ void VUShared::ReflOpFtFs(INSTRUCTION* pInstr, CMIPS* pCtx, uint32 nAddress, uin
|
||||
sprintf(sText, "VF%i%s, VF%i%s", nFT, m_sDestination[nDest], nFS, m_sDestination[nDest]);
|
||||
}
|
||||
|
||||
void VUShared::ReflOpFtIs(INSTRUCTION* pInstr, CMIPS* pCtx, uint32 nAddress, uint32 nOpcode, char* sText, unsigned int nCount)
|
||||
{
|
||||
uint8 nDest = static_cast<uint8>((nOpcode >> 21) & 0x000F);
|
||||
uint8 nFT = static_cast<uint8>((nOpcode >> 16) & 0x001F);
|
||||
uint8 nIS = static_cast<uint8>((nOpcode >> 11) & 0x001F);
|
||||
|
||||
sprintf(sText, "VF%i%s, VI%i", nFT, m_sDestination[nDest], nIS);
|
||||
}
|
||||
|
||||
void VUShared::ReflOpClip(INSTRUCTION* pInstr, CMIPS* pCtx, uint32 nAddress, uint32 nOpcode, char* sText, unsigned int nCount)
|
||||
{
|
||||
uint8 nFT = (uint8)((nOpcode >> 16) & 0x001F);
|
||||
|
Loading…
x
Reference in New Issue
Block a user