From 3f68884c0e432cdc241ed0442e19ade0d74aa6f4 Mon Sep 17 00:00:00 2001 From: Tony Gutierrez Date: Mon, 20 Jul 2015 09:15:18 -0500 Subject: ruby: slicc: remove support for single machine, multiple types This patch is imported from reviewboard patch 2550 by Nilay. It was possible to specify multiple machine types with a single state machine. This seems unnecessary and is being removed. --- src/mem/protocol/MOESI_hammer-cache.sm | 2 +- src/mem/slicc/ast/MachineAST.py | 23 ++++++++--------------- src/mem/slicc/parser.py | 4 ++-- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/mem/protocol/MOESI_hammer-cache.sm b/src/mem/protocol/MOESI_hammer-cache.sm index f5a1d28c3..d4e7d7e3c 100644 --- a/src/mem/protocol/MOESI_hammer-cache.sm +++ b/src/mem/protocol/MOESI_hammer-cache.sm @@ -33,7 +33,7 @@ * Brad Beckmann */ -machine({L1Cache, L2Cache}, "AMD Hammer-like protocol") +machine(L1Cache, "AMD Hammer-like protocol") : Sequencer * sequencer; CacheMemory * L1Icache; CacheMemory * L1Dcache; diff --git a/src/mem/slicc/ast/MachineAST.py b/src/mem/slicc/ast/MachineAST.py index 5d14f7688..4487b094e 100644 --- a/src/mem/slicc/ast/MachineAST.py +++ b/src/mem/slicc/ast/MachineAST.py @@ -29,11 +29,10 @@ from slicc.ast.DeclAST import DeclAST from slicc.symbols import StateMachine, Type class MachineAST(DeclAST): - def __init__(self, slicc, idents, pairs_ast, config_parameters, decls): + def __init__(self, slicc, ident, pairs_ast, config_parameters, decls): super(MachineAST, self).__init__(slicc, pairs_ast) - self.ident = idents[0] - self.machine_types = idents + self.ident = ident self.pairs_ast = pairs_ast self.config_parameters = config_parameters self.decls = decls @@ -71,19 +70,13 @@ class MachineAST(DeclAST): self.symtab.popFrame() def findMachines(self): - # Add to MachineType enumeration - for mtype in self.machine_types: - machine_type = self.symtab.find("MachineType", Type) - pairs = self.pairs_ast.pairs + mtype = self.ident + machine_type = self.symtab.find("MachineType", Type) + pairs = self.pairs_ast.pairs - if mtype == self.ident: - pairs["Primary"] = True - else: - pairs["Primary"] = False - - if not machine_type.addEnum(mtype, pairs): - self.error("Duplicate machine name: %s:%s" % ( - machine_type, mtype)) + pairs["Primary"] = True + if not machine_type.addEnum(mtype, pairs): + self.error("Duplicate machine name: %s:%s" % (machine_type, mtype)) # Generate code for all the internal decls self.decls.findMachines() diff --git a/src/mem/slicc/parser.py b/src/mem/slicc/parser.py index 49177345d..364bb92f7 100644 --- a/src/mem/slicc/parser.py +++ b/src/mem/slicc/parser.py @@ -259,11 +259,11 @@ class SLICC(Grammar): p[0] = self.parse_file(filename) def p_decl__machine0(self, p): - "decl : MACHINE '(' idents ')' ':' obj_decls '{' decls '}'" + "decl : MACHINE '(' ident ')' ':' obj_decls '{' decls '}'" p[0] = ast.MachineAST(self, p[3], [], p[7], p[9]) def p_decl__machine1(self, p): - "decl : MACHINE '(' idents pairs ')' ':' obj_decls '{' decls '}'" + "decl : MACHINE '(' ident pairs ')' ':' obj_decls '{' decls '}'" p[0] = ast.MachineAST(self, p[3], p[4], p[7], p[9]) def p_decl__action(self, p): -- cgit v1.2.3