changeset 79413d1ec307 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=79413d1ec307
description:
        slicc: Change the code generation so that the generated code is easier 
to read

diffstat:

6 files changed, 258 insertions(+), 119 deletions(-)
src/mem/slicc/ast/AST.py              |   10 +
src/mem/slicc/ast/PeekStatementAST.py |    4 
src/mem/slicc/generate/html.py        |    8 -
src/mem/slicc/symbols/Func.py         |    3 
src/mem/slicc/symbols/StateMachine.py |  220 ++++++++++++++++++++++-----------
src/mem/slicc/symbols/Type.py         |  132 +++++++++++++------

diffs (truncated from 952 to 300 lines):

diff -r 77c9c4d5007d -r 79413d1ec307 src/mem/slicc/ast/AST.py
--- a/src/mem/slicc/ast/AST.py  Fri Mar 12 17:31:08 2010 -0800
+++ b/src/mem/slicc/ast/AST.py  Fri Mar 12 18:42:56 2010 -0800
@@ -54,8 +54,14 @@
             message = message % args
         code = self.slicc.codeFormatter()
         code('''
-cerr << "Runtime Error at ${{self.location}}, Ruby Time: " << 
g_eventQueue_ptr->getTime() << ": "<< $message << ", PID: " << getpid() << endl;
-char c; cerr << "press return to continue." << endl; cin.get(c); abort();
+char c;
+cerr << "Runtime Error at ${{self.location}}, Ruby Time: "
+     << g_eventQueue_ptr->getTime() << ": "
+     << $message
+     << ", PID: " << getpid() << endl
+     << "press return to continue." << endl;
+cin.get(c);
+abort();
 ''')
 
         return code
diff -r 77c9c4d5007d -r 79413d1ec307 src/mem/slicc/ast/PeekStatementAST.py
--- a/src/mem/slicc/ast/PeekStatementAST.py     Fri Mar 12 17:31:08 2010 -0800
+++ b/src/mem/slicc/ast/PeekStatementAST.py     Fri Mar 12 18:42:56 2010 -0800
@@ -59,10 +59,12 @@
         qcode = self.queue_name.var.code
         code('''
 {
+    // Declare message
     const $mtid* in_msg_ptr;
     in_msg_ptr = dynamic_cast<const $mtid *>(($qcode).${{self.method}}());
-    assert(in_msg_ptr != NULL);
+    assert(in_msg_ptr != NULL); // Check the cast result
 ''')
+
         if self.pairs.has_key("block_on"):
             address_field = self.pairs['block_on']
             code('''
diff -r 77c9c4d5007d -r 79413d1ec307 src/mem/slicc/generate/html.py
--- a/src/mem/slicc/generate/html.py    Fri Mar 12 17:31:08 2010 -0800
+++ b/src/mem/slicc/generate/html.py    Fri Mar 12 18:42:56 2010 -0800
@@ -29,9 +29,11 @@
 
 def createSymbol(symbol, title):
     code = code_formatter()
-    code('''<HTML><BODY><BIG>
-$title:
-${{formatShorthand(symbol.short)}} - ${{symbol.desc}}</BIG></BODY></HTML>''')
+    code('''
+<HTML><BODY><BIG>
+$title: ${{formatShorthand(symbol.short)}} - ${{symbol.desc}}
+</BIG></BODY></HTML>
+''')
     return code
 
 def formatShorthand(short):
diff -r 77c9c4d5007d -r 79413d1ec307 src/mem/slicc/symbols/Func.py
--- a/src/mem/slicc/symbols/Func.py     Fri Mar 12 17:31:08 2010 -0800
+++ b/src/mem/slicc/symbols/Func.py     Fri Mar 12 18:42:56 2010 -0800
@@ -95,7 +95,8 @@
         params = ', '.join(self.param_strings)
 
         code('''
-$return_type ${klass}::${{self.c_ident}}($params)
+$return_type
+${klass}::${{self.c_ident}}($params)
 {
 ${{self.body}}
 }
diff -r 77c9c4d5007d -r 79413d1ec307 src/mem/slicc/symbols/StateMachine.py
--- a/src/mem/slicc/symbols/StateMachine.py     Fri Mar 12 17:31:08 2010 -0800
+++ b/src/mem/slicc/symbols/StateMachine.py     Fri Mar 12 18:42:56 2010 -0800
@@ -187,14 +187,14 @@
         self.message_buffer_names = []
 
         code('''
-/** \\file $ident.hh
+/** \\file $c_ident.hh
  *
  * Auto generated C++ code started by $__file__:$__line__
  * Created by slicc definition of Module "${{self.short}}"
  */
 
-#ifndef ${ident}_CONTROLLER_H
-#define ${ident}_CONTROLLER_H
+#ifndef __${ident}_CONTROLLER_HH__
+#define __${ident}_CONTROLLER_HH__
 
 #include <iostream>
 #include <sstream>
@@ -220,9 +220,11 @@
         code('''
 extern std::stringstream ${ident}_transitionComment;
 
-class $c_ident : public AbstractController {
-#ifdef CHECK_COHERENCE
-#endif /* CHECK_COHERENCE */
+class $c_ident : public AbstractController
+{
+// the coherence checker needs to call isBlockExclusive() and isBlockShared()
+// making the Chip a friend class is an easy way to do this for now
+
 public:
     typedef ${c_ident}Params Params;
     $c_ident(const Params *p);
@@ -241,6 +243,7 @@
     void clearStats();
     void blockOnQueue(Address addr, MessageBuffer* port);
     void unblock(Address addr);
+
 private:
 ''')
 
@@ -255,8 +258,15 @@
         code('''
 int m_number_of_TBEs;
 
-TransitionResult doTransition(${ident}_Event event, ${ident}_State state, 
const Address& addr); // in ${ident}_Transitions.cc
-TransitionResult doTransitionWorker(${ident}_Event event, ${ident}_State 
state, ${ident}_State& next_state, const Address& addr); // in 
${ident}_Transitions.cc
+TransitionResult doTransition(${ident}_Event event,
+                              ${ident}_State state,
+                              const Address& addr);
+
+TransitionResult doTransitionWorker(${ident}_Event event,
+                                    ${ident}_State state,
+                                    ${ident}_State& next_state,
+                                    const Address& addr);
+
 std::string m_name;
 int m_transitions_per_cycle;
 int m_buffer_size;
@@ -269,6 +279,7 @@
 map< Address, MessageBuffer* > m_block_map;
 ${ident}_Profiler s_profiler;
 static int m_num_controllers;
+
 // Internal functions
 ''')
 
@@ -288,7 +299,7 @@
         # the controller internal variables
         code('''
 
-// Object
+// Objects
 ''')
         for var in self.objects:
             th = var.get("template_hack", "")
@@ -299,7 +310,7 @@
 
         code.dedent()
         code('};')
-        code('#endif // ${ident}_CONTROLLER_H')
+        code('#endif // __${ident}_CONTROLLER_H__')
         code.write(path, '%s.hh' % c_ident)
 
     def printControllerCC(self, path):
@@ -310,7 +321,7 @@
         c_ident = "%s_Controller" % self.ident
 
         code('''
-/** \\file $ident.cc
+/** \\file $c_ident.cc
  *
  * Auto generated C++ code started by $__file__:$__line__
  * Created by slicc definition of Module "${{self.short}}"
@@ -344,11 +355,12 @@
     return new $c_ident(this);
 }
 
-
 int $c_ident::m_num_controllers = 0;
 
+// for adding information to the protocol debug trace
 stringstream ${ident}_transitionComment;
 #define APPEND_TRANSITION_COMMENT(str) (${ident}_transitionComment << str)
+
 /** \\brief constructor */
 $c_ident::$c_ident(const Params *p)
     : AbstractController(p)
@@ -411,13 +423,18 @@
         code('''
 }
 
-void $c_ident::init()
+void
+$c_ident::init()
 {
+    MachineType machine_type;
+    int base;
+
     m_machineID.type = MachineType_${ident};
     m_machineID.num = m_version;
 
-    // Objects
+    // initialize objects
     s_profiler.setVersion(m_version);
+
 ''')
 
         code.indent()
@@ -445,18 +462,16 @@
                                 args = "m_number_of_TBEs"
                             else:
                                 args = var.get("constructor_hack", "")
-                            args = "(%s)" % args
 
-                        code('$expr$args;')
-                    else:
-                        code(';')
+                        code('$expr($args);')
 
                     code('assert($vid != NULL);')
 
                     if "default" in var:
-                        code('(*$vid) = ${{var["default"]}}; // Object 
default')
+                        code('*$vid = ${{var["default"]}}; // Object default')
                     elif "default" in vtype:
-                        code('(*$vid) = ${{vtype["default"]}}; // Type 
${{vtype.ident}} default')
+                        comment = "Type %s default" % vtype.ident
+                        code('*$vid = ${{vtype["default"]}}; // $comment')
 
                     # Set ordering
                     if "ordered" in var and "trigger_queue" not in var:
@@ -480,7 +495,9 @@
 
                 assert var.machine is not None
                 code('''
-$vid = 
m_net_ptr->get${network}NetQueue(m_version+MachineType_base_number(string_to_MachineType("${{var.machine.ident}}")),
 $ordered, $vnet);
+machine_type = string_to_MachineType("${{var.machine.ident}}");
+base = MachineType_base_number(machine_type);
+$vid = m_net_ptr->get${network}NetQueue(m_version + base, $ordered, $vnet);
 ''')
 
                 code('assert($vid != NULL);')
@@ -508,7 +525,10 @@
 ''')
 
                 # set description (may be overriden later by port def)
-                code('$vid->setDescription("[Version " + 
int_to_string(m_version) + ", ${ident}, name=${{var.c_ident}}]");')
+                code('''
+$vid->setDescription("[Version " + int_to_string(m_version) + ", ${ident}, 
name=${{var.c_ident}}]");
+
+''')
 
         # Set the queue consumers
         code.insert_newline()
@@ -553,51 +573,77 @@
             mq_ident = "NULL"
 
         code('''
-int $c_ident::getNumControllers() {
+int
+$c_ident::getNumControllers()
+{
     return m_num_controllers;
 }
 
-MessageBuffer* $c_ident::getMandatoryQueue() const {
+MessageBuffer*
+$c_ident::getMandatoryQueue() const
+{
     return $mq_ident;
 }
 
-const int & $c_ident::getVersion() const{
+const int &
+$c_ident::getVersion() const
+{
     return m_version;
 }
 
-const string $c_ident::toString() const{
+const string
+$c_ident::toString() const
+{
     return "$c_ident";
 }
 
-const string $c_ident::getName() const{
+const string
+$c_ident::getName() const
+{
     return m_name;
 }
-const MachineType $c_ident::getMachineType() const{
+
+const MachineType
+$c_ident::getMachineType() const
+{
     return MachineType_${ident};
 }
 
-void $c_ident::blockOnQueue(Address addr, MessageBuffer* port) {
+void
+$c_ident::blockOnQueue(Address addr, MessageBuffer* port)
+{
     m_is_blocking = true;
     m_block_map[addr] = port;
 }
-void $c_ident::unblock(Address addr) {
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to