From: Nilay Vaish Date: Thu, 30 Apr 2015 03:35:22 +0000 (-0500) Subject: ruby: set: replace long by unsigned long X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3a2731fb8cb0bcb152979fb41ba23ce2b981444f;p=gem5.git ruby: set: replace long by unsigned long UBSan complains about negative value being shifted --- diff --git a/src/mem/ruby/common/Set.cc b/src/mem/ruby/common/Set.cc index 280fe71b4..331aa569a 100644 --- a/src/mem/ruby/common/Set.cc +++ b/src/mem/ruby/common/Set.cc @@ -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(); diff --git a/src/mem/ruby/common/Set.hh b/src/mem/ruby/common/Set.hh index bedd44aa6..e97385e5e 100644 --- a/src/mem/ruby/common/Set.hh +++ b/src/mem/ruby/common/Set.hh @@ -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::digits + 1; + static const int LONG_BITS = + std::numeric_limits::digits + 1; static const int INDEX_SHIFT = LONG_BITS == 64 ? 6 : 5; static const int INDEX_MASK = (1 << INDEX_SHIFT) - 1; diff --git a/src/mem/ruby/slicc_interface/Message.hh b/src/mem/ruby/slicc_interface/Message.hh index 786c656bc..6e5f4c2ba 100644 --- a/src/mem/ruby/slicc_interface/Message.hh +++ b/src/mem/ruby/slicc_interface/Message.hh @@ -31,6 +31,7 @@ #include #include +#include #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 timeStamps; }; inline std::ostream&