mem: Make blkAlign a common function between all tag classes
authorNikos Nikoleris <nikos.nikoleris@arm.com>
Mon, 31 Oct 2016 12:02:24 +0000 (12:02 +0000)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Fri, 3 Mar 2017 14:09:42 +0000 (14:09 +0000)
blkAlign was defined as a separate function in the base associative
and fully-associative tags classes although both functions implemented
identical functionality. This patch moves the blkAlign in the base
tags class.

Change-Id: I3d415d0e62bddeec7ce0d559667e40a8c5fdc2d4
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Andreas Hansson <andreas.hansson@arm.com>
src/mem/cache/tags/base.cc
src/mem/cache/tags/base.hh
src/mem/cache/tags/base_set_assoc.cc
src/mem/cache/tags/base_set_assoc.hh
src/mem/cache/tags/fa_lru.hh

index cf970c7ddbc6a94d803dfc710f391673b353d914..7796cd3e5637df8c89fdcaa034a8e198cd367d30 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 ARM Limited
+ * Copyright (c) 2013,2016 ARM Limited
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -55,7 +55,8 @@
 using namespace std;
 
 BaseTags::BaseTags(const Params *p)
-    : ClockedObject(p), blkSize(p->block_size), size(p->size),
+    : ClockedObject(p), blkSize(p->block_size), blkMask(blkSize - 1),
+      size(p->size),
       lookupLatency(p->tag_latency),
       accessLatency(p->sequential_access ?
                     p->tag_latency + p->data_latency :
index dd5426172448244a91148b59cee875e7c6e65c48..4caf6de4e8a828bd86794fcfaf89f20763d64cd4 100644 (file)
@@ -67,6 +67,8 @@ class BaseTags : public ClockedObject
   protected:
     /** The block size of the cache. */
     const unsigned blkSize;
+    /** Mask out all bits that aren't part of the block offset. */
+    const Addr blkMask;
     /** The size of the cache. */
     const unsigned size;
     /** The tag lookup latency of the cache. */
@@ -186,6 +188,16 @@ class BaseTags : public ClockedObject
      */
     virtual CacheBlk * findBlock(Addr addr, bool is_secure) const = 0;
 
+    /**
+     * Align an address to the block size.
+     * @param addr the address to align.
+     * @return The block address.
+     */
+    Addr blkAlign(Addr addr) const
+    {
+        return addr & ~blkMask;
+    }
+
     /**
      * Calculate the block offset of an address.
      * @param addr the address to get the offset of.
@@ -193,7 +205,7 @@ class BaseTags : public ClockedObject
      */
     int extractBlkOffset(Addr addr) const
     {
-        return (addr & (Addr)(blkSize-1));
+        return (addr & blkMask);
     }
 
     /**
index a968259757cea89c044c2fbcf5172f52de6bc674..ea74c97df8ebf0d0a0da36ce9e194dd14ee50b68 100644 (file)
@@ -70,7 +70,6 @@ BaseSetAssoc::BaseSetAssoc(const Params *p)
         fatal("associativity must be greater than zero");
     }
 
-    blkMask = blkSize - 1;
     setShift = floorLog2(blkSize);
     setMask = numSets - 1;
     tagShift = setShift + floorLog2(numSets);
index 8e3aab741f64d7e67f5151c923078fd1c2e222e8..4049b848666e75c5d6d3f83add3ea49fadda1cbf 100644 (file)
@@ -106,8 +106,6 @@ class BaseSetAssoc : public BaseTags
     int tagShift;
     /** Mask out all bits that aren't part of the set index. */
     unsigned setMask;
-    /** Mask out all bits that aren't part of the block offset. */
-    unsigned blkMask;
 
 public:
 
@@ -321,16 +319,6 @@ public:
         return ((addr >> setShift) & setMask);
     }
 
-    /**
-     * Align an address to the block size.
-     * @param addr the address to align.
-     * @return The block address.
-     */
-    Addr blkAlign(Addr addr) const
-    {
-        return (addr & ~(Addr)blkMask);
-    }
-
     /**
      * Regenerate the block address from the tag.
      * @param tag The tag of the block.
index 26de1ede27561436ec9d8c8446144ee6636cf7f6..a266fb516c86e69c0c166a371cb95f26225631bb 100644 (file)
@@ -220,16 +220,6 @@ public:
      */
     CacheBlk* findBlockBySetAndWay(int set, int way) const override;
 
-    /**
-     * Align an address to the block size.
-     * @param addr the address to align.
-     * @return The aligned address.
-     */
-    Addr blkAlign(Addr addr) const
-    {
-        return (addr & ~(Addr)(blkSize-1));
-    }
-
     /**
      * Generate the tag from the addres. For fully associative this is just the
      * block address.