diff options
Diffstat (limited to 'src/cpu/minor')
-rw-r--r-- | src/cpu/minor/lsq.cc | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/cpu/minor/lsq.cc b/src/cpu/minor/lsq.cc index dea776c9e..8bbda030c 100644 --- a/src/cpu/minor/lsq.cc +++ b/src/cpu/minor/lsq.cc @@ -142,10 +142,18 @@ LSQ::LSQRequest::containsAddrRangeOf( LSQ::AddrRangeCoverage LSQ::LSQRequest::containsAddrRangeOf(LSQRequestPtr other_request) { - return containsAddrRangeOf(request->getPaddr(), request->getSize(), + AddrRangeCoverage ret = containsAddrRangeOf( + request->getPaddr(), request->getSize(), other_request->request->getPaddr(), other_request->request->getSize()); + /* If there is a strobe mask then store data forwarding might not be + * correct. Instead of checking enablemant of every byte we just fall back + * to PartialAddrRangeCoverage to prohibit store data forwarding */ + if (ret == FullAddrRangeCoverage && request->isMasked()) + ret = PartialAddrRangeCoverage; + return ret; } + bool LSQ::LSQRequest::isBarrier() { |