specop.isa revision 4590
15389Sgblack@eecs.umich.edu// Copyright (c) 2007 The Hewlett-Packard Development Company 25446Sgblack@eecs.umich.edu// All rights reserved. 35389Sgblack@eecs.umich.edu// 45389Sgblack@eecs.umich.edu// Redistribution and use of this software in source and binary forms, 55389Sgblack@eecs.umich.edu// with or without modification, are permitted provided that the 65389Sgblack@eecs.umich.edu// following conditions are met: 75389Sgblack@eecs.umich.edu// 85389Sgblack@eecs.umich.edu// The software must be used only for Non-Commercial Use which means any 95389Sgblack@eecs.umich.edu// use which is NOT directed to receiving any direct monetary 105389Sgblack@eecs.umich.edu// compensation for, or commercial advantage from such use. Illustrative 115389Sgblack@eecs.umich.edu// examples of non-commercial use are academic research, personal study, 125389Sgblack@eecs.umich.edu// teaching, education and corporate research & development. 135389Sgblack@eecs.umich.edu// Illustrative examples of commercial use are distributing products for 145389Sgblack@eecs.umich.edu// commercial advantage and providing services using the software for 155389Sgblack@eecs.umich.edu// commercial advantage. 165389Sgblack@eecs.umich.edu// 175389Sgblack@eecs.umich.edu// If you wish to use this software or functionality therein that may be 185389Sgblack@eecs.umich.edu// covered by patents for commercial use, please contact: 195389Sgblack@eecs.umich.edu// Director of Intellectual Property Licensing 205389Sgblack@eecs.umich.edu// Office of Strategy and Technology 215389Sgblack@eecs.umich.edu// Hewlett-Packard Company 225389Sgblack@eecs.umich.edu// 1501 Page Mill Road 235389Sgblack@eecs.umich.edu// Palo Alto, California 94304 245389Sgblack@eecs.umich.edu// 255389Sgblack@eecs.umich.edu// Redistributions of source code must retain the above copyright notice, 265389Sgblack@eecs.umich.edu// this list of conditions and the following disclaimer. Redistributions 275389Sgblack@eecs.umich.edu// in binary form must reproduce the above copyright notice, this list of 285389Sgblack@eecs.umich.edu// conditions and the following disclaimer in the documentation and/or 295389Sgblack@eecs.umich.edu// other materials provided with the distribution. Neither the name of 305389Sgblack@eecs.umich.edu// the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its 315389Sgblack@eecs.umich.edu// contributors may be used to endorse or promote products derived from 325389Sgblack@eecs.umich.edu// this software without specific prior written permission. No right of 335389Sgblack@eecs.umich.edu// sublicense is granted herewith. Derivatives of the software and 345389Sgblack@eecs.umich.edu// output created using the software may be prepared, but only for 355389Sgblack@eecs.umich.edu// Non-Commercial Uses. Derivatives of the software may be shared with 365389Sgblack@eecs.umich.edu// others provided: (i) the others agree to abide by the list of 375389Sgblack@eecs.umich.edu// conditions herein which includes the Non-Commercial Use restrictions; 385389Sgblack@eecs.umich.edu// and (ii) such Derivatives of the software include the above copyright 395389Sgblack@eecs.umich.edu// notice to acknowledge the contribution from this software where 405389Sgblack@eecs.umich.edu// applicable, this list of conditions and the disclaimer below. 415638Sgblack@eecs.umich.edu// 425389Sgblack@eecs.umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 435389Sgblack@eecs.umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 445389Sgblack@eecs.umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 455636Sgblack@eecs.umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 465389Sgblack@eecs.umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 475638Sgblack@eecs.umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 485389Sgblack@eecs.umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 495389Sgblack@eecs.umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 505389Sgblack@eecs.umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 515389Sgblack@eecs.umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 525636Sgblack@eecs.umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 535389Sgblack@eecs.umich.edu// 545389Sgblack@eecs.umich.edu// Authors: Gabe Black 555638Sgblack@eecs.umich.edu 565389Sgblack@eecs.umich.edu////////////////////////////////////////////////////////////////////////// 575446Sgblack@eecs.umich.edu// 585446Sgblack@eecs.umich.edu// Fault Microop 595446Sgblack@eecs.umich.edu// 6011341Sandreas.hansson@arm.com////////////////////////////////////////////////////////////////////////// 615446Sgblack@eecs.umich.edu 625638Sgblack@eecs.umich.eduoutput header {{ 635389Sgblack@eecs.umich.edu class MicroFault : public X86MicroopBase 6411244Sandreas.sandberg@arm.com { 6511244Sandreas.sandberg@arm.com protected: 6611244Sandreas.sandberg@arm.com Fault fault; 675389Sgblack@eecs.umich.edu void buildMe(); 6811244Sandreas.sandberg@arm.com 6911244Sandreas.sandberg@arm.com public: 705389Sgblack@eecs.umich.edu MicroFault(ExtMachInst _machInst, const char * instMnem, 715389Sgblack@eecs.umich.edu bool isMicro, bool isDelayed, bool isFirst, bool isLast, 725389Sgblack@eecs.umich.edu Fault _fault); 73 74 MicroFault(ExtMachInst _machInst, const char * instMnem, 75 Fault _fault); 76 77 %(BasicExecDeclare)s 78 }; 79}}; 80 81output decoder {{ 82 Fault MicroFault::execute(%(CPU_exec_context)s *xc, 83 Trace::InstRecord *traceData) const 84 { 85 //Return the fault we were constructed with 86 return fault; 87 } 88}}; 89 90output decoder {{ 91 inline MicroFault::MicroFault( 92 ExtMachInst machInst, const char * instMnem, Fault _fault) : 93 X86MicroopBase(machInst, "fault", instMnem, 94 false, false, false, false, No_OpClass), fault(_fault) 95 { 96 } 97 98 inline MicroFault::MicroFault( 99 ExtMachInst machInst, const char * instMnem, 100 bool isMicro, bool isDelayed, bool isFirst, bool isLast, 101 Fault _fault) : 102 X86MicroopBase(machInst, "fault", instMnem, 103 isMicro, isDelayed, isFirst, isLast, No_OpClass), 104 fault(_fault) 105 { 106 } 107}}; 108 109let {{ 110 class Fault(X86Microop): 111 def __init__(self, fault): 112 self.fault = fault 113 114 def getAllocator(self, *microFlags): 115 allocator = '''new MicroFault(machInst, mnemonic 116 %(flags)s, %(fault)s)''' % { 117 "flags" : self.microFlagsText(microFlags), 118 "fault" : self.fault} 119 return allocator 120 microopClasses["fault"] = Fault 121}}; 122