changeset a42647b4a6b6 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=a42647b4a6b6
description:
O3 CPU: Improve handling of delayed commit flag
The delayed commit flag is used in conjunction with interrupt pending
flag to
figure out whether or not fetch stage should get more instructions.
This patch
clears this flag when instructions are squashed. Also, in case an
interrupt is
pending, currently it is not possible to access the instruction cache.
This
patch allows accessing the cache in case this flag is set.
diffstat:
src/cpu/o3/fetch_impl.hh | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diffs (26 lines):
diff -r ae411fcf4935 -r a42647b4a6b6 src/cpu/o3/fetch_impl.hh
--- a/src/cpu/o3/fetch_impl.hh Fri Feb 10 08:37:30 2012 -0600
+++ b/src/cpu/o3/fetch_impl.hh Fri Feb 10 08:37:31 2012 -0600
@@ -544,7 +544,7 @@
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
@@ -721,6 +721,13 @@
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;
}
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev