summaryrefslogtreecommitdiff
path: root/src/mem/ruby/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/common')
-rw-r--r--src/mem/ruby/common/Address.cc70
-rw-r--r--src/mem/ruby/common/Address.hh74
2 files changed, 75 insertions, 69 deletions
diff --git a/src/mem/ruby/common/Address.cc b/src/mem/ruby/common/Address.cc
index 2d895cc33..cc87f4ece 100644
--- a/src/mem/ruby/common/Address.cc
+++ b/src/mem/ruby/common/Address.cc
@@ -27,6 +27,76 @@
*/
#include "mem/ruby/common/Address.hh"
+#include "mem/ruby/system/System.hh"
+
+physical_address_t
+Address::getLineAddress() const
+{
+ return bitSelect(RubySystem::getBlockSizeBits(), ADDRESS_WIDTH);
+}
+
+physical_address_t
+Address::getOffset() const
+{
+ return bitSelect(0, RubySystem::getBlockSizeBits() - 1);
+}
+
+void
+Address::makeLineAddress()
+{
+ m_address = maskLowOrderBits(RubySystem::getBlockSizeBits());
+}
+
+// returns the next stride address based on line address
+void
+Address::makeNextStrideAddress(int stride)
+{
+ m_address = maskLowOrderBits(RubySystem::getBlockSizeBits())
+ + RubySystem::getBlockSizeBytes()*stride;
+}
+
+integer_t
+Address::memoryModuleIndex() const
+{
+ integer_t index =
+ bitSelect(RubySystem::getBlockSizeBits() +
+ RubySystem::getMemorySizeBits(), ADDRESS_WIDTH);
+ assert (index >= 0);
+ return index;
+
+ // Index indexHighPortion =
+ // address.bitSelect(MEMORY_SIZE_BITS - 1,
+ // PAGE_SIZE_BITS + NUMBER_OF_MEMORY_MODULE_BITS);
+ // Index indexLowPortion =
+ // address.bitSelect(DATA_BLOCK_BITS, PAGE_SIZE_BITS - 1);
+ //
+ // Index index = indexLowPortion |
+ // (indexHighPortion << (PAGE_SIZE_BITS - DATA_BLOCK_BITS));
+
+ /*
+ Round-robin mapping of addresses, at page size granularity
+
+ADDRESS_WIDTH MEMORY_SIZE_BITS PAGE_SIZE_BITS DATA_BLOCK_BITS
+ | | | |
+ \ / \ / \ / \ / 0
+ -----------------------------------------------------------------------
+ | unused |xxxxxxxxxxxxxxx| |xxxxxxxxxxxxxxx| |
+ | |xxxxxxxxxxxxxxx| |xxxxxxxxxxxxxxx| |
+ -----------------------------------------------------------------------
+ indexHighPortion indexLowPortion
+ <------->
+ NUMBER_OF_MEMORY_MODULE_BITS
+ */
+}
+
+void
+Address::print(std::ostream& out) const
+{
+ using namespace std;
+ out << "[" << hex << "0x" << m_address << "," << " line 0x"
+ << maskLowOrderBits(RubySystem::getBlockSizeBits()) << dec << "]"
+ << flush;
+}
void
Address::output(std::ostream& out) const
diff --git a/src/mem/ruby/common/Address.hh b/src/mem/ruby/common/Address.hh
index 89e1929a0..38fc047e1 100644
--- a/src/mem/ruby/common/Address.hh
+++ b/src/mem/ruby/common/Address.hh
@@ -29,13 +29,13 @@
#ifndef __MEM_RUBY_COMMON_ADDRESS_HH__
#define __MEM_RUBY_COMMON_ADDRESS_HH__
+#include <cassert>
#include <iomanip>
#include "base/hashmap.hh"
#include "mem/ruby/common/Global.hh"
#include "mem/ruby/system/MachineID.hh"
#include "mem/ruby/system/NodeID.hh"
-#include "mem/ruby/system/System.hh"
const int ADDRESS_WIDTH = 64; // address width in bytes
@@ -67,31 +67,10 @@ class Address
physical_address_t maskHighOrderBits(int number) const;
physical_address_t shiftLowOrderBits(int number) const;
- physical_address_t
- getLineAddress() const
- {
- return bitSelect(RubySystem::getBlockSizeBits(), ADDRESS_WIDTH);
- }
-
- physical_address_t
- getOffset() const
- {
- return bitSelect(0, RubySystem::getBlockSizeBits() - 1);
- }
-
- void
- makeLineAddress()
- {
- m_address = maskLowOrderBits(RubySystem::getBlockSizeBits());
- }
-
- // returns the next stride address based on line address
- void
- makeNextStrideAddress(int stride)
- {
- m_address = maskLowOrderBits(RubySystem::getBlockSizeBits())
- + RubySystem::getBlockSizeBytes()*stride;
- }
+ physical_address_t getLineAddress() const;
+ physical_address_t getOffset() const;
+ void makeLineAddress();
+ void makeNextStrideAddress(int stride);
int getBankSetNum() const;
int getBankSetDist() const;
@@ -224,49 +203,6 @@ Address::shiftLowOrderBits(int number) const
return (m_address >> number);
}
-inline integer_t
-Address::memoryModuleIndex() const
-{
- integer_t index =
- bitSelect(RubySystem::getBlockSizeBits() +
- RubySystem::getMemorySizeBits(), ADDRESS_WIDTH);
- assert (index >= 0);
- return index;
-
- // Index indexHighPortion =
- // address.bitSelect(MEMORY_SIZE_BITS - 1,
- // PAGE_SIZE_BITS + NUMBER_OF_MEMORY_MODULE_BITS);
- // Index indexLowPortion =
- // address.bitSelect(DATA_BLOCK_BITS, PAGE_SIZE_BITS - 1);
- //
- // Index index = indexLowPortion |
- // (indexHighPortion << (PAGE_SIZE_BITS - DATA_BLOCK_BITS));
-
- /*
- Round-robin mapping of addresses, at page size granularity
-
-ADDRESS_WIDTH MEMORY_SIZE_BITS PAGE_SIZE_BITS DATA_BLOCK_BITS
- | | | |
- \ / \ / \ / \ / 0
- -----------------------------------------------------------------------
- | unused |xxxxxxxxxxxxxxx| |xxxxxxxxxxxxxxx| |
- | |xxxxxxxxxxxxxxx| |xxxxxxxxxxxxxxx| |
- -----------------------------------------------------------------------
- indexHighPortion indexLowPortion
- <------->
- NUMBER_OF_MEMORY_MODULE_BITS
- */
-}
-
-inline void
-Address::print(std::ostream& out) const
-{
- using namespace std;
- out << "[" << hex << "0x" << m_address << "," << " line 0x"
- << maskLowOrderBits(RubySystem::getBlockSizeBits()) << dec << "]"
- << flush;
-}
-
class Address;
namespace __hash_namespace {
template <> struct hash<Address>