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__