ruby: set: replace long by unsigned long
authorNilay Vaish <nilay@cs.wisc.edu>
Thu, 30 Apr 2015 03:35:22 +0000 (22:35 -0500)
committerNilay Vaish <nilay@cs.wisc.edu>
Thu, 30 Apr 2015 03:35:22 +0000 (22:35 -0500)
UBSan complains about negative value being shifted

src/mem/ruby/common/Set.cc
src/mem/ruby/common/Set.hh
src/mem/ruby/slicc_interface/Message.hh

index 280fe71b4dfe6a9940c7bc9c3d13752bbb82abed..331aa569a02fc1ad4ed1b85d1a85a64a2be678c6 100644 (file)
@@ -73,9 +73,9 @@ Set::clearExcess()
 {
     // now just ensure that no bits over the maximum size were set
 #ifdef _LP64
-    long mask = 0x7FFFFFFFFFFFFFFF;
+    unsigned long mask = 0x7FFFFFFFFFFFFFFF;
 #else
-    long mask = 0x7FFFFFFF;
+    unsigned long mask = 0x7FFFFFFF;
 #endif
 
     // the number of populated spaces in the higest-order array slot
@@ -132,10 +132,9 @@ int
 Set::count() const
 {
     int counter = 0;
-    long mask;
 
     for (int i = 0; i < m_nArrayLen; i++) {
-        mask = (long)0x01;
+        unsigned long mask = 0x01;
 
         for (int j = 0; j < LONG_BITS; j++) {
             // FIXME - significant performance loss when array
@@ -172,14 +171,13 @@ NodeID
 Set::smallestElement() const
 {
     assert(count() > 0);
-    long x;
     for (int i = 0; i < m_nArrayLen; i++) {
         if (m_p_nArray[i] != 0) {
             // the least-set bit must be in here
-            x = m_p_nArray[i];
+            unsigned long x = m_p_nArray[i];
 
             for (int j = 0; j < LONG_BITS; j++) {
-                if (x & (unsigned long)1) {
+                if (x & 1) {
                     return LONG_BITS * i + j;
                 }
 
@@ -212,7 +210,7 @@ Set::isBroadcast() const
     }
 
     // now check the last word, which may not be fully loaded
-    long mask = 1;
+    unsigned long mask = 1;
     for (int j = 0; j < (m_nSize % LONG_BITS); j++) {
         if ((mask & m_p_nArray[m_nArrayLen-1]) == 0) {
             return false;
@@ -306,7 +304,7 @@ Set::setSize(int size)
         if (m_p_nArray && m_p_nArray != &m_p_nArray_Static[0])
             delete [] m_p_nArray;
 
-        m_p_nArray = new long[m_nArrayLen];
+        m_p_nArray = new unsigned long[m_nArrayLen];
     }
 
     clear();
index bedd44aa617ec8a71476bdd7a1b2a2fc0159820e..e97385e5e286ef87bb1be558c02c0e9deead7d16 100644 (file)
@@ -62,10 +62,12 @@ class Set
     // 64 bits if the -m64 parameter is passed to g++, which it is
     // for an AMD opteron under our configuration
 
-    long *m_p_nArray;      // an word array to hold the bits in the set
-    long m_p_nArray_Static[NUMBER_WORDS_PER_SET];
+    // an word array to hold the bits in the set
+    unsigned long *m_p_nArray;
+    unsigned long m_p_nArray_Static[NUMBER_WORDS_PER_SET];
 
-    static const int LONG_BITS = std::numeric_limits<long>::digits + 1;
+    static const int LONG_BITS =
+        std::numeric_limits<unsigned long>::digits + 1;
     static const int INDEX_SHIFT = LONG_BITS == 64 ? 6 : 5;
     static const int INDEX_MASK = (1 << INDEX_SHIFT) - 1;
 
index 786c656bcb299258fced464c5e777704408be618..6e5f4c2ba5624fcf2c8bfa33ddc131f7d5802b98 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <iostream>
 #include <memory>
+#include <stack>
 
 #include "mem/packet.hh"
 
@@ -44,12 +45,14 @@ class Message
         : m_time(curTime),
           m_LastEnqueueTime(curTime),
           m_DelayedTicks(0)
-    { }
+    {
+      timeStamps.push(curTime);
+    }
 
     Message(const Message &other)
         : m_time(other.m_time),
           m_LastEnqueueTime(other.m_LastEnqueueTime),
-          m_DelayedTicks(other.m_DelayedTicks)
+          m_DelayedTicks(other.m_DelayedTicks), timeStamps(other.timeStamps)
     { }
 
     virtual ~Message() { }
@@ -90,6 +93,7 @@ class Message
     Tick m_time;
     Tick m_LastEnqueueTime; // my last enqueue time
     Tick m_DelayedTicks; // my delayed cycles
+    std::stack<Tick> timeStamps;
 };
 
 inline std::ostream&