From 81d39613525c988edc183357fc5b902b938ccaad Mon Sep 17 00:00:00 2001 From: refraction Date: Wed, 12 Oct 2011 20:12:40 +0000 Subject: [PATCH] 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 --- pcsx2/x86/ix86-32/iR5900Jump.cpp | 30 ++++++++++++++++++++++++------ pcsx2/x86/ix86-32/iR5900Move.cpp | 15 +++++++++++++-- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/pcsx2/x86/ix86-32/iR5900Jump.cpp b/pcsx2/x86/ix86-32/iR5900Jump.cpp index 616438472d..31b6d1181f 100644 --- a/pcsx2/x86/ix86-32/iR5900Jump.cpp +++ b/pcsx2/x86/ix86-32/iR5900Jump.cpp @@ -56,9 +56,17 @@ void recJAL( void ) { u32 newpc = (_Target_ << 2) + ( pc & 0xf0000000 ); _deleteEEreg(31, 0); - GPR_SET_CONST(31); - g_cpuConstRegs[31].UL[0] = pc + 4; - g_cpuConstRegs[31].UL[1] = 0; + if(EE_CONST_PROP) + { + 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); SetBranchImm(newpc); @@ -78,6 +86,7 @@ void recJR( void ) //////////////////////////////////////////////////// void recJALR( void ) { + int newpc = pc + 4; _allocX86reg(ESI, X86TYPE_PCWRITEBACK, 0, MODE_WRITE); _eeMoveGPRtoR(ESI, _Rs_); // uncomment when there are NO instructions that need to call interpreter @@ -100,12 +109,21 @@ void recJALR( void ) // } // } + if ( _Rd_ ) { _deleteEEreg(_Rd_, 0); - GPR_SET_CONST(_Rd_); - g_cpuConstRegs[_Rd_].UL[0] = pc + 4; - g_cpuConstRegs[_Rd_].UL[1] = 0; + if(EE_CONST_PROP) + { + 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(); diff --git a/pcsx2/x86/ix86-32/iR5900Move.cpp b/pcsx2/x86/ix86-32/iR5900Move.cpp index 15ccba5f5d..e12e80fe23 100644 --- a/pcsx2/x86/ix86-32/iR5900Move.cpp +++ b/pcsx2/x86/ix86-32/iR5900Move.cpp @@ -71,8 +71,19 @@ void recLUI() } _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); + } } ////////////////////////////////////////////////////