summaryrefslogtreecommitdiff
path: root/src/cpu/inorder/cpu.cc
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2011-02-12 10:14:45 -0500
committerKorey Sewell <ksewell@umich.edu>2011-02-12 10:14:45 -0500
commite26aee514d328bd8c9930c742df6ce1485dce5ae (patch)
treed64c361532c00a47d30ddcb58b3205406b1adfe4 /src/cpu/inorder/cpu.cc
parent516b61146271b13d2350563b0349747724ffbc99 (diff)
downloadgem5-e26aee514d328bd8c9930c742df6ce1485dce5ae.tar.xz
inorder: utilize cached skeds in pipeline
allow the pipeline and resources to use the cached instruction schedule and resource sked iterator
Diffstat (limited to 'src/cpu/inorder/cpu.cc')
-rw-r--r--src/cpu/inorder/cpu.cc19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/cpu/inorder/cpu.cc b/src/cpu/inorder/cpu.cc
index 0591b0510..1d678b9c5 100644
--- a/src/cpu/inorder/cpu.cc
+++ b/src/cpu/inorder/cpu.cc
@@ -368,7 +368,7 @@ std::map<InOrderCPU::SkedID, ThePipeline::RSkedPtr> InOrderCPU::skedCache;
RSkedPtr
InOrderCPU::createFrontEndSked()
{
- RSkedPtr res_sked = NULL;
+ RSkedPtr res_sked = new ResourceSked();
int stage_num = 0;
StageScheduler F(res_sked, stage_num++);
StageScheduler D(res_sked, stage_num++);
@@ -383,6 +383,9 @@ InOrderCPU::createFrontEndSked()
D.needs(BPred, BranchPredictor::PredictBranch);
D.needs(FetchSeq, FetchSeqUnit::UpdateTargetPC);
+
+ DPRINTF(SkedCache, "Resource Sked created for instruction \"front_end\"\n");
+
return res_sked;
}
@@ -391,7 +394,11 @@ InOrderCPU::createBackEndSked(DynInstPtr inst)
{
RSkedPtr res_sked = lookupSked(inst);
if (res_sked != NULL) {
+ DPRINTF(SkedCache, "Found %s in sked cache.\n",
+ inst->instName());
return res_sked;
+ } else {
+ res_sked = new ResourceSked();
}
int stage_num = ThePipeline::BackEndStartStage;
@@ -402,7 +409,7 @@ InOrderCPU::createBackEndSked(DynInstPtr inst)
if (!inst->staticInst) {
warn_once("Static Instruction Object Not Set. Can't Create"
" Back End Schedule");
- return false;
+ return NULL;
}
// EXECUTE
@@ -458,6 +465,14 @@ InOrderCPU::createBackEndSked(DynInstPtr inst)
W.needs(Grad, GraduationUnit::GraduateInst);
+ // Insert Front Schedule into our cache of
+ // resource schedules
+ addToSkedCache(inst, res_sked);
+
+ DPRINTF(SkedCache, "Back End Sked Created for instruction: %s (%08p)\n",
+ inst->instName(), inst->getMachInst());
+ res_sked->print();
+
return res_sked;
}