diff options
author | Nilay Vaish <nilay@cs.wisc.edu> | 2011-02-25 17:51:56 -0600 |
---|---|---|
committer | Nilay Vaish <nilay@cs.wisc.edu> | 2011-02-25 17:51:56 -0600 |
commit | 6bf7153104637c18133fa36c02ca6a4a9b015799 (patch) | |
tree | c8dd10ba5a695cbf8c0472430013a31a723f1604 /src/mem/ruby/common/Address.cc | |
parent | 80b388647588ae864a78a82bb20892e893b6ba10 (diff) | |
download | gem5-6bf7153104637c18133fa36c02ca6a4a9b015799.tar.xz |
Ruby: Make Address.hh independent of RubySystem
This patch changes Address.hh so that it is not dependent on RubySystem.
This dependence seems unecessary. All those functions that depend on
RubySystem have been moved to Address.cc file.
Diffstat (limited to 'src/mem/ruby/common/Address.cc')
-rw-r--r-- | src/mem/ruby/common/Address.cc | 70 |
1 files changed, 70 insertions, 0 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 |