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(((*(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();