diff options
author | Daniel R. Carvalho <odanrc@yahoo.com.br> | 2019-09-07 11:45:25 +0200 |
---|---|---|
committer | Daniel Carvalho <odanrc@yahoo.com.br> | 2019-09-30 20:58:46 +0000 |
commit | 4a701c11e4c071ba0f196b376a73123a1ab952e7 (patch) | |
tree | ee162ac8a02082bee9ada7f1827ba3252326a6b1 /src/mem/ruby/common/Address.cc | |
parent | a5408244d1fb6dcad6234b601b5aa8d439fd49cd (diff) | |
download | gem5-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.cc | 18 |
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(); } |