diff --git a/incl/iss/arch/riscv_hart_m_p.h b/incl/iss/arch/riscv_hart_m_p.h index 52bf1ad..09d9864 100644 --- a/incl/iss/arch/riscv_hart_m_p.h +++ b/incl/iss/arch/riscv_hart_m_p.h @@ -241,7 +241,9 @@ protected: uint64_t get_instr_word() override { return arch.instruction; } - uint64_t get_instr_count() { return arch.icount; } + uint64_t get_instr_count() override { return arch.icount; } + + uint64_t get_pendig_traps() override { return arch.trap_state; } uint64_t get_total_cycles() override { return arch.icount + arch.cycle_offset; } diff --git a/incl/iss/arch/riscv_hart_msu_vp.h b/incl/iss/arch/riscv_hart_msu_vp.h index e7c86e0..ed2e677 100644 --- a/incl/iss/arch/riscv_hart_msu_vp.h +++ b/incl/iss/arch/riscv_hart_msu_vp.h @@ -340,9 +340,13 @@ protected: virtual uint64_t get_next_pc() { return arch.get_next_pc(); }; - uint64_t get_instr_count() { return arch.reg.icount; } + uint64_t get_instr_word() override { return arch.instruction; } - uint64_t get_total_cycles() override { return arch.reg.icount + arch.cycle_offset; } + uint64_t get_instr_count() { return arch.icount; } + + uint64_t get_pendig_traps() override { return arch.trap_state; } + + uint64_t get_total_cycles() override { return arch.icount + arch.cycle_offset; } virtual void set_curr_instr_cycles(unsigned cycles) { arch.cycle_offset += cycles - 1; }; diff --git a/incl/iss/arch/riscv_hart_mu_p.h b/incl/iss/arch/riscv_hart_mu_p.h index e85f1da..440664e 100644 --- a/incl/iss/arch/riscv_hart_mu_p.h +++ b/incl/iss/arch/riscv_hart_mu_p.h @@ -254,9 +254,13 @@ protected: virtual uint64_t get_next_pc() { return arch.get_next_pc(); }; - uint64_t get_instr_count() { return arch.reg.icount; } + uint64_t get_instr_word() override { return arch.instruction; } - uint64_t get_total_cycles() override { return arch.reg.icount + arch.cycle_offset; } + uint64_t get_instr_count() { return arch.icount; } + + uint64_t get_pendig_traps() override { return arch.trap_state; } + + uint64_t get_total_cycles() override { return arch.icount + arch.cycle_offset; } virtual void set_curr_instr_cycles(unsigned cycles) { arch.cycle_offset += cycles - 1; }; diff --git a/incl/iss/arch/tgc_c.h b/incl/iss/arch/tgc_c.h index 7a71f8c..5ff88a3 100644 --- a/incl/iss/arch/tgc_c.h +++ b/incl/iss/arch/tgc_c.h @@ -53,7 +53,7 @@ template <> struct traits { static constexpr std::array reg_aliases{ {"ZERO", "RA", "SP", "GP", "TP", "T0", "T1", "T2", "S0", "S1", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10", "S11", "T3", "T4", "T5", "T6", "PC", "NEXT_PC", "PRIV", "DPC"}}; - enum constants {MISA_VAL=0b01000000000000000001000100000100, MARCHID_VAL=0x80000003, RFS=32, XLEN=32, CSR_SIZE=4096, INSTR_ALIGNMENT=2, fence=0, fencei=1, fencevmal=2, fencevmau=3, MUL_LEN=64}; + enum constants {MISA_VAL=0b01000000000000000001000100000100, MARCHID_VAL=0x80000003, RFS=32, INSTR_ALIGNMENT=2, XLEN=32, CSR_SIZE=4096, fence=0, fencei=1, fencevmal=2, fencevmau=3, MUL_LEN=64}; constexpr static unsigned FP_REGS_SIZE = 0; diff --git a/src/vm/interp/vm_tgc_c.cpp b/src/vm/interp/vm_tgc_c.cpp index 1da214b..b366450 100644 --- a/src/vm/interp/vm_tgc_c.cpp +++ b/src/vm/interp/vm_tgc_c.cpp @@ -2001,7 +2001,7 @@ typename vm_base::virt_addr_t vm_impl::execute_inst(finish_cond_e co // execute instruction try { { - uint32_t rs1_idx = rs1 + 8; + uint8_t rs1_idx = rs1 + 8; *(X+rs1_idx) = *(X+rs1_idx) >> shamt; } } catch(...){} @@ -2024,11 +2024,11 @@ typename vm_base::virt_addr_t vm_impl::execute_inst(finish_cond_e co // execute instruction try { if(shamt) { - uint32_t rs1_idx = rs1 + 8; + uint8_t rs1_idx = rs1 + 8; *(X+rs1_idx) = ((int32_t)*(X+rs1_idx)) >> shamt; } else if(traits::XLEN == 128) { - uint32_t rs1_idx = rs1 + 8; + uint8_t rs1_idx = rs1 + 8; *(X+rs1_idx) = ((int32_t)*(X+rs1_idx)) >> 64; } } catch(...){} @@ -2051,7 +2051,7 @@ typename vm_base::virt_addr_t vm_impl::execute_inst(finish_cond_e co // execute instruction try { { - uint32_t rs1_idx = rs1 + 8; + uint8_t rs1_idx = rs1 + 8; *(X+rs1_idx) = *(X+rs1_idx) & (int8_t)sext<6>(imm); } } catch(...){} @@ -2074,7 +2074,7 @@ typename vm_base::virt_addr_t vm_impl::execute_inst(finish_cond_e co // execute instruction try { { - uint32_t rd_idx = rd + 8; + uint8_t rd_idx = rd + 8; *(X+rd_idx) = *(X+rd_idx) - *(X+rs2 + 8); } } catch(...){} @@ -2097,7 +2097,7 @@ typename vm_base::virt_addr_t vm_impl::execute_inst(finish_cond_e co // execute instruction try { { - uint32_t rd_idx = rd + 8; + uint8_t rd_idx = rd + 8; *(X+rd_idx) = *(X+rd_idx) ^ *(X+rs2 + 8); } } catch(...){} @@ -2120,7 +2120,7 @@ typename vm_base::virt_addr_t vm_impl::execute_inst(finish_cond_e co // execute instruction try { { - uint32_t rd_idx = rd + 8; + uint8_t rd_idx = rd + 8; *(X+rd_idx) = *(X+rd_idx) | *(X+rs2 + 8); } } catch(...){} @@ -2143,7 +2143,7 @@ typename vm_base::virt_addr_t vm_impl::execute_inst(finish_cond_e co // execute instruction try { { - uint32_t rd_idx = rd + 8; + uint8_t rd_idx = rd + 8; *(X+rd_idx) = *(X+rd_idx) & *(X+rs2 + 8); } } catch(...){}