mirror of https://github.com/PCSX2/pcsx2.git
Realised that I probably broke MOVZ/N with my last commit and tried again.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@776 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
e248cf8cf0
commit
1689b73c77
|
@ -425,10 +425,7 @@ void recMTLO1( void )
|
||||||
//// MOVZ
|
//// MOVZ
|
||||||
void recMOVZtemp_const()
|
void recMOVZtemp_const()
|
||||||
{
|
{
|
||||||
if (g_cpuConstRegs[_Rt_].UD[0] == 0) {
|
g_cpuConstRegs[_Rd_].UD[0] = g_cpuConstRegs[_Rs_].UD[0];
|
||||||
g_cpuConstRegs[_Rd_].UL[0] = g_cpuConstRegs[_Rs_].UL[0];
|
|
||||||
g_cpuConstRegs[_Rd_].UL[1] = g_cpuConstRegs[_Rs_].UL[1];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//static PCSX2_ALIGNED16(u32 s_zero[4]) = {0,0,0xffffffff, 0xffffffff};
|
//static PCSX2_ALIGNED16(u32 s_zero[4]) = {0,0,0xffffffff, 0xffffffff};
|
||||||
|
@ -472,24 +469,22 @@ void recMOVZtemp_consts(int info)
|
||||||
|
|
||||||
void recMOVZtemp_constt(int info)
|
void recMOVZtemp_constt(int info)
|
||||||
{
|
{
|
||||||
if (g_cpuConstRegs[_Rt_].UD[0] == 0) {
|
if( info & PROCESS_EE_MMX ) {
|
||||||
if( info & PROCESS_EE_MMX ) {
|
if( EEREC_D != EEREC_S ) MOVQRtoR(EEREC_D, EEREC_S);
|
||||||
if( EEREC_D != EEREC_S ) MOVQRtoR(EEREC_D, EEREC_S);
|
return;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
if( _hasFreeXMMreg() ) {
|
||||||
if( _hasFreeXMMreg() ) {
|
int t0reg = _allocMMXreg(-1, MMX_TEMP, 0);
|
||||||
int t0reg = _allocMMXreg(-1, MMX_TEMP, 0);
|
MOVQMtoR(t0reg, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 0 ]);
|
||||||
MOVQMtoR(t0reg, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 0 ]);
|
MOVQRtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 0 ], t0reg);
|
||||||
MOVQRtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 0 ], t0reg);
|
_freeMMXreg(t0reg);
|
||||||
_freeMMXreg(t0reg);
|
}
|
||||||
}
|
else {
|
||||||
else {
|
MOV32MtoR(EAX, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 0 ]);
|
||||||
MOV32MtoR(EAX, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 0 ]);
|
MOV32MtoR(EDX, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 1 ]);
|
||||||
MOV32MtoR(EDX, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 1 ]);
|
MOV32RtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 0 ], EAX);
|
||||||
MOV32RtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 0 ], EAX);
|
MOV32RtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 1 ], EDX);
|
||||||
MOV32RtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 1 ], EDX);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -543,15 +538,11 @@ void recMOVZ()
|
||||||
if( _Rs_ == _Rd_ )
|
if( _Rs_ == _Rd_ )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// aren't the templates meant to take care of this kind of thing?
|
if(GPR_IS_CONST1(_Rt_)) {
|
||||||
if( GPR_IS_CONST1(_Rd_) ) {
|
if (g_cpuConstRegs[_Rt_].UD[0] != 0)
|
||||||
if( !GPR_IS_CONST2(_Rs_, _Rt_) ) {
|
return;
|
||||||
// remove the const, since move is conditional
|
} else if (GPR_IS_CONST1(_Rd_))
|
||||||
_deleteEEreg(_Rd_, 0);
|
_deleteEEreg(_Rd_, 1);
|
||||||
MOV32ItoM((uptr)&cpuRegs.GPR.r[_Rd_].UL[0], g_cpuConstRegs[_Rd_].UL[0]);
|
|
||||||
MOV32ItoM((uptr)&cpuRegs.GPR.r[_Rd_].UL[1], g_cpuConstRegs[_Rd_].UL[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
recMOVZtemp();
|
recMOVZtemp();
|
||||||
}
|
}
|
||||||
|
@ -559,10 +550,7 @@ void recMOVZ()
|
||||||
//// MOVN
|
//// MOVN
|
||||||
void recMOVNtemp_const()
|
void recMOVNtemp_const()
|
||||||
{
|
{
|
||||||
if (g_cpuConstRegs[_Rt_].UD[0] != 0) {
|
g_cpuConstRegs[_Rd_].UD[0] = g_cpuConstRegs[_Rs_].UD[0];
|
||||||
g_cpuConstRegs[_Rd_].UL[0] = g_cpuConstRegs[_Rs_].UL[0];
|
|
||||||
g_cpuConstRegs[_Rd_].UL[1] = g_cpuConstRegs[_Rs_].UL[1];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void recMOVNtemp_consts(int info)
|
void recMOVNtemp_consts(int info)
|
||||||
|
@ -605,19 +593,17 @@ void recMOVNtemp_consts(int info)
|
||||||
|
|
||||||
void recMOVNtemp_constt(int info)
|
void recMOVNtemp_constt(int info)
|
||||||
{
|
{
|
||||||
if (g_cpuConstRegs[_Rt_].UD[0] != 0) {
|
if( _hasFreeXMMreg() ) {
|
||||||
if( _hasFreeXMMreg() ) {
|
int t0reg = _allocMMXreg(-1, MMX_TEMP, 0);
|
||||||
int t0reg = _allocMMXreg(-1, MMX_TEMP, 0);
|
MOVQMtoR(t0reg, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 0 ]);
|
||||||
MOVQMtoR(t0reg, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 0 ]);
|
MOVQRtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 0 ], t0reg);
|
||||||
MOVQRtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 0 ], t0reg);
|
_freeMMXreg(t0reg);
|
||||||
_freeMMXreg(t0reg);
|
}
|
||||||
}
|
else {
|
||||||
else {
|
MOV32MtoR(EAX, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 0 ]);
|
||||||
MOV32MtoR(EAX, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 0 ]);
|
MOV32MtoR(EDX, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 1 ]);
|
||||||
MOV32MtoR(EDX, (int)&cpuRegs.GPR.r[ _Rs_ ].UL[ 1 ]);
|
MOV32RtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 0 ], EAX);
|
||||||
MOV32RtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 0 ], EAX);
|
MOV32RtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 1 ], EDX);
|
||||||
MOV32RtoM((int)&cpuRegs.GPR.r[ _Rd_ ].UL[ 1 ], EDX);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,14 +658,11 @@ void recMOVN()
|
||||||
if( _Rs_ == _Rd_ )
|
if( _Rs_ == _Rd_ )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( GPR_IS_CONST1(_Rd_) ) {
|
if (GPR_IS_CONST1(_Rt_)) {
|
||||||
if( !GPR_IS_CONST2(_Rs_, _Rt_) ) {
|
if (g_cpuConstRegs[_Rt_].UD[0] == 0)
|
||||||
// remove the const, since move is conditional
|
return;
|
||||||
_deleteEEreg(_Rd_, 0);
|
} else if (GPR_IS_CONST1(_Rd_))
|
||||||
MOV32ItoM((uptr)&cpuRegs.GPR.r[_Rd_].UL[0], g_cpuConstRegs[_Rd_].UL[0]);
|
_deleteEEreg(_Rd_, 1);
|
||||||
MOV32ItoM((uptr)&cpuRegs.GPR.r[_Rd_].UL[1], g_cpuConstRegs[_Rd_].UL[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
recMOVNtemp();
|
recMOVNtemp();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue