O3: Add a pointer to the macroop for a microop in the dyninst.

This commit is contained in:
Gabe Black 2011-08-14 04:08:14 -07:00
parent a81d4a8fcd
commit ec204f003c
5 changed files with 18 additions and 12 deletions

View file

@ -103,6 +103,7 @@ class BaseDynInst : public FastAlloc, public RefCounted
/** The StaticInst used by this BaseDynInst. */ /** The StaticInst used by this BaseDynInst. */
StaticInstPtr staticInst; StaticInstPtr staticInst;
StaticInstPtr macroop;
//////////////////////////////////////////// ////////////////////////////////////////////
// //
@ -378,13 +379,14 @@ class BaseDynInst : public FastAlloc, public RefCounted
* @param seq_num The sequence number of the instruction. * @param seq_num The sequence number of the instruction.
* @param cpu Pointer to the instruction's CPU. * @param cpu Pointer to the instruction's CPU.
*/ */
BaseDynInst(StaticInstPtr staticInst, TheISA::PCState pc, BaseDynInst(StaticInstPtr staticInst, StaticInstPtr macroop,
TheISA::PCState predPC, InstSeqNum seq_num, ImplCPU *cpu); TheISA::PCState pc, TheISA::PCState predPC,
InstSeqNum seq_num, ImplCPU *cpu);
/** BaseDynInst constructor given a StaticInst pointer. /** BaseDynInst constructor given a StaticInst pointer.
* @param _staticInst The StaticInst for this BaseDynInst. * @param _staticInst The StaticInst for this BaseDynInst.
*/ */
BaseDynInst(StaticInstPtr &_staticInst); BaseDynInst(StaticInstPtr staticInst, StaticInstPtr macroop);
/** BaseDynInst destructor. */ /** BaseDynInst destructor. */
~BaseDynInst(); ~BaseDynInst();

View file

@ -76,9 +76,10 @@ my_hash_t thishash;
template <class Impl> template <class Impl>
BaseDynInst<Impl>::BaseDynInst(StaticInstPtr _staticInst, BaseDynInst<Impl>::BaseDynInst(StaticInstPtr _staticInst,
StaticInstPtr _macroop,
TheISA::PCState _pc, TheISA::PCState _predPC, TheISA::PCState _pc, TheISA::PCState _predPC,
InstSeqNum seq_num, ImplCPU *cpu) InstSeqNum seq_num, ImplCPU *cpu)
: staticInst(_staticInst), traceData(NULL), cpu(cpu) : staticInst(_staticInst), macroop(_macroop), traceData(NULL), cpu(cpu)
{ {
seqNum = seq_num; seqNum = seq_num;
@ -90,8 +91,9 @@ BaseDynInst<Impl>::BaseDynInst(StaticInstPtr _staticInst,
} }
template <class Impl> template <class Impl>
BaseDynInst<Impl>::BaseDynInst(StaticInstPtr &_staticInst) BaseDynInst<Impl>::BaseDynInst(StaticInstPtr _staticInst,
: staticInst(_staticInst), traceData(NULL) StaticInstPtr _macroop)
: staticInst(_staticInst), macroop(_macroop), traceData(NULL)
{ {
seqNum = 0; seqNum = 0;
initVars(); initVars();

View file

@ -86,12 +86,12 @@ class BaseO3DynInst : public BaseDynInst<Impl>
public: public:
/** BaseDynInst constructor given a binary instruction. */ /** BaseDynInst constructor given a binary instruction. */
BaseO3DynInst(StaticInstPtr staticInst, BaseO3DynInst(StaticInstPtr staticInst, StaticInstPtr macroop,
TheISA::PCState pc, TheISA::PCState predPC, TheISA::PCState pc, TheISA::PCState predPC,
InstSeqNum seq_num, O3CPU *cpu); InstSeqNum seq_num, O3CPU *cpu);
/** BaseDynInst constructor given a static inst pointer. */ /** BaseDynInst constructor given a static inst pointer. */
BaseO3DynInst(StaticInstPtr &_staticInst); BaseO3DynInst(StaticInstPtr _staticInst, StaticInstPtr _macroop);
/** Executes the instruction.*/ /** Executes the instruction.*/
Fault execute(); Fault execute();

View file

@ -45,16 +45,18 @@
template <class Impl> template <class Impl>
BaseO3DynInst<Impl>::BaseO3DynInst(StaticInstPtr staticInst, BaseO3DynInst<Impl>::BaseO3DynInst(StaticInstPtr staticInst,
StaticInstPtr macroop,
TheISA::PCState pc, TheISA::PCState predPC, TheISA::PCState pc, TheISA::PCState predPC,
InstSeqNum seq_num, O3CPU *cpu) InstSeqNum seq_num, O3CPU *cpu)
: BaseDynInst<Impl>(staticInst, pc, predPC, seq_num, cpu) : BaseDynInst<Impl>(staticInst, macroop, pc, predPC, seq_num, cpu)
{ {
initVars(); initVars();
} }
template <class Impl> template <class Impl>
BaseO3DynInst<Impl>::BaseO3DynInst(StaticInstPtr &_staticInst) BaseO3DynInst<Impl>::BaseO3DynInst(StaticInstPtr _staticInst,
: BaseDynInst<Impl>(_staticInst) StaticInstPtr _macroop)
: BaseDynInst<Impl>(_staticInst, _macroop)
{ {
initVars(); initVars();
} }

View file

@ -1097,7 +1097,7 @@ DefaultFetch<Impl>::buildInst(ThreadID tid, StaticInstPtr staticInst,
// Create a new DynInst from the instruction fetched. // Create a new DynInst from the instruction fetched.
DynInstPtr instruction = DynInstPtr instruction =
new DynInst(staticInst, thisPC, nextPC, seq, cpu); new DynInst(staticInst, curMacroop, thisPC, nextPC, seq, cpu);
instruction->setTid(tid); instruction->setTid(tid);
instruction->setASID(tid); instruction->setASID(tid);