summaryrefslogtreecommitdiff
path: root/src/arch/arm/insts/misc64.hh
diff options
context:
space:
mode:
authorGiacomo Travaglini <giacomo.travaglini@arm.com>2018-10-24 16:21:41 +0100
committerGiacomo Travaglini <giacomo.travaglini@arm.com>2018-10-26 09:45:47 +0000
commitf5c8fc6bbedfe62bcb9514568b8ee13e073c807b (patch)
tree3a140bbf83c79635c15c20c29ed8673dfd978601 /src/arch/arm/insts/misc64.hh
parent68bc5397c937c7289ad7e78416132dc77ccf34a9 (diff)
downloadgem5-f5c8fc6bbedfe62bcb9514568b8ee13e073c807b.tar.xz
arch-arm: AArch64 Instruction for MISCREG_IMPDEF_UNIMPL
While there is a AArch32 class for instructions accessing implementation defined registers, we are lacking for the AArch64 counterpart. we were relying on FailUnimplemented, which is untrappable at EL2 (except for HCR_EL2.TGE) since it is just raising Undefined Instruction. Change-Id: I923cb914658ca958af031612cf005159707b0b4f Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/13779 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/arch/arm/insts/misc64.hh')
-rw-r--r--src/arch/arm/insts/misc64.hh28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/arch/arm/insts/misc64.hh b/src/arch/arm/insts/misc64.hh
index 8af488a02..f70344bcb 100644
--- a/src/arch/arm/insts/misc64.hh
+++ b/src/arch/arm/insts/misc64.hh
@@ -178,4 +178,32 @@ class RegMiscRegImmOp64 : public MiscRegOp64
Addr pc, const SymbolTable *symtab) const override;
};
+class MiscRegImplDefined64 : public MiscRegOp64
+{
+ protected:
+ const std::string fullMnemonic;
+ const MiscRegIndex miscReg;
+ const uint32_t imm;
+ const bool warning;
+
+ public:
+ MiscRegImplDefined64(const char *mnem, ExtMachInst _machInst,
+ MiscRegIndex misc_reg, bool misc_read,
+ uint32_t _imm, const std::string full_mnem,
+ bool _warning) :
+ MiscRegOp64(mnem, _machInst, No_OpClass, misc_read),
+ fullMnemonic(full_mnem), miscReg(misc_reg), imm(_imm),
+ warning(_warning)
+ {
+ assert(miscReg == MISCREG_IMPDEF_UNIMPL);
+ }
+
+ protected:
+ Fault execute(ExecContext *xc,
+ Trace::InstRecord *traceData) const override;
+
+ std::string generateDisassembly(
+ Addr pc, const SymbolTable *symtab) const override;
+};
+
#endif