Deleted Added
sdiff udiff text old ( 2722:610b13e19da0 ) new ( 2727:91e17c7ee622 )
full compact
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;

--- 184 unchanged lines hidden (view full) ---

193 return iewStage->name() + ".lsq";
194 } else {
195 return iewStage->name() + ".lsq.thread." + to_string(lsqID);
196 }
197}
198
199template<class Impl>
200void
201LSQUnit<Impl>::clearLQ()
202{
203 loadQueue.clear();
204}
205
206template<class Impl>
207void
208LSQUnit<Impl>::clearSQ()

--- 404 unchanged lines hidden (view full) ---

613 } else {
614 // Non-store conditionals do not need a writeback.
615 state->noWB = true;
616 }
617
618 if (!dcachePort->sendTiming(data_pkt)) {
619 // Need to handle becoming blocked on a store.
620 isStoreBlocked = true;
621
622 assert(retryPkt == NULL);
623 retryPkt = data_pkt;
624 } else {
625 storePostSend(data_pkt);
626 }
627 }
628
629 // Not sure this should set it to 0.

--- 42 unchanged lines hidden (view full) ---

672 loadQueue[load_idx]->squashed = true;
673 loadQueue[load_idx] = NULL;
674 --loads;
675
676 // Inefficient!
677 loadTail = load_idx;
678
679 decrLdIdx(load_idx);
680 }
681
682 if (isLoadBlocked) {
683 if (squashed_num < blockedLoadSeqNum) {
684 isLoadBlocked = false;
685 loadBlockedHandled = false;
686 blockedLoadSeqNum = 0;
687 }

--- 30 unchanged lines hidden (view full) ---

718
719 storeQueue[store_idx].req = NULL;
720 --stores;
721
722 // Inefficient!
723 storeTail = store_idx;
724
725 decrStIdx(store_idx);
726 }
727}
728
729template <class Impl>
730void
731LSQUnit<Impl>::storePostSend(Packet *pkt)
732{
733 if (isStalled() &&

--- 43 unchanged lines hidden (view full) ---

777void
778LSQUnit<Impl>::writeback(DynInstPtr &inst, PacketPtr pkt)
779{
780 iewStage->wakeCPU();
781
782 // Squashed instructions do not need to complete their access.
783 if (inst->isSquashed()) {
784 assert(!inst->isStore());
785 return;
786 }
787
788 if (!inst->isExecuted()) {
789 inst->setExecuted();
790
791 // Complete access to copy data to proper place.
792 inst->completeAcc(pkt);

--- 60 unchanged lines hidden (view full) ---

853 assert(retryPkt != NULL);
854
855 if (dcachePort->sendTiming(retryPkt)) {
856 storePostSend(retryPkt);
857 retryPkt = NULL;
858 isStoreBlocked = false;
859 } else {
860 // Still blocked!
861 }
862 } else if (isLoadBlocked) {
863 DPRINTF(LSQUnit, "Loads squash themselves and all younger insts, "
864 "no need to resend packet.\n");
865 } else {
866 DPRINTF(LSQUnit, "Retry received but LSQ is no longer blocked.\n");
867 }
868}

--- 62 unchanged lines hidden ---