summaryrefslogtreecommitdiff
path: root/src/cpu/o3
diff options
context:
space:
mode:
authorMatt Horsnell <Matt.Horsnell@arm.com>2011-01-18 16:30:02 -0600
committerMatt Horsnell <Matt.Horsnell@arm.com>2011-01-18 16:30:02 -0600
commit5ebf3b280867925917654f5362d3ece21dc2355e (patch)
treefb57127c839ef57d0f2dfa1b11b35fbdb7225dd4 /src/cpu/o3
parentee9a331fe59356a11e6f610967cd5aa08cef3db9 (diff)
downloadgem5-5ebf3b280867925917654f5362d3ece21dc2355e.tar.xz
O3: Fixes the way prefetches are handled inside the iew unit.
This patch prevents the prefetch being added to the instCommit queue twice.
Diffstat (limited to 'src/cpu/o3')
-rw-r--r--src/cpu/o3/iew_impl.hh6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/cpu/o3/iew_impl.hh b/src/cpu/o3/iew_impl.hh
index e1af20852..3f53b4197 100644
--- a/src/cpu/o3/iew_impl.hh
+++ b/src/cpu/o3/iew_impl.hh
@@ -1222,8 +1222,7 @@ DefaultIEW<Impl>::executeInsts()
// Execute instruction.
// Note that if the instruction faults, it will be handled
// at the commit stage.
- if (inst->isMemRef() &&
- (!inst->isDataPrefetch() && !inst->isInstPrefetch())) {
+ if (inst->isMemRef()) {
DPRINTF(IEW, "Execute: Calculating address for memory "
"reference.\n");
@@ -1232,6 +1231,9 @@ DefaultIEW<Impl>::executeInsts()
// Loads will mark themselves as executed, and their writeback
// event adds the instruction to the queue to commit
fault = ldstQueue.executeLoad(inst);
+ if (inst->isDataPrefetch() || inst->isInstPrefetch()) {
+ fault = NoFault;
+ }
} else if (inst->isStore()) {
fault = ldstQueue.executeStore(inst);