summaryrefslogtreecommitdiff
path: root/src/cpu/inorder/resources/graduation_unit.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/inorder/resources/graduation_unit.cc')
-rw-r--r--src/cpu/inorder/resources/graduation_unit.cc28
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()));