diff --git a/src/ARM.cpp b/src/ARM.cpp index 2c56d505..7d5a02c7 100644 --- a/src/ARM.cpp +++ b/src/ARM.cpp @@ -1262,7 +1262,7 @@ bool ARMv4::DataWrite32S(u32 addr, u32 val, bool dataabort) void ARMv5::AddCycles_CD_STR() { - s32 numC = CodeCycles; + s32 numC = (R[15] & 0x2) ? 0 : CodeCycles; s32 numD = DataCycles + CyclesILed; s32 early; @@ -1287,7 +1287,7 @@ void ARMv5::AddCycles_CD_STR() void ARMv5::AddCycles_CD_STM() { - s32 numC = CodeCycles; + s32 numC = (R[15] & 0x2) ? 0 : CodeCycles; s32 numD = DataCycles + CyclesILed; s32 early; @@ -1313,7 +1313,7 @@ void ARMv5::AddCycles_CD_STM() void ARMv5::AddCycles_CDI_LDR() { // LDR cycles. ARM9 seems to skip the internal cycle here. - s32 numC = CodeCycles; + s32 numC = (R[15] & 0x2) ? 0 : CodeCycles; s32 numD = DataCycles + CyclesILed; // if a 32 bit bus, start 2 cycles early; else, start 4 cycles early @@ -1340,7 +1340,7 @@ void ARMv5::AddCycles_CDI_LDR() void ARMv5::AddCycles_CDI_LDM() { // LDM cycles. ARM9 seems to skip the internal cycle here. - s32 numC = CodeCycles; + s32 numC = (R[15] & 0x2) ? 0 : CodeCycles; s32 numD = DataCycles + CyclesILed; // if a 32 bit bus, start 2 cycles early; else, start 4 cycles early