X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=riscv%2Fprocessor.h;h=c0acad9097877703eac19e02b85aedbd603ee948;hb=c4350ef6ef6259e48509e125fd2d051969dc6efa;hp=e9d9c4fd0ae6675aa2b53ce9933d5465ad4d42db;hpb=d9d73d80c1b738b3b30eb40d192f61cbdb0e201f;p=riscv-isa-sim.git diff --git a/riscv/processor.h b/riscv/processor.h index e9d9c4f..c0acad9 100644 --- a/riscv/processor.h +++ b/riscv/processor.h @@ -71,7 +71,7 @@ struct state_t class processor_t { public: - processor_t(sim_t* _sim, mmu_t* _mmu, uint32_t _id); + processor_t(const char* isa, sim_t* sim, uint32_t id); ~processor_t(); void set_debug(bool value); @@ -86,6 +86,7 @@ public: mmu_t* get_mmu() { return mmu; } state_t* get_state() { return &state; } extension_t* get_extension() { return ext; } + bool supports_extension(unsigned char ext) { return subsets[ext]; } void push_privilege_stack(); void pop_privilege_stack(); void yield_load_reservation() { state.load_reservation = (reg_t)-1; } @@ -100,7 +101,9 @@ private: extension_t* ext; disassembler_t* disassembler; state_t state; + bool subsets[256]; uint32_t id; + int max_xlen; int xlen; bool run; // !reset bool debug; @@ -119,6 +122,7 @@ private: friend class mmu_t; friend class extension_t; + void parse_isa_string(const char* isa); void build_opcode_map(); insn_func_t decode_insn(insn_t insn); };