Compare commits
	
		
			1 Commits
		
	
	
		
			49d09a05d7
			...
			c42e336509
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| c42e336509 | 
 Submodule gen_input/CoreDSL-Instruction-Set-Description updated: e7aaec6ad9...b005607fc3
									
								
							| @@ -29,7 +29,13 @@ | |||||||
|  * POSSIBILITY OF SUCH DAMAGE. |  * POSSIBILITY OF SUCH DAMAGE. | ||||||
|  * |  * | ||||||
|  *******************************************************************************/ |  *******************************************************************************/ | ||||||
|  | <% | ||||||
|  | import com.minres.coredsl.util.BigIntegerWithRadix | ||||||
|  |  | ||||||
|  | def nativeTypeSize(int size){ | ||||||
|  |     if(size<=8) return 8; else if(size<=16) return 16; else if(size<=32) return 32; else return 64; | ||||||
|  | } | ||||||
|  | %> | ||||||
| #include "../fp_functions.h" | #include "../fp_functions.h" | ||||||
| #include <iss/arch/${coreDef.name.toLowerCase()}.h> | #include <iss/arch/${coreDef.name.toLowerCase()}.h> | ||||||
| #include <iss/arch/riscv_hart_m_p.h> | #include <iss/arch/riscv_hart_m_p.h> | ||||||
| @@ -204,8 +210,8 @@ private: | |||||||
|         } |         } | ||||||
|         // used registers<%instr.usedVariables.each{ k,v-> |         // used registers<%instr.usedVariables.each{ k,v-> | ||||||
|             if(v.isArray) {%> |             if(v.isArray) {%> | ||||||
|         auto* ${k} = reinterpret_cast<uint${v.type.size}_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::${k}0]);<% }else{ %>  |         auto* ${k} = reinterpret_cast<uint${nativeTypeSize(v.type.size)}_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::${k}0]);<% }else{ %>  | ||||||
|         auto* ${k} = reinterpret_cast<uint${v.type.size}_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::${k}]); |         auto* ${k} = reinterpret_cast<uint${nativeTypeSize(v.type.size)}_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::${k}]); | ||||||
|         <%}}%>// calculate next pc value |         <%}}%>// calculate next pc value | ||||||
|         *NEXT_PC = *PC + ${instr.length/8}; |         *NEXT_PC = *PC + ${instr.length/8}; | ||||||
|         // execute instruction |         // execute instruction | ||||||
|   | |||||||
| @@ -311,6 +311,8 @@ protected: | |||||||
|     iss::status write_dcsr_dcsr(unsigned addr, reg_t val); |     iss::status write_dcsr_dcsr(unsigned addr, reg_t val); | ||||||
|     iss::status read_dcsr_reg(unsigned addr, reg_t &val); |     iss::status read_dcsr_reg(unsigned addr, reg_t &val); | ||||||
|     iss::status write_dcsr_reg(unsigned addr, reg_t val); |     iss::status write_dcsr_reg(unsigned addr, reg_t val); | ||||||
|  |     iss::status read_dpc_reg(unsigned addr, reg_t &val); | ||||||
|  |     iss::status write_dpc_reg(unsigned addr, reg_t val); | ||||||
|  |  | ||||||
|     reg_t mhartid_reg{0x0}; |     reg_t mhartid_reg{0x0}; | ||||||
|     std::function<iss::status(phys_addr_t, unsigned, uint8_t *const)>mem_read_cb; |     std::function<iss::status(phys_addr_t, unsigned, uint8_t *const)>mem_read_cb; | ||||||
| @@ -322,7 +324,7 @@ protected: | |||||||
|     unsigned clic_num_irq{0}; |     unsigned clic_num_irq{0}; | ||||||
|     unsigned clic_num_trigger{0}; |     unsigned clic_num_trigger{0}; | ||||||
|     unsigned mcause_max_irq{16}; |     unsigned mcause_max_irq{16}; | ||||||
|     bool debug_mode_active{false}; |     inline bool debug_mode_active() {return this->reg.PRIV&0x4;} | ||||||
| }; | }; | ||||||
|  |  | ||||||
| template <typename BASE, features_e FEAT> | template <typename BASE, features_e FEAT> | ||||||
| @@ -397,8 +399,8 @@ riscv_hart_m_p<BASE, FEAT>::riscv_hart_m_p() | |||||||
|         csr_rd_cb[dscratch0] = &this_class::read_dcsr_reg; |         csr_rd_cb[dscratch0] = &this_class::read_dcsr_reg; | ||||||
|         csr_wr_cb[dscratch1] = &this_class::write_dcsr_reg; |         csr_wr_cb[dscratch1] = &this_class::write_dcsr_reg; | ||||||
|         csr_rd_cb[dscratch1] = &this_class::read_dcsr_reg; |         csr_rd_cb[dscratch1] = &this_class::read_dcsr_reg; | ||||||
|         csr_wr_cb[dpc] = &this_class::write_dcsr_reg; |         csr_wr_cb[dpc] = &this_class::write_dpc_reg; | ||||||
|         csr_rd_cb[dpc] = &this_class::read_dcsr_reg; |         csr_rd_cb[dpc] = &this_class::read_dpc_reg; | ||||||
|         csr_wr_cb[dcsr] = &this_class::write_dcsr_dcsr; |         csr_wr_cb[dcsr] = &this_class::write_dcsr_dcsr; | ||||||
|         csr_rd_cb[dcsr] = &this_class::read_dcsr_reg; |         csr_rd_cb[dcsr] = &this_class::read_dcsr_reg; | ||||||
|     } |     } | ||||||
| @@ -815,7 +817,7 @@ template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT> | |||||||
| } | } | ||||||
|  |  | ||||||
| template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT>::write_dcsr_dcsr(unsigned addr, reg_t val) { | template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT>::write_dcsr_dcsr(unsigned addr, reg_t val) { | ||||||
|     if(!debug_mode_active) |     if(!debug_mode_active()) | ||||||
|         throw illegal_instruction_fault(this->fault_data); |         throw illegal_instruction_fault(this->fault_data); | ||||||
|     //                  +-------------- ebreakm |     //                  +-------------- ebreakm | ||||||
|     //                  |   +---------- stepi |     //                  |   +---------- stepi | ||||||
| @@ -826,19 +828,33 @@ template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT> | |||||||
| } | } | ||||||
|  |  | ||||||
| template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT>::read_dcsr_reg(unsigned addr, reg_t &val) { | template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT>::read_dcsr_reg(unsigned addr, reg_t &val) { | ||||||
|     if(!debug_mode_active) |     if(!debug_mode_active()) | ||||||
|         throw illegal_instruction_fault(this->fault_data); |         throw illegal_instruction_fault(this->fault_data); | ||||||
|     val = csr[addr]; |     val = csr[addr]; | ||||||
|     return iss::Ok; |     return iss::Ok; | ||||||
| } | } | ||||||
|  |  | ||||||
| template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT>::write_dcsr_reg(unsigned addr, reg_t val) { | template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT>::write_dcsr_reg(unsigned addr, reg_t val) { | ||||||
|     if(!debug_mode_active) |     if(!debug_mode_active()) | ||||||
|         throw illegal_instruction_fault(this->fault_data); |         throw illegal_instruction_fault(this->fault_data); | ||||||
|     csr[addr] = val; |     csr[addr] = val; | ||||||
|     return iss::Ok; |     return iss::Ok; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT>::read_dpc_reg(unsigned addr, reg_t &val) { | ||||||
|  |     if(!debug_mode_active()) | ||||||
|  |         throw illegal_instruction_fault(this->fault_data); | ||||||
|  |     val = this->reg.DPC; | ||||||
|  |     return iss::Ok; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT>::write_dpc_reg(unsigned addr, reg_t val) { | ||||||
|  |     if(!debug_mode_active()) | ||||||
|  |         throw illegal_instruction_fault(this->fault_data); | ||||||
|  |     this->reg.DPC = val; | ||||||
|  |     return iss::Ok; | ||||||
|  | } | ||||||
|  |  | ||||||
| template <typename BASE, features_e FEAT> | template <typename BASE, features_e FEAT> | ||||||
| iss::status riscv_hart_m_p<BASE, FEAT>::read_mem(phys_addr_t paddr, unsigned length, uint8_t *const data) { | iss::status riscv_hart_m_p<BASE, FEAT>::read_mem(phys_addr_t paddr, unsigned length, uint8_t *const data) { | ||||||
|     if(mem_read_cb) return mem_read_cb(paddr, length, data); |     if(mem_read_cb) return mem_read_cb(paddr, length, data); | ||||||
|   | |||||||
| @@ -328,6 +328,8 @@ protected: | |||||||
|     iss::status write_dcsr_dcsr(unsigned addr, reg_t val); |     iss::status write_dcsr_dcsr(unsigned addr, reg_t val); | ||||||
|     iss::status read_dcsr_reg(unsigned addr, reg_t &val); |     iss::status read_dcsr_reg(unsigned addr, reg_t &val); | ||||||
|     iss::status write_dcsr_reg(unsigned addr, reg_t val); |     iss::status write_dcsr_reg(unsigned addr, reg_t val); | ||||||
|  |     iss::status read_dpc_reg(unsigned addr, reg_t &val); | ||||||
|  |     iss::status write_dpc_reg(unsigned addr, reg_t val); | ||||||
|  |  | ||||||
|     reg_t mhartid_reg{0x0}; |     reg_t mhartid_reg{0x0}; | ||||||
|     std::function<iss::status(phys_addr_t, unsigned, uint8_t *const)>mem_read_cb; |     std::function<iss::status(phys_addr_t, unsigned, uint8_t *const)>mem_read_cb; | ||||||
| @@ -339,7 +341,7 @@ protected: | |||||||
|     unsigned clic_num_irq{0}; |     unsigned clic_num_irq{0}; | ||||||
|     unsigned clic_num_trigger{0}; |     unsigned clic_num_trigger{0}; | ||||||
|     unsigned mcause_max_irq{16}; |     unsigned mcause_max_irq{16}; | ||||||
|     bool debug_mode_active{false}; |     inline bool debug_mode_active() {return this->reg.PRIV&0x4;} | ||||||
| }; | }; | ||||||
|  |  | ||||||
| template <typename BASE, features_e FEAT> | template <typename BASE, features_e FEAT> | ||||||
| @@ -469,8 +471,8 @@ riscv_hart_mu_p<BASE, FEAT>::riscv_hart_mu_p() | |||||||
|         csr_rd_cb[dscratch0] = &this_class::read_dcsr_reg; |         csr_rd_cb[dscratch0] = &this_class::read_dcsr_reg; | ||||||
|         csr_wr_cb[dscratch1] = &this_class::write_dcsr_reg; |         csr_wr_cb[dscratch1] = &this_class::write_dcsr_reg; | ||||||
|         csr_rd_cb[dscratch1] = &this_class::read_dcsr_reg; |         csr_rd_cb[dscratch1] = &this_class::read_dcsr_reg; | ||||||
|         csr_wr_cb[dpc] = &this_class::write_dcsr_reg; |         csr_wr_cb[dpc] = &this_class::write_dpc_reg; | ||||||
|         csr_rd_cb[dpc] = &this_class::read_dcsr_reg; |         csr_rd_cb[dpc] = &this_class::read_dpc_reg; | ||||||
|         csr_wr_cb[dcsr] = &this_class::write_dcsr_dcsr; |         csr_wr_cb[dcsr] = &this_class::write_dcsr_dcsr; | ||||||
|         csr_rd_cb[dcsr] = &this_class::read_dcsr_reg; |         csr_rd_cb[dcsr] = &this_class::read_dcsr_reg; | ||||||
|     } |     } | ||||||
| @@ -979,7 +981,7 @@ template <typename BASE, features_e FEAT> iss::status riscv_hart_mu_p<BASE, FEAT | |||||||
| } | } | ||||||
|  |  | ||||||
| template <typename BASE, features_e FEAT> iss::status riscv_hart_mu_p<BASE, FEAT>::write_dcsr_dcsr(unsigned addr, reg_t val) { | template <typename BASE, features_e FEAT> iss::status riscv_hart_mu_p<BASE, FEAT>::write_dcsr_dcsr(unsigned addr, reg_t val) { | ||||||
|     if(!debug_mode_active) |     if(!debug_mode_active()) | ||||||
|         throw illegal_instruction_fault(this->fault_data); |         throw illegal_instruction_fault(this->fault_data); | ||||||
|     //                  +-------------- ebreakm |     //                  +-------------- ebreakm | ||||||
|     //                  |   +---------- stepi |     //                  |   +---------- stepi | ||||||
| @@ -990,19 +992,32 @@ template <typename BASE, features_e FEAT> iss::status riscv_hart_mu_p<BASE, FEAT | |||||||
| } | } | ||||||
|  |  | ||||||
| template <typename BASE, features_e FEAT> iss::status riscv_hart_mu_p<BASE, FEAT>::read_dcsr_reg(unsigned addr, reg_t &val) { | template <typename BASE, features_e FEAT> iss::status riscv_hart_mu_p<BASE, FEAT>::read_dcsr_reg(unsigned addr, reg_t &val) { | ||||||
|     if(!debug_mode_active) |     if(!debug_mode_active()) | ||||||
|         throw illegal_instruction_fault(this->fault_data); |         throw illegal_instruction_fault(this->fault_data); | ||||||
|     val = csr[addr]; |     val = csr[addr]; | ||||||
|     return iss::Ok; |     return iss::Ok; | ||||||
| } | } | ||||||
|  |  | ||||||
| template <typename BASE, features_e FEAT> iss::status riscv_hart_mu_p<BASE, FEAT>::write_dcsr_reg(unsigned addr, reg_t val) { | template <typename BASE, features_e FEAT> iss::status riscv_hart_mu_p<BASE, FEAT>::write_dcsr_reg(unsigned addr, reg_t val) { | ||||||
|     if(!debug_mode_active) |     if(!debug_mode_active()) | ||||||
|         throw illegal_instruction_fault(this->fault_data); |         throw illegal_instruction_fault(this->fault_data); | ||||||
|     csr[addr] = val; |     csr[addr] = val; | ||||||
|     return iss::Ok; |     return iss::Ok; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT>::read_dpc_reg(unsigned addr, reg_t &val) { | ||||||
|  |     if(!debug_mode_active()) | ||||||
|  |         throw illegal_instruction_fault(this->fault_data); | ||||||
|  |     val = this->reg.DPC; | ||||||
|  |     return iss::Ok; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT>::write_dpc_reg(unsigned addr, reg_t val) { | ||||||
|  |     if(!debug_mode_active()) | ||||||
|  |         throw illegal_instruction_fault(this->fault_data); | ||||||
|  |     this->reg.DPC = val; | ||||||
|  |     return iss::Ok; | ||||||
|  | } | ||||||
|  |  | ||||||
| template<typename BASE, features_e FEAT> | template<typename BASE, features_e FEAT> | ||||||
| iss::status riscv_hart_mu_p<BASE, FEAT>::write_intthresh(unsigned addr, reg_t val) { | iss::status riscv_hart_mu_p<BASE, FEAT>::write_intthresh(unsigned addr, reg_t val) { | ||||||
|   | |||||||
| @@ -47,18 +47,18 @@ template <> struct traits<tgc_c> { | |||||||
|  |  | ||||||
|     constexpr static char const* const core_type = "TGC_C"; |     constexpr static char const* const core_type = "TGC_C"; | ||||||
|      |      | ||||||
|     static constexpr std::array<const char*, 35> reg_names{ |     static constexpr std::array<const char*, 36> reg_names{ | ||||||
|         {"X0", "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "X11", "X12", "X13", "X14", "X15", "X16", "X17", "X18", "X19", "X20", "X21", "X22", "X23", "X24", "X25", "X26", "X27", "X28", "X29", "X30", "X31", "PC", "NEXT_PC", "PRIV"}}; |         {"X0", "X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "X11", "X12", "X13", "X14", "X15", "X16", "X17", "X18", "X19", "X20", "X21", "X22", "X23", "X24", "X25", "X26", "X27", "X28", "X29", "X30", "X31", "PC", "NEXT_PC", "PRIV", "DPC"}}; | ||||||
|   |   | ||||||
|     static constexpr std::array<const char*, 35> reg_aliases{ |     static constexpr std::array<const char*, 36> 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"}}; |         {"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, 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, XLEN=32, CSR_SIZE=4096, INSTR_ALIGNMENT=2, fence=0, fencei=1, fencevmal=2, fencevmau=3, MUL_LEN=64}; | ||||||
|  |  | ||||||
|     constexpr static unsigned FP_REGS_SIZE = 0; |     constexpr static unsigned FP_REGS_SIZE = 0; | ||||||
|  |  | ||||||
|     enum reg_e { |     enum reg_e { | ||||||
|         X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19, X20, X21, X22, X23, X24, X25, X26, X27, X28, X29, X30, X31, PC, NEXT_PC, PRIV, NUM_REGS, |         X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19, X20, X21, X22, X23, X24, X25, X26, X27, X28, X29, X30, X31, PC, NEXT_PC, PRIV, DPC, NUM_REGS, | ||||||
|         TRAP_STATE=NUM_REGS, |         TRAP_STATE=NUM_REGS, | ||||||
|         PENDING_TRAP, |         PENDING_TRAP, | ||||||
|         ICOUNT, |         ICOUNT, | ||||||
| @@ -76,11 +76,11 @@ template <> struct traits<tgc_c> { | |||||||
|  |  | ||||||
|     using phys_addr_t = iss::typed_addr_t<iss::address_type::PHYSICAL>; |     using phys_addr_t = iss::typed_addr_t<iss::address_type::PHYSICAL>; | ||||||
|  |  | ||||||
|     static constexpr std::array<const uint32_t, 40> reg_bit_widths{ |     static constexpr std::array<const uint32_t, 41> reg_bit_widths{ | ||||||
|         {32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,8,32,32,64,64,64}}; |         {32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,8,32,32,32,64,64,64}}; | ||||||
|  |  | ||||||
|     static constexpr std::array<const uint32_t, 40> reg_byte_offsets{ |     static constexpr std::array<const uint32_t, 41> reg_byte_offsets{ | ||||||
|         {0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,137,141,145,153,161}}; |         {0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,137,141,145,149,157,165}}; | ||||||
|  |  | ||||||
|     static const uint64_t addr_mask = (reg_t(1) << (XLEN - 1)) | ((reg_t(1) << (XLEN - 1)) - 1); |     static const uint64_t addr_mask = (reg_t(1) << (XLEN - 1)) | ((reg_t(1) << (XLEN - 1)) - 1); | ||||||
|  |  | ||||||
| @@ -133,51 +133,52 @@ template <> struct traits<tgc_c> { | |||||||
|         SRET = 41, |         SRET = 41, | ||||||
|         MRET = 42, |         MRET = 42, | ||||||
|         WFI = 43, |         WFI = 43, | ||||||
|         CSRRW = 44, |         DRET = 44, | ||||||
|         CSRRS = 45, |         CSRRW = 45, | ||||||
|         CSRRC = 46, |         CSRRS = 46, | ||||||
|         CSRRWI = 47, |         CSRRC = 47, | ||||||
|         CSRRSI = 48, |         CSRRWI = 48, | ||||||
|         CSRRCI = 49, |         CSRRSI = 49, | ||||||
|         FENCE_I = 50, |         CSRRCI = 50, | ||||||
|         MUL = 51, |         FENCE_I = 51, | ||||||
|         MULH = 52, |         MUL = 52, | ||||||
|         MULHSU = 53, |         MULH = 53, | ||||||
|         MULHU = 54, |         MULHSU = 54, | ||||||
|         DIV = 55, |         MULHU = 55, | ||||||
|         DIVU = 56, |         DIV = 56, | ||||||
|         REM = 57, |         DIVU = 57, | ||||||
|         REMU = 58, |         REM = 58, | ||||||
|         CADDI4SPN = 59, |         REMU = 59, | ||||||
|         CLW = 60, |         CADDI4SPN = 60, | ||||||
|         CSW = 61, |         CLW = 61, | ||||||
|         CADDI = 62, |         CSW = 62, | ||||||
|         CNOP = 63, |         CADDI = 63, | ||||||
|         CJAL = 64, |         CNOP = 64, | ||||||
|         CLI = 65, |         CJAL = 65, | ||||||
|         CLUI = 66, |         CLI = 66, | ||||||
|         CADDI16SP = 67, |         CLUI = 67, | ||||||
|         __reserved_clui = 68, |         CADDI16SP = 68, | ||||||
|         CSRLI = 69, |         __reserved_clui = 69, | ||||||
|         CSRAI = 70, |         CSRLI = 70, | ||||||
|         CANDI = 71, |         CSRAI = 71, | ||||||
|         CSUB = 72, |         CANDI = 72, | ||||||
|         CXOR = 73, |         CSUB = 73, | ||||||
|         COR = 74, |         CXOR = 74, | ||||||
|         CAND = 75, |         COR = 75, | ||||||
|         CJ = 76, |         CAND = 76, | ||||||
|         CBEQZ = 77, |         CJ = 77, | ||||||
|         CBNEZ = 78, |         CBEQZ = 78, | ||||||
|         CSLLI = 79, |         CBNEZ = 79, | ||||||
|         CLWSP = 80, |         CSLLI = 80, | ||||||
|         CMV = 81, |         CLWSP = 81, | ||||||
|         CJR = 82, |         CMV = 82, | ||||||
|         __reserved_cmv = 83, |         CJR = 83, | ||||||
|         CADD = 84, |         __reserved_cmv = 84, | ||||||
|         CJALR = 85, |         CADD = 85, | ||||||
|         CEBREAK = 86, |         CJALR = 86, | ||||||
|         CSWSP = 87, |         CEBREAK = 87, | ||||||
|         DII = 88, |         CSWSP = 88, | ||||||
|  |         DII = 89, | ||||||
|         MAX_OPCODE |         MAX_OPCODE | ||||||
|     }; |     }; | ||||||
| }; | }; | ||||||
| @@ -254,6 +255,7 @@ protected: | |||||||
|         uint32_t PC = 0;  |         uint32_t PC = 0;  | ||||||
|         uint32_t NEXT_PC = 0;  |         uint32_t NEXT_PC = 0;  | ||||||
|         uint8_t PRIV = 0;  |         uint8_t PRIV = 0;  | ||||||
|  |         uint32_t DPC = 0; | ||||||
|         uint32_t trap_state = 0, pending_trap = 0; |         uint32_t trap_state = 0, pending_trap = 0; | ||||||
|         uint64_t icount = 0; |         uint64_t icount = 0; | ||||||
|         uint64_t cycle = 0; |         uint64_t cycle = 0; | ||||||
|   | |||||||
| @@ -39,10 +39,10 @@ | |||||||
|  |  | ||||||
| using namespace iss::arch; | using namespace iss::arch; | ||||||
|  |  | ||||||
| constexpr std::array<const char*, 35>    iss::arch::traits<iss::arch::tgc_c>::reg_names; | constexpr std::array<const char*, 36>    iss::arch::traits<iss::arch::tgc_c>::reg_names; | ||||||
| constexpr std::array<const char*, 35>    iss::arch::traits<iss::arch::tgc_c>::reg_aliases; | constexpr std::array<const char*, 36>    iss::arch::traits<iss::arch::tgc_c>::reg_aliases; | ||||||
| constexpr std::array<const uint32_t, 40> iss::arch::traits<iss::arch::tgc_c>::reg_bit_widths; | constexpr std::array<const uint32_t, 41> iss::arch::traits<iss::arch::tgc_c>::reg_bit_widths; | ||||||
| constexpr std::array<const uint32_t, 40> iss::arch::traits<iss::arch::tgc_c>::reg_byte_offsets; | constexpr std::array<const uint32_t, 41> iss::arch::traits<iss::arch::tgc_c>::reg_byte_offsets; | ||||||
|  |  | ||||||
| tgc_c::tgc_c() { | tgc_c::tgc_c() { | ||||||
|     reg.icount = 0; |     reg.icount = 0; | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user