Compare commits
	
		
			1 Commits
		
	
	
		
			ac8eab6e25
			...
			f4ec21007b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f4ec21007b | 
 Submodule gen_input/CoreDSL-Instruction-Set-Description updated: 8f72c66a57...d51b3e30f5
									
								
							| @@ -421,7 +421,7 @@ private: | |||||||
|     iss::status write_ip(unsigned addr, reg_t val); |     iss::status write_ip(unsigned addr, reg_t val); | ||||||
|     iss::status read_hartid(unsigned addr, reg_t &val); |     iss::status read_hartid(unsigned addr, reg_t &val); | ||||||
|  |  | ||||||
|     reg_t mhartid_reg{0xF}; |     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; | ||||||
|     std::function<iss::status(phys_addr_t, unsigned, const uint8_t *const)> mem_write_cb; |     std::function<iss::status(phys_addr_t, unsigned, const uint8_t *const)> mem_write_cb; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -587,7 +587,7 @@ private: | |||||||
|         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); |         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); | ||||||
|         *NEXT_PC = *PC + 4; |         *NEXT_PC = *PC + 4; | ||||||
|         // execute instruction |         // execute instruction | ||||||
|         if(*(X+rs1) < *(X+rs2)) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<13>(imm);  |         if((int32_t)*(X+rs1) < (int32_t)*(X+rs2)) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<13>(imm);  | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 6); |         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 6); | ||||||
|         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); |         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); | ||||||
| @@ -620,7 +620,7 @@ private: | |||||||
|         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); |         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); | ||||||
|         *NEXT_PC = *PC + 4; |         *NEXT_PC = *PC + 4; | ||||||
|         // execute instruction |         // execute instruction | ||||||
|         if(*(X+rs1) >= *(X+rs2)) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<13>(imm);  |         if((int32_t)*(X+rs1) >= (int32_t)*(X+rs2)) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<13>(imm);  | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 7); |         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 7); | ||||||
|         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); |         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); | ||||||
| @@ -1084,7 +1084,7 @@ private: | |||||||
|         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); |         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); | ||||||
|         *NEXT_PC = *PC + 4; |         *NEXT_PC = *PC + 4; | ||||||
|         // execute instruction |         // execute instruction | ||||||
|         if(rd !=  0) *(X+rd) = *(X+rs1) < imm?  1 :  0;  |         if(rd !=  0) *(X+rd) = *(X+rs1) < (int16_t)sext<12>(imm)?  1 :  0;  | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 20); |         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 20); | ||||||
|         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); |         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); | ||||||
| @@ -1258,7 +1258,7 @@ private: | |||||||
|         	raise(0, 0); |         	raise(0, 0); | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|         	if(rd !=  0) *(X+rd) = ((uint8_t)*(X+rs1)) >> shamt;  |         	if(rd !=  0) *(X+rd) = *(X+rs1) >> shamt;  | ||||||
|         } |         } | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 25); |         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 25); | ||||||
| @@ -1296,7 +1296,7 @@ private: | |||||||
|         	raise(0, 0); |         	raise(0, 0); | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|         	if(rd !=  0) *(X+rd) = *(X+rs1) >> shamt;  |         	if(rd !=  0) *(X+rd) = (int32_t)*(X+rs1) >> shamt;  | ||||||
|         } |         } | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 26); |         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 26); | ||||||
| @@ -1429,7 +1429,7 @@ private: | |||||||
|         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); |         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); | ||||||
|         *NEXT_PC = *PC + 4; |         *NEXT_PC = *PC + 4; | ||||||
|         // execute instruction |         // execute instruction | ||||||
|         if(rd !=  0) *(X+rd) = *(X+rs1) < *(X+rs2)?  1 :  0;  |         if(rd !=  0) *(X+rd) = (int32_t)*(X+rs1) < (int32_t)*(X+rs2)?  1 :  0;  | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 30); |         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 30); | ||||||
|         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); |         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); | ||||||
| @@ -1528,7 +1528,7 @@ private: | |||||||
|         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); |         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); | ||||||
|         *NEXT_PC = *PC + 4; |         *NEXT_PC = *PC + 4; | ||||||
|         // execute instruction |         // execute instruction | ||||||
|         if(rd !=  0) *(X+rd) = *(X+rs1) << (*(X+rs2) & (traits::XLEN - 1));  |         if(rd !=  0) *(X+rd) = *(X+rs1) >> (*(X+rs2) & (traits::XLEN - 1));  | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 33); |         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 33); | ||||||
|         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); |         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); | ||||||
| @@ -1561,7 +1561,7 @@ private: | |||||||
|         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); |         uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]); | ||||||
|         *NEXT_PC = *PC + 4; |         *NEXT_PC = *PC + 4; | ||||||
|         // execute instruction |         // execute instruction | ||||||
|         if(rd !=  0) *(X+rd) = *(X+rs1) >> (*(X+rs2) & (traits::XLEN - 1));  |         if(rd !=  0) *(X+rd) = (int32_t)*(X+rs1) >> (*(X+rs2) & (traits::XLEN - 1));  | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 34); |         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 34); | ||||||
|         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); |         auto* trap_state = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::TRAP_STATE]); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user