1/* 2 * Copyright (c) 2004-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 52 unchanged lines hidden (view full) --- 61 62template<class Impl> 63void 64LSQUnit<Impl>::completeDataAccess(PacketPtr pkt) 65{ 66 LSQSenderState *state = dynamic_cast<LSQSenderState *>(pkt->senderState); 67 DynInstPtr inst = state->inst; 68 DPRINTF(IEW, "Writeback event [sn:%lli]\n", inst->seqNum); |
69 DPRINTF(Activity, "Activity: Writeback event [sn:%lli]\n", inst->seqNum); |
70 71 //iewStage->ldstQueue.removeMSHR(inst->threadNumber,inst->seqNum); 72 73 if (isSwitchedOut() || inst->isSquashed()) { 74 delete state; 75 delete pkt; 76 return; 77 } else { --- 126 unchanged lines hidden (view full) --- 204 205template<class Impl> 206void 207LSQUnit<Impl>::clearSQ() 208{ 209 storeQueue.clear(); 210} 211 |
212template<class Impl> 213void |
214LSQUnit<Impl>::switchOut() 215{ 216 switchedOut = true; 217 for (int i = 0; i < loadQueue.size(); ++i) 218 loadQueue[i] = NULL; 219 220 assert(storesToWB == 0); 221} --- 391 unchanged lines hidden (view full) --- 613 // Non-store conditionals do not need a writeback. 614 state->noWB = true; 615 } 616 617 if (!dcachePort->sendTiming(data_pkt)) { 618 // Need to handle becoming blocked on a store. 619 isStoreBlocked = true; 620 |
621 assert(retryPkt == NULL); 622 retryPkt = data_pkt; |
623 } else { 624 storePostSend(data_pkt); 625 } 626 } 627 628 // Not sure this should set it to 0. 629 usedPorts = 0; 630 --- 212 unchanged lines hidden (view full) --- 843 cpu->checker->tick(storeQueue[store_idx].inst); 844 } 845} 846 847template <class Impl> 848void 849LSQUnit<Impl>::recvRetry() 850{ |
851 if (isStoreBlocked) { |
852 assert(retryPkt != NULL); 853 854 if (dcachePort->sendTiming(retryPkt)) { 855 storePostSend(retryPkt); |
856 sendingPkt = NULL; 857 isStoreBlocked = false; 858 } else { 859 // Still blocked! 860 } 861 } else if (isLoadBlocked) { 862 DPRINTF(LSQUnit, "Loads squash themselves and all younger insts, " 863 "no need to resend packet.\n"); --- 66 unchanged lines hidden --- |