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.
This commit is contained in:
parent
16e0215d30
commit
56bddab189
1 changed files with 3 additions and 3 deletions
|
@ -1191,10 +1191,10 @@ LSQUnit<Impl>::recvRetry()
|
||||||
DPRINTF(LSQUnit, "Receiving retry: store blocked\n");
|
DPRINTF(LSQUnit, "Receiving retry: store blocked\n");
|
||||||
assert(retryPkt != NULL);
|
assert(retryPkt != NULL);
|
||||||
|
|
||||||
if (dcachePort->sendTiming(retryPkt)) {
|
|
||||||
LSQSenderState *state =
|
LSQSenderState *state =
|
||||||
dynamic_cast<LSQSenderState *>(retryPkt->senderState);
|
dynamic_cast<LSQSenderState *>(retryPkt->senderState);
|
||||||
|
|
||||||
|
if (dcachePort->sendTiming(retryPkt)) {
|
||||||
// Don't finish the store unless this is the last packet.
|
// Don't finish the store unless this is the last packet.
|
||||||
if (!TheISA::HasUnalignedMemAcc || !state->pktToSend ||
|
if (!TheISA::HasUnalignedMemAcc || !state->pktToSend ||
|
||||||
state->pendingPacket == retryPkt) {
|
state->pendingPacket == retryPkt) {
|
||||||
|
|
Loading…
Reference in a new issue