stats: forgot an include for the mysql stuff
[gem5.git] / src / base / bitfield.hh
index 83b9138b4ee50e7f71819ca6f7c69387d7e481dd..664093fa27fc96145ce16448afadf3264c7c3eee 100644 (file)
@@ -58,6 +58,17 @@ bits(T val, int first, int last)
     return (val >> last) & mask(nbits);
 }
 
+/**
+ * Extract the bit from this position from 'val' and right justify it.
+ */
+template <class T>
+inline
+T
+bits(T val, int bit)
+{
+    return bits(val, bit, bit);
+}
+
 /**
  * Mask off the given bits in place like bits() but without shifting.
  * msb = 63, lsb = 0
@@ -96,8 +107,20 @@ inline
 T
 insertBits(T val, int first, int last, B bit_val)
 {
+    T t_bit_val = bit_val;
     T bmask = mask(first - last + 1) << last;
-    return ((bit_val << last) & bmask) | (val & ~bmask);
+    return ((t_bit_val << last) & bmask) | (val & ~bmask);
+}
+
+/**
+ * Overloaded for access to only one bit in value
+ */
+template <class T, class B>
+inline
+T
+insertBits(T val, int bit, B bit_val)
+{
+    return insertBits(val, bit, bit, bit_val);
 }
 
 /**
@@ -112,6 +135,14 @@ replaceBits(T& val, int first, int last, B bit_val)
     val = insertBits(val, first, last, bit_val);
 }
 
+/** Overloaded function to allow to access only 1 bit*/
+template <class T, class B>
+inline
+void
+replaceBits(T& val, int bit, B bit_val)
+{
+    val = insertBits(val, bit, bit, bit_val);
+}
 /**
  * Returns the bit position of the MSB that is set in the input
  */
@@ -121,20 +152,13 @@ findMsbSet(uint64_t val) {
     int msb = 0;
     if (!val)
         return 0;
-    if (bits(val, 63,32)) msb += 32;
-    val >>= 32;
-    if (bits(val, 31,16)) msb += 16;
-    val >>= 16;
-    if (bits(val, 15,8)) msb += 8;
-    val >>= 8;
-    if (bits(val, 7,4)) msb += 4;
-    val >>= 4;
-    if (bits(val, 3,2)) msb += 2;
-    val >>= 2;
-    if (bits(val, 1,1)) msb += 1;
+    if (bits(val, 63,32)) { msb += 32; val >>= 32; }
+    if (bits(val, 31,16)) { msb += 16; val >>= 16; }
+    if (bits(val, 15,8))  { msb += 8;  val >>= 8;  }
+    if (bits(val, 7,4))   { msb += 4;  val >>= 4;  }
+    if (bits(val, 3,2))   { msb += 2;  val >>= 2;  }
+    if (bits(val, 1,1))   { msb += 1; }
     return msb;
 }
 
-
-
 #endif // __BASE_BITFIELD_HH__