summaryrefslogtreecommitdiff
path: root/src/cpu/o3/iew_impl.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/o3/iew_impl.hh')
-rw-r--r--src/cpu/o3/iew_impl.hh8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/cpu/o3/iew_impl.hh b/src/cpu/o3/iew_impl.hh
index c809b93ab..2acb941e0 100644
--- a/src/cpu/o3/iew_impl.hh
+++ b/src/cpu/o3/iew_impl.hh
@@ -1255,7 +1255,13 @@ DefaultIEW<Impl>::executeInsts()
}
} else {
- inst->execute();
+ // If the instruction has already faulted, then skip executing it.
+ // Such case can happen when it faulted during ITLB translation.
+ // If we execute the instruction (even if it's a nop) the fault
+ // will be replaced and we will lose it.
+ if (inst->getFault() == NoFault) {
+ inst->execute();
+ }
inst->setExecuted();