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