Put a different fix for bad J/JALR jumps (Charlie and the Chocolate Factory)

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1024 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
refraction 2009-04-19 22:00:11 +00:00
parent b7ea57a5d9
commit 457b78e70e
1 changed files with 13 additions and 1 deletions

View File

@ -3859,7 +3859,13 @@ void recVUMI_JR( VURegs* vuu, s32 info )
{ {
int fsreg = _allocX86reg(-1, X86TYPE_VI|(s_vu?X86TYPE_VU1:0), _Fs_, MODE_READ); int fsreg = _allocX86reg(-1, X86TYPE_VI|(s_vu?X86TYPE_VU1:0), _Fs_, MODE_READ);
LEA32RStoR(EAX, fsreg, 3); LEA32RStoR(EAX, fsreg, 3);
//Mask the address to something valid
if(vuu == &VU0)
AND32ItoR(EAX, 0xfff);
else
AND32ItoR(EAX, 0x3fff);
if( (s_pCurBlock->type & BLOCKTYPE_HASEOP) || s_vu == 0 ) MOV32RtoM(SuperVUGetVIAddr(REG_TPC, 0), EAX); if( (s_pCurBlock->type & BLOCKTYPE_HASEOP) || s_vu == 0 ) MOV32RtoM(SuperVUGetVIAddr(REG_TPC, 0), EAX);
if( !(s_pCurBlock->type & BLOCKTYPE_HASEOP) ) { if( !(s_pCurBlock->type & BLOCKTYPE_HASEOP) ) {
@ -3876,6 +3882,12 @@ void recVUMI_JALR( VURegs* vuu, s32 info )
int fsreg = _allocX86reg(-1, X86TYPE_VI|(s_vu?X86TYPE_VU1:0), _Fs_, MODE_READ); int fsreg = _allocX86reg(-1, X86TYPE_VI|(s_vu?X86TYPE_VU1:0), _Fs_, MODE_READ);
LEA32RStoR(EAX, fsreg, 3); LEA32RStoR(EAX, fsreg, 3);
//Mask the address to something valid
if(vuu == &VU0)
AND32ItoR(EAX, 0xfff);
else
AND32ItoR(EAX, 0x3fff);
if ( _Ft_ ) { if ( _Ft_ ) {
_deleteX86reg(X86TYPE_VI|(s_vu?X86TYPE_VU1:0), _Ft_, 2); _deleteX86reg(X86TYPE_VI|(s_vu?X86TYPE_VU1:0), _Ft_, 2);
MOV16ItoM( SuperVUGetVIAddr(_Ft_, 0), (pc+8)>>3 ); MOV16ItoM( SuperVUGetVIAddr(_Ft_, 0), (pc+8)>>3 );