diff --git a/src/arch/arm/insts/mem64.cc b/src/arch/arm/insts/mem64.cc index 7576a5c2af..ead4428ad6 100644 --- a/src/arch/arm/insts/mem64.cc +++ b/src/arch/arm/insts/mem64.cc @@ -61,8 +61,8 @@ SysDC64::generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const uint32_t SysDC64::iss() const { - const MiscRegNum64 &misc_reg = encodeAArch64SysReg(dest); - return _iss(misc_reg, base); + const auto misc_reg = encodeAArch64SysReg(dest); + return _iss(misc_reg.value(), base); } void diff --git a/src/arch/arm/insts/misc64.cc b/src/arch/arm/insts/misc64.cc index 4919d92da8..358ecae8b8 100644 --- a/src/arch/arm/insts/misc64.cc +++ b/src/arch/arm/insts/misc64.cc @@ -186,8 +186,9 @@ MiscRegRegImmOp64::generateDisassembly( uint32_t MiscRegRegImmOp64::iss() const { - const MiscRegNum64 &misc_reg = encodeAArch64SysReg(dest); - return _iss(misc_reg, op1); + const auto misc_reg = encodeAArch64SysReg(dest); + assert(misc_reg.has_value()); + return _iss(misc_reg.value(), op1); } std::string @@ -205,8 +206,9 @@ RegMiscRegImmOp64::generateDisassembly( uint32_t RegMiscRegImmOp64::iss() const { - const MiscRegNum64 &misc_reg = encodeAArch64SysReg(op1); - return _iss(misc_reg, dest); + const auto misc_reg = encodeAArch64SysReg(op1); + assert(misc_reg.has_value()); + return _iss(misc_reg.value(), dest); } Fault diff --git a/src/arch/arm/regs/misc.cc b/src/arch/arm/regs/misc.cc index e768edeee3..3542f4fe7d 100644 --- a/src/arch/arm/regs/misc.cc +++ b/src/arch/arm/regs/misc.cc @@ -2572,14 +2572,14 @@ decodeAArch64SysReg(const MiscRegNum64 &sys_reg) } } -MiscRegNum64 +std::optional encodeAArch64SysReg(MiscRegIndex misc_reg) { if (auto it = idxToMiscRegNum.find(misc_reg); it != idxToMiscRegNum.end()) { return it->second; } else { - panic("Invalid MiscRegIndex: %d\n", misc_reg); + return std::nullopt; } } diff --git a/src/arch/arm/regs/misc.hh b/src/arch/arm/regs/misc.hh index 065e5439c2..4f127ffd12 100644 --- a/src/arch/arm/regs/misc.hh +++ b/src/arch/arm/regs/misc.hh @@ -43,6 +43,7 @@ #include #include +#include #include #include "arch/arm/regs/misc_types.hh" @@ -1778,7 +1779,7 @@ namespace ArmISA unsigned crn, unsigned crm, unsigned op2); MiscRegIndex decodeAArch64SysReg(const MiscRegNum64 &misc_reg); - MiscRegNum64 encodeAArch64SysReg(MiscRegIndex misc_reg); + std::optional encodeAArch64SysReg(MiscRegIndex misc_reg); // Whether a particular AArch64 system register is -always- read only. bool aarch64SysRegReadOnly(MiscRegIndex miscReg);