diff options
Diffstat (limited to 'src/arch/riscv/faults.hh')
-rw-r--r-- | src/arch/riscv/faults.hh | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/arch/riscv/faults.hh b/src/arch/riscv/faults.hh index cd073235c..d0d7988c5 100644 --- a/src/arch/riscv/faults.hh +++ b/src/arch/riscv/faults.hh @@ -40,6 +40,12 @@ namespace RiscvISA { +const uint32_t FloatInexact = 1 << 0; +const uint32_t FloatUnderflow = 1 << 1; +const uint32_t FloatOverflow = 1 << 2; +const uint32_t FloatDivZero = 1 << 3; +const uint32_t FloatInvalid = 1 << 4; + enum ExceptionCode { INST_ADDR_MISALIGNED = 0, INST_ACCESS = 1, @@ -124,6 +130,20 @@ class UnimplementedFault : public RiscvFault invoke_se(ThreadContext *tc, const StaticInstPtr &inst); }; +class IllegalFrmFault: public RiscvFault +{ + private: + const uint8_t frm; + public: + IllegalFrmFault(uint8_t r) + : RiscvFault("Illegal floating-point rounding mode", INST_ILLEGAL, + SOFTWARE), + frm(r) + {} + + void invoke_se(ThreadContext *tc, const StaticInstPtr &inst); +}; + class BreakpointFault : public RiscvFault { public: |