From e45bd32c61cb1cada352a45f65ecd9de8e67f1b0 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Fri, 12 Apr 2013 08:57:30 -0700 Subject: [PATCH] Fix incorrect GPU timing with signal jumps. --- GPU/GPUCommon.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index 842211566b..d13e5dea74 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -583,6 +583,7 @@ void GPUCommon::ExecuteOp(u32 op, u32 diff) { if (!Memory::IsValidAddress(target)) { ERROR_LOG_REPORT(G3D, "Signal with Jump: bad address. signal/end: %04x %04x", signal, enddata); } else { + UpdateCycles(currentList->pc, target); currentList->pc = target; DEBUG_LOG(G3D, "Signal with Jump. signal/end: %04x %04x", signal, enddata); } @@ -601,6 +602,7 @@ void GPUCommon::ExecuteOp(u32 op, u32 diff) { } else { // TODO: This might save/restore other state... currentList->stack[currentList->stackptr++] = currentList->pc; + UpdateCycles(currentList->pc, target); currentList->pc = target; DEBUG_LOG(G3D, "Signal with Call. signal/end: %04x %04x", signal, enddata); } @@ -614,7 +616,9 @@ void GPUCommon::ExecuteOp(u32 op, u32 diff) { ERROR_LOG_REPORT(G3D, "Signal with Return: stack empty. signal/end: %04x %04x", signal, enddata); } else { // TODO: This might save/restore other state... - currentList->pc = currentList->stack[--currentList->stackptr]; + u32 target = currentList->stack[--currentList->stackptr]; + UpdateCycles(currentList->pc, target); + currentList->pc = target; DEBUG_LOG(G3D, "Signal with Return. signal/end: %04x %04x", signal, enddata); } }