Ruby: Correct set LONG_BITS and INDEX_SHIFT in class Set.
authorNilay Vaish <nilay@cs.wisc.edu>
Wed, 15 Jun 2011 00:51:44 +0000 (19:51 -0500)
committerNilay Vaish <nilay@cs.wisc.edu>
Wed, 15 Jun 2011 00:51:44 +0000 (19:51 -0500)
The code for Set class was written under the assumption that
std::numeric_limits<long>::digits returns the number of bits used for
data type long, which was presumed to be either 32 or 64. But return value
is actually one less, that is, it is either 31 or 63. The value is now
being incremented by 1 so as to correctly set it.

src/mem/ruby/common/Set.hh

index 5481c2ec7cb9f2a75ccc303d2efe8ef4677ae56a..b76c3409dc47b925bd9303435bb4aaea84784584 100644 (file)
@@ -54,7 +54,7 @@ class Set
     long *m_p_nArray;      // an word array to hold the bits in the set
     long m_p_nArray_Static[NUMBER_WORDS_PER_SET];
 
-    static const int LONG_BITS = std::numeric_limits<long>::digits;
+    static const int LONG_BITS = std::numeric_limits<long>::digits + 1;
     static const int INDEX_SHIFT = LONG_BITS == 64 ? 6 : 5;
     static const int INDEX_MASK = (1 << INDEX_SHIFT) - 1;