summaryrefslogtreecommitdiff
path: root/src/mem/ruby/common/Address.cc
diff options
context:
space:
mode:
authorDaniel R. Carvalho <odanrc@yahoo.com.br>2019-09-07 11:45:25 +0200
committerDaniel Carvalho <odanrc@yahoo.com.br>2019-09-30 20:58:46 +0000
commit4a701c11e4c071ba0f196b376a73123a1ab952e7 (patch)
treeee162ac8a02082bee9ada7f1827ba3252326a6b1 /src/mem/ruby/common/Address.cc
parenta5408244d1fb6dcad6234b601b5aa8d439fd49cd (diff)
downloadgem5-4a701c11e4c071ba0f196b376a73123a1ab952e7.tar.xz
mem-ruby: Fix maskLowOrderBits
The function was wrong when number = 63. Also, use the more reliable src/base/bitfield.hh's mbits when posible. maskLowOrderBits has only been kept because SLICC does not accept a templated function. Change-Id: I8dd680da02ceb9e614e2f9cbf8f1ac52cead8d45 Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/21084 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'src/mem/ruby/common/Address.cc')
-rw-r--r--src/mem/ruby/common/Address.cc18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/mem/ruby/common/Address.cc b/src/mem/ruby/common/Address.cc
index 1afefc236..5c89d31cc 100644
--- a/src/mem/ruby/common/Address.cc
+++ b/src/mem/ruby/common/Address.cc
@@ -28,6 +28,7 @@
#include "mem/ruby/common/Address.hh"
+#include "base/bitfield.hh"
#include "mem/ruby/system/RubySystem.hh"
Addr
@@ -48,14 +49,7 @@ bitSelect(Addr addr, unsigned int small, unsigned int big)
Addr
maskLowOrderBits(Addr addr, unsigned int number)
{
- Addr mask;
-
- if (number >= ADDRESS_WIDTH - 1) {
- mask = ~0;
- } else {
- mask = (Addr)~0 << number;
- }
- return (addr & mask);
+ return mbits<Addr>(addr, 63, number);
}
Addr
@@ -67,15 +61,14 @@ getOffset(Addr addr)
Addr
makeLineAddress(Addr addr)
{
- return maskLowOrderBits(addr, RubySystem::getBlockSizeBits());
+ return mbits<Addr>(addr, 63, RubySystem::getBlockSizeBits());
}
// returns the next stride address based on line address
Addr
makeNextStrideAddress(Addr addr, int stride)
{
- return maskLowOrderBits(addr, RubySystem::getBlockSizeBits())
- + RubySystem::getBlockSizeBytes() * stride;
+ return makeLineAddress(addr) + RubySystem::getBlockSizeBytes() * stride;
}
std::string
@@ -83,7 +76,6 @@ printAddress(Addr addr)
{
std::stringstream out;
out << "[" << std::hex << "0x" << addr << "," << " line 0x"
- << maskLowOrderBits(addr, RubySystem::getBlockSizeBits())
- << std::dec << "]";
+ << makeLineAddress(addr) << std::dec << "]";
return out.str();
}