Merge zizzer.eecs.umich.edu:/bk/newmem
[gem5.git] / src / mem / cache / tags / iic.cc
index f4e870659a3e87b1eff5eb3c8ba73b92358f4d72..9c802d0dc69db44a5cdce206534bf0fa436c30f0 100644 (file)
@@ -42,7 +42,7 @@
 #include "mem/cache/base_cache.hh"
 #include "mem/cache/tags/iic.hh"
 #include "base/intmath.hh"
-#include "sim/root.hh" // for curTick
+#include "sim/core.hh" // for curTick
 
 #include "base/trace.hh" // for DPRINTF
 
@@ -284,65 +284,6 @@ IIC::findBlock(Addr addr, int &lat)
     return tag_ptr;
 }
 
-IICTag*
-IIC::findBlock(PacketPtr &pkt, int &lat)
-{
-    Addr addr = pkt->getAddr();
-
-    Addr tag = extractTag(addr);
-    unsigned set = hash(addr);
-    int set_lat;
-
-    unsigned long chain_ptr;
-
-    if (PROFILE_IIC)
-        setAccess.sample(set);
-
-    IICTag *tag_ptr = sets[set].findTag(tag, chain_ptr);
-    set_lat = 1;
-    if (tag_ptr == NULL && chain_ptr != tagNull) {
-        int secondary_depth;
-        tag_ptr = secondaryChain(tag, chain_ptr, &secondary_depth);
-        set_lat += secondary_depth;
-        // set depth for statistics fix this later!!! egh
-        sets[set].depth = set_lat;
-
-        if (tag_ptr != NULL) {
-            /* need to move tag into primary table */
-            // need to preserve chain: fix this egh
-            sets[set].tags[assoc-1]->chain_ptr = tag_ptr->chain_ptr;
-            tagSwap(tag_ptr - tagStore, sets[set].tags[assoc-1] - tagStore);
-            tag_ptr = sets[set].findTag(tag, chain_ptr);
-            assert(tag_ptr!=NULL);
-        }
-
-    }
-    set_lat = set_lat * hashDelay + hitLatency;
-    if (tag_ptr != NULL) {
-        // IIC replacement: if this is not the first element of
-        //   list, reorder
-        sets[set].moveToHead(tag_ptr);
-
-        hitHashDepth.sample(sets[set].depth);
-        hashHit++;
-        hitDepthTotal += sets[set].depth;
-        tag_ptr->status |= BlkReferenced;
-        lat = set_lat;
-        if (tag_ptr->whenReady > curTick && tag_ptr->whenReady - curTick > set_lat) {
-            lat = tag_ptr->whenReady - curTick;
-        }
-
-        tag_ptr->refCount += 1;
-    }
-    else {
-        // fall through: cache block not found, not a hit...
-        missHashDepth.sample(sets[set].depth);
-        hashMiss++;
-        missDepthTotal += sets[set].depth;
-        lat = set_lat;
-    }
-    return tag_ptr;
-}
 
 IICTag*
 IIC::findBlock(Addr addr) const
@@ -431,7 +372,8 @@ IIC::freeReplacementBlock(PacketList & writebacks)
 */
             Request *writebackReq = new Request(regenerateBlkAddr(tag_ptr->tag, 0),
                                            blkSize, 0);
-            PacketPtr writeback = new Packet(writebackReq, Packet::Writeback, -1);
+            PacketPtr writeback = new Packet(writebackReq, MemCmd::Writeback,
+                                             -1);
             writeback->allocate();
             memcpy(writeback->getPtr<uint8_t>(), tag_ptr->data, blkSize);
 
@@ -586,7 +528,7 @@ IIC::hash(Addr addr) const {
     tag = extractTag(addr);
     mask = hashSets-1; /* assumes iic_hash_size is a power of 2 */
     x = tag & mask;
-    y = (tag >> (int)(::log(hashSets)/::log(2))) & mask;
+    y = (tag >> (int)(::log((double)hashSets)/::log((double)2))) & mask;
     assert (x < hashSets && y < hashSets);
     return x ^ y;
 #endif
@@ -695,9 +637,8 @@ IIC::compressBlock(unsigned long index)
 }
 
 void
-IIC::invalidateBlk(Addr addr)
+IIC::invalidateBlk(IIC::BlkType *tag_ptr)
 {
-    IICTag* tag_ptr = findBlock(addr);
     if (tag_ptr) {
         for (int i = 0; i < tag_ptr->numData; ++i) {
             dataReferenceCount[tag_ptr->data_ptr[i]]--;