}
// EXECUTE
+ X.needs(RegManager, UseDefUnit::MarkDestRegs);
for (int idx=0; idx < inst->numSrcRegs(); idx++) {
if (!idx || !inst->isStore()) {
X.needs(RegManager, UseDefUnit::ReadSrcReg, idx);
return;
}
-
- //@todo: may want to make a separate schedule entry for setting
- // destination register dependencies
- //@note: typically want to set the output dependencies right
- // before we do any reading or writing of registers
- // (in RegFile Manager(use_def.cc)) but there are some
- // instructions that dont have src regs, so just in case
- // take care of reg. dep. map stuff here
- if (!inst->isRegDepEntry()) {
- regDepMap[tid]->insert(inst);
- }
-
switch (exec_req->cmd)
{
case ExecuteInst:
*nonSpecSeqNum[tid] = seq_num;
}
- //@todo: may want to make a separate schedule entry for setting
- // destination register dependencies
- if (!inst->isRegDepEntry()) {
- regDepMap[tid]->insert(inst);
- }
-
switch (ud_req->cmd)
{
case ReadSrcReg:
}
break;
+ case MarkDestRegs:
+ {
+ regDepMap[tid]->insert(inst);
+ ud_req->done();
+ }
+ break;
+
default:
fatal("Unrecognized command to %s", resName);
}
enum Command {
ReadSrcReg,
- WriteDestReg
+ WriteDestReg,
+ MarkDestRegs
};
public: