EERec: Small changes so Constant Propagation can be turned off (for testing purposes)

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4934 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
refraction 2011-10-12 20:12:40 +00:00
parent 6d215a86ca
commit 81d3961352
2 changed files with 37 additions and 8 deletions

View File

@ -56,9 +56,17 @@ void recJAL( void )
{ {
u32 newpc = (_Target_ << 2) + ( pc & 0xf0000000 ); u32 newpc = (_Target_ << 2) + ( pc & 0xf0000000 );
_deleteEEreg(31, 0); _deleteEEreg(31, 0);
GPR_SET_CONST(31); if(EE_CONST_PROP)
g_cpuConstRegs[31].UL[0] = pc + 4; {
g_cpuConstRegs[31].UL[1] = 0; GPR_SET_CONST(31);
g_cpuConstRegs[31].UL[0] = pc + 4;
g_cpuConstRegs[31].UL[1] = 0;
}
else
{
MOV32ItoM((u32)&cpuRegs.GPR.r[31].UL[0], pc + 4);
MOV32ItoM((u32)&cpuRegs.GPR.r[31].UL[1], 0);
}
recompileNextInstruction(1); recompileNextInstruction(1);
SetBranchImm(newpc); SetBranchImm(newpc);
@ -78,6 +86,7 @@ void recJR( void )
//////////////////////////////////////////////////// ////////////////////////////////////////////////////
void recJALR( void ) void recJALR( void )
{ {
int newpc = pc + 4;
_allocX86reg(ESI, X86TYPE_PCWRITEBACK, 0, MODE_WRITE); _allocX86reg(ESI, X86TYPE_PCWRITEBACK, 0, MODE_WRITE);
_eeMoveGPRtoR(ESI, _Rs_); _eeMoveGPRtoR(ESI, _Rs_);
// uncomment when there are NO instructions that need to call interpreter // uncomment when there are NO instructions that need to call interpreter
@ -100,12 +109,21 @@ void recJALR( void )
// } // }
// } // }
if ( _Rd_ ) if ( _Rd_ )
{ {
_deleteEEreg(_Rd_, 0); _deleteEEreg(_Rd_, 0);
GPR_SET_CONST(_Rd_); if(EE_CONST_PROP)
g_cpuConstRegs[_Rd_].UL[0] = pc + 4; {
g_cpuConstRegs[_Rd_].UL[1] = 0; GPR_SET_CONST(_Rd_);
g_cpuConstRegs[_Rd_].UL[0] = newpc;
g_cpuConstRegs[_Rd_].UL[1] = 0;
}
else
{
MOV32ItoM((u32)&cpuRegs.GPR.r[_Rd_].UL[0], newpc);
MOV32ItoM((u32)&cpuRegs.GPR.r[_Rd_].UL[1], 0);
}
} }
_clearNeededMMXregs(); _clearNeededMMXregs();

View File

@ -71,8 +71,19 @@ void recLUI()
} }
_deleteEEreg(_Rt_, 0); _deleteEEreg(_Rt_, 0);
GPR_SET_CONST(_Rt_);
g_cpuConstRegs[_Rt_].UD[0] = (s32)(cpuRegs.code << 16); if(EE_CONST_PROP)
{
GPR_SET_CONST(_Rt_);
g_cpuConstRegs[_Rt_].UD[0] = (s32)(cpuRegs.code << 16);
}
else
{
MOV32ItoR(EAX, (s32)(cpuRegs.code << 16));
CDQ();
MOV32RtoM((u32)&cpuRegs.GPR.r[_Rt_].UL[0], EAX);
MOV32RtoM((u32)&cpuRegs.GPR.r[_Rt_].UL[1], EDX);
}
} }
//////////////////////////////////////////////////// ////////////////////////////////////////////////////