summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/sparc/insts/unimp.hh23
1 files changed, 10 insertions, 13 deletions
diff --git a/src/arch/sparc/insts/unimp.hh b/src/arch/sparc/insts/unimp.hh
index c0d97858f..a63443a4c 100644
--- a/src/arch/sparc/insts/unimp.hh
+++ b/src/arch/sparc/insts/unimp.hh
@@ -31,6 +31,9 @@
#ifndef __ARCH_SPARC_INSTS_UNIMP_HH__
#define __ARCH_SPARC_INSTS_UNIMP_HH__
+#include <memory>
+
+#include "arch/generic/debugfaults.hh"
#include "arch/sparc/insts/static_inst.hh"
#include "base/cprintf.hh"
@@ -55,17 +58,14 @@ class FailUnimplemented : public SparcStaticInst
/// Constructor
FailUnimplemented(const char *_mnemonic, ExtMachInst _machInst) :
SparcStaticInst(_mnemonic, _machInst, No_OpClass)
- {
- // don't call execute() (which panics) if we're on a
- // speculative path
- flags[IsNonSpeculative] = true;
- }
+ {}
Fault
execute(ExecContext *xc, Trace::InstRecord *traceData) const override
{
- panic("attempt to execute unimplemented instruction '%s' "
- "(inst 0x%08x)", mnemonic, machInst);
+ return std::make_shared<GenericISA::M5PanicFault>(
+ "attempt to execute unimplemented instruction '%s' (inst %#08x)",
+ mnemonic, machInst);
}
std::string
@@ -94,17 +94,14 @@ class WarnUnimplemented : public SparcStaticInst
/// Constructor
WarnUnimplemented(const char *_mnemonic, ExtMachInst _machInst) :
SparcStaticInst(_mnemonic, _machInst, No_OpClass), warned(false)
- {
- // don't call execute() (which panics) if we're on a
- // speculative path
- flags[IsNonSpeculative] = true;
- }
+ {}
Fault
execute(ExecContext *xc, Trace::InstRecord *traceData) const override
{
if (!warned) {
- warn("instruction '%s' unimplemented\n", mnemonic);
+ return std::make_shared<GenericISA::M5WarnFault>(
+ "instruction '%s' unimplemented\n", mnemonic);
warned = true;
}
return NoFault;