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