diff --git a/riscv/decode_macros.h b/riscv/decode_macros.h index 1795a877..4050000b 100644 --- a/riscv/decode_macros.h +++ b/riscv/decode_macros.h @@ -322,6 +322,7 @@ inline long double to_f(float128_t f) { long double r; memcpy(&r, &f, sizeof(r)) #endif +#define software_check(x, tval) (unlikely(!(x)) ? throw trap_software_check(tval) : (void) 0) #define ZICFILP_xLPE(v, prv) \ ({ \ reg_t lpe = 0ULL; \ diff --git a/riscv/trap.h b/riscv/trap.h index 54948fdd..5eb62cfd 100644 --- a/riscv/trap.h +++ b/riscv/trap.h @@ -119,5 +119,6 @@ DECLARE_MEM_GVA_TRAP(CAUSE_FETCH_GUEST_PAGE_FAULT, instruction_guest_page_fault) DECLARE_MEM_GVA_TRAP(CAUSE_LOAD_GUEST_PAGE_FAULT, load_guest_page_fault) DECLARE_INST_TRAP(CAUSE_VIRTUAL_INSTRUCTION, virtual_instruction) DECLARE_MEM_GVA_TRAP(CAUSE_STORE_GUEST_PAGE_FAULT, store_guest_page_fault) +DECLARE_INST_TRAP(CAUSE_SOFTWARE_CHECK_FAULT, software_check) #endif