cast to u32
This commit is contained in:
		
							parent
							
								
									10ed1fa653
								
							
						
					
					
						commit
						acf38332d5
					
				|  | @ -10,6 +10,7 @@ | |||
| #define Execute_H | ||||
| 
 | ||||
| #define SC_INCLUDE_DYNAMIC_PROCESSES | ||||
| #include <type_traits> | ||||
| 
 | ||||
| #include "systemc" | ||||
| #include "tlm.h" | ||||
|  | @ -175,6 +176,12 @@ namespace riscv_tlm { | |||
|          */ | ||||
|         using extension_base<T>::extension_base; | ||||
| 
 | ||||
|         /**
 | ||||
|          * @brief Deduce signed type for T type | ||||
|          */ | ||||
|         using signed_T = typename std::make_signed<T>::type; | ||||
| 
 | ||||
| 
 | ||||
|         /**
 | ||||
|          * @brief Access to funct7 field | ||||
|          * @return funct7 field | ||||
|  | @ -348,7 +355,7 @@ namespace riscv_tlm { | |||
| 
 | ||||
|             rd = this->get_rd(); | ||||
|             imm = get_imm_U() << 12; | ||||
|             this->regs->setValue(rd, static_cast<std::int32_t>(imm)); | ||||
|             this->regs->setValue(rd, static_cast<signed_T>(imm)); | ||||
| 
 | ||||
|             this->logger->debug("{} ns. PC: 0x{:x}. LUI: x{:d} <- 0x{:x}", sc_core::sc_time_stamp().value(), | ||||
|                                 this->regs->getPC(), | ||||
|  | @ -360,11 +367,11 @@ namespace riscv_tlm { | |||
|         bool Exec_AUIPC() const { | ||||
|             unsigned int rd; | ||||
|             std::uint32_t imm; | ||||
|             std::uint32_t new_pc; | ||||
|             T new_pc; | ||||
| 
 | ||||
|             rd = this->get_rd(); | ||||
|             imm = get_imm_U() << 12; | ||||
|             new_pc = static_cast<std::uint32_t>(this->regs->getPC() + imm); | ||||
|             new_pc = static_cast<signed_T>(this->regs->getPC() + imm); | ||||
| 
 | ||||
|             this->regs->setValue(rd, new_pc); | ||||
| 
 | ||||
|  | @ -379,7 +386,7 @@ namespace riscv_tlm { | |||
|         bool Exec_JAL() const { | ||||
|             std::int32_t mem_addr; | ||||
|             unsigned int rd; | ||||
|             std::uint32_t new_pc, old_pc; | ||||
|             T new_pc, old_pc; | ||||
| 
 | ||||
|             rd = this->get_rd(); | ||||
|             mem_addr = get_imm_J(); | ||||
|  | @ -401,7 +408,7 @@ namespace riscv_tlm { | |||
|         bool Exec_JALR() { | ||||
|             std::uint32_t mem_addr; | ||||
|             unsigned int rd, rs1; | ||||
|             std::uint32_t new_pc, old_pc; | ||||
|             T new_pc, old_pc; | ||||
| 
 | ||||
|             rd = this->get_rd(); | ||||
|             rs1 = this->get_rs1(); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue