lsq_unit_impl.hh (13652:45d94ac03a27) lsq_unit_impl.hh (13710:5ba1d8066ef0)
1
2/*
3 * Copyright (c) 2010-2014, 2017-2018 ARM Limited
4 * Copyright (c) 2013 Advanced Micro Devices, Inc.
5 * All rights reserved
6 *
7 * The license below extends only to copyright in the software and shall
8 * not be construed as granting a license to any other intellectual

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

703 writebackBlockedStore();
704 }
705
706 while (storesToWB > 0 &&
707 storeWBIt.dereferenceable() &&
708 storeWBIt->valid() &&
709 storeWBIt->canWB() &&
710 ((!needsTSO) || (!storeInFlight)) &&
1
2/*
3 * Copyright (c) 2010-2014, 2017-2018 ARM Limited
4 * Copyright (c) 2013 Advanced Micro Devices, Inc.
5 * All rights reserved
6 *
7 * The license below extends only to copyright in the software and shall
8 * not be construed as granting a license to any other intellectual

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

703 writebackBlockedStore();
704 }
705
706 while (storesToWB > 0 &&
707 storeWBIt.dereferenceable() &&
708 storeWBIt->valid() &&
709 storeWBIt->canWB() &&
710 ((!needsTSO) || (!storeInFlight)) &&
711 lsq->storePortAvailable()) {
711 lsq->cachePortAvailable(false)) {
712
713 if (isStoreBlocked) {
714 DPRINTF(LSQUnit, "Unable to write back any more stores, cache"
715 " is blocked!\n");
716 break;
717 }
718
719 // Store didn't write any data so no need to write it back to

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

1035bool
1036LSQUnit<Impl>::trySendPacket(bool isLoad, PacketPtr data_pkt)
1037{
1038 bool ret = true;
1039 bool cache_got_blocked = false;
1040
1041 auto state = dynamic_cast<LSQSenderState*>(data_pkt->senderState);
1042
712
713 if (isStoreBlocked) {
714 DPRINTF(LSQUnit, "Unable to write back any more stores, cache"
715 " is blocked!\n");
716 break;
717 }
718
719 // Store didn't write any data so no need to write it back to

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

1035bool
1036LSQUnit<Impl>::trySendPacket(bool isLoad, PacketPtr data_pkt)
1037{
1038 bool ret = true;
1039 bool cache_got_blocked = false;
1040
1041 auto state = dynamic_cast<LSQSenderState*>(data_pkt->senderState);
1042
1043 if (!lsq->cacheBlocked() && (isLoad || lsq->storePortAvailable())) {
1043 if (!lsq->cacheBlocked() &&
1044 lsq->cachePortAvailable(isLoad)) {
1044 if (!dcachePort->sendTimingReq(data_pkt)) {
1045 ret = false;
1046 cache_got_blocked = true;
1047 }
1048 } else {
1049 ret = false;
1050 }
1051
1052 if (ret) {
1053 if (!isLoad) {
1045 if (!dcachePort->sendTimingReq(data_pkt)) {
1046 ret = false;
1047 cache_got_blocked = true;
1048 }
1049 } else {
1050 ret = false;
1051 }
1052
1053 if (ret) {
1054 if (!isLoad) {
1054 lsq->storePortBusy();
1055 isStoreBlocked = false;
1056 }
1055 isStoreBlocked = false;
1056 }
1057 lsq->cachePortBusy(isLoad);
1057 state->outstanding++;
1058 state->request()->packetSent();
1059 } else {
1060 if (cache_got_blocked) {
1061 lsq->cacheBlocked(true);
1062 ++lsqCacheBlocked;
1063 }
1064 if (!isLoad) {
1065 assert(state->request() == storeWBIt->request());
1066 isStoreBlocked = true;
1067 }
1068 state->request()->packetNotSent();
1069 }
1058 state->outstanding++;
1059 state->request()->packetSent();
1060 } else {
1061 if (cache_got_blocked) {
1062 lsq->cacheBlocked(true);
1063 ++lsqCacheBlocked;
1064 }
1065 if (!isLoad) {
1066 assert(state->request() == storeWBIt->request());
1067 isStoreBlocked = true;
1068 }
1069 state->request()->packetNotSent();
1070 }
1070
1071 return ret;
1072}
1073
1074template <class Impl>
1075void
1076LSQUnit<Impl>::recvRetry()
1077{
1078 if (isStoreBlocked) {

--- 38 unchanged lines hidden ---
1071 return ret;
1072}
1073
1074template <class Impl>
1075void
1076LSQUnit<Impl>::recvRetry()
1077{
1078 if (isStoreBlocked) {

--- 38 unchanged lines hidden ---