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&
}
AbstractCacheEntry*
-CacheMemory::allocate(Addr address, AbstractCacheEntry* entry, bool touch)
+CacheMemory::allocate(Addr address, AbstractCacheEntry *entry, bool touch)
{
assert(address == makeLineAddress(address));
assert(!isTagPresent(address));
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());