summaryrefslogtreecommitdiff
path: root/src/cpu/o3/lsq_unit.hh
diff options
context:
space:
mode:
authorKevin Lim <ktlim@umich.edu>2006-06-09 11:46:35 -0400
committerKevin Lim <ktlim@umich.edu>2006-06-09 11:46:35 -0400
commit068379a9ed22bc00b9544e33b382da8d9aebc13a (patch)
treecea0e4a49d9df0338195825f8105e763c865f676 /src/cpu/o3/lsq_unit.hh
parentf5b6aef154c39b7d0a6c8badac5bb40daa0a0827 (diff)
downloadgem5-068379a9ed22bc00b9544e33b382da8d9aebc13a.tar.xz
Fixes for some outstanding issues in the LSQ. It should now be able to retry. It should also be able to handle LL/SC (through hacks) for the UP case.
src/cpu/o3/lsq_unit.hh: Handle being able to retry (untested but hopefully very close to working). Handle lock flag for LL/SC hack. Hopefully the memory system will add in LL/SC soon. Better output message. src/cpu/o3/lsq_unit_impl.hh: Handle being able to retry (untested but should be very close to working). Make SC's work (hopefully) while the memory system doesn't have a LL/SC implementation. --HG-- extra : convert_revision : bffa721b21405c88a9c6b3d9b9080957f8a2638f
Diffstat (limited to 'src/cpu/o3/lsq_unit.hh')
-rw-r--r--src/cpu/o3/lsq_unit.hh11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/cpu/o3/lsq_unit.hh b/src/cpu/o3/lsq_unit.hh
index 21f48ce02..3123e246d 100644
--- a/src/cpu/o3/lsq_unit.hh
+++ b/src/cpu/o3/lsq_unit.hh
@@ -213,9 +213,14 @@ class LSQUnit {
private:
void writeback(DynInstPtr &inst, PacketPtr pkt);
+ void storePostSend(Packet *pkt);
+
/** Completes the store at the specified index. */
void completeStore(int store_idx);
+ /** Handles doing the retry. */
+ void recvRetry();
+
/** Increments the given store index (circular queue). */
inline void incrStIdx(int &store_idx);
/** Decrements the given store index (circular queue). */
@@ -399,6 +404,8 @@ class LSQUnit {
/** The index of the above store. */
int stallingLoadIdx;
+ PacketPtr sendingPkt;
+
bool isStoreBlocked;
/** Whether or not a load is blocked due to the memory system. */
@@ -504,7 +511,7 @@ LSQUnit<Impl>::read(Request *req, T &data, int load_idx)
"storeHead: %i addr: %#x\n",
load_idx, store_idx, storeHead, req->getPaddr());
-#if 0
+#if FULL_SYSTEM
if (req->getFlags() & LOCKED) {
cpu->lockAddr = req->getPaddr();
cpu->lockFlag = true;
@@ -559,7 +566,7 @@ LSQUnit<Impl>::read(Request *req, T &data, int load_idx)
DPRINTF(LSQUnit, "Forwarding from store idx %i to load to "
"addr %#x, data %#x\n",
- store_idx, req->getVaddr(), *(load_inst->memData));
+ store_idx, req->getVaddr(), data);
PacketPtr data_pkt = new Packet(req, Packet::ReadReq, Packet::Broadcast);
data_pkt->dataStatic(load_inst->memData);