Added a few functions to stuff values into bitfields in an instruction.
authorGabe Black <gblack@eecs.umich.edu>
Fri, 27 Oct 2006 00:25:22 +0000 (20:25 -0400)
committerGabe Black <gblack@eecs.umich.edu>
Fri, 27 Oct 2006 00:25:22 +0000 (20:25 -0400)
--HG--
extra : convert_revision : 507d7e13fd6276acf36b75eba31dff5e8080113f

src/base/bitfield.hh

index 879780d5600c3cae37ecdf6874a41c4389194c83..177279678281f67a827bdfa6a4c6e9bcb0bf1ce8 100644 (file)
@@ -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__