mem-ruby: Generate address with masking cacheline bits
authorOnur Kayiran <onur.kayiran@amd.com>
Mon, 30 Apr 2018 21:56:27 +0000 (17:56 -0400)
committerAnthony Gutierrez <anthony.gutierrez@amd.com>
Thu, 28 May 2020 23:07:08 +0000 (23:07 +0000)
makeLineAddress function uses m_block_size_bits to create
masked addresses. m_block_size_bits is used to specify
cache, directory, and memory controller interleaving,
and it can be larger than the cache line size.
To generate addresses that can align with the cache line
rather than the interleaving granularity, a version of
makeLineAddress is created to specify bits that need to
be masked.

Change-Id: I06deec4949da7fa46f1d6f7575334f18ee61c786
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28135
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com>
Reviewed-by: Onur Kayıran <onur.kayiran@amd.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>

src/mem/ruby/common/Address.cc
src/mem/ruby/common/Address.hh

index 40ce0feb077e18abce841092af4245b398d2720b..39de974a572c66b26b47d15ad7b81ab190c58766 100644 (file)
@@ -56,6 +56,12 @@ makeLineAddress(Addr addr)
     return mbits<Addr>(addr, 63, RubySystem::getBlockSizeBits());
 }
 
+Addr
+makeLineAddress(Addr addr, int cacheLineBits)
+{
+    return maskLowOrderBits(addr, cacheLineBits);
+}
+
 // returns the next stride address based on line address
 Addr
 makeNextStrideAddress(Addr addr, int stride)
index 30682fab0c51b28821cbde4f93b82ab4efb7f6d0..e5e320f3bb0448ed19d3de628f20307b83dc1f78 100644 (file)
@@ -40,6 +40,7 @@ Addr bitSelect(Addr addr, unsigned int small, unsigned int big);
 Addr maskLowOrderBits(Addr addr, unsigned int number);
 Addr getOffset(Addr addr);
 Addr makeLineAddress(Addr addr);
+Addr makeLineAddress(Addr addr, int cacheLineBits);
 Addr makeNextStrideAddress(Addr addr, int stride);
 std::string printAddress(Addr addr);