summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/ruby/common/Address.cc18
-rw-r--r--src/mem/ruby/profiler/AddressProfiler.cc3
-rw-r--r--src/mem/ruby/structures/Prefetcher.cc3
3 files changed, 9 insertions, 15 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();
}
diff --git a/src/mem/ruby/profiler/AddressProfiler.cc b/src/mem/ruby/profiler/AddressProfiler.cc
index acdc86023..9d96de707 100644
--- a/src/mem/ruby/profiler/AddressProfiler.cc
+++ b/src/mem/ruby/profiler/AddressProfiler.cc
@@ -30,6 +30,7 @@
#include <vector>
+#include "base/bitfield.hh"
#include "base/stl_helpers.hh"
#include "mem/ruby/profiler/Profiler.hh"
#include "mem/ruby/protocol/RubyRequest.hh"
@@ -298,7 +299,7 @@ AddressProfiler::addTraceSample(Addr data_addr, Addr pc_addr,
// record macro data address trace info
// 6 for datablock, 4 to make it 16x more coarse
- Addr macro_addr = maskLowOrderBits(data_addr, 10);
+ Addr macro_addr = mbits<Addr>(data_addr, 63, 10);
lookupTraceForAddress(macro_addr, m_macroBlockAccessTrace).
update(type, access_mode, id, sharing_miss);
diff --git a/src/mem/ruby/structures/Prefetcher.cc b/src/mem/ruby/structures/Prefetcher.cc
index df8fdfcba..70b30352e 100644
--- a/src/mem/ruby/structures/Prefetcher.cc
+++ b/src/mem/ruby/structures/Prefetcher.cc
@@ -28,6 +28,7 @@
#include "mem/ruby/structures/Prefetcher.hh"
+#include "base/bitfield.hh"
#include "debug/RubyPrefetcher.hh"
#include "mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh"
#include "mem/ruby/system/RubySystem.hh"
@@ -475,5 +476,5 @@ Prefetcher::print(std::ostream& out) const
Addr
Prefetcher::pageAddress(Addr addr) const
{
- return maskLowOrderBits(addr, m_page_shift);
+ return mbits<Addr>(addr, 63, m_page_shift);
}