summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNilay Vaish <nilay@cs.wisc.edu>2011-09-26 12:18:32 -0500
committerNilay Vaish <nilay@cs.wisc.edu>2011-09-26 12:18:32 -0500
commit56bddab18940e766bdfdeb98e0691a994859dcde (patch)
tree2b8e689a0278c060ce59739eda09a0f92440e822 /src
parent16e0215d3041353f54552e7f5f7482aae13bf486 (diff)
downloadgem5-56bddab18940e766bdfdeb98e0691a994859dcde.tar.xz
LSQ: Moved a couple of lines to enable O3 + Ruby
This patch makes O3 CPU work along with the Ruby memory model. Ruby overwrites the senderState pointer with another pointer. The pointer is restored only when Ruby gets done with the packet. LSQ makes use of senderState just after sendTiming() returns. But the dynamic_cast returns a NULL pointer since Ruby's senderState pointer is from a different class. Storing the senderState pointer before calling sendTiming() does away with the problem.
Diffstat (limited to 'src')
-rw-r--r--src/cpu/o3/lsq_unit_impl.hh6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/cpu/o3/lsq_unit_impl.hh b/src/cpu/o3/lsq_unit_impl.hh
index 2a37d8b5c..77ce705bc 100644
--- a/src/cpu/o3/lsq_unit_impl.hh
+++ b/src/cpu/o3/lsq_unit_impl.hh
@@ -1191,10 +1191,10 @@ LSQUnit<Impl>::recvRetry()
DPRINTF(LSQUnit, "Receiving retry: store blocked\n");
assert(retryPkt != NULL);
- if (dcachePort->sendTiming(retryPkt)) {
- LSQSenderState *state =
- dynamic_cast<LSQSenderState *>(retryPkt->senderState);
+ LSQSenderState *state =
+ dynamic_cast<LSQSenderState *>(retryPkt->senderState);
+ if (dcachePort->sendTiming(retryPkt)) {
// Don't finish the store unless this is the last packet.
if (!TheISA::HasUnalignedMemAcc || !state->pktToSend ||
state->pendingPacket == retryPkt) {