slicc: support for arbitrary DPRINTF flags (not just RubySlicc)
authorDavid Hashe <david.hashe@amd.com>
Mon, 20 Jul 2015 14:15:18 +0000 (09:15 -0500)
committerDavid Hashe <david.hashe@amd.com>
Mon, 20 Jul 2015 14:15:18 +0000 (09:15 -0500)
This patch allows DPRINTFs to be used in SLICC state machines similar to how
they are used by the rest of gem5.  Previously all DPRINTFs in the .sm files
had to use the RubySlicc flag.

src/mem/slicc/ast/FuncCallExprAST.py
src/mem/slicc/ast/VarExprAST.py
src/mem/slicc/symbols/StateMachine.py

index 49cd2e8e233d2e2cae5a5422bbcef7c3243b58e3..ad95bc884e2bfad0813932a3b293f43faeda1940 100644 (file)
@@ -1,5 +1,6 @@
 # Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
 # Copyright (c) 2009 The Hewlett-Packard Development Company
+# Copyright (c) 2013 Advanced Micro Devices, Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -53,6 +54,8 @@ class FuncCallExprAST(ExprAST):
             # handled differently. Hence the check whether or not
             # the str_list is empty.
 
+            dflag = "%s" % (self.exprs[0].name)
+            machine.addDebugFlag(dflag)
             format = "%s" % (self.exprs[1].inline())
             format_length = len(format)
             str_list = []
@@ -61,10 +64,11 @@ class FuncCallExprAST(ExprAST):
                 str_list.append("%s" % self.exprs[i].inline())
 
             if len(str_list) == 0:
-                code('DPRINTF(RubySlicc, "$0: $1")',
-                     self.exprs[0].location, format[2:format_length-2])
+                code('DPRINTF($0, "$1: $2")',
+                     dflag, self.exprs[0].location, format[2:format_length-2])
             else:
-                code('DPRINTF(RubySlicc, "$0: $1", $2)',
+                code('DPRINTF($0, "$1: $2", $3)',
+                     dflag,
                      self.exprs[0].location, format[2:format_length-2],
                      ', '.join(str_list))
 
index ac440bb68713e7ecc2e2d9cc2daf0aea8e84583a..19a619b370851604a2ccd84c767316e021104419 100644 (file)
@@ -1,5 +1,6 @@
 # Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
 # Copyright (c) 2009 The Hewlett-Packard Development Company
+# Copyright (c) 2013 Advanced Micro Devices, Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
index e90abaf440b58d2eff396f32963e9bdbbf97bb2e..425bd522d1e092838b5ac6a57a4b81ee78f68d98 100644 (file)
@@ -1,5 +1,6 @@
 # Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
 # Copyright (c) 2009 The Hewlett-Packard Development Company
+# Copyright (c) 2013 Advanced Micro Devices, Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -86,6 +87,9 @@ class StateMachine(Symbol):
         self.objects = []
         self.TBEType   = None
         self.EntryType = None
+        self.debug_flags = set()
+        self.debug_flags.add('RubyGenerated')
+        self.debug_flags.add('RubySlicc')
 
     def __repr__(self):
         return "[StateMachine: %s]" % self.ident
@@ -114,6 +118,9 @@ class StateMachine(Symbol):
 
         self.actions[action.ident] = action
 
+    def addDebugFlag(self, flag):
+        self.debug_flags.add(flag)
+
     def addRequestType(self, request_type):
         assert self.table is None
         self.request_types[request_type.ident] = request_type
@@ -270,6 +277,7 @@ class $py_ident(RubyController):
 #include "mem/ruby/common/Consumer.hh"
 #include "mem/ruby/slicc_interface/AbstractController.hh"
 #include "params/$c_ident.hh"
+
 ''')
 
         seen_types = set()
@@ -441,22 +449,26 @@ void unset_tbe(${{self.TBEType.c_ident}}*& m_tbe_ptr);
  */
 
 #include <sys/types.h>
-#include <typeinfo>
 #include <unistd.h>
 
 #include <cassert>
 #include <sstream>
 #include <string>
+#include <typeinfo>
 
 #include "base/compiler.hh"
 #include "base/cprintf.hh"
-#include "debug/RubyGenerated.hh"
-#include "debug/RubySlicc.hh"
+
+''')
+        for f in self.debug_flags:
+            code('#include "debug/${{f}}.hh"')
+        code('''
 #include "mem/protocol/${ident}_Controller.hh"
 #include "mem/protocol/${ident}_Event.hh"
 #include "mem/protocol/${ident}_State.hh"
 #include "mem/protocol/Types.hh"
 #include "mem/ruby/system/System.hh"
+
 ''')
         for include_path in includes:
             code('#include "${{include_path}}"')
@@ -1053,16 +1065,21 @@ $c_ident::functionalWriteBuffers(PacketPtr& pkt)
 // ${ident}: ${{self.short}}
 
 #include <sys/types.h>
-#include <typeinfo>
 #include <unistd.h>
 
 #include <cassert>
+#include <typeinfo>
 
 #include "base/misc.hh"
-#include "debug/RubySlicc.hh"
+
+''')
+        for f in self.debug_flags:
+            code('#include "debug/${{f}}.hh"')
+        code('''
 #include "mem/protocol/${ident}_Controller.hh"
 #include "mem/protocol/${ident}_Event.hh"
 #include "mem/protocol/${ident}_State.hh"
+
 ''')
 
         if outputRequest_types:
@@ -1071,6 +1088,7 @@ $c_ident::functionalWriteBuffers(PacketPtr& pkt)
         code('''
 #include "mem/protocol/Types.hh"
 #include "mem/ruby/system/System.hh"
+
 ''')