summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2009-03-04 13:16:49 -0500
committerKorey Sewell <ksewell@umich.edu>2009-03-04 13:16:49 -0500
commit846f953c2bc8f9922afe62c30e60f9b5b531d09e (patch)
treeb9c325f5d90232b1b6def93e212344698df49b67
parente4aa4ca40c0a5ab5946914cc997e0a9bd288c861 (diff)
downloadgem5-846f953c2bc8f9922afe62c30e60f9b5b531d09e.tar.xz
Give TimeBuffer an ID that can be set. Necessary because InOrder uses generic stages so w/o an ID there is no way to differentiate buffers when debugging
-rw-r--r--src/base/timebuf.hh13
-rw-r--r--src/cpu/inorder/cpu.cc4
-rw-r--r--src/cpu/inorder/pipeline_stage.cc9
3 files changed, 19 insertions, 7 deletions
diff --git a/src/base/timebuf.hh b/src/base/timebuf.hh
index 348f7a673..9f9fc32b5 100644
--- a/src/base/timebuf.hh
+++ b/src/base/timebuf.hh
@@ -43,6 +43,7 @@ class TimeBuffer
int past;
int future;
int size;
+ int _id;
char *data;
std::vector<char *> index;
@@ -148,6 +149,8 @@ class TimeBuffer
new (ptr) T;
ptr += sizeof(T);
}
+
+ _id = -1;
}
TimeBuffer()
@@ -162,6 +165,16 @@ class TimeBuffer
delete [] data;
}
+ void id(int id)
+ {
+ _id = id;
+ }
+
+ int id()
+ {
+ return _id;
+ }
+
void
advance()
{
diff --git a/src/cpu/inorder/cpu.cc b/src/cpu/inorder/cpu.cc
index 94a6efce9..1836989af 100644
--- a/src/cpu/inorder/cpu.cc
+++ b/src/cpu/inorder/cpu.cc
@@ -230,11 +230,9 @@ InOrderCPU::InOrderCPU(Params *params)
}
// Initialize TimeBuffer Stage Queues
- // For now just have these time buffers be pretty big.
- // @note: This could be statically allocated but changes
- // would have to be made to the standard time buffer class.
for (int stNum=0; stNum < NumStages - 1; stNum++) {
stageQueue[stNum] = new StageQueue(NumStages, NumStages);
+ stageQueue[stNum]->id(stNum);
}
diff --git a/src/cpu/inorder/pipeline_stage.cc b/src/cpu/inorder/pipeline_stage.cc
index 547b42537..f356c0e1a 100644
--- a/src/cpu/inorder/pipeline_stage.cc
+++ b/src/cpu/inorder/pipeline_stage.cc
@@ -556,8 +556,8 @@ PipelineStage::sortInsts()
if (prevStageValid) {
int insts_from_prev_stage = prevStage->size;
- DPRINTF(InOrderStage, "%i insts available from previous stage.\n",
- insts_from_prev_stage);
+ DPRINTF(InOrderStage, "%i insts available from stage buffer %i.\n",
+ insts_from_prev_stage, prevStageQueue->id());
for (int i = 0; i < insts_from_prev_stage; ++i) {
@@ -985,8 +985,9 @@ PipelineStage::sendInstToNextStage(DynInstPtr inst)
tid, cpu->pipelineStage[next_stage]->stageBufferAvail());
DPRINTF(InOrderStage, "[tid:%u]: [sn:%i]: being placed into "
- "index %i stage %i queue.\n",
- tid, inst->seqNum, toNextStageIndex, inst->nextStage);
+ "index %i of stage buffer %i queue.\n",
+ tid, inst->seqNum, toNextStageIndex,
+ cpu->pipelineStage[prev_stage]->nextStageQueue->id());
int next_stage_idx = cpu->pipelineStage[prev_stage]->nextStage->size;