From b4efb48a71c42085134e57840aa9562884404d11 Mon Sep 17 00:00:00 2001 From: Nilay Vaish Date: Sat, 4 Jul 2015 10:43:46 -0500 Subject: 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. --- src/mem/ruby/slicc_interface/Message.hh | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'src/mem/ruby/slicc_interface') 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) { -- cgit v1.2.3