From 3a2731fb8cb0bcb152979fb41ba23ce2b981444f Mon Sep 17 00:00:00 2001 From: Nilay Vaish Date: Wed, 29 Apr 2015 22:35:22 -0500 Subject: ruby: set: replace long by unsigned long UBSan complains about negative value being shifted --- src/mem/ruby/common/Set.cc | 16 +++++++--------- src/mem/ruby/common/Set.hh | 8 +++++--- 2 files changed, 12 insertions(+), 12 deletions(-) (limited to 'src/mem/ruby/common') 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; -- cgit v1.2.3