Simplify lswx loop.

This commit is contained in:
Scott Mansell 2016-08-29 22:57:37 +12:00
parent 967c371d7a
commit fc2b0e0f45
1 changed files with 14 additions and 26 deletions

View File

@ -501,37 +501,25 @@ void Interpreter::lhzx(UGeckoInstruction _inst)
void Interpreter::lswx(UGeckoInstruction _inst)
{
u32 EA = Helper_Get_EA_X(_inst);
u32 n = (u8)PowerPC::ppcState.xer_stringctrl;
int r = _inst.RD;
int i = 0;
// Confirmed by hardware test that the zero case doesn't zero rGPR[r]
if (n > 0)
for (u32 n = 0; n < static_cast<u8>(PowerPC::ppcState.xer_stringctrl); n++)
{
rGPR[r] = 0;
while (true)
int reg = (_inst.RD + (n >> 2)) & 0x1f;
int offset = (n & 3) << 3;
if ((n & 3) == 0)
rGPR[reg] = 0;
u32 TempValue = PowerPC::Read_U8(EA) << (24 - offset);
if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI)
{
u32 TempValue = PowerPC::Read_U8(EA) << (24 - i);
if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI)
{
PanicAlert("DSI exception in lswx.");
NOTICE_LOG(POWERPC, "DSI exception in lswx");
return;
}
rGPR[r] |= TempValue;
if (--n == 0)
return;
EA++;
i += 8;
if (i == 32)
{
i = 0;
r = (r + 1) & 31;
rGPR[r] = 0;
}
PanicAlert("DSI exception in lswx.");
NOTICE_LOG(POWERPC, "DSI exception in lswx");
return;
}
rGPR[reg] |= TempValue;
EA++;
}
}