summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNilay Vaish <nilay@cs.wisc.edu>2011-07-27 20:20:53 -0500
committerNilay Vaish <nilay@cs.wisc.edu>2011-07-27 20:20:53 -0500
commitb4152e250da1999d7e495d5501f029f5370e01ed (patch)
tree8bf2afa6f6ecdf8a266f4000c4fd6f217ed4a4cf
parent00ad4eb8ce997466e1d537b0f0a3911de7842b4c (diff)
downloadgem5-b4152e250da1999d7e495d5501f029f5370e01ed.tar.xz
SLICC: Put functions of a controller in its .cc file
Currently, functions associated with a controller go into separate files. This patch puts all the functions in the controller's .cc file. This should hopefully take away some time from compilation.
-rw-r--r--src/mem/slicc/ast/FuncDeclAST.py9
-rw-r--r--src/mem/slicc/symbols/Func.py22
-rw-r--r--src/mem/slicc/symbols/StateMachine.py6
3 files changed, 9 insertions, 28 deletions
diff --git a/src/mem/slicc/ast/FuncDeclAST.py b/src/mem/slicc/ast/FuncDeclAST.py
index a87d61119..54b0f2c59 100644
--- a/src/mem/slicc/ast/FuncDeclAST.py
+++ b/src/mem/slicc/ast/FuncDeclAST.py
@@ -41,14 +41,7 @@ class FuncDeclAST(DeclAST):
return "[FuncDecl: %s]" % self.ident
def files(self, parent=None):
- if "external" in self or self.statements is None:
- return set()
-
- if parent:
- ident = "%s_%s" % (parent, self.ident)
- else:
- ident = self.ident
- return set(("%s.cc" % ident,))
+ return set()
def generate(self):
types = []
diff --git a/src/mem/slicc/symbols/Func.py b/src/mem/slicc/symbols/Func.py
index f0b92cdc9..771144efd 100644
--- a/src/mem/slicc/symbols/Func.py
+++ b/src/mem/slicc/symbols/Func.py
@@ -64,24 +64,15 @@ class Func(Symbol):
", ".join(self.param_strings))
def writeCodeFiles(self, path):
+ return
+
+ def generateCode(self):
'''This write a function of object Chip'''
if "external" in self:
- return
+ return ""
code = self.symtab.codeFormatter()
- # Header
- code('''
-/** Auto generated C++ code started by $__file__:$__line__ */
-
-#include "debug/RubySlicc.hh"
-#include "mem/protocol/Types.hh"
-''')
-
- if self.isInternalMachineFunc:
- code('#include "mem/protocol/${{self.machineStr}}_Controller.hh"')
-
- code('using namespace std;')
# Generate function header
void_type = self.symtab.find("void", Type)
return_type = self.return_type.c_ident
@@ -104,9 +95,6 @@ ${klass}::${{self.c_ident}}($params)
${{self.body}}
}
''')
- if self.isInternalMachineFunc:
- code.write(path, "%s_%s.cc" % (self.machineStr,self.c_ident))
- else:
- code.write(path, "%s.cc" % self.c_ident)
+ return str(code)
__all__ = [ "Func" ]
diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py
index a3a95002d..42249ab7a 100644
--- a/src/mem/slicc/symbols/StateMachine.py
+++ b/src/mem/slicc/symbols/StateMachine.py
@@ -168,9 +168,6 @@ class StateMachine(Symbol):
self.printProfileDumperCC(path)
self.printProfileDumperHH(path)
- for func in self.functions:
- func.writeCodeFiles(path)
-
def printControllerPython(self, path):
code = self.symtab.codeFormatter()
ident = self.ident
@@ -945,6 +942,9 @@ $c_ident::${{action.ident}}(const Address& addr)
}
''')
+ for func in self.functions:
+ code(func.generateCode())
+
code.write(path, "%s.cc" % c_ident)
def printCWakeup(self, path):