summaryrefslogtreecommitdiff
path: root/src/mem/ruby/slicc_interface
diff options
context:
space:
mode:
authorNilay Vaish <nilay@cs.wisc.edu>2015-07-04 10:43:46 -0500
committerNilay Vaish <nilay@cs.wisc.edu>2015-07-04 10:43:46 -0500
commitb4efb48a71c42085134e57840aa9562884404d11 (patch)
tree0626bf3d54745737f3553fcf0a6a931813e441e6 /src/mem/ruby/slicc_interface
parent25e1b1c1f5f4e0ad3976c88998161700135f4aae (diff)
downloadgem5-b4efb48a71c42085134e57840aa9562884404d11.tar.xz
ruby: remove message buffer node
This structure's only purpose was to provide a comparison function for ordering messages in the MessageBuffer. The comparison function is now being moved to the Message class itself. So we no longer require this structure.
Diffstat (limited to 'src/mem/ruby/slicc_interface')
-rw-r--r--src/mem/ruby/slicc_interface/Message.hh26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/mem/ruby/slicc_interface/Message.hh b/src/mem/ruby/slicc_interface/Message.hh
index fb60c3ca9..ea33c1340 100644
--- a/src/mem/ruby/slicc_interface/Message.hh
+++ b/src/mem/ruby/slicc_interface/Message.hh
@@ -44,13 +44,14 @@ class Message
Message(Tick curTime)
: m_time(curTime),
m_LastEnqueueTime(curTime),
- m_DelayedTicks(0)
+ m_DelayedTicks(0), m_msg_counter(0)
{ }
Message(const Message &other)
: m_time(other.m_time),
m_LastEnqueueTime(other.m_LastEnqueueTime),
- m_DelayedTicks(other.m_DelayedTicks)
+ m_DelayedTicks(other.m_DelayedTicks),
+ m_msg_counter(other.m_msg_counter)
{ }
virtual ~Message() { }
@@ -68,9 +69,7 @@ class Message
* implement these methods.
*/
virtual bool functionalRead(Packet *pkt) = 0;
- //{ fatal("Read functional access not implemented!"); }
virtual bool functionalWrite(Packet *pkt) = 0;
- //{ fatal("Write functional access not implemented!"); }
//! Update the delay this message has experienced so far.
void updateDelayedTicks(Tick curTime)
@@ -85,14 +84,29 @@ class Message
const Tick getLastEnqueueTime() const {return m_LastEnqueueTime;}
const Tick& getTime() const { return m_time; }
- void setTime(const Tick& new_time) { m_time = new_time; }
+ void setMsgCounter(uint64_t c) { m_msg_counter = c; }
+ uint64_t getMsgCounter() const { return m_msg_counter; }
private:
- Tick m_time;
+ const Tick m_time;
Tick m_LastEnqueueTime; // my last enqueue time
Tick m_DelayedTicks; // my delayed cycles
+ uint64_t m_msg_counter; // FIXME, should this be a 64-bit value?
};
+inline bool
+operator>(const MsgPtr &lhs, const MsgPtr &rhs)
+{
+ const Message *l = lhs.get();
+ const Message *r = rhs.get();
+
+ if (l->getLastEnqueueTime() == r->getLastEnqueueTime()) {
+ assert(l->getMsgCounter() != r->getMsgCounter());
+ return l->getMsgCounter() > r->getMsgCounter();
+ }
+ return l->getLastEnqueueTime() > r->getLastEnqueueTime();
+}
+
inline std::ostream&
operator<<(std::ostream& out, const Message& obj)
{