mem-cache: Factor ReplaceableEntry out
authorDaniel R. Carvalho <odanrc@yahoo.com.br>
Thu, 11 Oct 2018 13:02:54 +0000 (15:02 +0200)
committerDaniel Carvalho <odanrc@yahoo.com.br>
Thu, 11 Oct 2018 13:24:53 +0000 (13:24 +0000)
ReplaceableEntry is referenced by many classes that do
not necessarily need access to the replacement policies.
Therefore, in order to allow better compilation units,
we factor it out to a new file.

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

src/mem/cache/replacement_policies/base.hh
src/mem/cache/replacement_policies/replaceable_entry.hh [new file with mode: 0644]
src/mem/cache/tags/base.cc
src/mem/cache/tags/base_set_assoc.hh
src/mem/cache/tags/fa_lru.cc
src/mem/cache/tags/indexing_policies/base.cc
src/mem/cache/tags/indexing_policies/set_associative.cc
src/mem/cache/tags/indexing_policies/skewed_associative.cc
src/mem/cache/tags/sector_blk.hh
src/mem/cache/tags/sector_tags.cc

index 6ac7dca853fda050ff96bf2ce22020fb01520bcc..6cb8c9de40a4bd718fe9e4829bdfae9d09061d0f 100644 (file)
 
 #include <memory>
 
+#include "mem/cache/replacement_policies/replaceable_entry.hh"
 #include "params/BaseReplacementPolicy.hh"
 #include "sim/sim_object.hh"
 
-/**
- * The replacement data needed by the replacement policy.
- * Each replacement policy should have its own replacement data.
- */
-struct ReplacementData {};
-
-/**
- * A replaceable entry is used by any table-like structure that needs to
- * implement replacement functionality. It provides the replacement data
- * pointer instantiated and needed by the replacement policy used.
- * @sa Replacement Policies
- */
-class ReplaceableEntry
-{
-  private:
-    /**
-     * Set to which this entry belongs.
-     */
-    uint32_t _set;
-
-    /**
-     * Way (relative position within the set) to which this entry belongs.
-     */
-    uint32_t _way;
-
-   public:
-     /**
-      * Replacement data associated to this entry.
-      * It is instantiated by the replacement policy.
-      */
-     std::shared_ptr<ReplacementData> replacementData;
-
-    /**
-     * Set both the set and way. Should be called only once.
-     *
-     * @param set The set of this entry.
-     * @param way The way of this entry.
-     */
-    void setPosition(const uint32_t set, const uint32_t way) {
-        _set = set;
-        _way = way;
-    }
-
-    /**
-     * Get set number.
-     *
-     * @return The set to which this entry belongs.
-     */
-    uint32_t getSet() const { return _set; }
-
-    /**
-     * Get way number.
-     *
-     * @return The way to which this entry belongs.
-     */
-    uint32_t getWay() const { return _way; }
-};
-
 /**
  * Replacement candidates as chosen by the indexing policy.
  */
diff --git a/src/mem/cache/replacement_policies/replaceable_entry.hh b/src/mem/cache/replacement_policies/replaceable_entry.hh
new file mode 100644 (file)
index 0000000..bf54e22
--- /dev/null
@@ -0,0 +1,99 @@
+/**
+ * Copyright (c) 2018 Inria
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Daniel Carvalho
+ */
+
+#ifndef __MEM_CACHE_REPLACEMENT_POLICIES_REPLACEABLE_ENTRY_HH__
+#define __MEM_CACHE_REPLACEMENT_POLICIES_REPLACEABLE_ENTRY_HH__
+
+#include <cstdint>
+#include <memory>
+
+/**
+ * The replacement data needed by replacement policies. Each replacement policy
+ * should have its own implementation of replacement data.
+ */
+struct ReplacementData {};
+
+/**
+ * A replaceable entry is a basic entry in a 2d table-like structure that needs
+ * to have replacement functionality. This entry is located in a specific row
+ * and column of the table (set and way in cache nomenclature), which are
+ * stored within the entry itself.
+ *
+ * It contains the replacement data pointer, which must be instantiated by the
+ * replacement policy before being used.
+ * @sa Replacement Policies
+ */
+class ReplaceableEntry
+{
+  private:
+    /**
+     * Set to which this entry belongs.
+     */
+    uint32_t _set;
+
+    /**
+     * Way (relative position within the set) to which this entry belongs.
+     */
+    uint32_t _way;
+
+   public:
+     /**
+      * Replacement data associated to this entry.
+      * It must be instantiated by the replacement policy before being used.
+      */
+     std::shared_ptr<ReplacementData> replacementData;
+
+    /**
+     * Set both the set and way. Should be called only once.
+     *
+     * @param set The set of this entry.
+     * @param way The way of this entry.
+     */
+    void setPosition(const uint32_t set, const uint32_t way) {
+        _set = set;
+        _way = way;
+    }
+
+    /**
+     * Get set number.
+     *
+     * @return The set to which this entry belongs.
+     */
+    uint32_t getSet() const { return _set; }
+
+    /**
+     * Get way number.
+     *
+     * @return The way to which this entry belongs.
+     */
+    uint32_t getWay() const { return _way; }
+};
+
+#endif // __MEM_CACHE_REPLACEMENT_POLICIES_REPLACEABLE_ENTRY_HH_
index 965e4ba16be46cdc7d2a3a3a30f9fd102115bd65..c6a9a8295ba048eb47603c5735101b50ab75a72b 100644 (file)
@@ -52,6 +52,7 @@
 
 #include "base/types.hh"
 #include "mem/cache/base.hh"
+#include "mem/cache/replacement_policies/replaceable_entry.hh"
 #include "mem/cache/tags/indexing_policies/base.hh"
 #include "mem/request.hh"
 #include "sim/core.hh"
index f73a5d92f873ec67cdf4745b5c81af2952ab9d42..70e90711971f19e5d738fa1cd4a3b9e9f12aa0c9 100644 (file)
@@ -57,6 +57,7 @@
 #include "mem/cache/base.hh"
 #include "mem/cache/cache_blk.hh"
 #include "mem/cache/replacement_policies/base.hh"
+#include "mem/cache/replacement_policies/replaceable_entry.hh"
 #include "mem/cache/tags/base.hh"
 #include "mem/cache/tags/indexing_policies/base.hh"
 #include "params/BaseSetAssoc.hh"
index 319d5602db26cd91833501f9b53defffe9c380a8..5c2d05b3834841de6b7179c7a1da4ca2edaa185c 100644 (file)
@@ -56,6 +56,7 @@
 #include "base/intmath.hh"
 #include "base/logging.hh"
 #include "mem/cache/base.hh"
+#include "mem/cache/replacement_policies/replaceable_entry.hh"
 
 std::string
 FALRUBlk::print() const
index f27bedd4a70e5408dc59ce762ea1d00452d68eae..accc18561240b1a54999d7bba048b78a975db05b 100644 (file)
@@ -53,7 +53,7 @@
 
 #include "base/intmath.hh"
 #include "base/logging.hh"
-#include "mem/cache/replacement_policies/base.hh"
+#include "mem/cache/replacement_policies/replaceable_entry.hh"
 
 BaseIndexingPolicy::BaseIndexingPolicy(const Params *p)
     : SimObject(p), assoc(p->assoc),
index d5fe8ffd0fc75a1d7dd249c6ca025b783183c13e..6bafab40c73226e1df4acfef387820c961eceb0e 100644 (file)
@@ -49,7 +49,7 @@
 
 #include "mem/cache/tags/indexing_policies/set_associative.hh"
 
-#include "mem/cache/replacement_policies/base.hh"
+#include "mem/cache/replacement_policies/replaceable_entry.hh"
 
 SetAssociative::SetAssociative(const Params *p)
     : BaseIndexingPolicy(p)
index d1765e5d661020d4bfd8b2be0726760dff86da51..c3db3f8bab9203a281dcd4f9251ad44f4e9858e4 100644 (file)
@@ -38,7 +38,7 @@
 #include "base/bitfield.hh"
 #include "base/intmath.hh"
 #include "base/logging.hh"
-#include "mem/cache/replacement_policies/base.hh"
+#include "mem/cache/replacement_policies/replaceable_entry.hh"
 
 SkewedAssociative::SkewedAssociative(const Params *p)
     : BaseIndexingPolicy(p), msbShift(floorLog2(numSets) - 1)
index d252a610f9cab2bbcd967ee6b5702c20064c9c62..6eed04464f1b7e6b38cc000ee73b272291a8b9bb 100644 (file)
@@ -39,7 +39,7 @@
 #include <vector>
 
 #include "mem/cache/cache_blk.hh"
-#include "mem/cache/replacement_policies/base.hh"
+#include "mem/cache/replacement_policies/replaceable_entry.hh"
 
 class SectorBlk;
 
index e993e296bb665a2bcaa8ed60ae5885ed7529d818..8c87074ec96dd09f28126310087f94b05758da2f 100644 (file)
@@ -44,6 +44,7 @@
 #include "base/types.hh"
 #include "mem/cache/base.hh"
 #include "mem/cache/replacement_policies/base.hh"
+#include "mem/cache/replacement_policies/replaceable_entry.hh"
 #include "mem/cache/tags/indexing_policies/base.hh"
 
 SectorTags::SectorTags(const SectorTagsParams *p)