mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-26 15:49:50 -06:00
Simplify lswx loop.
This commit is contained in:
@ -501,37 +501,25 @@ void Interpreter::lhzx(UGeckoInstruction _inst)
|
|||||||
void Interpreter::lswx(UGeckoInstruction _inst)
|
void Interpreter::lswx(UGeckoInstruction _inst)
|
||||||
{
|
{
|
||||||
u32 EA = Helper_Get_EA_X(_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]
|
// 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;
|
int reg = (_inst.RD + (n >> 2)) & 0x1f;
|
||||||
while (true)
|
int offset = (n & 3) << 3;
|
||||||
{
|
if ((n & 3) == 0)
|
||||||
u32 TempValue = PowerPC::Read_U8(EA) << (24 - i);
|
rGPR[reg] = 0;
|
||||||
|
|
||||||
|
u32 TempValue = PowerPC::Read_U8(EA) << (24 - offset);
|
||||||
if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI)
|
if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI)
|
||||||
{
|
{
|
||||||
PanicAlert("DSI exception in lswx.");
|
PanicAlert("DSI exception in lswx.");
|
||||||
NOTICE_LOG(POWERPC, "DSI exception in lswx");
|
NOTICE_LOG(POWERPC, "DSI exception in lswx");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
rGPR[r] |= TempValue;
|
rGPR[reg] |= TempValue;
|
||||||
|
|
||||||
if (--n == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
EA++;
|
EA++;
|
||||||
i += 8;
|
|
||||||
if (i == 32)
|
|
||||||
{
|
|
||||||
i = 0;
|
|
||||||
r = (r + 1) & 31;
|
|
||||||
rGPR[r] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user