ruby: adds set and way indices to AbstractCacheEntry
authorNilay Vaish <nilay@cs.wisc.edu>
Sat, 15 Aug 2015 00:28:43 +0000 (19:28 -0500)
committerNilay Vaish <nilay@cs.wisc.edu>
Sat, 15 Aug 2015 00:28:43 +0000 (19:28 -0500)
src/mem/ruby/slicc_interface/AbstractCacheEntry.hh
src/mem/ruby/structures/CacheMemory.cc

index 2b318957ff2730dd39fe0077e4a8efd22f96986f..9265567819ea5769b53a903c1d9d61097a9724b4 100644 (file)
@@ -62,9 +62,22 @@ class AbstractCacheEntry : public AbstractEntry
     void clearLocked();
     bool isLocked(int context) const;
 
-    Addr m_Address; // Address of this block, required by CacheMemory
-    int m_locked; // Holds info whether the address is locked,
-                  // required for implementing LL/SC
+    void setSetIndex(uint32_t s) { m_set_index = s; }
+    uint32_t getSetIndex() const { return m_set_index; }
+
+    void setWayIndex(uint32_t s) { m_way_index = s; }
+    uint32_t getWayIndex() const { return m_way_index; }
+
+    // Address of this block, required by CacheMemory
+    Addr m_Address;
+    // Holds info whether the address is locked.
+    // Required for implementing LL/SC operations.
+    int m_locked;
+
+  private:
+    // Set and way coordinates of the entry within the cache memory object.
+    uint32_t m_set_index;
+    uint32_t m_way_index;
 };
 
 inline std::ostream&
index 17c13502db0ddeb37fbe46a4ef7dbb27e1e924a5..ab26477597da4878e2925ba9b3ec9e702491d7b3 100644 (file)
@@ -251,7 +251,7 @@ CacheMemory::cacheAvail(Addr address) const
 }
 
 AbstractCacheEntry*
-CacheMemory::allocate(Addr address, AbstractCacheEntryentry, bool touch)
+CacheMemory::allocate(Addr address, AbstractCacheEntry *entry, bool touch)
 {
     assert(address == makeLineAddress(address));
     assert(!isTagPresent(address));
@@ -270,6 +270,8 @@ CacheMemory::allocate(Addr address, AbstractCacheEntry* entry, bool touch)
                     address);
             set[i]->m_locked = -1;
             m_tag_index[address] = i;
+            entry->setSetIndex(cacheSet);
+            entry->setWayIndex(i);
 
             if (touch) {
                 m_replacementPolicy_ptr->touch(cacheSet, i, curTick());