diff options
Diffstat (limited to 'src/mem/ruby/slicc_interface')
-rw-r--r-- | src/mem/ruby/slicc_interface/AbstractCacheEntry.cc | 12 | ||||
-rw-r--r-- | src/mem/ruby/slicc_interface/AbstractCacheEntry.hh | 29 | ||||
-rw-r--r-- | src/mem/ruby/slicc_interface/AbstractEntry.cc | 50 | ||||
-rw-r--r-- | src/mem/ruby/slicc_interface/AbstractEntry.hh | 60 | ||||
-rw-r--r-- | src/mem/ruby/slicc_interface/SConscript | 1 |
5 files changed, 27 insertions, 125 deletions
diff --git a/src/mem/ruby/slicc_interface/AbstractCacheEntry.cc b/src/mem/ruby/slicc_interface/AbstractCacheEntry.cc index 00dfc6c64..b98425d7e 100644 --- a/src/mem/ruby/slicc_interface/AbstractCacheEntry.cc +++ b/src/mem/ruby/slicc_interface/AbstractCacheEntry.cc @@ -31,21 +31,29 @@ #include "base/trace.hh" #include "debug/RubyCache.hh" -AbstractCacheEntry::AbstractCacheEntry() +AbstractCacheEntry::AbstractCacheEntry() : ReplaceableEntry() { m_Permission = AccessPermission_NotPresent; m_Address = 0; m_locked = -1; + m_last_touch_tick = 0; } AbstractCacheEntry::~AbstractCacheEntry() { } +// Get cache permission +AccessPermission +AbstractCacheEntry::getPermission() const +{ + return m_Permission; +} + void AbstractCacheEntry::changePermission(AccessPermission new_perm) { - AbstractEntry::changePermission(new_perm); + m_Permission = new_perm; if ((new_perm == AccessPermission_Invalid) || (new_perm == AccessPermission_NotPresent)) { m_locked = -1; diff --git a/src/mem/ruby/slicc_interface/AbstractCacheEntry.hh b/src/mem/ruby/slicc_interface/AbstractCacheEntry.hh index c943c75d0..0519b3f7d 100644 --- a/src/mem/ruby/slicc_interface/AbstractCacheEntry.hh +++ b/src/mem/ruby/slicc_interface/AbstractCacheEntry.hh @@ -36,21 +36,28 @@ #include <iostream> #include "base/logging.hh" +#include "mem/cache/replacement_policies/replaceable_entry.hh" #include "mem/ruby/common/Address.hh" #include "mem/ruby/protocol/AccessPermission.hh" -#include "mem/ruby/slicc_interface/AbstractEntry.hh" class DataBlock; -class AbstractCacheEntry : public AbstractEntry +class AbstractCacheEntry : public ReplaceableEntry { + private: + // The last access tick for the cache entry. + Tick m_last_touch_tick; + public: AbstractCacheEntry(); virtual ~AbstractCacheEntry() = 0; // Get/Set permission of the entry + AccessPermission getPermission() const; void changePermission(AccessPermission new_perm); + virtual void print(std::ostream& out) const = 0; + // The methods below are those called by ruby runtime, add when it // is absolutely necessary and should all be virtual function. virtual DataBlock& getDataBlk() @@ -68,22 +75,20 @@ class AbstractCacheEntry : public AbstractEntry void clearLocked(); bool isLocked(int context) const; - void setSetIndex(uint32_t s) { m_set_index = s; } - uint32_t getSetIndex() const { return m_set_index; } - - void setWayIndex(uint32_t s) { m_way_index = s; } - uint32_t getWayIndex() const { return m_way_index; } - // Address of this block, required by CacheMemory Addr m_Address; // Holds info whether the address is locked. // Required for implementing LL/SC operations. int m_locked; - private: - // Set and way coordinates of the entry within the cache memory object. - uint32_t m_set_index; - uint32_t m_way_index; + AccessPermission m_Permission; // Access permission for this + // block, required by CacheMemory + + // Get the last access Tick. + Tick getLastAccess() { return m_last_touch_tick; } + + // Set the last access Tick. + void setLastAccess(Tick tick) { m_last_touch_tick = tick; } }; inline std::ostream& diff --git a/src/mem/ruby/slicc_interface/AbstractEntry.cc b/src/mem/ruby/slicc_interface/AbstractEntry.cc deleted file mode 100644 index 51f16df6a..000000000 --- a/src/mem/ruby/slicc_interface/AbstractEntry.cc +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood - * 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. - */ - -#include "mem/ruby/slicc_interface/AbstractEntry.hh" - -AbstractEntry::AbstractEntry() -{ - m_Permission = AccessPermission_NotPresent; -} - -AbstractEntry::~AbstractEntry() -{ -} - -AccessPermission -AbstractEntry::getPermission() const -{ - return m_Permission; -} - -void -AbstractEntry::changePermission(AccessPermission new_perm) -{ - m_Permission = new_perm; -} diff --git a/src/mem/ruby/slicc_interface/AbstractEntry.hh b/src/mem/ruby/slicc_interface/AbstractEntry.hh deleted file mode 100644 index a75055f5e..000000000 --- a/src/mem/ruby/slicc_interface/AbstractEntry.hh +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood - * 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. - */ - -#ifndef __MEM_RUBY_SLICC_INTERFACE_ABSTRACTENTRY_HH__ -#define __MEM_RUBY_SLICC_INTERFACE_ABSTRACTENTRY_HH__ - -#include <iostream> - -#include "mem/ruby/protocol/AccessPermission.hh" - -class AbstractEntry -{ - public: - AbstractEntry(); - virtual ~AbstractEntry() = 0; - - // Get/Set permission of the entry - AccessPermission getPermission() const; - void changePermission(AccessPermission new_perm); - - virtual void print(std::ostream& out) const = 0; - - AccessPermission m_Permission; // Access permission for this - // block, required by CacheMemory -}; - -inline std::ostream& -operator<<(std::ostream& out, const AbstractEntry& obj) -{ - obj.print(out); - out << std::flush; - return out; -} - -#endif // __MEM_RUBY_SLICC_INTERFACE_ABSTRACTENTRY_HH__ diff --git a/src/mem/ruby/slicc_interface/SConscript b/src/mem/ruby/slicc_interface/SConscript index 2d00fb7fe..d8d931c63 100644 --- a/src/mem/ruby/slicc_interface/SConscript +++ b/src/mem/ruby/slicc_interface/SConscript @@ -36,6 +36,5 @@ if env['PROTOCOL'] == 'None': SimObject('Controller.py') Source('AbstractController.cc') -Source('AbstractEntry.cc') Source('AbstractCacheEntry.cc') Source('RubyRequest.cc') |