summaryrefslogtreecommitdiff
path: root/src/cpu/inorder/resources/decode_unit.cc
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2011-06-19 21:43:40 -0400
committerKorey Sewell <ksewell@umich.edu>2011-06-19 21:43:40 -0400
commit561c33f0824a705cb360ecb4ae3bf8cfd490f007 (patch)
tree7fb92ebc9a8f09ceacb8ad8e60e60990a9939621 /src/cpu/inorder/resources/decode_unit.cc
parentc4deabfb97928f81acb0d66338426cb5f2687c37 (diff)
downloadgem5-561c33f0824a705cb360ecb4ae3bf8cfd490f007.tar.xz
inorder: dont handle multiple faults on same cycle
if a faulting instruction reaches an execution unit, then ignore it and pass it through the pipeline. Once we recognize the fault in the graduation unit, dont allow a second fault to creep in on the same cycle.
Diffstat (limited to 'src/cpu/inorder/resources/decode_unit.cc')
-rw-r--r--src/cpu/inorder/resources/decode_unit.cc17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/cpu/inorder/resources/decode_unit.cc b/src/cpu/inorder/resources/decode_unit.cc
index d15428436..a3548edfc 100644
--- a/src/cpu/inorder/resources/decode_unit.cc
+++ b/src/cpu/inorder/resources/decode_unit.cc
@@ -59,13 +59,18 @@ DecodeUnit::execute(int slot_num)
{
case DecodeInst:
{
- assert(!inst->staticInst->isMacroop());
- DPRINTF(Decode,"Decoded instruction [sn:%i]: %s : 0x%x\n",
- inst->seqNum, inst->instName(),
- inst->staticInst->machInst);
-
- inst->setBackSked(cpu->createBackEndSked(inst));
+ if (inst->fault != NoFault) {
+ inst->setBackSked(cpu->faultSked);
+ DPRINTF(Decode,"[tid:%i]: Fault found for instruction [sn:%i]\n",
+ inst->readTid(), inst->seqNum);
+ } else {
+ assert(!inst->staticInst->isMacroop());
+ inst->setBackSked(cpu->createBackEndSked(inst));
+ DPRINTF(Decode,"Decoded instruction [sn:%i]: %s : 0x%x\n",
+ inst->seqNum, inst->instName(),
+ inst->staticInst->machInst);
+ }
if (inst->backSked != NULL) {
DPRINTF(InOrderDecode,