StallAndWaitStatementAST.py revision 11025
17635SBrad.Beckmann@amd.com# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 27635SBrad.Beckmann@amd.com# Copyright (c) 2009 The Hewlett-Packard Development Company 37635SBrad.Beckmann@amd.com# Copyright (c) 2010 Advanced Micro Devices, Inc. 47635SBrad.Beckmann@amd.com# All rights reserved. 57635SBrad.Beckmann@amd.com# 67635SBrad.Beckmann@amd.com# Redistribution and use in source and binary forms, with or without 77635SBrad.Beckmann@amd.com# modification, are permitted provided that the following conditions are 87635SBrad.Beckmann@amd.com# met: redistributions of source code must retain the above copyright 97635SBrad.Beckmann@amd.com# notice, this list of conditions and the following disclaimer; 107635SBrad.Beckmann@amd.com# redistributions in binary form must reproduce the above copyright 117635SBrad.Beckmann@amd.com# notice, this list of conditions and the following disclaimer in the 127635SBrad.Beckmann@amd.com# documentation and/or other materials provided with the distribution; 137635SBrad.Beckmann@amd.com# neither the name of the copyright holders nor the names of its 147635SBrad.Beckmann@amd.com# contributors may be used to endorse or promote products derived from 157635SBrad.Beckmann@amd.com# this software without specific prior written permission. 167635SBrad.Beckmann@amd.com# 177635SBrad.Beckmann@amd.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 187635SBrad.Beckmann@amd.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 197635SBrad.Beckmann@amd.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 207635SBrad.Beckmann@amd.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 217635SBrad.Beckmann@amd.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 227635SBrad.Beckmann@amd.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 237635SBrad.Beckmann@amd.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 247635SBrad.Beckmann@amd.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 257635SBrad.Beckmann@amd.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 267635SBrad.Beckmann@amd.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 277635SBrad.Beckmann@amd.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 287635SBrad.Beckmann@amd.com 297635SBrad.Beckmann@amd.comfrom slicc.ast.StatementAST import StatementAST 307635SBrad.Beckmann@amd.com 3112564Sgabeblack@google.comclass StallAndWaitStatementAST(StatementAST): 3212564Sgabeblack@google.com def __init__(self, slicc, in_port, address): 337635SBrad.Beckmann@amd.com super(StatementAST, self).__init__(slicc) 347635SBrad.Beckmann@amd.com self.in_port = in_port 357635SBrad.Beckmann@amd.com self.address = address 367635SBrad.Beckmann@amd.com 377635SBrad.Beckmann@amd.com def __repr__(self): 3811682Sandreas.hansson@arm.com return "[StallAndWaitStatementAst: %r]" % self.in_port 3911670Sandreas.hansson@arm.com 407635SBrad.Beckmann@amd.com def generate(self, code, return_type): 4111682Sandreas.hansson@arm.com self.in_port.assertType("InPort") 4211670Sandreas.hansson@arm.com self.address.assertType("Addr") 437635SBrad.Beckmann@amd.com 447635SBrad.Beckmann@amd.com in_port_code = self.in_port.var.code 457635SBrad.Beckmann@amd.com address_code = self.address.var.code 467635SBrad.Beckmann@amd.com code(''' 477635SBrad.Beckmann@amd.com stallBuffer(&($in_port_code), $address_code); 487635SBrad.Beckmann@amd.com $in_port_code.stallMessage($address_code); 497635SBrad.Beckmann@amd.com ''') 5011688Sandreas.hansson@arm.com