mirror of https://github.com/PCSX2/pcsx2.git
EERec: Don't load in skip case of SW[LR]
This commit is contained in:
parent
23578e963f
commit
0d7f141279
|
@ -318,8 +318,6 @@ void recLWR()
|
|||
|
||||
// edi = bit offset in word
|
||||
xMOV(calleeSavedReg1d, arg1regd);
|
||||
xAND(calleeSavedReg1d, 3);
|
||||
xSHL(calleeSavedReg1d, 3);
|
||||
|
||||
xAND(arg1regd, ~3);
|
||||
vtlb_DynGenRead32(32, false);
|
||||
|
@ -327,6 +325,9 @@ void recLWR()
|
|||
if (!_Rt_)
|
||||
return;
|
||||
|
||||
xAND(calleeSavedReg1d, 3);
|
||||
xForwardJE8 nomask;
|
||||
xSHL(calleeSavedReg1d, 3);
|
||||
// mask off bytes loaded
|
||||
xMOV(ecx, 24);
|
||||
xSUB(ecx, calleeSavedReg1d);
|
||||
|
@ -339,12 +340,10 @@ void recLWR()
|
|||
xSHR(eax, cl);
|
||||
xOR(ptr32[&cpuRegs.GPR.r[_Rt_].UL[0]], eax);
|
||||
|
||||
xCMP(ecx, 0);
|
||||
xForwardJump8 nosignextend(Jcc_NotEqual);
|
||||
// if ((addr & 3) == 0)
|
||||
xCDQ();
|
||||
xMOV(ptr32[&cpuRegs.GPR.r[_Rt_].UL[1]], edx);
|
||||
nosignextend.SetTarget();
|
||||
xForwardJump8 end;
|
||||
nomask.SetTarget();
|
||||
eeSignExtendTo(_Rt_);
|
||||
end.SetTarget();
|
||||
#else
|
||||
iFlushCall(FLUSH_INTERPRETER);
|
||||
_deleteEEreg(_Rs_, 1);
|
||||
|
@ -368,10 +367,12 @@ void recSWL()
|
|||
|
||||
// edi = bit offset in word
|
||||
xMOV(calleeSavedReg1d, arg1regd);
|
||||
xAND(arg1regd, ~3);
|
||||
xAND(calleeSavedReg1d, 3);
|
||||
xCMP(calleeSavedReg1d, 3);
|
||||
xForwardJE8 skip;
|
||||
xSHL(calleeSavedReg1d, 3);
|
||||
|
||||
xAND(arg1regd, ~3);
|
||||
vtlb_DynGenRead32(32, false);
|
||||
|
||||
// mask read -> arg2
|
||||
|
@ -395,6 +396,11 @@ void recSWL()
|
|||
xADD(arg1regd, _Imm_);
|
||||
xAND(arg1regd, ~3);
|
||||
|
||||
xForwardJump8 end;
|
||||
skip.SetTarget();
|
||||
_eeMoveGPRtoR(arg2regd, _Rt_);
|
||||
end.SetTarget();
|
||||
|
||||
vtlb_DynGenWrite(32);
|
||||
#else
|
||||
iFlushCall(FLUSH_INTERPRETER);
|
||||
|
@ -418,10 +424,11 @@ void recSWR()
|
|||
|
||||
// edi = bit offset in word
|
||||
xMOV(calleeSavedReg1d, arg1regd);
|
||||
xAND(arg1regd, ~3);
|
||||
xAND(calleeSavedReg1d, 3);
|
||||
xForwardJE8 skip;
|
||||
xSHL(calleeSavedReg1d, 3);
|
||||
|
||||
xAND(arg1regd, ~3);
|
||||
vtlb_DynGenRead32(32, false);
|
||||
|
||||
// mask read -> edx
|
||||
|
@ -445,6 +452,11 @@ void recSWR()
|
|||
xADD(arg1regd, _Imm_);
|
||||
xAND(arg1regd, ~3);
|
||||
|
||||
xForwardJump8 end;
|
||||
skip.SetTarget();
|
||||
_eeMoveGPRtoR(arg2regd, _Rt_);
|
||||
end.SetTarget();
|
||||
|
||||
vtlb_DynGenWrite(32);
|
||||
#else
|
||||
iFlushCall(FLUSH_INTERPRETER);
|
||||
|
@ -717,7 +729,7 @@ void recSDL()
|
|||
xAND(arg1regd, ~0x07);
|
||||
xAND(calleeSavedReg1d, 0x7);
|
||||
xCMP(calleeSavedReg1d, 7);
|
||||
xForwardJE32 skip;
|
||||
xForwardJE8 skip;
|
||||
xADD(calleeSavedReg1d, 1);
|
||||
int t2reg = vtlb_DynGenRead64(64, -1);
|
||||
int rtreg = _allocGPRtoXMMreg(-1, _Rt_, MODE_READ);
|
||||
|
@ -790,7 +802,7 @@ void recSDR()
|
|||
xMOV(calleeSavedReg1d, arg1regd);
|
||||
xAND(arg1regd, ~0x07);
|
||||
xAND(calleeSavedReg1d, 0x7);
|
||||
xForwardJE32 skip;
|
||||
xForwardJE8 skip;
|
||||
int t2reg = vtlb_DynGenRead64(64, -1);
|
||||
int rtreg = _allocGPRtoXMMreg(-1, _Rt_, MODE_READ);
|
||||
|
||||
|
|
Loading…
Reference in New Issue