DPRINTF(Fetch, "[tid:%i] Can't fetch cache line, switched out\n",
tid);
return false;
- } else if (checkInterrupt(pc)) {
+ } else if (checkInterrupt(pc) && !delayedCommit[tid]) {
// Hold off fetch from getting new instructions when:
// Cache is blocked, or
// while an interrupt is pending and we're not in PAL mode, or
fetchStatus[tid] = Squashing;
+ // microops are being squashed, it is not known wheather the
+ // youngest non-squashed microop was marked delayed commit
+ // or not. Setting the flag to true ensures that the
+ // interrupts are not handled when they cannot be, though
+ // some opportunities to handle interrupts may be missed.
+ delayedCommit[tid] = true;
+
++fetchSquashCycles;
}