summaryrefslogtreecommitdiff
path: root/src/cpu/inorder/resources/fetch_seq_unit.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/inorder/resources/fetch_seq_unit.cc')
-rw-r--r--src/cpu/inorder/resources/fetch_seq_unit.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/cpu/inorder/resources/fetch_seq_unit.cc b/src/cpu/inorder/resources/fetch_seq_unit.cc
index 03663881c..0d22226a5 100644
--- a/src/cpu/inorder/resources/fetch_seq_unit.cc
+++ b/src/cpu/inorder/resources/fetch_seq_unit.cc
@@ -228,7 +228,11 @@ FetchSeqUnit::squash(DynInstPtr inst, int squash_stage,
tid, squash_stage);
InstSeqNum done_seq_num = inst->bdelaySeqNum;
- Addr new_PC = inst->readPredTarg();
+
+ // Handles the case where we are squashing because of something that is
+ // not a branch...like a memory stall
+ Addr new_PC = (inst->isControl()) ?
+ inst->readPredTarg() : inst->readPC() + instSize;
if (squashSeqNum[tid] <= done_seq_num &&
lastSquashCycle[tid] == curTick) {