noop.isa (2706:d88c27f75121) | noop.isa (2750:1cca27adb880) |
---|---|
1// -*- mode:c++ -*- 2 | 1// -*- mode:c++ -*- 2 |
3// Copyright (c) 2003-2006 The Regents of The University of Michigan 4// All rights reserved. 5// 6// Redistribution and use in source and binary forms, with or without 7// modification, are permitted provided that the following conditions are 8// met: redistributions of source code must retain the above copyright 9// notice, this list of conditions and the following disclaimer; 10// redistributions in binary form must reproduce the above copyright 11// notice, this list of conditions and the following disclaimer in the 12// documentation and/or other materials provided with the distribution; 13// neither the name of the copyright holders nor the names of its 14// contributors may be used to endorse or promote products derived from 15// this software without specific prior written permission. 16// 17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28// 29// Authors: Korey Sewell 30 | |
31//////////////////////////////////////////////////////////////////// 32// 33// Nop 34// 35 36output header {{ 37 /** 38 * Static instruction class for no-ops. This is a leaf class. --- 29 unchanged lines hidden (view full) --- 68 } 69 70 /// Helper function for decoding nops. Substitute Nop object 71 /// for original inst passed in as arg (and delete latter). 72 inline 73 MipsStaticInst * 74 makeNop(MipsStaticInst *inst) 75 { | 3//////////////////////////////////////////////////////////////////// 4// 5// Nop 6// 7 8output header {{ 9 /** 10 * Static instruction class for no-ops. This is a leaf class. --- 29 unchanged lines hidden (view full) --- 40 } 41 42 /// Helper function for decoding nops. Substitute Nop object 43 /// for original inst passed in as arg (and delete latter). 44 inline 45 MipsStaticInst * 46 makeNop(MipsStaticInst *inst) 47 { |
76 MipsStaticInst *nop = new Nop(inst->disassemble(0), inst->machInst); | 48 std::string nop_str = "(" + inst->disassemble(0) + ")"; 49 MipsStaticInst *nop = new Nop(nop_str, inst->machInst); |
77 delete inst; 78 return nop; 79 } 80}}; 81 82output exec {{ 83 Fault 84 Nop::execute(%(CPU_exec_context)s *, Trace::InstRecord *) const 85 { 86 return NoFault; 87 } 88}}; 89 | 50 delete inst; 51 return nop; 52 } 53}}; 54 55output exec {{ 56 Fault 57 Nop::execute(%(CPU_exec_context)s *, Trace::InstRecord *) const 58 { 59 return NoFault; 60 } 61}}; 62 |
90// integer & FP operate instructions use RT as dest, so check for 91// RT == 0 to detect nops 92def template OperateNopCheckDecode {{ | 63// Int & FP operate instructions use RD as dest, so check for 64// RD == 0 to detect nops 65def template RegNopCheckDecode {{ |
93 { 94 MipsStaticInst *i = new %(class_name)s(machInst); | 66 { 67 MipsStaticInst *i = new %(class_name)s(machInst); |
68 //if (RD == 0) { 69 //i = makeNop(i); 70 //} 71 return i; 72 } 73}}; |
|
95 | 74 |
75def template OperateNopCheckDecode {{ 76 { 77 MipsStaticInst *i = new %(class_name)s(machInst); |
|
96 //if (RD == 0) { | 78 //if (RD == 0) { |
97 // i = makeNop(i); | 79 // i = makeNop(i); |
98 //} | 80 //} |
81 return i; 82 } 83}}; |
|
99 | 84 |
85// IntImm & Memory instructions use Rt as dest, so check for 86// Rt == 0 to detect nops 87def template ImmNopCheckDecode {{ 88 { 89 MipsStaticInst *i = new %(class_name)s(machInst); 90 //if (RT == 0) { 91 // i = makeNop(i); 92 // } |
|
100 return i; 101 } 102}}; 103 104 105// Like BasicOperate format, but generates NOP if RC/FC == 31 106def format BasicOperateWithNopCheck(code, *opt_args) {{ 107 iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), 108 opt_args) 109 header_output = BasicDeclare.subst(iop) 110 decoder_output = BasicConstructor.subst(iop) 111 decode_block = OperateNopCheckDecode.subst(iop) 112 exec_output = BasicExecute.subst(iop) 113}}; 114 115def format Nop() {{ 116 decode_block = 'return new Nop(\"\",machInst);\n' 117}}; 118 | 93 return i; 94 } 95}}; 96 97 98// Like BasicOperate format, but generates NOP if RC/FC == 31 99def format BasicOperateWithNopCheck(code, *opt_args) {{ 100 iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), 101 opt_args) 102 header_output = BasicDeclare.subst(iop) 103 decoder_output = BasicConstructor.subst(iop) 104 decode_block = OperateNopCheckDecode.subst(iop) 105 exec_output = BasicExecute.subst(iop) 106}}; 107 108def format Nop() {{ 109 decode_block = 'return new Nop(\"\",machInst);\n' 110}}; 111 |