diff options
Diffstat (limited to 'src/mem/cache/prefetch/stride.cc')
-rw-r--r-- | src/mem/cache/prefetch/stride.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/mem/cache/prefetch/stride.cc b/src/mem/cache/prefetch/stride.cc index a7abf4809..c4cf2023a 100644 --- a/src/mem/cache/prefetch/stride.cc +++ b/src/mem/cache/prefetch/stride.cc @@ -66,6 +66,23 @@ StridePrefetcher::calculatePrefetch(PacketPtr &pkt, std::list<Addr> &addresses, assert(master_id < Max_Contexts); std::list<StrideEntry*> &tab = table[master_id]; + // Revert to simple N-block ahead prefetch for instruction fetches + if (instTagged && pkt->req->isInstFetch()) { + for (int d = 1; d <= degree; d++) { + Addr new_addr = data_addr + d * blkSize; + if (pageStop && !samePage(data_addr, new_addr)) { + // Spanned the page, so now stop + pfSpanPage += degree - d + 1; + return; + } + DPRINTF(HWPrefetch, "queuing prefetch to %x @ %d\n", + new_addr, latency); + addresses.push_back(new_addr); + delays.push_back(latency); + } + return; + } + /* Scan Table for instAddr Match */ std::list<StrideEntry*>::iterator iter; for (iter = tab.begin(); iter != tab.end(); iter++) { |