nop.isa revision 2636:2e411eb3cae7
112817Sgabeblack@google.com// Copyright (c) 2006 The Regents of The University of Michigan 212817Sgabeblack@google.com// All rights reserved. 312817Sgabeblack@google.com// 412817Sgabeblack@google.com// Redistribution and use in source and binary forms, with or without 512817Sgabeblack@google.com// modification, are permitted provided that the following conditions are 612817Sgabeblack@google.com// met: redistributions of source code must retain the above copyright 712817Sgabeblack@google.com// notice, this list of conditions and the following disclaimer; 812817Sgabeblack@google.com// redistributions in binary form must reproduce the above copyright 912817Sgabeblack@google.com// notice, this list of conditions and the following disclaimer in the 1012817Sgabeblack@google.com// documentation and/or other materials provided with the distribution; 1112817Sgabeblack@google.com// neither the name of the copyright holders nor the names of its 1212817Sgabeblack@google.com// contributors may be used to endorse or promote products derived from 1312817Sgabeblack@google.com// this software without specific prior written permission. 1412817Sgabeblack@google.com// 1512817Sgabeblack@google.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1612817Sgabeblack@google.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1712817Sgabeblack@google.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1812817Sgabeblack@google.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1912817Sgabeblack@google.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2012817Sgabeblack@google.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2112817Sgabeblack@google.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2212817Sgabeblack@google.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2312817Sgabeblack@google.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2412817Sgabeblack@google.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2512817Sgabeblack@google.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2612817Sgabeblack@google.com// 2712817Sgabeblack@google.com// Authors: Gabe Black 2812817Sgabeblack@google.com// Steve Reinhardt 2912817Sgabeblack@google.com 3012817Sgabeblack@google.com//////////////////////////////////////////////////////////////////// 3112817Sgabeblack@google.com// 3212817Sgabeblack@google.com// Nop instruction 3312817Sgabeblack@google.com// 3412817Sgabeblack@google.com 35// Per-cpu-model nop execute method. 36def template NopExec {{ 37 38 Fault execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const 39 { 40 // Nothing to see here, move along 41 return NoFault; 42 } 43}}; 44 45output header {{ 46 /** 47 * Nop class. 48 */ 49 class Nop : public SparcStaticInst 50 { 51 public: 52 // Constructor 53 Nop(const char *mnem, ExtMachInst _machInst, OpClass __opClass) : 54 SparcStaticInst(mnem, _machInst, __opClass) 55 { 56 } 57 58 // All Nop instructions do the same thing, so this can be 59 // defined here. Nops can be defined directly, so there 60 // needs to be a default implementation. Interpolate via 61 // template so i gets expanded to a set of 62 // cpu-model-specific functions. 63 %(NopExec)s 64 65 std::string generateDisassembly(Addr pc, 66 const SymbolTable *symtab) const; 67 }; 68}}; 69 70output decoder {{ 71 std::string Nop::generateDisassembly(Addr pc, 72 const SymbolTable *symtab) const 73 { 74 std::stringstream response; 75 printMnemonic(response, mnemonic); 76 return response.str(); 77 } 78}}; 79 80def template NopExecute {{ 81 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, 82 Trace::InstRecord *traceData) const 83 { 84 //Nothing to see here, move along 85 return NoFault; 86 } 87}}; 88 89// Primary format for integer operate instructions: 90def format Nop(code, *opt_flags) {{ 91 orig_code = code 92 cblk = CodeBlock(code) 93 iop = InstObjParams(name, Name, 'Nop', cblk, opt_flags) 94 header_output = BasicDeclare.subst(iop) 95 decoder_output = BasicConstructor.subst(iop) 96 decode_block = BasicDecode.subst(iop) 97 exec_output = NopExecute.subst(iop) 98}}; 99