summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/cache/replacement_policies/base.hh59
-rw-r--r--src/mem/cache/replacement_policies/replaceable_entry.hh99
-rw-r--r--src/mem/cache/tags/base.cc1
-rw-r--r--src/mem/cache/tags/base_set_assoc.hh1
-rw-r--r--src/mem/cache/tags/fa_lru.cc1
-rw-r--r--src/mem/cache/tags/indexing_policies/base.cc2
-rw-r--r--src/mem/cache/tags/indexing_policies/set_associative.cc2
-rw-r--r--src/mem/cache/tags/indexing_policies/skewed_associative.cc2
-rw-r--r--src/mem/cache/tags/sector_blk.hh2
-rw-r--r--src/mem/cache/tags/sector_tags.cc1
10 files changed, 108 insertions, 62 deletions
diff --git a/src/mem/cache/replacement_policies/base.hh b/src/mem/cache/replacement_policies/base.hh
index 6ac7dca85..6cb8c9de4 100644
--- a/src/mem/cache/replacement_policies/base.hh
+++ b/src/mem/cache/replacement_policies/base.hh
@@ -33,68 +33,11 @@
#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.
*/
typedef std::vector<ReplaceableEntry*> ReplacementCandidates;
diff --git a/src/mem/cache/replacement_policies/replaceable_entry.hh b/src/mem/cache/replacement_policies/replaceable_entry.hh
new file mode 100644
index 000000000..bf54e2264
--- /dev/null
+++ b/src/mem/cache/replacement_policies/replaceable_entry.hh
@@ -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_
diff --git a/src/mem/cache/tags/base.cc b/src/mem/cache/tags/base.cc
index 965e4ba16..c6a9a8295 100644
--- a/src/mem/cache/tags/base.cc
+++ b/src/mem/cache/tags/base.cc
@@ -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"
diff --git a/src/mem/cache/tags/base_set_assoc.hh b/src/mem/cache/tags/base_set_assoc.hh
index f73a5d92f..70e907119 100644
--- a/src/mem/cache/tags/base_set_assoc.hh
+++ b/src/mem/cache/tags/base_set_assoc.hh
@@ -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"
diff --git a/src/mem/cache/tags/fa_lru.cc b/src/mem/cache/tags/fa_lru.cc
index 319d5602d..5c2d05b38 100644
--- a/src/mem/cache/tags/fa_lru.cc
+++ b/src/mem/cache/tags/fa_lru.cc
@@ -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
diff --git a/src/mem/cache/tags/indexing_policies/base.cc b/src/mem/cache/tags/indexing_policies/base.cc
index f27bedd4a..accc18561 100644
--- a/src/mem/cache/tags/indexing_policies/base.cc
+++ b/src/mem/cache/tags/indexing_policies/base.cc
@@ -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),
diff --git a/src/mem/cache/tags/indexing_policies/set_associative.cc b/src/mem/cache/tags/indexing_policies/set_associative.cc
index d5fe8ffd0..6bafab40c 100644
--- a/src/mem/cache/tags/indexing_policies/set_associative.cc
+++ b/src/mem/cache/tags/indexing_policies/set_associative.cc
@@ -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)
diff --git a/src/mem/cache/tags/indexing_policies/skewed_associative.cc b/src/mem/cache/tags/indexing_policies/skewed_associative.cc
index d1765e5d6..c3db3f8ba 100644
--- a/src/mem/cache/tags/indexing_policies/skewed_associative.cc
+++ b/src/mem/cache/tags/indexing_policies/skewed_associative.cc
@@ -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)
diff --git a/src/mem/cache/tags/sector_blk.hh b/src/mem/cache/tags/sector_blk.hh
index d252a610f..6eed04464 100644
--- a/src/mem/cache/tags/sector_blk.hh
+++ b/src/mem/cache/tags/sector_blk.hh
@@ -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;
diff --git a/src/mem/cache/tags/sector_tags.cc b/src/mem/cache/tags/sector_tags.cc
index e993e296b..8c87074ec 100644
--- a/src/mem/cache/tags/sector_tags.cc
+++ b/src/mem/cache/tags/sector_tags.cc
@@ -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)