mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-26 07:39:56 -06:00
fix double data aborts with strd
This commit is contained in:
@ -273,7 +273,7 @@ A_IMPLEMENT_WB_LDRSTR(LDRB)
|
||||
u32 r = (cpu->CurInstr>>12) & 0xF; \
|
||||
if (r&1) { r--; printf("!! MISALIGNED STRD %d\n", r+1); } \
|
||||
bool dataabort = !cpu->DataWrite32(offset, cpu->R[r ]); /* yes, this data abort behavior is on purpose */ \
|
||||
dataabort |= !cpu->DataWrite32S (offset+4, cpu->R[r+1]); /* no, i dont understand it either */ \
|
||||
dataabort |= !cpu->DataWrite32S (offset+4, cpu->R[r+1], dataabort); /* no, i dont understand it either */ \
|
||||
cpu->AddCycles_CD(); \
|
||||
if (dataabort) return; \
|
||||
if (cpu->CurInstr & (1<<21)) cpu->R[(cpu->CurInstr>>16) & 0xF] = offset;
|
||||
@ -284,7 +284,7 @@ A_IMPLEMENT_WB_LDRSTR(LDRB)
|
||||
u32 r = (cpu->CurInstr>>12) & 0xF; \
|
||||
if (r&1) { r--; printf("!! MISALIGNED STRD_POST %d\n", r+1); } \
|
||||
bool dataabort = !cpu->DataWrite32(addr, cpu->R[r ]); \
|
||||
dataabort |= !cpu->DataWrite32S (addr+4, cpu->R[r+1]); \
|
||||
dataabort |= !cpu->DataWrite32S (addr+4, cpu->R[r+1], dataabort); \
|
||||
cpu->AddCycles_CD(); \
|
||||
if (dataabort) return; \
|
||||
cpu->R[(cpu->CurInstr>>16) & 0xF] += offset;
|
||||
|
Reference in New Issue
Block a user