summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Hashe <david.hashe@amd.com>2015-07-20 09:15:18 -0500
committerDavid Hashe <david.hashe@amd.com>2015-07-20 09:15:18 -0500
commit3454a4a36e927f483b36fa66baabe2c85ecf3ddc (patch)
tree3afa6cb6b5626f63418df648918e2832492a985c
parent93242399227ba2dce443dee108b57f660b39b971 (diff)
downloadgem5-3454a4a36e927f483b36fa66baabe2c85ecf3ddc.tar.xz
slicc: support for arbitrary DPRINTF flags (not just RubySlicc)
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.
-rw-r--r--src/mem/slicc/ast/FuncCallExprAST.py10
-rw-r--r--src/mem/slicc/ast/VarExprAST.py1
-rw-r--r--src/mem/slicc/symbols/StateMachine.py28
3 files changed, 31 insertions, 8 deletions
diff --git a/src/mem/slicc/ast/FuncCallExprAST.py b/src/mem/slicc/ast/FuncCallExprAST.py
index 49cd2e8e2..ad95bc884 100644
--- a/src/mem/slicc/ast/FuncCallExprAST.py
+++ b/src/mem/slicc/ast/FuncCallExprAST.py
@@ -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))
diff --git a/src/mem/slicc/ast/VarExprAST.py b/src/mem/slicc/ast/VarExprAST.py
index ac440bb68..19a619b37 100644
--- a/src/mem/slicc/ast/VarExprAST.py
+++ b/src/mem/slicc/ast/VarExprAST.py
@@ -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
diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py
index e90abaf44..425bd522d 100644
--- a/src/mem/slicc/symbols/StateMachine.py
+++ b/src/mem/slicc/symbols/StateMachine.py
@@ -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"
+
''')