summaryrefslogtreecommitdiff
path: root/src/arch/arm/isa/formats/unimp.isa
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm/isa/formats/unimp.isa')
-rw-r--r--src/arch/arm/isa/formats/unimp.isa20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/arch/arm/isa/formats/unimp.isa b/src/arch/arm/isa/formats/unimp.isa
index 8e346112c..393a210cb 100644
--- a/src/arch/arm/isa/formats/unimp.isa
+++ b/src/arch/arm/isa/formats/unimp.isa
@@ -56,6 +56,10 @@ output header {{
class FailUnimplemented : public ArmStaticInst
{
public:
+ /// Full mnemonic for MRC and MCR instructions including the
+ /// coproc. register name
+ std::string fullMnemonic;
+
/// Constructor
FailUnimplemented(const char *_mnemonic, ExtMachInst _machInst)
: ArmStaticInst(_mnemonic, _machInst, No_OpClass)
@@ -65,6 +69,16 @@ output header {{
flags[IsNonSpeculative] = true;
}
+ FailUnimplemented(const char *_mnemonic, ExtMachInst _machInst,
+ const std::string& _fullMnemonic)
+ : ArmStaticInst(_mnemonic, _machInst, No_OpClass),
+ fullMnemonic(_fullMnemonic)
+ {
+ // don't call execute() (which panics) if we're on a
+ // speculative path
+ flags[IsNonSpeculative] = true;
+ }
+
%(BasicExecDeclare)s
std::string
@@ -137,14 +151,16 @@ output decoder {{
FailUnimplemented::generateDisassembly(Addr pc,
const SymbolTable *symtab) const
{
- return csprintf("%-10s (unimplemented)", mnemonic);
+ return csprintf("%-10s (unimplemented)",
+ fullMnemonic.size() ? fullMnemonic.c_str() : mnemonic);
}
std::string
WarnUnimplemented::generateDisassembly(Addr pc,
const SymbolTable *symtab) const
{
- return csprintf("%-10s (unimplemented)", mnemonic);
+ return csprintf("%-10s (unimplemented)",
+ fullMnemonic.size() ? fullMnemonic.c_str() : mnemonic);
}
std::string