mem-cache: Return entry in StridePrefetcher::pcTableHit()
authorDaniel <odanrc@yahoo.com.br>
Tue, 13 Nov 2018 19:59:50 +0000 (20:59 +0100)
committerDaniel Carvalho <odanrc@yahoo.com.br>
Thu, 15 Nov 2018 16:52:44 +0000 (16:52 +0000)
Return a pointer to the entry instead of returning a
boolean and passing a pointer reference. As a side
effect, change the name of the function to be more
descriptive of the functionality.

Change-Id: Iad44979e98031754c1d0857b1790c0eaf77e9765
Signed-off-by: Daniel <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/14356
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>

src/mem/cache/prefetch/stride.cc
src/mem/cache/prefetch/stride.hh

index 3cea78ed7ec662997dd5ee9d677fc314d773bb7b..a00b10a05284bb5fbcf13e2afde9853e2058b4b9 100644 (file)
@@ -115,10 +115,10 @@ StridePrefetcher::calculatePrefetch(const PacketPtr &pkt,
     bool is_secure = pkt->isSecure();
     MasterID master_id = useMasterId ? pkt->req->masterId() : 0;
 
-    // Lookup pc-based information
-    StrideEntry *entry;
+    // Search for entry in the pc table
+    StrideEntry *entry = findEntry(pc, is_secure, master_id);
 
-    if (pcTableHit(pc, is_secure, master_id, entry)) {
+    if (entry != nullptr) {
         // Hit in table
         int new_stride = pkt_addr - entry->lastAddr;
         bool stride_match = (new_stride == entry->stride);
@@ -198,22 +198,20 @@ StridePrefetcher::pcTableVictim(Addr pc, int master_id)
     return &pcTable[master_id][set][way];
 }
 
-inline bool
-StridePrefetcher::pcTableHit(Addr pc, bool is_secure, int master_id,
-                             StrideEntry* &entry)
+inline StridePrefetcher::StrideEntry*
+StridePrefetcher::findEntry(Addr pc, bool is_secure, int master_id)
 {
     int set = pcHash(pc);
     StrideEntry* set_entries = pcTable[master_id][set];
     for (int way = 0; way < pcTableAssoc; way++) {
+        StrideEntry* entry = &set_entries[way];
         // Search ways for match
-        if (set_entries[way].instAddr == pc &&
-            set_entries[way].isSecure == is_secure) {
+        if ((entry->instAddr == pc) && (entry->isSecure == is_secure)) {
             DPRINTF(HWPrefetch, "Lookup hit table[%d][%d].\n", set, way);
-            entry = &set_entries[way];
-            return true;
+            return entry;
         }
     }
-    return false;
+    return nullptr;
 }
 
 StridePrefetcher*
index 03ceec5845a2a1825815038209ead1758e252c2a..605b5432d32cbdf69e4980355b1dbb3efe80b21a 100644 (file)
@@ -110,7 +110,16 @@ class StridePrefetcher : public QueuedPrefetcher
     };
     PCTable pcTable;
 
-    bool pcTableHit(Addr pc, bool is_secure, int master_id, StrideEntry* &entry);
+    /**
+     * Search for an entry in the pc table.
+     *
+     * @param pc The PC to look for.
+     * @param is_secure True if the target memory space is secure.
+     * @param master_id The context.
+     * @return Pointer to the entry.
+     */
+    StrideEntry* findEntry(Addr pc, bool is_secure, int master_id);
+
     StrideEntry* pcTableVictim(Addr pc, int master_id);
 
     Addr pcHash(Addr pc) const;