base.isa revision 12407:c24d0c2d816d
111723Sar4jc@virginia.edu// -*- mode:c++ -*- 211723Sar4jc@virginia.edu 311723Sar4jc@virginia.edu// Copyright (c) 2007 The Hewlett-Packard Development Company 411723Sar4jc@virginia.edu// All rights reserved. 511723Sar4jc@virginia.edu// 611723Sar4jc@virginia.edu// The license below extends only to copyright in the software and shall 711723Sar4jc@virginia.edu// not be construed as granting a license to any other intellectual 811723Sar4jc@virginia.edu// property including but not limited to intellectual property relating 911723Sar4jc@virginia.edu// to a hardware implementation of the functionality of the software 1011723Sar4jc@virginia.edu// licensed hereunder. You may use the software subject to the license 1111723Sar4jc@virginia.edu// terms below provided that you ensure that this notice is replicated 1211723Sar4jc@virginia.edu// unmodified and in its entirety in all distributions of the software, 1311723Sar4jc@virginia.edu// modified or unmodified, in source code or in binary form. 1411723Sar4jc@virginia.edu// 1511723Sar4jc@virginia.edu// Redistribution and use in source and binary forms, with or without 1611723Sar4jc@virginia.edu// modification, are permitted provided that the following conditions are 1711723Sar4jc@virginia.edu// met: redistributions of source code must retain the above copyright 1811723Sar4jc@virginia.edu// notice, this list of conditions and the following disclaimer; 1911723Sar4jc@virginia.edu// redistributions in binary form must reproduce the above copyright 2011723Sar4jc@virginia.edu// notice, this list of conditions and the following disclaimer in the 2111723Sar4jc@virginia.edu// documentation and/or other materials provided with the distribution; 2211723Sar4jc@virginia.edu// neither the name of the copyright holders nor the names of its 2311723Sar4jc@virginia.edu// contributors may be used to endorse or promote products derived from 2411723Sar4jc@virginia.edu// this software without specific prior written permission. 2511723Sar4jc@virginia.edu// 2611723Sar4jc@virginia.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2711723Sar4jc@virginia.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2811723Sar4jc@virginia.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2911723Sar4jc@virginia.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3011723Sar4jc@virginia.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3111723Sar4jc@virginia.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3211723Sar4jc@virginia.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3311723Sar4jc@virginia.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3411723Sar4jc@virginia.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3511723Sar4jc@virginia.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3611723Sar4jc@virginia.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3711723Sar4jc@virginia.edu// 3811723Sar4jc@virginia.edu// Authors: Gabe Black 3911723Sar4jc@virginia.edu 4011723Sar4jc@virginia.edulet {{ 4111723Sar4jc@virginia.edu # This will be populated with mappings between microop mnemonics and 4211723Sar4jc@virginia.edu # the classes that represent them. 4311723Sar4jc@virginia.edu microopClasses = {} 4411723Sar4jc@virginia.edu}}; 4511723Sar4jc@virginia.edu 4611723Sar4jc@virginia.edu////////////////////////////////////////////////////////////////////////// 4711723Sar4jc@virginia.edu// 48// Base class for the python representation of x86 microops 49// 50////////////////////////////////////////////////////////////////////////// 51 52let {{ 53 class X86Microop(object): 54 55 generatorNameTemplate = "generate_%s_%d" 56 57 generatorTemplate = ''' 58 StaticInstPtr 59 ''' + generatorNameTemplate + '''(StaticInstPtr curMacroop) 60 { 61 static const char *macrocodeBlock = romMnemonic; 62 static ExtMachInst dummyExtMachInst; 63 static const EmulEnv dummyEmulEnv(0, 0, 1, 1, 1); 64 65 Macroop * macroop = dynamic_cast<Macroop *>(curMacroop.get()); 66 const ExtMachInst &machInst = 67 macroop ? macroop->getExtMachInst() : dummyExtMachInst; 68 const EmulEnv &env = 69 macroop ? macroop->getEmulEnv() : dummyEmulEnv; 70 // env may not be used in the microop's constructor. 71 InstRegIndex reg(env.reg); 72 reg = reg; 73 using namespace RomLabels; 74 return %s; 75 } 76 ''' 77 78 def __init__(self, name): 79 self.name = name 80 81 def microFlagsText(self, flags): 82 wrapped = ("(1ULL << StaticInst::%s)" % flag for flag in flags) 83 return " | ".join(wrapped) 84 85 def getGeneratorDef(self, micropc): 86 return self.generatorTemplate % \ 87 (self.className, micropc, \ 88 self.getAllocator(["IsMicroop", "IsDelayedCommit"])) 89 90 def getGenerator(self, micropc): 91 return self.generatorNameTemplate % (self.className, micropc) 92}}; 93