1 // See LICENSE for license details.
13 trap_t(reg_t which
) : which(which
) {}
14 virtual const char* name();
15 virtual void side_effects(state_t
* state
) {}
16 reg_t
cause() { return which
; }
22 class mem_trap_t
: public trap_t
25 mem_trap_t(reg_t which
, reg_t badvaddr
)
26 : trap_t(which
), badvaddr(badvaddr
) {}
27 void side_effects(state_t
* state
);
32 #define DECLARE_TRAP(n, x) class trap_##x : public trap_t { \
34 trap_##x() : trap_t(n) {} \
35 const char* name() { return "trap_"#x; } \
38 #define DECLARE_MEM_TRAP(n, x) class trap_##x : public mem_trap_t { \
40 trap_##x(reg_t badvaddr) : mem_trap_t(n, badvaddr) {} \
41 const char* name() { return "trap_"#x; } \
44 DECLARE_TRAP(0, instruction_address_misaligned
)
45 DECLARE_TRAP(1, instruction_access_fault
)
46 DECLARE_TRAP(2, illegal_instruction
)
47 DECLARE_TRAP(3, privileged_instruction
)
48 DECLARE_TRAP(4, fp_disabled
)
49 DECLARE_TRAP(5, reserved0
)
50 DECLARE_TRAP(6, syscall
)
51 DECLARE_TRAP(7, breakpoint
)
52 DECLARE_MEM_TRAP(8, load_address_misaligned
)
53 DECLARE_MEM_TRAP(9, store_address_misaligned
)
54 DECLARE_MEM_TRAP(10, load_access_fault
)
55 DECLARE_MEM_TRAP(11, store_access_fault
)
56 DECLARE_TRAP(12, vector_disabled
)
57 DECLARE_TRAP(13, vector_bank
)
58 DECLARE_TRAP(14, vector_illegal_instruction
)