summaryrefslogtreecommitdiff
path: root/cpu/o3/commit_impl.hh
diff options
context:
space:
mode:
Diffstat (limited to 'cpu/o3/commit_impl.hh')
-rw-r--r--cpu/o3/commit_impl.hh9
1 files changed, 9 insertions, 0 deletions
diff --git a/cpu/o3/commit_impl.hh b/cpu/o3/commit_impl.hh
index 7834460e2..034565f90 100644
--- a/cpu/o3/commit_impl.hh
+++ b/cpu/o3/commit_impl.hh
@@ -1117,6 +1117,10 @@ head_inst->isWriteBarrier())*/
panic("Barrier instructions are not handled yet.\n");
}
+ if (!head_inst->isStore()) {
+ head_inst->setCompleted();
+ }
+
// Check if the instruction caused a fault. If so, trap.
Fault inst_fault = head_inst->getFault();
@@ -1126,6 +1130,11 @@ head_inst->isWriteBarrier())*/
DPRINTF(Commit, "Inst [sn:%lli] PC %#x has a fault\n",
head_inst->seqNum, head_inst->readPC());
+ if (iewStage->hasStoresToWB()) {
+ DPRINTF(Commit, "Stores outstanding, fault must wait.\n");
+ return false;
+ }
+
assert(!thread[tid]->inSyscall);
thread[tid]->inSyscall = true;