summaryrefslogtreecommitdiff
path: root/src/cpu/inorder/resources/use_def.cc
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2011-06-19 21:43:42 -0400
committerKorey Sewell <ksewell@umich.edu>2011-06-19 21:43:42 -0400
commit078f914e69d6a08b0ff881b0909535307464553f (patch)
tree50e116b7b7d8a8136a080fe3ea53f6190b71243e /src/cpu/inorder/resources/use_def.cc
parent3cb23bd3a21a50577aaaa12db41d2203f4a9d6eb (diff)
downloadgem5-078f914e69d6a08b0ff881b0909535307464553f.tar.xz
inorder: SE mode TLB faults
handle them like we do in FS mode, by blocking the TLB until the fault is handled by the fault->invoke()
Diffstat (limited to 'src/cpu/inorder/resources/use_def.cc')
-rw-r--r--src/cpu/inorder/resources/use_def.cc18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/cpu/inorder/resources/use_def.cc b/src/cpu/inorder/resources/use_def.cc
index 9d0100565..38a2eb040 100644
--- a/src/cpu/inorder/resources/use_def.cc
+++ b/src/cpu/inorder/resources/use_def.cc
@@ -159,15 +159,6 @@ UseDefUnit::execute(int slot_idx)
InstSeqNum seq_num = inst->seqNum;
int ud_idx = ud_req->useDefIdx;
- if (inst->fault != NoFault) {
- DPRINTF(InOrderUseDef,
- "[tid:%i]: [sn:%i]: Detected %s fault @ %x. Forwarding to "
- "next stage.\n", inst->readTid(), inst->seqNum, inst->fault->name(),
- inst->pcState());
- ud_req->done();
- return;
- }
-
if (serializeOnNextInst[tid] &&
seq_num > serializeAfterSeqNum[tid]) {
inst->setSerializeBefore();
@@ -187,6 +178,15 @@ UseDefUnit::execute(int slot_idx)
serializeAfterSeqNum[tid] = seq_num;
}
+ if (inst->fault != NoFault) {
+ DPRINTF(InOrderUseDef,
+ "[tid:%i]: [sn:%i]: Detected %s fault @ %x. Forwarding to "
+ "next stage.\n", inst->readTid(), inst->seqNum, inst->fault->name(),
+ inst->pcState());
+ ud_req->done();
+ return;
+ }
+
// If there is a non-speculative instruction
// in the pipeline then stall instructions here
// ---