unknown.isa revision 12616
112726Snikos.nikoleris@arm.com// -*- mode:c++ -*- 212726Snikos.nikoleris@arm.com 312726Snikos.nikoleris@arm.com// Copyright (c) 2006 The Regents of The University of Michigan 412726Snikos.nikoleris@arm.com// All rights reserved. 512726Snikos.nikoleris@arm.com// 612726Snikos.nikoleris@arm.com// Redistribution and use in source and binary forms, with or without 712726Snikos.nikoleris@arm.com// modification, are permitted provided that the following conditions are 812726Snikos.nikoleris@arm.com// met: redistributions of source code must retain the above copyright 912726Snikos.nikoleris@arm.com// notice, this list of conditions and the following disclaimer; 1012726Snikos.nikoleris@arm.com// redistributions in binary form must reproduce the above copyright 1112726Snikos.nikoleris@arm.com// notice, this list of conditions and the following disclaimer in the 1212726Snikos.nikoleris@arm.com// documentation and/or other materials provided with the distribution; 1312726Snikos.nikoleris@arm.com// neither the name of the copyright holders nor the names of its 1412726Snikos.nikoleris@arm.com// contributors may be used to endorse or promote products derived from 1512726Snikos.nikoleris@arm.com// this software without specific prior written permission. 1612726Snikos.nikoleris@arm.com// 1712726Snikos.nikoleris@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1812726Snikos.nikoleris@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1912726Snikos.nikoleris@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2012726Snikos.nikoleris@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2112726Snikos.nikoleris@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2212726Snikos.nikoleris@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2312726Snikos.nikoleris@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2412726Snikos.nikoleris@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2512726Snikos.nikoleris@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2612726Snikos.nikoleris@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2712726Snikos.nikoleris@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2812726Snikos.nikoleris@arm.com// 2912726Snikos.nikoleris@arm.com// Authors: Korey Sewell 3012726Snikos.nikoleris@arm.com 3112726Snikos.nikoleris@arm.com//////////////////////////////////////////////////////////////////// 3212726Snikos.nikoleris@arm.com// 3312726Snikos.nikoleris@arm.com// Unknown instructions 3412726Snikos.nikoleris@arm.com// 3512726Snikos.nikoleris@arm.com 3612726Snikos.nikoleris@arm.comoutput header {{ 3712726Snikos.nikoleris@arm.com /** 3812726Snikos.nikoleris@arm.com * Static instruction class for unknown (illegal) instructions. 3912726Snikos.nikoleris@arm.com * These cause simulator termination if they are executed in a 4012726Snikos.nikoleris@arm.com * non-speculative mode. This is a leaf class. 4112726Snikos.nikoleris@arm.com */ 4212726Snikos.nikoleris@arm.com class Unknown : public MipsStaticInst 4312726Snikos.nikoleris@arm.com { 4412726Snikos.nikoleris@arm.com public: 4512726Snikos.nikoleris@arm.com /// Constructor 4612726Snikos.nikoleris@arm.com Unknown(MachInst _machInst) 4712726Snikos.nikoleris@arm.com : MipsStaticInst("unknown", _machInst, No_OpClass) 4812726Snikos.nikoleris@arm.com { 4912726Snikos.nikoleris@arm.com // don't call execute() (which panics) if we're on a 5012726Snikos.nikoleris@arm.com // speculative path 5112726Snikos.nikoleris@arm.com flags[IsNonSpeculative] = true; 5212726Snikos.nikoleris@arm.com } 5312726Snikos.nikoleris@arm.com 5412726Snikos.nikoleris@arm.com Fault execute(ExecContext *, Trace::InstRecord *) const override; 5512726Snikos.nikoleris@arm.com 5612726Snikos.nikoleris@arm.com std::string generateDisassembly( 5712726Snikos.nikoleris@arm.com Addr pc, const SymbolTable *symtab) const override; 5812726Snikos.nikoleris@arm.com }; 5912726Snikos.nikoleris@arm.com}}; 6012726Snikos.nikoleris@arm.com 6112726Snikos.nikoleris@arm.comoutput decoder {{ 6212726Snikos.nikoleris@arm.com std::string 6312726Snikos.nikoleris@arm.com Unknown::generateDisassembly(Addr pc, const SymbolTable *symtab) const 6412726Snikos.nikoleris@arm.com { 6512726Snikos.nikoleris@arm.com return csprintf("%-10s (inst 0x%x, opcode 0x%x, binary:%s)", 6612726Snikos.nikoleris@arm.com "unknown", machInst, OPCODE, inst2string(machInst)); 6712726Snikos.nikoleris@arm.com } 6812726Snikos.nikoleris@arm.com}}; 6912726Snikos.nikoleris@arm.com 7012726Snikos.nikoleris@arm.comoutput exec {{ 7112726Snikos.nikoleris@arm.com Fault 7212726Snikos.nikoleris@arm.com Unknown::execute(ExecContext *xc, Trace::InstRecord *traceData) const 7312726Snikos.nikoleris@arm.com { 7412726Snikos.nikoleris@arm.com return std::make_shared<ReservedInstructionFault>(); 7512726Snikos.nikoleris@arm.com } 7612726Snikos.nikoleris@arm.com}}; 7712726Snikos.nikoleris@arm.com 7812726Snikos.nikoleris@arm.comdef format Unknown() {{ 7912726Snikos.nikoleris@arm.com decode_block = 'return new Unknown(machInst);\n' 8012726Snikos.nikoleris@arm.com}}; 8112726Snikos.nikoleris@arm.com 8212726Snikos.nikoleris@arm.com