From 847ba941ea345f01b2f5176432b6541902a41d2b Mon Sep 17 00:00:00 2001 From: Nilay Vaish Date: Fri, 18 Mar 2011 14:12:01 -0500 Subject: [PATCH] SLICC: Remove the keyword wake_up_all_dependents In order to add stall and wait facility for protocols, a keyword wake_up_all_dependents was introduced. This patch removes the keyword, instead this functionality is now implemented as function call. --- src/mem/protocol/MOESI_CMP_token-L1cache.sm | 3 +- src/mem/protocol/MOESI_hammer-cache.sm | 3 +- .../ast/WakeUpAllDependentsStatementAST.py | 43 ------------------- src/mem/slicc/parser.py | 5 --- src/mem/slicc/symbols/StateMachine.py | 40 +++++++++-------- 5 files changed, 25 insertions(+), 69 deletions(-) delete mode 100644 src/mem/slicc/ast/WakeUpAllDependentsStatementAST.py diff --git a/src/mem/protocol/MOESI_CMP_token-L1cache.sm b/src/mem/protocol/MOESI_CMP_token-L1cache.sm index 160208aac..5735fe203 100644 --- a/src/mem/protocol/MOESI_CMP_token-L1cache.sm +++ b/src/mem/protocol/MOESI_CMP_token-L1cache.sm @@ -176,6 +176,7 @@ machine(L1Cache, "Token protocol") void unset_cache_entry(); void set_tbe(TBE b); void unset_tbe(); + void wakeUpAllBuffers(); TBETable L1_TBEs, template_hack=""; @@ -1525,7 +1526,7 @@ machine(L1Cache, "Token protocol") } action(ka_wakeUpAllDependents, "ka", desc="wake-up all dependents") { - wake_up_all_dependents(); + wakeUpAllBuffers(); } //***************************************************** diff --git a/src/mem/protocol/MOESI_hammer-cache.sm b/src/mem/protocol/MOESI_hammer-cache.sm index 05d74038b..94fd25f56 100644 --- a/src/mem/protocol/MOESI_hammer-cache.sm +++ b/src/mem/protocol/MOESI_hammer-cache.sm @@ -158,6 +158,7 @@ machine(L1Cache, "AMD Hammer-like protocol") void unset_cache_entry(); void set_tbe(TBE b); void unset_tbe(); + void wakeUpAllBuffers(); Entry getCacheEntry(Address address), return_by_pointer="yes" { Entry L2cache_entry := static_cast(Entry, "pointer", L2cacheMemory.lookup(address)); @@ -1016,7 +1017,7 @@ machine(L1Cache, "AMD Hammer-like protocol") } action(ka_wakeUpAllDependents, "ka", desc="wake-up all dependents") { - wake_up_all_dependents(); + wakeUpAllBuffers(); } //***************************************************** diff --git a/src/mem/slicc/ast/WakeUpAllDependentsStatementAST.py b/src/mem/slicc/ast/WakeUpAllDependentsStatementAST.py deleted file mode 100644 index cd453bdc3..000000000 --- a/src/mem/slicc/ast/WakeUpAllDependentsStatementAST.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood -# Copyright (c) 2009 The Hewlett-Packard Development Company -# Copyright (c) 2010 Advanced Micro Devices, Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer; -# redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution; -# neither the name of the copyright holders nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -from slicc.ast.StatementAST import StatementAST - -class WakeUpAllDependentsStatementAST(StatementAST): - def __init__(self, slicc): - super(StatementAST, self).__init__(slicc) - - def __repr__(self): - return "[WakeUpAllDependentsStatementAst: %r]" % self.variable - - def generate(self, code, return_type): - code(''' - if (m_waiting_buffers.size() > 0) { - wakeUpAllBuffers(); - } - ''') diff --git a/src/mem/slicc/parser.py b/src/mem/slicc/parser.py index 448954e63..fcf3c71ac 100644 --- a/src/mem/slicc/parser.py +++ b/src/mem/slicc/parser.py @@ -160,7 +160,6 @@ class SLICC(Grammar): 'peek' : 'PEEK', 'stall_and_wait' : 'STALL_AND_WAIT', 'wake_up_dependents' : 'WAKE_UP_DEPENDENTS', - 'wake_up_all_dependents' : 'WAKE_UP_ALL_DEPENDENTS', 'enqueue' : 'ENQUEUE', 'copy_head' : 'COPY_HEAD', 'check_allocate' : 'CHECK_ALLOCATE', @@ -582,10 +581,6 @@ class SLICC(Grammar): "statement : WAKE_UP_DEPENDENTS '(' var ')' SEMI" p[0] = ast.WakeUpDependentsStatementAST(self, p[3]) - def p_statement__wake_up_all_dependents(self, p): - "statement : WAKE_UP_ALL_DEPENDENTS '(' ')' SEMI" - p[0] = ast.WakeUpAllDependentsStatementAST(self) - def p_statement__peek(self, p): "statement : PEEK '(' var ',' type pairs ')' statements" p[0] = ast.PeekStatementAST(self, p[3], p[5], p[6], p[8], "peek") diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py index 3c5f860ea..301e34ea5 100644 --- a/src/mem/slicc/symbols/StateMachine.py +++ b/src/mem/slicc/symbols/StateMachine.py @@ -745,26 +745,28 @@ $c_ident::wakeUpAllBuffers() std::vector wokeUpMsgVecs; - for (WaitingBufType::iterator buf_iter = m_waiting_buffers.begin(); - buf_iter != m_waiting_buffers.end(); - ++buf_iter) { - for (MsgVecType::iterator vec_iter = buf_iter->second->begin(); - vec_iter != buf_iter->second->end(); - ++vec_iter) { - if (*vec_iter != NULL) { - (*vec_iter)->reanalyzeAllMessages(); - } - } - wokeUpMsgVecs.push_back(buf_iter->second); - } - - for (std::vector::iterator wb_iter = wokeUpMsgVecs.begin(); - wb_iter != wokeUpMsgVecs.end(); - ++wb_iter) { - delete (*wb_iter); + if(m_waiting_buffers.size() > 0) { + for (WaitingBufType::iterator buf_iter = m_waiting_buffers.begin(); + buf_iter != m_waiting_buffers.end(); + ++buf_iter) { + for (MsgVecType::iterator vec_iter = buf_iter->second->begin(); + vec_iter != buf_iter->second->end(); + ++vec_iter) { + if (*vec_iter != NULL) { + (*vec_iter)->reanalyzeAllMessages(); + } + } + wokeUpMsgVecs.push_back(buf_iter->second); + } + + for (std::vector::iterator wb_iter = wokeUpMsgVecs.begin(); + wb_iter != wokeUpMsgVecs.end(); + ++wb_iter) { + delete (*wb_iter); + } + + m_waiting_buffers.clear(); } - - m_waiting_buffers.clear(); } void -- 2.30.2