#include <cassert>
#include <iomanip>
+#include <iostream>
#include "base/hashmap.hh"
-#include "mem/ruby/common/Global.hh"
-#include "mem/ruby/system/NodeID.hh"
+#include "mem/ruby/common/TypeDefines.hh"
-const int ADDRESS_WIDTH = 64; // address width in bytes
+const uint32_t ADDRESS_WIDTH = 64; // address width in bytes
class Address;
typedef Address PhysAddress;
void setAddress(physical_address_t address) { m_address = address; }
physical_address_t getAddress() const {return m_address;}
// selects bits inclusive
- physical_address_t bitSelect(int small, int big) const;
- physical_address_t bitRemove(int small, int big) const;
- physical_address_t maskLowOrderBits(int number) const;
- physical_address_t maskHighOrderBits(int number) const;
- physical_address_t shiftLowOrderBits(int number) const;
+ physical_address_t bitSelect(unsigned int small, unsigned int big) const;
+ physical_address_t bitRemove(unsigned int small, unsigned int big) const;
+ physical_address_t maskLowOrderBits(unsigned int number) const;
+ physical_address_t maskHighOrderBits(unsigned int number) const;
+ physical_address_t shiftLowOrderBits(unsigned int number) const;
physical_address_t getLineAddress() const;
physical_address_t getOffset() const;
void makeLineAddress();
void makeNextStrideAddress(int stride);
- int getBankSetNum() const;
- int getBankSetDist() const;
-
- Index memoryModuleIndex() const;
+ int64 memoryModuleIndex() const;
void print(std::ostream& out) const;
void output(std::ostream& out) const;
// rips bits inclusive
inline physical_address_t
-Address::bitSelect(int small, int big) const
+Address::bitSelect(unsigned int small, unsigned int big) const
{
physical_address_t mask;
- assert((unsigned)big >= (unsigned)small);
+ assert(big >= small);
if (big >= ADDRESS_WIDTH - 1) {
return (m_address >> small);
// removes bits inclusive
inline physical_address_t
-Address::bitRemove(int small, int big) const
+Address::bitRemove(unsigned int small, unsigned int big) const
{
physical_address_t mask;
- assert((unsigned)big >= (unsigned)small);
+ assert(big >= small);
if (small >= ADDRESS_WIDTH - 1) {
return m_address;
}
inline physical_address_t
-Address::maskLowOrderBits(int number) const
+Address::maskLowOrderBits(unsigned int number) const
{
physical_address_t mask;
}
inline physical_address_t
-Address::maskHighOrderBits(int number) const
+Address::maskHighOrderBits(unsigned int number) const
{
physical_address_t mask;
}
inline physical_address_t
-Address::shiftLowOrderBits(int number) const
+Address::shiftLowOrderBits(unsigned int number) const
{
return (m_address >> number);
}
-class Address;
-namespace __hash_namespace {
+Address next_stride_address(const Address& addr, int stride);
+
+__hash_namespace_begin
template <> struct hash<Address>
{
size_t
return (size_t)s.getAddress();
}
};
-} // namespace __hash_namespace
+__hash_namespace_end
namespace std {
template <> struct equal_to<Address>