ruby: add functions for computing next stride/page address
authorNilay Vaish <nilay@cs.wisc.edu>
Tue, 11 Dec 2012 16:05:53 +0000 (10:05 -0600)
committerNilay Vaish <nilay@cs.wisc.edu>
Tue, 11 Dec 2012 16:05:53 +0000 (10:05 -0600)
src/mem/ruby/common/Address.cc
src/mem/ruby/common/Address.hh

index d3f67886369d44d276b0f0a2861e6608601abcf8..b075ef3c5aabed2373f292daff8b07c29cc757c6 100644 (file)
@@ -26,6 +26,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "arch/isa_traits.hh"
+#include "config/the_isa.hh"
 #include "mem/ruby/common/Address.hh"
 #include "mem/ruby/system/System.hh"
 
@@ -134,3 +136,24 @@ Address::operator=(const Address& obj)
     return *this;
 }
 
+void
+Address::makePageAddress()
+{
+    m_address = maskLowOrderBits(TheISA::LogVMPageSize);
+}
+
+Address
+page_address(const Address& addr)
+{
+    Address temp = addr;
+    temp.makePageAddress();
+    return temp;
+}
+
+Address
+next_stride_address(const Address& addr, int stride)
+{
+    Address temp = addr;
+    temp.makeNextStrideAddress(stride);
+    return temp;
+}
index ce1e76e9155b7d552c35bbb82418855fd3287da5..c63100b7fd600c50d7a17a0f046be541e490264b 100644 (file)
@@ -36,7 +36,7 @@
 #include "base/hashmap.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;
@@ -69,6 +69,7 @@ class Address
     physical_address_t getLineAddress() const;
     physical_address_t getOffset() const;
     void makeLineAddress();
+    void makePageAddress();
     void makeNextStrideAddress(int stride);
 
     int getBankSetNum() const;
@@ -202,6 +203,9 @@ Address::shiftLowOrderBits(int number) const
     return (m_address >> number);
 }
 
+Address next_stride_address(const Address& addr, int stride);
+Address page_address(const Address& addr);
+
 __hash_namespace_begin
 template <> struct hash<Address>
 {