try not forgetting about stores lol
This commit is contained in:
parent
be290da23c
commit
685c4828a2
|
@ -116,17 +116,29 @@ void StoreSingle(ARM* cpu, u8 rd, u8 rn, s32 offset)
|
||||||
static_assert((size == 8) || (size == 16) || (size == 32), "dummy this function only takes 8/16/32 for size!!!");
|
static_assert((size == 8) || (size == 16) || (size == 32), "dummy this function only takes 8/16/32 for size!!!");
|
||||||
|
|
||||||
u32 addr;
|
u32 addr;
|
||||||
if constexpr (writeback != Writeback::Post) addr = offset + cpu->R[rn];
|
if constexpr (writeback < Writeback::Post) addr = offset + cpu->R[rn];
|
||||||
else addr = cpu->R[rn];
|
else addr = cpu->R[rn];
|
||||||
|
|
||||||
u32 storeval = cpu->R[rd];
|
u32 storeval = cpu->R[rd];
|
||||||
if (rd == 15) storeval += 4;
|
if (rd == 15) storeval += 4;
|
||||||
|
|
||||||
|
if constexpr (writeback == Writeback::Trans)
|
||||||
|
{
|
||||||
|
if (cpu->Num == 0)
|
||||||
|
((ARMv5*)cpu)->PU_Map = ((ARMv5*)cpu)->PU_UserMap;
|
||||||
|
}
|
||||||
|
|
||||||
bool dataabort;
|
bool dataabort;
|
||||||
if constexpr (size == 8) dataabort = !cpu->DataWrite8 (addr, storeval);
|
if constexpr (size == 8) dataabort = !cpu->DataWrite8 (addr, storeval);
|
||||||
if constexpr (size == 16) dataabort = !cpu->DataWrite16(addr, storeval);
|
if constexpr (size == 16) dataabort = !cpu->DataWrite16(addr, storeval);
|
||||||
if constexpr (size == 32) dataabort = !cpu->DataWrite32(addr, storeval);
|
if constexpr (size == 32) dataabort = !cpu->DataWrite32(addr, storeval);
|
||||||
|
|
||||||
|
if constexpr (writeback == Writeback::Trans)
|
||||||
|
{
|
||||||
|
if (cpu->Num == 0 && (cpu->CPSR & 0x1F) != 0x10)
|
||||||
|
((ARMv5*)cpu)->PU_Map = ((ARMv5*)cpu)->PU_PrivMap;
|
||||||
|
}
|
||||||
|
|
||||||
cpu->AddCycles_CD();
|
cpu->AddCycles_CD();
|
||||||
if (dataabort) return;
|
if (dataabort) return;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue