summaryrefslogtreecommitdiff
path: root/src/mem/ruby/structures/AbstractReplacementPolicy.hh
diff options
context:
space:
mode:
authorDavid Hashe <david.hashe@amd.com>2015-07-20 09:15:18 -0500
committerDavid Hashe <david.hashe@amd.com>2015-07-20 09:15:18 -0500
commit1850ed410fc85d7ac367dc7b378e5509d62ed900 (patch)
treebf5fa000a7eb57681afea983309e47faf27fb033 /src/mem/ruby/structures/AbstractReplacementPolicy.hh
parent74ca89f8b7d9b340d1d4f83511b57a2dfa2a70df (diff)
downloadgem5-1850ed410fc85d7ac367dc7b378e5509d62ed900.tar.xz
ruby: initialize replacement policies with their own simobjs
this is in preparation for other replacement policies that take additional parameters.
Diffstat (limited to 'src/mem/ruby/structures/AbstractReplacementPolicy.hh')
-rw-r--r--src/mem/ruby/structures/AbstractReplacementPolicy.hh44
1 files changed, 8 insertions, 36 deletions
diff --git a/src/mem/ruby/structures/AbstractReplacementPolicy.hh b/src/mem/ruby/structures/AbstractReplacementPolicy.hh
index 5601d8537..d007c98c8 100644
--- a/src/mem/ruby/structures/AbstractReplacementPolicy.hh
+++ b/src/mem/ruby/structures/AbstractReplacementPolicy.hh
@@ -30,11 +30,15 @@
#define __MEM_RUBY_STRUCTURES_ABSTRACTREPLACEMENTPOLICY_HH__
#include "base/types.hh"
+#include "mem/ruby/common/TypeDefines.hh"
+#include "params/ReplacementPolicy.hh"
+#include "sim/sim_object.hh"
-class AbstractReplacementPolicy
+class AbstractReplacementPolicy : public SimObject
{
public:
- AbstractReplacementPolicy(int64 num_sets, int64 assoc);
+ typedef ReplacementPolicyParams Params;
+ AbstractReplacementPolicy(const Params * p);
virtual ~AbstractReplacementPolicy();
/* touch a block. a.k.a. update timestamp */
@@ -46,44 +50,12 @@ class AbstractReplacementPolicy
/* get the time of the last access */
Tick getLastAccess(int64 set, int64 way);
+ virtual bool useOccupancy() const { return false; }
+
protected:
unsigned m_num_sets; /** total number of sets */
unsigned m_assoc; /** set associativity */
Tick **m_last_ref_ptr; /** timestamp of last reference */
};
-inline
-AbstractReplacementPolicy::AbstractReplacementPolicy(int64 num_sets,
- int64 assoc)
-{
- m_num_sets = num_sets;
- m_assoc = assoc;
- m_last_ref_ptr = new Tick*[m_num_sets];
- for(unsigned i = 0; i < m_num_sets; i++){
- m_last_ref_ptr[i] = new Tick[m_assoc];
- for(unsigned j = 0; j < m_assoc; j++){
- m_last_ref_ptr[i][j] = 0;
- }
- }
-}
-
-inline
-AbstractReplacementPolicy::~AbstractReplacementPolicy()
-{
- if (m_last_ref_ptr != NULL){
- for (unsigned i = 0; i < m_num_sets; i++){
- if (m_last_ref_ptr[i] != NULL){
- delete[] m_last_ref_ptr[i];
- }
- }
- delete[] m_last_ref_ptr;
- }
-}
-
-inline Tick
-AbstractReplacementPolicy::getLastAccess(int64 set, int64 way)
-{
- return m_last_ref_ptr[set][way];
-}
-
#endif // __MEM_RUBY_STRUCTURES_ABSTRACTREPLACEMENTPOLICY_HH__