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.
This commit is contained in:
parent
80b3886475
commit
6bf7153104
7 changed files with 80 additions and 69 deletions
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "base/intmath.hh"
|
||||
#include "base/str.hh"
|
||||
#include "mem/ruby/filters/BlockBloomFilter.hh"
|
||||
#include "mem/ruby/system/System.hh"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "base/intmath.hh"
|
||||
#include "base/str.hh"
|
||||
#include "mem/ruby/filters/BulkBloomFilter.hh"
|
||||
#include "mem/ruby/system/System.hh"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "base/intmath.hh"
|
||||
#include "base/str.hh"
|
||||
#include "mem/ruby/filters/LSB_CountingBloomFilter.hh"
|
||||
#include "mem/ruby/system/System.hh"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "base/intmath.hh"
|
||||
#include "base/str.hh"
|
||||
#include "mem/ruby/filters/MultiGrainBloomFilter.hh"
|
||||
#include "mem/ruby/system/System.hh"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "base/intmath.hh"
|
||||
#include "base/str.hh"
|
||||
#include "mem/ruby/filters/NonCountingBloomFilter.hh"
|
||||
#include "mem/ruby/system/System.hh"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
|
Loading…
Reference in a new issue