diff options
Diffstat (limited to 'src/mem/slicc/ast')
-rw-r--r-- | src/mem/slicc/ast/CheckStopSlotsStatementAST.py | 74 | ||||
-rw-r--r-- | src/mem/slicc/ast/ChipComponentAccessAST.py | 161 | ||||
-rw-r--r-- | src/mem/slicc/ast/FuncCallExprAST.py | 8 | ||||
-rw-r--r-- | src/mem/slicc/ast/ObjDeclAST.py | 6 | ||||
-rw-r--r-- | src/mem/slicc/ast/__init__.py | 2 |
5 files changed, 3 insertions, 248 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 * |