StateMachine.py (6969:1ab268977bbb) | StateMachine.py (6999:f226c098c393) |
---|---|
1# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 2# Copyright (c) 2009 The Hewlett-Packard Development Company 3# All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions are 7# met: redistributions of source code must retain the above copyright 8# notice, this list of conditions and the following disclaimer; --- 11 unchanged lines hidden (view full) --- 20# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | 1# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 2# Copyright (c) 2009 The Hewlett-Packard Development Company 3# All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions are 7# met: redistributions of source code must retain the above copyright 8# notice, this list of conditions and the following disclaimer; --- 11 unchanged lines hidden (view full) --- 20# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 |
28from m5.util import code_formatter, orderdict | 28from m5.util import orderdict |
29 30from slicc.symbols.Symbol import Symbol 31from slicc.symbols.Var import Var 32import slicc.generate.html as html 33 34python_class_map = {"int": "Int", 35 "string": "String", 36 "bool": "Bool", --- 108 unchanged lines hidden (view full) --- 145 self.printCWakeup(path) 146 self.printProfilerCC(path) 147 self.printProfilerHH(path) 148 149 for func in self.functions: 150 func.writeCodeFiles(path) 151 152 def printControllerPython(self, path): | 29 30from slicc.symbols.Symbol import Symbol 31from slicc.symbols.Var import Var 32import slicc.generate.html as html 33 34python_class_map = {"int": "Int", 35 "string": "String", 36 "bool": "Bool", --- 108 unchanged lines hidden (view full) --- 145 self.printCWakeup(path) 146 self.printProfilerCC(path) 147 self.printProfilerHH(path) 148 149 for func in self.functions: 150 func.writeCodeFiles(path) 151 152 def printControllerPython(self, path): |
153 code = code_formatter() | 153 code = self.symtab.codeFormatter() |
154 ident = self.ident 155 py_ident = "%s_Controller" % ident 156 c_ident = "%s_Controller" % self.ident 157 code(''' 158from m5.params import * 159from m5.SimObject import SimObject 160from Controller import RubyController 161 --- 13 unchanged lines hidden (view full) --- 175 "type: '%s'. Please update the python_class_map " \ 176 "in StateMachine.py", param.type_ast.type.c_ident) 177 code.dedent() 178 code.write(path, '%s.py' % py_ident) 179 180 181 def printControllerHH(self, path): 182 '''Output the method declarations for the class declaration''' | 154 ident = self.ident 155 py_ident = "%s_Controller" % ident 156 c_ident = "%s_Controller" % self.ident 157 code(''' 158from m5.params import * 159from m5.SimObject import SimObject 160from Controller import RubyController 161 --- 13 unchanged lines hidden (view full) --- 175 "type: '%s'. Please update the python_class_map " \ 176 "in StateMachine.py", param.type_ast.type.c_ident) 177 code.dedent() 178 code.write(path, '%s.py' % py_ident) 179 180 181 def printControllerHH(self, path): 182 '''Output the method declarations for the class declaration''' |
183 code = code_formatter() | 183 code = self.symtab.codeFormatter() |
184 ident = self.ident 185 c_ident = "%s_Controller" % self.ident 186 187 self.message_buffer_names = [] 188 189 code(''' 190/** \\file $ident.hh 191 * --- 104 unchanged lines hidden (view full) --- 296 code.dedent() 297 code('};') 298 code('#endif // ${ident}_CONTROLLER_H') 299 code.write(path, '%s.hh' % c_ident) 300 301 def printControllerCC(self, path): 302 '''Output the actions for performing the actions''' 303 | 184 ident = self.ident 185 c_ident = "%s_Controller" % self.ident 186 187 self.message_buffer_names = [] 188 189 code(''' 190/** \\file $ident.hh 191 * --- 104 unchanged lines hidden (view full) --- 296 code.dedent() 297 code('};') 298 code('#endif // ${ident}_CONTROLLER_H') 299 code.write(path, '%s.hh' % c_ident) 300 301 def printControllerCC(self, path): 302 '''Output the actions for performing the actions''' 303 |
304 code = code_formatter() | 304 code = self.symtab.codeFormatter() |
305 ident = self.ident 306 c_ident = "%s_Controller" % self.ident 307 308 code(''' 309/** \\file $ident.cc 310 * 311 * Auto generated C++ code started by $__file__:$__line__ 312 * Created by slicc definition of Module "${{self.short}}" --- 323 unchanged lines hidden (view full) --- 636} 637 638''') 639 code.write(path, "%s.cc" % c_ident) 640 641 def printCWakeup(self, path): 642 '''Output the wakeup loop for the events''' 643 | 305 ident = self.ident 306 c_ident = "%s_Controller" % self.ident 307 308 code(''' 309/** \\file $ident.cc 310 * 311 * Auto generated C++ code started by $__file__:$__line__ 312 * Created by slicc definition of Module "${{self.short}}" --- 323 unchanged lines hidden (view full) --- 636} 637 638''') 639 code.write(path, "%s.cc" % c_ident) 640 641 def printCWakeup(self, path): 642 '''Output the wakeup loop for the events''' 643 |
644 code = code_formatter() | 644 code = self.symtab.codeFormatter() |
645 ident = self.ident 646 647 code(''' 648// Auto generated C++ code started by $__file__:$__line__ 649// ${ident}: ${{self.short}} 650 651#include "mem/ruby/common/Global.hh" 652#include "mem/ruby/slicc_interface/RubySlicc_includes.hh" --- 38 unchanged lines hidden (view full) --- 691} 692''') 693 694 code.write(path, "%s_Wakeup.cc" % self.ident) 695 696 def printCSwitch(self, path): 697 '''Output switch statement for transition table''' 698 | 645 ident = self.ident 646 647 code(''' 648// Auto generated C++ code started by $__file__:$__line__ 649// ${ident}: ${{self.short}} 650 651#include "mem/ruby/common/Global.hh" 652#include "mem/ruby/slicc_interface/RubySlicc_includes.hh" --- 38 unchanged lines hidden (view full) --- 691} 692''') 693 694 code.write(path, "%s_Wakeup.cc" % self.ident) 695 696 def printCSwitch(self, path): 697 '''Output switch statement for transition table''' 698 |
699 code = code_formatter() | 699 code = self.symtab.codeFormatter() |
700 ident = self.ident 701 702 code(''' 703// Auto generated C++ code started by $__file__:$__line__ 704// ${ident}: ${{self.short}} 705 706#include "mem/ruby/common/Global.hh" 707#include "mem/protocol/${ident}_Controller.hh" --- 65 unchanged lines hidden (view full) --- 773 774 # This map will allow suppress generating duplicate code 775 cases = orderdict() 776 777 for trans in self.transitions: 778 case_string = "%s_State_%s, %s_Event_%s" % \ 779 (self.ident, trans.state.ident, self.ident, trans.event.ident) 780 | 700 ident = self.ident 701 702 code(''' 703// Auto generated C++ code started by $__file__:$__line__ 704// ${ident}: ${{self.short}} 705 706#include "mem/ruby/common/Global.hh" 707#include "mem/protocol/${ident}_Controller.hh" --- 65 unchanged lines hidden (view full) --- 773 774 # This map will allow suppress generating duplicate code 775 cases = orderdict() 776 777 for trans in self.transitions: 778 case_string = "%s_State_%s, %s_Event_%s" % \ 779 (self.ident, trans.state.ident, self.ident, trans.event.ident) 780 |
781 case = code_formatter() | 781 case = self.symtab.codeFormatter() |
782 # Only set next_state if it changes 783 if trans.state != trans.nextState: 784 ns_ident = trans.nextState.ident 785 case('next_state = ${ident}_State_${ns_ident};') 786 787 actions = trans.actions 788 789 # Check for resources --- 58 unchanged lines hidden (view full) --- 848 ERROR_MSG(\"Invalid transition\"); 849 } 850 return TransitionResult_Valid; 851} 852''') 853 code.write(path, "%s_Transitions.cc" % self.ident) 854 855 def printProfilerHH(self, path): | 782 # Only set next_state if it changes 783 if trans.state != trans.nextState: 784 ns_ident = trans.nextState.ident 785 case('next_state = ${ident}_State_${ns_ident};') 786 787 actions = trans.actions 788 789 # Check for resources --- 58 unchanged lines hidden (view full) --- 848 ERROR_MSG(\"Invalid transition\"); 849 } 850 return TransitionResult_Valid; 851} 852''') 853 code.write(path, "%s_Transitions.cc" % self.ident) 854 855 def printProfilerHH(self, path): |
856 code = code_formatter() | 856 code = self.symtab.codeFormatter() |
857 ident = self.ident 858 859 code(''' 860// Auto generated C++ code started by $__file__:$__line__ 861// ${ident}: ${{self.short}} 862 863#ifndef ${ident}_PROFILER_H 864#define ${ident}_PROFILER_H --- 18 unchanged lines hidden (view full) --- 883 int m_version; 884}; 885 886#endif // ${ident}_PROFILER_H 887''') 888 code.write(path, "%s_Profiler.hh" % self.ident) 889 890 def printProfilerCC(self, path): | 857 ident = self.ident 858 859 code(''' 860// Auto generated C++ code started by $__file__:$__line__ 861// ${ident}: ${{self.short}} 862 863#ifndef ${ident}_PROFILER_H 864#define ${ident}_PROFILER_H --- 18 unchanged lines hidden (view full) --- 883 int m_version; 884}; 885 886#endif // ${ident}_PROFILER_H 887''') 888 code.write(path, "%s_Profiler.hh" % self.ident) 889 890 def printProfilerCC(self, path): |
891 code = code_formatter() | 891 code = self.symtab.codeFormatter() |
892 ident = self.ident 893 894 code(''' 895// Auto generated C++ code started by $__file__:$__line__ 896// ${ident}: ${{self.short}} 897 898#include "mem/protocol/${ident}_Profiler.hh" 899 --- 62 unchanged lines hidden (view full) --- 962''') 963 code.write(path, "%s_Profiler.cc" % self.ident) 964 965 # ************************** 966 # ******* HTML Files ******* 967 # ************************** 968 def frameRef(self, click_href, click_target, over_href, over_target_num, 969 text): | 892 ident = self.ident 893 894 code(''' 895// Auto generated C++ code started by $__file__:$__line__ 896// ${ident}: ${{self.short}} 897 898#include "mem/protocol/${ident}_Profiler.hh" 899 --- 62 unchanged lines hidden (view full) --- 962''') 963 code.write(path, "%s_Profiler.cc" % self.ident) 964 965 # ************************** 966 # ******* HTML Files ******* 967 # ************************** 968 def frameRef(self, click_href, click_target, over_href, over_target_num, 969 text): |
970 code = code_formatter(fix_newlines=False) | 970 code = self.symtab.codeFormatter(fix_newlines=False) |
971 code("""<A href=\"$click_href\" target=\"$click_target\" onMouseOver=\"if (parent.frames[$over_target_num].location != parent.location + '$over_href') { parent.frames[$over_target_num].location='$over_href' }\" >${{html.formatShorthand(text)}}</A>""") 972 return str(code) 973 974 def writeHTMLFiles(self, path): 975 # Create table with no row hilighted 976 self.printHTMLTransitions(path, None) 977 978 # Generate transition tables --- 14 unchanged lines hidden (view full) --- 993 994 # Generate event descriptions 995 for event in self.events.itervalues(): 996 name = "%s_Event_%s.html" % (self.ident, event.ident) 997 code = html.createSymbol(event, "Event") 998 code.write(path, name) 999 1000 def printHTMLTransitions(self, path, active_state): | 971 code("""<A href=\"$click_href\" target=\"$click_target\" onMouseOver=\"if (parent.frames[$over_target_num].location != parent.location + '$over_href') { parent.frames[$over_target_num].location='$over_href' }\" >${{html.formatShorthand(text)}}</A>""") 972 return str(code) 973 974 def writeHTMLFiles(self, path): 975 # Create table with no row hilighted 976 self.printHTMLTransitions(path, None) 977 978 # Generate transition tables --- 14 unchanged lines hidden (view full) --- 993 994 # Generate event descriptions 995 for event in self.events.itervalues(): 996 name = "%s_Event_%s.html" % (self.ident, event.ident) 997 code = html.createSymbol(event, "Event") 998 code.write(path, name) 999 1000 def printHTMLTransitions(self, path, active_state): |
1001 code = code_formatter() | 1001 code = self.symtab.codeFormatter() |
1002 1003 code(''' 1004<HTML><BODY link="blue" vlink="blue"> 1005 1006<H1 align="center">${{html.formatShorthand(self.short)}}: 1007''') 1008 code.indent() 1009 for i,machine in enumerate(self.symtab.getAllType(StateMachine)): --- 131 unchanged lines hidden --- | 1002 1003 code(''' 1004<HTML><BODY link="blue" vlink="blue"> 1005 1006<H1 align="center">${{html.formatShorthand(self.short)}}: 1007''') 1008 code.indent() 1009 for i,machine in enumerate(self.symtab.getAllType(StateMachine)): --- 131 unchanged lines hidden --- |