aboutsummaryrefslogtreecommitdiff
path: root/riscv/processor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'riscv/processor.cc')
-rw-r--r--riscv/processor.cc9
1 files changed, 8 insertions, 1 deletions
diff --git a/riscv/processor.cc b/riscv/processor.cc
index f2b0ab3..ad9944e 100644
--- a/riscv/processor.cc
+++ b/riscv/processor.cc
@@ -942,16 +942,23 @@ void processor_t::register_extension(extension_t* x)
void processor_t::register_base_instructions()
{
#define DECLARE_INSN(name, match, mask) \
- insn_bits_t name##_match = (match), name##_mask = (mask);
+ insn_bits_t name##_match = (match), name##_mask = (mask); \
+ bool name##_supported = true;
+
#include "encoding.h"
#undef DECLARE_INSN
+ #define DECLARE_OVERLAP_INSN(name, ext) { name##_supported &= isa->extension_enabled(ext); }
+ #include "overlap_list.h"
+ #undef DECLARE_OVERLAP_INSN
+
#define DEFINE_INSN(name) \
extern reg_t rv32i_##name(processor_t*, insn_t, reg_t); \
extern reg_t rv64i_##name(processor_t*, insn_t, reg_t); \
extern reg_t rv32e_##name(processor_t*, insn_t, reg_t); \
extern reg_t rv64e_##name(processor_t*, insn_t, reg_t); \
register_insn((insn_desc_t) { \
+ name##_supported, \
name##_match, \
name##_mask, \
rv32i_##name, \