changeset c1694b4032a6 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=c1694b4032a6
description:
        ruby: set: replace long by unsigned long
        UBSan complains about negative value being shifted

diffstat:

 src/mem/ruby/common/Set.cc              |  16 +++++++---------
 src/mem/ruby/common/Set.hh              |   8 +++++---
 src/mem/ruby/slicc_interface/Message.hh |   8 ++++++--
 3 files changed, 18 insertions(+), 14 deletions(-)

diffs (117 lines):

diff -r dac26eb4cb64 -r c1694b4032a6 src/mem/ruby/common/Set.cc
--- a/src/mem/ruby/common/Set.cc        Wed Apr 29 22:35:22 2015 -0500
+++ b/src/mem/ruby/common/Set.cc        Wed Apr 29 22:35:22 2015 -0500
@@ -73,9 +73,9 @@
 {
     // 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 @@
 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 @@
 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 @@
     }
 
     // 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 @@
         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();
diff -r dac26eb4cb64 -r c1694b4032a6 src/mem/ruby/common/Set.hh
--- a/src/mem/ruby/common/Set.hh        Wed Apr 29 22:35:22 2015 -0500
+++ b/src/mem/ruby/common/Set.hh        Wed Apr 29 22:35:22 2015 -0500
@@ -62,10 +62,12 @@
     // 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;
 
diff -r dac26eb4cb64 -r c1694b4032a6 src/mem/ruby/slicc_interface/Message.hh
--- a/src/mem/ruby/slicc_interface/Message.hh   Wed Apr 29 22:35:22 2015 -0500
+++ b/src/mem/ruby/slicc_interface/Message.hh   Wed Apr 29 22:35:22 2015 -0500
@@ -31,6 +31,7 @@
 
 #include <iostream>
 #include <memory>
+#include <stack>
 
 #include "mem/packet.hh"
 
@@ -44,12 +45,14 @@
         : 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 @@
     Tick m_time;
     Tick m_LastEnqueueTime; // my last enqueue time
     Tick m_DelayedTicks; // my delayed cycles
+    std::stack<Tick> timeStamps;
 };
 
 inline std::ostream&
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to