diff options
author | Korey Sewell <ksewell@umich.edu> | 2009-05-12 15:01:14 -0400 |
---|---|---|
committer | Korey Sewell <ksewell@umich.edu> | 2009-05-12 15:01:14 -0400 |
commit | 2012202b06a620998709f605f8f8692ad718294d (patch) | |
tree | 43a4817c6889723d480e7c66c0b22cfe022cb0ea /src/cpu | |
parent | b569f8f0ed8dcf32347f0d4f68d2d7572a5d1353 (diff) | |
download | gem5-2012202b06a620998709f605f8f8692ad718294d.tar.xz |
inorder/alpha-isa: create eaComp object visible to StaticInst through ISA
Remove subinstructions eaComp/memAcc since unused in CPU Models. Instead, create eaComp that is visible from StaticInst object. Gives InOrder model capability of generating address without actually initiating access
* * *
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/SConscript | 4 | ||||
-rw-r--r-- | src/cpu/inorder/inorder_dyn_inst.cc | 16 | ||||
-rw-r--r-- | src/cpu/inorder/pipeline_traits.cc | 3 |
3 files changed, 14 insertions, 9 deletions
diff --git a/src/cpu/SConscript b/src/cpu/SConscript index 344deb9cf..854db9f12 100644 --- a/src/cpu/SConscript +++ b/src/cpu/SConscript @@ -49,6 +49,8 @@ execfile(models_db.srcnode().abspath) # Template for execute() signature. exec_sig_template = ''' virtual Fault execute(%(type)s *xc, Trace::InstRecord *traceData) const = 0; +virtual Fault eaComp(%(type)s *xc, Trace::InstRecord *traceData) const +{ panic("eaComp not defined!"); M5_DUMMY_RETURN }; virtual Fault initiateAcc(%(type)s *xc, Trace::InstRecord *traceData) const { panic("initiateAcc not defined!"); M5_DUMMY_RETURN }; virtual Fault completeAcc(Packet *pkt, %(type)s *xc, @@ -59,6 +61,8 @@ virtual int memAccSize(%(type)s *xc) ''' mem_ini_sig_template = ''' +virtual Fault eaComp(%(type)s *xc, Trace::InstRecord *traceData) const +{ panic("eaComp not defined!"); M5_DUMMY_RETURN }; virtual Fault initiateAcc(%s *xc, Trace::InstRecord *traceData) const { panic("Not defined!"); M5_DUMMY_RETURN }; ''' diff --git a/src/cpu/inorder/inorder_dyn_inst.cc b/src/cpu/inorder/inorder_dyn_inst.cc index 7fc953da2..b6eac04cb 100644 --- a/src/cpu/inorder/inorder_dyn_inst.cc +++ b/src/cpu/inorder/inorder_dyn_inst.cc @@ -226,6 +226,13 @@ InOrderDynInst::execute() } Fault +InOrderDynInst::calcEA() +{ + this->fault = this->staticInst->eaComp(this, this->traceData); + return this->fault; +} + +Fault InOrderDynInst::initiateAcc() { // @todo: Pretty convoluted way to avoid squashing from happening @@ -275,16 +282,9 @@ void InOrderDynInst::deleteStages() { } Fault -InOrderDynInst::calcEA() -{ - return staticInst->eaCompInst()->execute(this, this->traceData); -} - -Fault InOrderDynInst::memAccess() { - //return staticInst->memAccInst()->execute(this, this->traceData); - return initiateAcc( ); + return initiateAcc(); } void diff --git a/src/cpu/inorder/pipeline_traits.cc b/src/cpu/inorder/pipeline_traits.cc index eb899452a..1c17b0d3f 100644 --- a/src/cpu/inorder/pipeline_traits.cc +++ b/src/cpu/inorder/pipeline_traits.cc @@ -99,8 +99,8 @@ bool createBackEndSchedule(DynInstPtr &inst) if ( inst->isNonSpeculative() ) { // skip execution of non speculative insts until later } else if ( inst->isMemRef() ) { - E->needs(AGEN, AGENUnit::GenerateAddr); if ( inst->isLoad() ) { + E->needs(AGEN, AGENUnit::GenerateAddr); E->needs(DTLB, TLBUnit::DataLookup); E->needs(DCache, CacheUnit::InitiateReadData); } @@ -121,6 +121,7 @@ bool createBackEndSchedule(DynInstPtr &inst) M->needs(DCache, CacheUnit::CompleteReadData); } else if ( inst->isStore() ) { M->needs(RegManager, UseDefUnit::ReadSrcReg, 1); + M->needs(AGEN, AGENUnit::GenerateAddr); M->needs(DTLB, TLBUnit::DataLookup); M->needs(DCache, CacheUnit::InitiateWriteData); } |