diff options
author | Kevin Lim <ktlim@umich.edu> | 2006-09-28 00:14:15 -0400 |
---|---|---|
committer | Kevin Lim <ktlim@umich.edu> | 2006-09-28 00:14:15 -0400 |
commit | 30b719fd768115bb26e848a02096350c11c1b0bd (patch) | |
tree | 063e7f9b3739893c4e0f7d85d453a08516f6de82 /cpu/ozone/front_end_impl.hh | |
parent | 51f19f2e28a30054d4a9cc06b059b602e17e504f (diff) | |
download | gem5-30b719fd768115bb26e848a02096350c11c1b0bd.tar.xz |
Updates to Ozone CPU.
cpu/ozone/cpu_impl.hh:
Be sure to update rename tables.
cpu/ozone/front_end_impl.hh:
Handle serialize instructions slightly differently. This allows front end to continue even if back end hasn't processed it yet.
cpu/ozone/lw_back_end_impl.hh:
Handle stores with faults properly.
cpu/ozone/lw_lsq.hh:
Handle committed stores properly.
cpu/ozone/lw_lsq_impl.hh:
Handle uncacheable loads properly.
--HG--
extra : convert_revision : 093edc2eee890139a9962c97c938575e6d313f09
Diffstat (limited to 'cpu/ozone/front_end_impl.hh')
-rw-r--r-- | cpu/ozone/front_end_impl.hh | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/cpu/ozone/front_end_impl.hh b/cpu/ozone/front_end_impl.hh index 09fc2e2f8..959803aee 100644 --- a/cpu/ozone/front_end_impl.hh +++ b/cpu/ozone/front_end_impl.hh @@ -288,8 +288,8 @@ FrontEnd<Impl>::tick() cacheBlkValid = true; status = Running; - if (barrierInst) - status = SerializeBlocked; +// if (barrierInst) +// status = SerializeBlocked; if (freeRegs <= 0) status = RenameBlocked; checkBE(); @@ -537,10 +537,10 @@ FrontEnd<Impl>::processBarriers(DynInstPtr &inst) // Change status over to SerializeBlocked so that other stages know // what this is blocked on. - status = SerializeBlocked; +// status = SerializeBlocked; - barrierInst = inst; - return true; +// barrierInst = inst; +// return true; } else if ((inst->isStoreConditional() || inst->isSerializeAfter()) && !inst->isSerializeHandled()) { DPRINTF(FE, "Serialize after instruction encountered.\n"); @@ -647,12 +647,12 @@ FrontEnd<Impl>::squash(const InstSeqNum &squash_num, const Addr &next_PC, DPRINTF(FE, "Squashing outstanding Icache miss.\n"); memReq = NULL; } - +/* if (status == SerializeBlocked) { assert(barrierInst->seqNum > squash_num); barrierInst = NULL; } - +*/ // Unless this squash originated from the front end, we're probably // in running mode now. // Actually might want to make this latency dependent. @@ -670,6 +670,15 @@ FrontEnd<Impl>::getInst() DynInstPtr inst = feBuffer.front(); + if (inst->isSerializeBefore() || inst->isIprAccess()) { + DPRINTF(FE, "Back end is getting a serialize before inst\n"); + if (!backEnd->robEmpty()) { + DPRINTF(FE, "Rob is not empty yet, not returning inst\n"); + return NULL; + } + inst->clearSerializeBefore(); + } + feBuffer.pop_front(); --instBufferSize; @@ -740,11 +749,11 @@ FrontEnd<Impl>::updateStatus() } if (status == BEBlocked && !be_block) { - if (barrierInst) { - status = SerializeBlocked; - } else { +// if (barrierInst) { +// status = SerializeBlocked; +// } else { status = Running; - } +// } ret_val = true; } return ret_val; @@ -766,6 +775,7 @@ template <class Impl> typename Impl::DynInstPtr FrontEnd<Impl>::getInstFromCacheline() { +/* if (status == SerializeComplete) { DynInstPtr inst = barrierInst; status = Running; @@ -773,7 +783,7 @@ FrontEnd<Impl>::getInstFromCacheline() inst->clearSerializeBefore(); return inst; } - +*/ InstSeqNum inst_seq; MachInst inst; // @todo: Fix this magic number used here to handle word offset (and |