SPU LLVM: Allow the reuse of address from LQX/STQX

This commit is contained in:
Elad 2026-02-25 16:56:35 +02:00
parent 9fb8ee7e2a
commit af98aedce5

View File

@ -8319,12 +8319,18 @@ public:
{
data._u32[3] %= SPU_LS_SIZE;
if (data._u32[3] % 0x10 == 0)
if (const u32 remainder = data._u32[3] % 0x10; remainder == 0)
{
value_t<u64> addr = eval(splat<u64>(data._u32[3]) + zext<u64>(extract(pair.second, 3) & 0x3fff0));
make_store_ls(addr, get_vr<u8[16]>(op.rt));
return;
}
else
{
value_t<u64> addr = eval(splat<u64>(data._u32[3] - remainder) + zext<u64>((extract(pair.second, 3) + remainder) & 0x3fff0));
make_store_ls(addr, get_vr<u8[16]>(op.rt));
return;
}
}
}
@ -8343,12 +8349,18 @@ public:
{
data._u32[3] %= SPU_LS_SIZE;
if (data._u32[3] % 0x10 == 0)
if (const u32 remainder = data._u32[3] % 0x10; remainder == 0)
{
value_t<u64> addr = eval(splat<u64>(data._u32[3]) + zext<u64>(extract(pair.second, 3) & 0x3fff0));
set_vr(op.rt, make_load_ls(addr));
return;
}
else
{
value_t<u64> addr = eval(splat<u64>(data._u32[3] - remainder) + zext<u64>((extract(pair.second, 3) + remainder) & 0x3fff0));
set_vr(op.rt, make_load_ls(addr));
return;
}
}
}