unimp.hh (12291:2c0d8c31fc3d) | unimp.hh (12292:24e70fcc835b) |
---|---|
1/* 2 * Copyright (c) 2003-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 17 unchanged lines hidden (view full) --- 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * Authors: Steve Reinhardt 29 */ 30 31#ifndef __ARCH_SPARC_INSTS_UNIMP_HH__ 32#define __ARCH_SPARC_INSTS_UNIMP_HH__ 33 | 1/* 2 * Copyright (c) 2003-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 17 unchanged lines hidden (view full) --- 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * Authors: Steve Reinhardt 29 */ 30 31#ifndef __ARCH_SPARC_INSTS_UNIMP_HH__ 32#define __ARCH_SPARC_INSTS_UNIMP_HH__ 33 |
34#include <memory> 35 36#include "arch/generic/debugfaults.hh" |
|
34#include "arch/sparc/insts/static_inst.hh" 35#include "base/cprintf.hh" 36 37namespace SparcISA 38{ 39 40//////////////////////////////////////////////////////////////////// 41// --- 8 unchanged lines hidden (view full) --- 50 * This is a leaf class. 51 */ 52class FailUnimplemented : public SparcStaticInst 53{ 54 public: 55 /// Constructor 56 FailUnimplemented(const char *_mnemonic, ExtMachInst _machInst) : 57 SparcStaticInst(_mnemonic, _machInst, No_OpClass) | 37#include "arch/sparc/insts/static_inst.hh" 38#include "base/cprintf.hh" 39 40namespace SparcISA 41{ 42 43//////////////////////////////////////////////////////////////////// 44// --- 8 unchanged lines hidden (view full) --- 53 * This is a leaf class. 54 */ 55class FailUnimplemented : public SparcStaticInst 56{ 57 public: 58 /// Constructor 59 FailUnimplemented(const char *_mnemonic, ExtMachInst _machInst) : 60 SparcStaticInst(_mnemonic, _machInst, No_OpClass) |
58 { 59 // don't call execute() (which panics) if we're on a 60 // speculative path 61 flags[IsNonSpeculative] = true; 62 } | 61 {} |
63 64 Fault 65 execute(ExecContext *xc, Trace::InstRecord *traceData) const override 66 { | 62 63 Fault 64 execute(ExecContext *xc, Trace::InstRecord *traceData) const override 65 { |
67 panic("attempt to execute unimplemented instruction '%s' " 68 "(inst 0x%08x)", mnemonic, machInst); | 66 return std::make_shared<GenericISA::M5PanicFault>( 67 "attempt to execute unimplemented instruction '%s' (inst %#08x)", 68 mnemonic, machInst); |
69 } 70 71 std::string 72 generateDisassembly(Addr pc, const SymbolTable *symtab) const override 73 { 74 return csprintf("%-10s (unimplemented)", mnemonic); 75 } 76}; --- 12 unchanged lines hidden (view full) --- 89 private: 90 /// Have we warned on this instruction yet? 91 mutable bool warned; 92 93 public: 94 /// Constructor 95 WarnUnimplemented(const char *_mnemonic, ExtMachInst _machInst) : 96 SparcStaticInst(_mnemonic, _machInst, No_OpClass), warned(false) | 69 } 70 71 std::string 72 generateDisassembly(Addr pc, const SymbolTable *symtab) const override 73 { 74 return csprintf("%-10s (unimplemented)", mnemonic); 75 } 76}; --- 12 unchanged lines hidden (view full) --- 89 private: 90 /// Have we warned on this instruction yet? 91 mutable bool warned; 92 93 public: 94 /// Constructor 95 WarnUnimplemented(const char *_mnemonic, ExtMachInst _machInst) : 96 SparcStaticInst(_mnemonic, _machInst, No_OpClass), warned(false) |
97 { 98 // don't call execute() (which panics) if we're on a 99 // speculative path 100 flags[IsNonSpeculative] = true; 101 } | 97 {} |
102 103 Fault 104 execute(ExecContext *xc, Trace::InstRecord *traceData) const override 105 { 106 if (!warned) { | 98 99 Fault 100 execute(ExecContext *xc, Trace::InstRecord *traceData) const override 101 { 102 if (!warned) { |
107 warn("instruction '%s' unimplemented\n", mnemonic); | 103 return std::make_shared<GenericISA::M5WarnFault>( 104 "instruction '%s' unimplemented\n", mnemonic); |
108 warned = true; 109 } 110 return NoFault; 111 } 112 113 std::string 114 generateDisassembly(Addr pc, const SymbolTable *symtab) const override 115 { 116 return csprintf("%-10s (unimplemented)", mnemonic); 117 } 118}; 119 120} 121 122#endif // __ARCH_SPARC_INSTS_UNIMP_HH__ | 105 warned = true; 106 } 107 return NoFault; 108 } 109 110 std::string 111 generateDisassembly(Addr pc, const SymbolTable *symtab) const override 112 { 113 return csprintf("%-10s (unimplemented)", mnemonic); 114 } 115}; 116 117} 118 119#endif // __ARCH_SPARC_INSTS_UNIMP_HH__ |