micro_asm_test.py revision 4483
14483Sgblack@eecs.umich.edu# Copyright (c) 2007 The Regents of The University of Michigan 24483Sgblack@eecs.umich.edu# All rights reserved. 34483Sgblack@eecs.umich.edu# 44483Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without 54483Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are 64483Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright 74483Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer; 84483Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright 94483Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the 104483Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution; 114483Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its 124483Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from 134483Sgblack@eecs.umich.edu# this software without specific prior written permission. 144483Sgblack@eecs.umich.edu# 154483Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 164483Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 174483Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 184483Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 194483Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 204483Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 214483Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 224483Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 234483Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 244483Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 254483Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 264483Sgblack@eecs.umich.edu# 274483Sgblack@eecs.umich.edu# Authors: Gabe Black 284483Sgblack@eecs.umich.edu 294483Sgblack@eecs.umich.edufrom micro_asm import MicroAssembler, Macroop, Rom 304483Sgblack@eecs.umich.edu 314483Sgblack@eecs.umich.educlass Bah(object): 324483Sgblack@eecs.umich.edu def __init__(self): 334483Sgblack@eecs.umich.edu self.mnemonic = "bah" 344483Sgblack@eecs.umich.edu 354483Sgblack@eecs.umich.educlass Bah_Tweaked(object): 364483Sgblack@eecs.umich.edu def __init__(self): 374483Sgblack@eecs.umich.edu self.mnemonic = "bah_tweaked" 384483Sgblack@eecs.umich.edu 394483Sgblack@eecs.umich.educlass Hoop(object): 404483Sgblack@eecs.umich.edu def __init__(self, first_param, second_param): 414483Sgblack@eecs.umich.edu self.mnemonic = "hoop_%s_%s" % (first_param, second_param) 424483Sgblack@eecs.umich.edu def __str__(self): 434483Sgblack@eecs.umich.edu return "%s" % self.mnemonic 444483Sgblack@eecs.umich.edu 454483Sgblack@eecs.umich.educlass Dah(object): 464483Sgblack@eecs.umich.edu def __init__(self): 474483Sgblack@eecs.umich.edu self.mnemonic = "dah" 484483Sgblack@eecs.umich.edu 494483Sgblack@eecs.umich.edumicroops = { 504483Sgblack@eecs.umich.edu "bah": Bah, 514483Sgblack@eecs.umich.edu "hoop": Hoop, 524483Sgblack@eecs.umich.edu "dah": Dah 534483Sgblack@eecs.umich.edu} 544483Sgblack@eecs.umich.edu 554483Sgblack@eecs.umich.educlass TestMacroop(Macroop): 564483Sgblack@eecs.umich.edu def tweak(self): 574483Sgblack@eecs.umich.edu microops["bah"] = Bah_Tweaked 584483Sgblack@eecs.umich.edu def untweak(self): 594483Sgblack@eecs.umich.edu microops["bah"] = Bah 604483Sgblack@eecs.umich.edu 614483Sgblack@eecs.umich.edu def __init__(self, name): 624483Sgblack@eecs.umich.edu super(TestMacroop, self).__init__(name) 634483Sgblack@eecs.umich.edu self.directives = { 644483Sgblack@eecs.umich.edu "tweak": self.tweak, 654483Sgblack@eecs.umich.edu "untweak": self.untweak 664483Sgblack@eecs.umich.edu } 674483Sgblack@eecs.umich.edu 684483Sgblack@eecs.umich.eduassembler = MicroAssembler(TestMacroop, microops, Rom('main ROM')) 694483Sgblack@eecs.umich.edu 704483Sgblack@eecs.umich.edutestAssembly = ''' 714483Sgblack@eecs.umich.edudef rom { 724483Sgblack@eecs.umich.edu goo: bah 734483Sgblack@eecs.umich.edu extern la: hoop 4*8, "a" 744483Sgblack@eecs.umich.edu}; 754483Sgblack@eecs.umich.edu 764483Sgblack@eecs.umich.edudef macroop squishy { 774483Sgblack@eecs.umich.edu .tweak 784483Sgblack@eecs.umich.edu bah 794483Sgblack@eecs.umich.edu .untweak 804483Sgblack@eecs.umich.edu bah 814483Sgblack@eecs.umich.edu dah 824483Sgblack@eecs.umich.edu .tweak 834483Sgblack@eecs.umich.edu}; 844483Sgblack@eecs.umich.edu 854483Sgblack@eecs.umich.edudef macroop squashy { 864483Sgblack@eecs.umich.edu bah 874483Sgblack@eecs.umich.edu}; 884483Sgblack@eecs.umich.edu 894483Sgblack@eecs.umich.edudef macroop (bar); 904483Sgblack@eecs.umich.edu''' 914483Sgblack@eecs.umich.eduassembler.assemble(testAssembly) 92