summaryrefslogtreecommitdiff
path: root/src/base/bitfield.hh
diff options
context:
space:
mode:
authorKevin Lim <ktlim@umich.edu>2006-10-31 14:44:23 -0500
committerKevin Lim <ktlim@umich.edu>2006-10-31 14:44:23 -0500
commit2fa535f7407ad2a7e1e2ec807b72d11a81fa25aa (patch)
tree29a33ada141edad37b9304227f411a0195520869 /src/base/bitfield.hh
parente912080d12666482a942eae354e783c3d666c6c9 (diff)
parent7f39644609e19ada9e94c9bbb09c3e625fa6e8ed (diff)
downloadgem5-2fa535f7407ad2a7e1e2ec807b72d11a81fa25aa.tar.xz
Merge ktlim@zizzer:/bk/newmem
into zamp.eecs.umich.edu:/z/ktlim2/clean/o3-merge/newmem --HG-- extra : convert_revision : 88fa7ae5cc32be068787ee381fae9d8de0e9bd0f
Diffstat (limited to 'src/base/bitfield.hh')
-rw-r--r--src/base/bitfield.hh24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/base/bitfield.hh b/src/base/bitfield.hh
index 879780d56..177279678 100644
--- a/src/base/bitfield.hh
+++ b/src/base/bitfield.hh
@@ -69,4 +69,28 @@ sext(uint64_t val)
return sign_bit ? (val | ~mask(N)) : val;
}
+/**
+ * Return val with bits first to last set to bit_val
+ */
+template <class T, class B>
+inline
+T
+insertBits(T val, int first, int last, B bit_val)
+{
+ T bmask = mask(first - last + 1) << last;
+ return ((bit_val << last) & bmask) | (val & ~bmask);
+}
+
+/**
+ * A convenience function to replace bits first to last of val with bit_val
+ * in place.
+ */
+template <class T, class B>
+inline
+void
+replaceBits(T& val, int first, int last, B bit_val)
+{
+ val = insertBits(val, first, last, bit_val);
+}
+
#endif // __BASE_BITFIELD_HH__