summaryrefslogtreecommitdiff
path: root/src/mem/slicc
diff options
context:
space:
mode:
authorNilay Vaish <nilay@cs.wisc.edu>2012-10-02 14:35:43 -0500
committerNilay Vaish <nilay@cs.wisc.edu>2012-10-02 14:35:43 -0500
commit73eafe484992d488b88c14d94b8909dc488b067b (patch)
treef865555f3aa02cc5ad16c5c6100cb9557176d2a4 /src/mem/slicc
parent3c9d3b16d8aed879b1db682b1a7fe64f64b9cd7e (diff)
downloadgem5-73eafe484992d488b88c14d94b8909dc488b067b.tar.xz
ruby: remove some unused things in slicc
This patch removes the parts of slicc that were required for multi-chip protocols. Going ahead, it seems multi-chip protocols would be implemented by playing with the network itself.
Diffstat (limited to 'src/mem/slicc')
-rw-r--r--src/mem/slicc/ast/CheckStopSlotsStatementAST.py74
-rw-r--r--src/mem/slicc/ast/ChipComponentAccessAST.py161
-rw-r--r--src/mem/slicc/ast/FuncCallExprAST.py8
-rw-r--r--src/mem/slicc/ast/ObjDeclAST.py6
-rw-r--r--src/mem/slicc/ast/__init__.py2
-rw-r--r--src/mem/slicc/parser.py27
-rw-r--r--src/mem/slicc/symbols/Func.py2
-rw-r--r--src/mem/slicc/symbols/StateMachine.py5
8 files changed, 5 insertions, 280 deletions
diff --git a/src/mem/slicc/ast/CheckStopSlotsStatementAST.py b/src/mem/slicc/ast/CheckStopSlotsStatementAST.py
deleted file mode 100644
index 9320aebac..000000000
--- a/src/mem/slicc/ast/CheckStopSlotsStatementAST.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
-# Copyright (c) 2009 The Hewlett-Packard Development Company
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-from slicc.ast.StatementAST import StatementAST
-
-class CheckStopSlotsStatementAST(StatementAST):
- def __init__(self, slicc, variable, condStr, bankStr):
- super(StatementAST, self).__init__(slicc)
- self.variable = variable
- self.condStr = condStr
- self.bankStr = bankStr
-
- def __repr__(self):
- return "[CheckStopSlotsStatementAst: %r]" % self.variable
-
- def generate(self, code, return_type):
- # Make sure the variable is valid
- self.variable.var
-
- def findResources(self, resources):
- var = self.variable.var
- assert var not in self.resources
-
- check_code = self.slicc.codeFormatter()
- if self.condStr == "((*in_msg_ptr)).m_isOnChipSearch":
- check_code('''
-const Response9Msg* in_msg_ptr =
- dynamic_cast<const Response9Msg*>(((*(m_chip_ptr.m_L2Cache_responseToL2Cache9_vec[m_version]))).peek());
-assert(in_msg_ptr != NULL);
-''')
-
- vcode = self.variable.inline()
- bank = self.bankStr
- cond = self.condStr
-
- check_code('''
-if ($cond) {
- auto pos = m_chip_ptr.m_DNUCAmover_ptr->getBankPos($bank)
-
- if (!$vcode.isDisableSPossible(pos)) {
- return TransitionResult_ResourceStall;
- }
-} else {
- if (!$vcode.isDisableFPossible(pos)) {
- return TransitionResult_ResourceStall;
- }
-}
-''')
-
- resources[var] = str(check_code)
diff --git a/src/mem/slicc/ast/ChipComponentAccessAST.py b/src/mem/slicc/ast/ChipComponentAccessAST.py
deleted file mode 100644
index bbb1b61e9..000000000
--- a/src/mem/slicc/ast/ChipComponentAccessAST.py
+++ /dev/null
@@ -1,161 +0,0 @@
-# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
-# Copyright (c) 2009 The Hewlett-Packard Development Company
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import re
-
-from slicc.ast.ExprAST import ExprAST
-from slicc.symbols import Type
-
-class ChipComponentAccessAST(ExprAST):
- def __init__(self, slicc, machine, mach_version, component):
- super(ChipComponentAccessAST, self).__init__(slicc)
- self.mach_var = machine
- self.comp_var = component
- self.mach_ver_expr = mach_version
-
- def __repr__(self):
- return "[ChipAccessExpr: %r]" % self.expr_vec
-
- def generate(self, code):
- void_type = self.symtab.find("void", Type)
-
- mname = self.mach_var.name
- cname = self.comp_var.name
- var = self.symtab.machine_components[mname][cname]
-
- vcode = str(var.code)
-
- if self.chip_ver_expr is not None:
- # replace self.chip with specified chip
- gcode = "g_system.getChip(%s)" % self.chip_ver_expr.inline()
- vcode = re.sub("m_chip", gcode, vcode)
-
- # replace default "m_version" with the version we really want
- gcode = "(%s)" % self.mach_ver_expr.inline()
- vcode = re.sub("m_version", gcode, vcode)
-
- return_type, gcode = self.generate_access(var)
- code("($vcode)$gcode")
- return return_type
-
-class ChipMethodAccessAST(ChipComponentAccessAST):
- def __init__(self, slicc, chip_version, machine, mach_version, component,
- proc_name, expr_vec):
- s = super(ChipMethodAccessAST, self)
- s.__init__(slicc, machine, mach_version, component)
-
- self.chip_ver_expr = chip_version
- self.expr_vec = expr_vec
- self.proc_name = proc_name
-
- def generate_access(self, var):
- # generate code
- paramTypes = []
- gcode = []
- for expr in self.expr_vec:
- t,c = expr.generate()
- paramTypes.append(t)
- gcode.append(c)
-
- methodId = var.type.methodId(self.proc_name, paramTypes)
-
- # Verify that this is a method of the object
- if not var.type.methodExist(methodId):
- self.error("%s: Type '%s' does not have a method '%s'" % \
- ("Invalid method call", var.type, methodId))
-
- expected_size = len(var.type.methodParamType(methodId))
- if len(self.expr_vec) != expected_size:
- # Right number of parameters
- self.error("Wrong number of parameters for function name: " +\
- "'%s', expected: %d, actual: %d",
- self.proc_name, expected_size, len(self.expr_vec))
-
- for expr,expected,actual in zip(self.expr_vec,
- var.type.methodParamType(methodId),
- paramTypes):
- # Check the types of the parameter
- if actual != expected:
- expr.error("Type mismatch: expected: %s actual: %s",
- expected, actual)
-
- # method call
- code = ".%s(%s)" % (self.proc_name, ', '.join(gcode))
-
- # Return the return type of the method
- return var.type.methodReturnType(methodId), code
-
-class LocalChipMethodAST(ChipMethodAccessAST):
- # method call from local chip
- def __init__(self, slicc, machine, mach_version, component, proc_name,
- expr_vec):
- s = super(LocalChipMethodAST, self)
- s.__init__(slicc, None, machine, mach_version, component, proc_name,
- expr_vec)
-
-class SpecifiedChipMethodAST(ChipMethodAccessAST):
- # method call from specified chip
- def __init__(self, slicc, chip_version, machine, mach_version, component,
- proc_name, expr_vec):
- s = super(SpecifiedChipMethodAST, self)
- s.__init__(slicc, chip_version, machine, mach_version, component,
- proc_name, expr_vec)
-
-class ChipMemberAccessAST(ChipComponentAccessAST):
- # member access from specified chip
- def __init__(self, chip_version, machine, mach_version, component,
- field_name):
- s = super(ChipMemberAccessAST, self)
- s.__init__(slicc, machine, mach_version, component)
-
- self.chip_ver_expr = chip_version
- self.field_name = field_name
-
- def generate_access(self, var):
- # Verify that this is a valid field name for this type
- if not var.type.dataMemberExist(self.field_name):
- self.error("Invalid object field: " +\
- "Type '%s' does not have data member %s",
- var.type, self.field_name)
-
- code += ").m_%s" % self.field_name
-
- return var.type.dataMemberType(self.field_name), code
-
-class LocalChipMemberAST(ChipMemberAccessAST):
- # member access from local chip
- def __init__(self, slicc, machine, mach_version, component, field_name):
- s = super(LocalChipMemberAST, self)
- s.__init__(slicc, None, machine, mach_version, component, field_name)
-
-class SpecifiedChipMemberAST(ChipMemberAccessAST):
- # member access from specified chip
- def __init__(self, chip_version, machine, mach_version, component,
- field_name):
- s = super(SpecifiedChipMemberAST, self)
- s.__init__(slicc, chip_version, machine, mach_version, component,
- field_name)
diff --git a/src/mem/slicc/ast/FuncCallExprAST.py b/src/mem/slicc/ast/FuncCallExprAST.py
index 1438934e6..b0ab931de 100644
--- a/src/mem/slicc/ast/FuncCallExprAST.py
+++ b/src/mem/slicc/ast/FuncCallExprAST.py
@@ -206,12 +206,8 @@ if (!(${{cvec[0]}})) {
else:
# Normal function
-
- # if the func is internal to the chip but not the machine
- # then it can only be accessed through the chip pointer
- internal = ""
if "external" not in func and not func.isInternalMachineFunc:
- internal = "m_chip_ptr->"
+ self.error("Invalid function")
params = ""
first_param = True
@@ -225,7 +221,7 @@ if (!(${{cvec[0]}})) {
params += str(param_code);
fix = code.nofix()
- code('(${internal}${{func.c_ident}}($params))')
+ code('(${{func.c_ident}}($params))')
code.fix(fix)
return func.return_type
diff --git a/src/mem/slicc/ast/ObjDeclAST.py b/src/mem/slicc/ast/ObjDeclAST.py
index 8a967f7b8..389098cd9 100644
--- a/src/mem/slicc/ast/ObjDeclAST.py
+++ b/src/mem/slicc/ast/ObjDeclAST.py
@@ -41,8 +41,6 @@ class ObjDeclAST(DeclAST):
def generate(self):
machineComponentSym = False
- self["chip_object"] = "yes"
-
if "hack" in self:
warning("'hack=' is now deprecated")
@@ -70,9 +68,7 @@ class ObjDeclAST(DeclAST):
# FIXME : should all use accessors here to avoid public member
# variables
- if self.ident == "id":
- c_code = "m_chip_ptr.getID()"
- elif self.ident == "version":
+ if self.ident == "version":
c_code = "m_version"
elif self.ident == "machineID":
c_code = "m_machineID"
diff --git a/src/mem/slicc/ast/__init__.py b/src/mem/slicc/ast/__init__.py
index 2fd1b12b6..c2baea8df 100644
--- a/src/mem/slicc/ast/__init__.py
+++ b/src/mem/slicc/ast/__init__.py
@@ -30,8 +30,6 @@ from slicc.ast.AST import *
from slicc.ast.ActionDeclAST import *
from slicc.ast.AssignStatementAST import *
from slicc.ast.CheckAllocateStatementAST import *
-from slicc.ast.CheckStopSlotsStatementAST import *
-from slicc.ast.ChipComponentAccessAST import *
from slicc.ast.CopyHeadStatementAST import *
from slicc.ast.DeclAST import *
from slicc.ast.DeclListAST import *
diff --git a/src/mem/slicc/parser.py b/src/mem/slicc/parser.py
index 77ac4de56..6b6a1aaef 100644
--- a/src/mem/slicc/parser.py
+++ b/src/mem/slicc/parser.py
@@ -121,8 +121,6 @@ class SLICC(Grammar):
'is_invalid' : 'IS_INVALID',
'else' : 'ELSE',
'return' : 'RETURN',
- 'THIS' : 'THIS',
- 'CHIP' : 'CHIP',
'void' : 'VOID',
'new' : 'NEW',
'OOD' : 'OOD',
@@ -619,27 +617,6 @@ class SLICC(Grammar):
"aexpr : OOD"
p[0] = ast.OodAST(self)
- # globally access a local chip component and call a method
- def p_expr__local_chip_method(self, p):
- "aexpr : THIS DOT var '[' expr ']' DOT var DOT ident '(' exprs ')'"
- p[0] = ast.LocalChipMethodAST(self, p[3], p[5], p[8], p[10], p[12])
-
- # globally access a local chip component and access a data member
- def p_expr__local_chip_member(self, p):
- "aexpr : THIS DOT var '[' expr ']' DOT var DOT field"
- p[0] = ast.LocalChipMemberAST(self, p[3], p[5], p[8], p[10])
-
- # globally access a specified chip component and call a method
- def p_expr__specified_chip_method(self, p):
- "aexpr : CHIP '[' expr ']' DOT var '[' expr ']' DOT var DOT ident '(' exprs ')'"
- p[0] = ast.SpecifiedChipMethodAST(self, p[3], p[6], p[8], p[11], p[13],
- p[15])
-
- # globally access a specified chip component and access a data member
- def p_expr__specified_chip_member(self, p):
- "aexpr : CHIP '[' expr ']' DOT var '[' expr ']' DOT var DOT field"
- p[0] = ast.SpecifiedChipMemberAST(self, p[3], p[6], p[8], p[11], p[13])
-
def p_expr__member(self, p):
"aexpr : aexpr DOT ident"
p[0] = ast.MemberExprAST(self, p[1], p[3])
@@ -718,7 +695,3 @@ class SLICC(Grammar):
def p_var(self, p):
"var : ident"
p[0] = ast.VarExprAST(self, p[1])
-
- def p_field(self, p):
- "field : ident"
- p[0] = p[1]
diff --git a/src/mem/slicc/symbols/Func.py b/src/mem/slicc/symbols/Func.py
index ebbc5fe14..8e137d044 100644
--- a/src/mem/slicc/symbols/Func.py
+++ b/src/mem/slicc/symbols/Func.py
@@ -84,7 +84,7 @@ class Func(Symbol):
if self.isInternalMachineFunc:
klass = "%s_Controller" % self.machineStr
else:
- klass = "Chip"
+ self.error("No class found for the function %s" % self.ident)
params = ', '.join(self.param_strings)
diff --git a/src/mem/slicc/symbols/StateMachine.py b/src/mem/slicc/symbols/StateMachine.py
index 43153c773..2b1e2a2b5 100644
--- a/src/mem/slicc/symbols/StateMachine.py
+++ b/src/mem/slicc/symbols/StateMachine.py
@@ -246,10 +246,7 @@ extern std::stringstream ${ident}_transitionComment;
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:
+ public:
typedef ${c_ident}Params Params;
$c_ident(const Params *p);
static int getNumControllers();