diff options
Diffstat (limited to 'src/cpu/inorder/resources/graduation_unit.cc')
-rw-r--r-- | src/cpu/inorder/resources/graduation_unit.cc | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/cpu/inorder/resources/graduation_unit.cc b/src/cpu/inorder/resources/graduation_unit.cc index 4f796e933..617ef14f6 100644 --- a/src/cpu/inorder/resources/graduation_unit.cc +++ b/src/cpu/inorder/resources/graduation_unit.cc @@ -56,25 +56,33 @@ GraduationUnit::execute(int slot_num) switch (grad_req->cmd) { - case GraduateInst: + case CheckFault: { - if (lastNonSpecTick == curTick()) { - DPRINTF(InOrderGraduation, "Unable to graduate [sn:%i]. " - "Only 1 nonspec inst. per cycle can graduate.\n"); - grad_req->done(false); - return; - } - // Handle Any Faults Before Graduating Instruction if (inst->fault != NoFault) { - DPRINTF(Fault, "[sn:%i]: fault %s found for %s\n", - inst->seqNum, inst->fault->name(), + DPRINTF(InOrderGraduation, "[tid:%i]: [sn:%i]: fault %s found for %s\n", + tid, inst->seqNum, inst->fault->name(), inst->instName()); squashThenTrap(stage_num, inst); grad_req->done(false); return; } + DPRINTF(InOrderGraduation, "[tid:%i] [sn:%i]: No fault found for %s\n", + tid, inst->seqNum, inst->instName()); + grad_req->done(); + } + break; + + case GraduateInst: + { + if (lastNonSpecTick == curTick()) { + DPRINTF(InOrderGraduation, "Unable to graduate [sn:%i]. " + "Only 1 nonspec inst. per cycle can graduate.\n"); + grad_req->done(false); + return; + } + DPRINTF(InOrderGraduation, "[tid:%i]:[sn:%i]: Graduating instruction %s.\n", tid, inst->seqNum, inst->staticInst->disassemble(inst->instAddr())); |