mirror of https://github.com/PCSX2/pcsx2.git
microVU: Save PC when processing T/D bits on branches, this is to ensure the rest of the block gets compiled correctly. Could have been the reason VP2 was freaking out after loading a save.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5593 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
2ef95df6e1
commit
31221a29bd
|
@ -482,8 +482,10 @@ void mVUDoDBit(microVU& mVU, microFlagCycles* mFC)
|
||||||
{
|
{
|
||||||
bool isBranch = false;
|
bool isBranch = false;
|
||||||
JccComparisonType Jcc;
|
JccComparisonType Jcc;
|
||||||
|
u32 savedPC = 0;
|
||||||
|
|
||||||
incPC(2); //Check next slot for branch delay, if not, that's where the VU will resume anyway.
|
incPC(2); //Check next slot for branch delay, if not, that's where the VU will resume anyway.
|
||||||
|
savedPC = iPC; //Save PC as it's about to get modified if it's a branch!
|
||||||
|
|
||||||
if(mVUinfo.isBdelay) isBranch = true;
|
if(mVUinfo.isBdelay) isBranch = true;
|
||||||
|
|
||||||
|
@ -531,14 +533,17 @@ void mVUDoDBit(microVU& mVU, microFlagCycles* mFC)
|
||||||
else
|
else
|
||||||
mVUDTendProgram(mVU, mFC, 1);
|
mVUDTendProgram(mVU, mFC, 1);
|
||||||
eJMP.SetTarget();
|
eJMP.SetTarget();
|
||||||
|
iPC = savedPC;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mVUDoTBit(microVU& mVU, microFlagCycles* mFC)
|
void mVUDoTBit(microVU& mVU, microFlagCycles* mFC)
|
||||||
{
|
{
|
||||||
bool isBranch = false;
|
bool isBranch = false;
|
||||||
JccComparisonType Jcc;
|
JccComparisonType Jcc;
|
||||||
|
u32 savedPC = 0;
|
||||||
|
|
||||||
incPC(2); //Check next slot for branch delay, if not, that's where the VU will resume anyway.
|
incPC(2); //Check next slot for branch delay, if not, that's where the VU will resume anyway.
|
||||||
|
savedPC = iPC; //Save PC as it's about to get modified if it's a branch!
|
||||||
|
|
||||||
if(mVUinfo.isBdelay) isBranch = true;
|
if(mVUinfo.isBdelay) isBranch = true;
|
||||||
|
|
||||||
|
@ -584,6 +589,7 @@ void mVUDoTBit(microVU& mVU, microFlagCycles* mFC)
|
||||||
else
|
else
|
||||||
mVUDTendProgram(mVU, mFC, 1);
|
mVUDTendProgram(mVU, mFC, 1);
|
||||||
eJMP.SetTarget();
|
eJMP.SetTarget();
|
||||||
|
iPC = savedPC;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mVUSaveFlags(microVU& mVU,microFlagCycles &mFC, microFlagCycles &mFCBackup)
|
void mVUSaveFlags(microVU& mVU,microFlagCycles &mFC, microFlagCycles &mFCBackup)
|
||||||
|
|
Loading…
Reference in New Issue