From 561c33f0824a705cb360ecb4ae3bf8cfd490f007 Mon Sep 17 00:00:00 2001 From: Korey Sewell Date: Sun, 19 Jun 2011 21:43:40 -0400 Subject: 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. --- src/cpu/inorder/resources/decode_unit.cc | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src/cpu/inorder/resources/decode_unit.cc') 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, -- cgit v1.2.3