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
This commit is contained in:
parent
e4aa4ca40c
commit
846f953c2b
3 changed files with 19 additions and 7 deletions
|
@ -43,6 +43,7 @@ class TimeBuffer
|
||||||
int past;
|
int past;
|
||||||
int future;
|
int future;
|
||||||
int size;
|
int size;
|
||||||
|
int _id;
|
||||||
|
|
||||||
char *data;
|
char *data;
|
||||||
std::vector<char *> index;
|
std::vector<char *> index;
|
||||||
|
@ -148,6 +149,8 @@ class TimeBuffer
|
||||||
new (ptr) T;
|
new (ptr) T;
|
||||||
ptr += sizeof(T);
|
ptr += sizeof(T);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_id = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
TimeBuffer()
|
TimeBuffer()
|
||||||
|
@ -162,6 +165,16 @@ class TimeBuffer
|
||||||
delete [] data;
|
delete [] data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void id(int id)
|
||||||
|
{
|
||||||
|
_id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
int id()
|
||||||
|
{
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
advance()
|
advance()
|
||||||
{
|
{
|
||||||
|
|
|
@ -230,11 +230,9 @@ InOrderCPU::InOrderCPU(Params *params)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize TimeBuffer Stage Queues
|
// 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++) {
|
for (int stNum=0; stNum < NumStages - 1; stNum++) {
|
||||||
stageQueue[stNum] = new StageQueue(NumStages, NumStages);
|
stageQueue[stNum] = new StageQueue(NumStages, NumStages);
|
||||||
|
stageQueue[stNum]->id(stNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -556,8 +556,8 @@ PipelineStage::sortInsts()
|
||||||
if (prevStageValid) {
|
if (prevStageValid) {
|
||||||
int insts_from_prev_stage = prevStage->size;
|
int insts_from_prev_stage = prevStage->size;
|
||||||
|
|
||||||
DPRINTF(InOrderStage, "%i insts available from previous stage.\n",
|
DPRINTF(InOrderStage, "%i insts available from stage buffer %i.\n",
|
||||||
insts_from_prev_stage);
|
insts_from_prev_stage, prevStageQueue->id());
|
||||||
|
|
||||||
for (int i = 0; i < insts_from_prev_stage; ++i) {
|
for (int i = 0; i < insts_from_prev_stage; ++i) {
|
||||||
|
|
||||||
|
@ -985,8 +985,9 @@ PipelineStage::sendInstToNextStage(DynInstPtr inst)
|
||||||
tid, cpu->pipelineStage[next_stage]->stageBufferAvail());
|
tid, cpu->pipelineStage[next_stage]->stageBufferAvail());
|
||||||
|
|
||||||
DPRINTF(InOrderStage, "[tid:%u]: [sn:%i]: being placed into "
|
DPRINTF(InOrderStage, "[tid:%u]: [sn:%i]: being placed into "
|
||||||
"index %i stage %i queue.\n",
|
"index %i of stage buffer %i queue.\n",
|
||||||
tid, inst->seqNum, toNextStageIndex, inst->nextStage);
|
tid, inst->seqNum, toNextStageIndex,
|
||||||
|
cpu->pipelineStage[prev_stage]->nextStageQueue->id());
|
||||||
|
|
||||||
int next_stage_idx = cpu->pipelineStage[prev_stage]->nextStage->size;
|
int next_stage_idx = cpu->pipelineStage[prev_stage]->nextStage->size;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue