using namespace TheISA;
using namespace ThePipeline;
-InOrderDynInst::InOrderDynInst(TheISA::ExtMachInst machInst,
- const TheISA::PCState &instPC,
- const TheISA::PCState &_predPC,
- InstSeqNum seq_num, InOrderCPU *cpu)
- : staticInst(machInst, instPC.instAddr()), traceData(NULL), cpu(cpu)
-{
- seqNum = seq_num;
-
- pc = instPC;
- predPC = _predPC;
-
- initVars();
-}
-
InOrderDynInst::InOrderDynInst(InOrderCPU *cpu,
InOrderThreadState *state,
InstSeqNum seq_num,
ThreadID tid,
unsigned _asid)
- : traceData(NULL), cpu(cpu)
-{
- seqNum = seq_num;
- thread = state;
- threadNumber = tid;
- asid = _asid;
- initVars();
-}
+ : seqNum(seq_num), bdelaySeqNum(0), threadNumber(tid), asid(_asid),
+ virtProcNumber(0), staticInst(NULL), traceData(NULL), cpu(cpu),
+ thread(state), fault(NoFault), memData(NULL), loadData(0),
+ storeData(0), effAddr(0), physEffAddr(0), memReqFlags(0),
+ readyRegs(0), pc(0), predPC(0), memAddr(0), nextStage(0),
+ memTime(0), splitMemData(NULL), splitMemReq(NULL), totalSize(0),
+ split2ndSize(0), split2ndAddr(0), split2ndAccess(false),
+ split2ndDataPtr(NULL), split2ndFlags(0), splitInst(false),
+ splitFinishCnt(0), split2ndStoreDataPtr(NULL), splitInstSked(false),
+ inFrontEnd(true), frontSked(NULL), backSked(NULL),
+ squashingStage(0), predictTaken(false), procDelaySlotOnMispred(false),
+ fetchMemReq(NULL), dataMemReq(NULL), instEffAddr(0), eaCalcDone(false),
+ lqIdx(0), sqIdx(0), instListIt(NULL)
+{
+ for(int i = 0; i < MaxInstSrcRegs; i++) {
+ instSrc[i].integer = 0;
+ instSrc[i].dbl = 0;
+ _readySrcRegIdx[i] = false;
+ _srcRegIdx[i] = 0;
+ }
-InOrderDynInst::InOrderDynInst(StaticInstPtr &_staticInst)
- : seqNum(0), staticInst(_staticInst), traceData(NULL)
-{
- initVars();
-}
+ for(int j = 0; j < MaxInstDestRegs; j++) {
+ _destRegIdx[j] = 0;
+ _prevDestRegIdx[j] = 0;
+ }
+
+ ++instcount;
+ DPRINTF(InOrderDynInst, "DynInst: [tid:%i] [sn:%lli] Instruction created."
+ " (active insts: %i)\n", threadNumber, seqNum, instcount);
-InOrderDynInst::InOrderDynInst()
- : seqNum(0), traceData(NULL), cpu(cpu)
-{
- initVars();
}
int InOrderDynInst::instcount = 0;
-
void
InOrderDynInst::setMachInst(ExtMachInst machInst)
{
memAddrReady = false;
eaCalcDone = false;
- memOpDone = false;
predictTaken = false;
procDelaySlotOnMispred = false;
}
// Update Instruction Count for this instruction
- ++instcount;
if (instcount > 100) {
fatal("Number of Active Instructions in CPU is too high. "
"(Not Dereferencing Ptrs. Correctly?)\n");
}
-
-
-
- DPRINTF(InOrderDynInst, "DynInst: [tid:%i] [sn:%lli] Instruction created."
- " (active insts: %i)\n", threadNumber, seqNum, instcount);
}
void
};
public:
- /** BaseDynInst constructor given a binary instruction.
- * @param inst The binary instruction.
- * @param PC The PC of the instruction.
- * @param predPC The predicted next PC.
- * @param seq_num The sequence number of the instruction.
- * @param cpu Pointer to the instruction's CPU.
- */
- InOrderDynInst(ExtMachInst inst, const TheISA::PCState &PC,
- const TheISA::PCState &predPC, InstSeqNum seq_num,
- InOrderCPU *cpu);
-
/** BaseDynInst constructor given a binary instruction.
* @param seq_num The sequence number of the instruction.
* @param cpu Pointer to the instruction's CPU.
InOrderDynInst(InOrderCPU *cpu, InOrderThreadState *state,
InstSeqNum seq_num, ThreadID tid, unsigned asid = 0);
- /** BaseDynInst constructor given a StaticInst pointer.
- * @param _staticInst The StaticInst for this BaseDynInst.
- */
- InOrderDynInst(StaticInstPtr &_staticInst);
-
- /** Skeleton Constructor. */
- InOrderDynInst();
-
/** InOrderDynInst destructor. */
~InOrderDynInst();
/** The effective physical address. */
Addr physEffAddr;
- /** Effective virtual address for a copy source. */
- Addr copySrcEffAddr;
-
- /** Effective physical address for a copy source. */
- Addr copySrcPhysEffAddr;
-
/** The memory request flags (from translation). */
unsigned memReqFlags;
Tick tick;
InstResult()
- : type(None), tick(0)
- {}
+ : type(None), tick(0)
+ {
+ val.integer = 0;
+ val.dbl = 0;
+ }
};
/** The source of the instruction; assumes for now that there's only one
/** Predicted next PC. */
TheISA::PCState predPC;
- /** Address to fetch from */
- Addr fetchAddr;
-
/** Address to get/write data from/to */
+ /* Fetching address when inst. starts, Data address for load/store after fetch*/
Addr memAddr;
/** Whether or not the source register is ready.
curSkedEntry++;
if (inFrontEnd && curSkedEntry == frontSked_end) {
- assert(backSked != NULL);
+ DPRINTF(InOrderDynInst, "[sn:%i] Switching to "
+ "back end schedule.\n", seqNum);
+ assert(backSked != NULL);
curSkedEntry.init(backSked);
curSkedEntry = backSked->begin();
inFrontEnd = false;
return true;
}
+ DPRINTF(InOrderDynInst, "[sn:%i] Next Stage: %i "
+ "Next Resource: %i.\n", seqNum, curSkedEntry->stageNum,
+ curSkedEntry->resNum);
+
return false;
}
*/
bool eaCalcDone;
- public:
- /** Whether or not the memory operation is done. */
- bool memOpDone;
-
public:
/** Load queue index. */
int16_t lqIdx;