From 4a19e279263ca8211a17aac77f6495e4271fff34 Mon Sep 17 00:00:00 2001 From: Eyck-Alexander Jentzsch Date: Wed, 14 Aug 2024 13:52:08 +0200 Subject: [PATCH] adds changes due to generator being more inline with others --- src/vm/llvm/vm_tgc5c.cpp | 784 +++++++++++++++++++-------------------- 1 file changed, 392 insertions(+), 392 deletions(-) diff --git a/src/vm/llvm/vm_tgc5c.cpp b/src/vm/llvm/vm_tgc5c.cpp index cbbe348..4c8b91b 100644 --- a/src/vm/llvm/vm_tgc5c.cpp +++ b/src/vm/llvm/vm_tgc5c.cpp @@ -358,8 +358,8 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_const(32,(uint32_t)((int32_t)imm)), - get_reg_ptr(rd + traits::X0), false); + this->gen_const(32,(uint32_t)((int32_t)imm)), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -404,8 +404,8 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_const(32,(uint32_t)(PC+(int32_t)imm)), - get_reg_ptr(rd + traits::X0), false); + this->gen_const(32,(uint32_t)(PC+(int32_t)imm)), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -456,8 +456,8 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_const(32,(uint32_t)(PC+4)), - get_reg_ptr(rd + traits::X0), false); + this->gen_const(32,(uint32_t)(PC+4)), + get_reg_ptr(rd + traits::X0), false); } auto PC_val_v = new_pc; this->builder.CreateStore(this->gen_const(32,PC_val_v), get_reg_ptr(traits::NEXT_PC), false); @@ -510,7 +510,7 @@ private: auto new_pc =this->gen_ext( (this->builder.CreateAnd( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 64,true)) ), this->gen_ext(this->gen_const(32,addr_mask), 64,false)) @@ -533,8 +533,8 @@ private: { if(rd!=0) { this->builder.CreateStore( - this->gen_const(32,(uint32_t)(PC+4)), - get_reg_ptr(rd + traits::X0), false); + this->gen_const(32,(uint32_t)(PC+4)), + get_reg_ptr(rd + traits::X0), false); } auto PC_val_v = new_pc; this->builder.CreateStore(PC_val_v, get_reg_ptr(traits::NEXT_PC), false); @@ -588,8 +588,8 @@ private: auto bb_merge = BasicBlock::Create(this->mod->getContext(), "bb_merge", this->func, this->leave_blk); auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_EQ, - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_reg_load(rs2+ traits::X0, 0)) + this->gen_reg_load(traits::X0+ rs1), + this->gen_reg_load(traits::X0+ rs2)) ), bb_then, bb_merge); this->builder.SetInsertPoint(bb_then); { @@ -651,8 +651,8 @@ private: auto bb_merge = BasicBlock::Create(this->mod->getContext(), "bb_merge", this->func, this->leave_blk); auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_NE, - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_reg_load(rs2+ traits::X0, 0)) + this->gen_reg_load(traits::X0+ rs1), + this->gen_reg_load(traits::X0+ rs2)) ), bb_then, bb_merge); this->builder.SetInsertPoint(bb_then); { @@ -715,10 +715,10 @@ private: auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_SLT, this->gen_ext( - this->gen_reg_load(rs1+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs1), 32, false), this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs2), 32, false)) ), bb_then, bb_merge); this->builder.SetInsertPoint(bb_then); @@ -782,10 +782,10 @@ private: auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_SGE, this->gen_ext( - this->gen_reg_load(rs1+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs1), 32, false), this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs2), 32, false)) ), bb_then, bb_merge); this->builder.SetInsertPoint(bb_then); @@ -848,8 +848,8 @@ private: auto bb_merge = BasicBlock::Create(this->mod->getContext(), "bb_merge", this->func, this->leave_blk); auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_ULT, - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_reg_load(rs2+ traits::X0, 0)) + this->gen_reg_load(traits::X0+ rs1), + this->gen_reg_load(traits::X0+ rs2)) ), bb_then, bb_merge); this->builder.SetInsertPoint(bb_then); { @@ -911,8 +911,8 @@ private: auto bb_merge = BasicBlock::Create(this->mod->getContext(), "bb_merge", this->func, this->leave_blk); auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_UGE, - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_reg_load(rs2+ traits::X0, 0)) + this->gen_reg_load(traits::X0+ rs1), + this->gen_reg_load(traits::X0+ rs2)) ), bb_then, bb_merge); this->builder.SetInsertPoint(bb_then); { @@ -972,7 +972,7 @@ private: else{ auto load_address =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 64,true)) ), 32, true); @@ -981,10 +981,10 @@ private: 8, false); if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - res, - 32, true), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + res, + 32, true), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1030,7 +1030,7 @@ private: else{ auto load_address =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 64,true)) ), 32, true); @@ -1039,10 +1039,10 @@ private: 16, false); if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - res, - 32, true), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + res, + 32, true), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1088,7 +1088,7 @@ private: else{ auto load_address =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 64,true)) ), 32, true); @@ -1097,10 +1097,10 @@ private: 32, false); if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - res, - 32, true), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + res, + 32, true), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1146,17 +1146,17 @@ private: else{ auto load_address =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 64,true)) ), 32, true); auto res =this->gen_read_mem(traits::MEM, load_address, 1); if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - res, - 32, false), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + res, + 32, false), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1202,17 +1202,17 @@ private: else{ auto load_address =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 64,true)) ), 32, true); auto res =this->gen_read_mem(traits::MEM, load_address, 2); if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - res, - 32, false), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + res, + 32, false), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1258,14 +1258,14 @@ private: else{ auto store_address =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 64,true)) ), 32, true); this->gen_write_mem(traits::MEM, store_address, this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs2), 8, false)); } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1311,14 +1311,14 @@ private: else{ auto store_address =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 64,true)) ), 32, true); this->gen_write_mem(traits::MEM, store_address, this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs2), 16, false)); } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1364,14 +1364,14 @@ private: else{ auto store_address =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 64,true)) ), 32, true); this->gen_write_mem(traits::MEM, store_address, this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs2), 32, false)); } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1417,13 +1417,13 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), - this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 64,true)) - ), - 32, true), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + (this->builder.CreateAdd( + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), + this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 64,true)) + ), + 32, true), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1469,15 +1469,15 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext(this->gen_choose((this->builder.CreateICmp(ICmpInst::ICMP_SLT, - this->gen_ext( - this->gen_reg_load(rs1+ traits::X0, 0), 32,true), - this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 32,true)) - ), - this->gen_const(8,1), - this->gen_const(8,0), - 1), 32), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext(this->gen_choose((this->builder.CreateICmp(ICmpInst::ICMP_SLT, + this->gen_ext( + this->gen_reg_load(traits::X0+ rs1), 32,true), + this->gen_ext(this->gen_const(16,(int16_t)sext<12>(imm)), 32,true)) + ), + this->gen_const(8,1), + this->gen_const(8,0), + 1), 32), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1523,14 +1523,14 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext(this->gen_choose((this->builder.CreateICmp(ICmpInst::ICMP_ULT, - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_const(32,(uint32_t)((int16_t)sext<12>(imm)))) - ), - this->gen_const(8,1), - this->gen_const(8,0), - 1), 32), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext(this->gen_choose((this->builder.CreateICmp(ICmpInst::ICMP_ULT, + this->gen_reg_load(traits::X0+ rs1), + this->gen_const(32,(uint32_t)((int16_t)sext<12>(imm)))) + ), + this->gen_const(8,1), + this->gen_const(8,0), + 1), 32), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1576,11 +1576,11 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->builder.CreateXor( - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_const(32,(uint32_t)((int16_t)sext<12>(imm)))) - , - get_reg_ptr(rd + traits::X0), false); + this->builder.CreateXor( + this->gen_reg_load(traits::X0+ rs1), + this->gen_const(32,(uint32_t)((int16_t)sext<12>(imm)))) + , + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1626,11 +1626,11 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->builder.CreateOr( - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_const(32,(uint32_t)((int16_t)sext<12>(imm)))) - , - get_reg_ptr(rd + traits::X0), false); + this->builder.CreateOr( + this->gen_reg_load(traits::X0+ rs1), + this->gen_const(32,(uint32_t)((int16_t)sext<12>(imm)))) + , + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1676,11 +1676,11 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->builder.CreateAnd( - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_const(32,(uint32_t)((int16_t)sext<12>(imm)))) - , - get_reg_ptr(rd + traits::X0), false); + this->builder.CreateAnd( + this->gen_reg_load(traits::X0+ rs1), + this->gen_const(32,(uint32_t)((int16_t)sext<12>(imm)))) + , + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1726,11 +1726,11 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->builder.CreateShl( - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_ext(this->gen_const(8,shamt), 32,false)) - , - get_reg_ptr(rd + traits::X0), false); + this->builder.CreateShl( + this->gen_reg_load(traits::X0+ rs1), + this->gen_ext(this->gen_const(8,shamt), 32,false)) + , + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1776,11 +1776,11 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->builder.CreateLShr( - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_ext(this->gen_const(8,shamt), 32,false)) - , - get_reg_ptr(rd + traits::X0), false); + this->builder.CreateLShr( + this->gen_reg_load(traits::X0+ rs1), + this->gen_ext(this->gen_const(8,shamt), 32,false)) + , + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1826,13 +1826,13 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAShr( - this->gen_ext( - this->gen_reg_load(rs1+ traits::X0, 0), 32,true), - this->gen_ext(this->gen_const(8,shamt), 32,false)) - ), 32,false), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + (this->builder.CreateAShr( + this->gen_ext( + this->gen_reg_load(traits::X0+ rs1), 32,true), + this->gen_ext(this->gen_const(8,shamt), 32,false)) + ), 32,false), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1878,13 +1878,13 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), - this->gen_ext(this->gen_reg_load(rs2+ traits::X0, 0), 64,false)) - ), - 32, false), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + (this->builder.CreateAdd( + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs2), 64,false)) + ), + 32, false), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1930,13 +1930,13 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateSub( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), - this->gen_ext(this->gen_reg_load(rs2+ traits::X0, 0), 64,false)) - ), - 32, true), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + (this->builder.CreateSub( + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs2), 64,false)) + ), + 32, true), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -1982,14 +1982,14 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext(this->builder.CreateShl( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), - (this->builder.CreateAnd( - this->gen_ext(this->gen_reg_load(rs2+ traits::X0, 0), 64,false), - this->gen_const(64,(static_cast(traits::XLEN)-1))) - )) - , 32, false), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext(this->builder.CreateShl( + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), + (this->builder.CreateAnd( + this->gen_ext(this->gen_reg_load(traits::X0+ rs2), 64,false), + this->gen_const(64,(static_cast(traits::XLEN)-1))) + )) + , 32, false), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2035,16 +2035,16 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext(this->gen_choose(this->builder.CreateICmp(ICmpInst::ICMP_SLT, - this->gen_ext( - this->gen_reg_load(rs1+ traits::X0, 0), 32,true), - this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), 32,true)) - , - this->gen_const(8,1), - this->gen_const(8,0), - 1), 32), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext(this->gen_choose(this->builder.CreateICmp(ICmpInst::ICMP_SLT, + this->gen_ext( + this->gen_reg_load(traits::X0+ rs1), 32,true), + this->gen_ext( + this->gen_reg_load(traits::X0+ rs2), 32,true)) + , + this->gen_const(8,1), + this->gen_const(8,0), + 1), 32), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2090,14 +2090,14 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext(this->gen_choose(this->builder.CreateICmp(ICmpInst::ICMP_ULT, - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_reg_load(rs2+ traits::X0, 0)) - , - this->gen_const(8,1), - this->gen_const(8,0), - 1), 32), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext(this->gen_choose(this->builder.CreateICmp(ICmpInst::ICMP_ULT, + this->gen_reg_load(traits::X0+ rs1), + this->gen_reg_load(traits::X0+ rs2)) + , + this->gen_const(8,1), + this->gen_const(8,0), + 1), 32), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2143,11 +2143,11 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->builder.CreateXor( - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_reg_load(rs2+ traits::X0, 0)) - , - get_reg_ptr(rd + traits::X0), false); + this->builder.CreateXor( + this->gen_reg_load(traits::X0+ rs1), + this->gen_reg_load(traits::X0+ rs2)) + , + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2193,14 +2193,14 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext(this->builder.CreateLShr( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), - (this->builder.CreateAnd( - this->gen_ext(this->gen_reg_load(rs2+ traits::X0, 0), 64,false), - this->gen_const(64,(static_cast(traits::XLEN)-1))) - )) - , 32, false), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext(this->builder.CreateLShr( + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), + (this->builder.CreateAnd( + this->gen_ext(this->gen_reg_load(traits::X0+ rs2), 64,false), + this->gen_const(64,(static_cast(traits::XLEN)-1))) + )) + , 32, false), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2246,17 +2246,17 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - (this->gen_ext(this->builder.CreateAShr( - this->gen_ext(this->gen_ext( - this->gen_reg_load(rs1+ traits::X0, 0), 32,true), 64,true), - (this->builder.CreateAnd( - this->gen_ext(this->gen_reg_load(rs2+ traits::X0, 0), 64,false), - this->gen_const(64,(static_cast(traits::XLEN)-1))) - )) - , 32, true)), - 32, true), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + (this->gen_ext(this->builder.CreateAShr( + this->gen_ext(this->gen_ext( + this->gen_reg_load(traits::X0+ rs1), 32,true), 64,true), + (this->builder.CreateAnd( + this->gen_ext(this->gen_reg_load(traits::X0+ rs2), 64,false), + this->gen_const(64,(static_cast(traits::XLEN)-1))) + )) + , 32, true)), + 32, true), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2302,11 +2302,11 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->builder.CreateOr( - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_reg_load(rs2+ traits::X0, 0)) - , - get_reg_ptr(rd + traits::X0), false); + this->builder.CreateOr( + this->gen_reg_load(traits::X0+ rs1), + this->gen_reg_load(traits::X0+ rs2)) + , + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2352,11 +2352,11 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->builder.CreateAnd( - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_reg_load(rs2+ traits::X0, 0)) - , - get_reg_ptr(rd + traits::X0), false); + this->builder.CreateAnd( + this->gen_reg_load(traits::X0+ rs1), + this->gen_reg_load(traits::X0+ rs2)) + , + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2581,14 +2581,14 @@ private: this->gen_raise_trap(0, static_cast(traits::RV_CAUSE_ILLEGAL_INSTRUCTION)); } else{ - auto xrs1 =this->gen_reg_load(rs1+ traits::X0, 0); + auto xrs1 =this->gen_reg_load(traits::X0+ rs1); if(rd!=0){ auto xrd =this->gen_read_mem(traits::CSR, csr, 4); this->gen_write_mem(traits::CSR, csr, xrs1); this->builder.CreateStore( - xrd, - get_reg_ptr(rd + traits::X0), false); + xrd, + get_reg_ptr(rd + traits::X0), false); } else{ this->gen_write_mem(traits::CSR, @@ -2638,7 +2638,7 @@ private: } else{ auto xrd =this->gen_read_mem(traits::CSR, csr, 4); - auto xrs1 =this->gen_reg_load(rs1+ traits::X0, 0); + auto xrs1 =this->gen_reg_load(traits::X0+ rs1); if(rs1!=0) { this->gen_write_mem(traits::CSR, csr, @@ -2649,8 +2649,8 @@ private: } if(rd!=0) { this->builder.CreateStore( - xrd, - get_reg_ptr(rd + traits::X0), false); + xrd, + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2695,7 +2695,7 @@ private: } else{ auto xrd =this->gen_read_mem(traits::CSR, csr, 4); - auto xrs1 =this->gen_reg_load(rs1+ traits::X0, 0); + auto xrs1 =this->gen_reg_load(traits::X0+ rs1); if(rs1!=0) { this->gen_write_mem(traits::CSR, csr, @@ -2706,8 +2706,8 @@ private: } if(rd!=0) { this->builder.CreateStore( - xrd, - get_reg_ptr(rd + traits::X0), false); + xrd, + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2757,8 +2757,8 @@ private: this->gen_const(32,(uint32_t)zimm)); if(rd!=0) { this->builder.CreateStore( - xrd, - get_reg_ptr(rd + traits::X0), false); + xrd, + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2813,8 +2813,8 @@ private: } if(rd!=0) { this->builder.CreateStore( - xrd, - get_reg_ptr(rd + traits::X0), false); + xrd, + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2869,8 +2869,8 @@ private: } if(rd!=0) { this->builder.CreateStore( - xrd, - get_reg_ptr(rd + traits::X0), false); + xrd, + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -2956,16 +2956,16 @@ private: else{ auto res =this->builder.CreateMul( this->gen_ext(this->gen_ext( - this->gen_reg_load(rs1+ traits::X0, 0), 32,true), 64,true), + this->gen_reg_load(traits::X0+ rs1), 32,true), 64,true), this->gen_ext(this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), 32,true), 64,true)) + this->gen_reg_load(traits::X0+ rs2), 32,true), 64,true)) ; if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - res, - 32, true), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + res, + 32, true), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -3011,19 +3011,19 @@ private: else{ auto res =this->builder.CreateMul( this->gen_ext(this->gen_ext( - this->gen_reg_load(rs1+ traits::X0, 0), 32,true), 64,true), + this->gen_reg_load(traits::X0+ rs1), 32,true), 64,true), this->gen_ext(this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), 32,true), 64,true)) + this->gen_reg_load(traits::X0+ rs2), 32,true), 64,true)) ; if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAShr( - res, - this->gen_ext(this->gen_const(32,static_cast(traits::XLEN)), 64,false)) - ), - 32, true), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + (this->builder.CreateAShr( + res, + this->gen_ext(this->gen_const(32,static_cast(traits::XLEN)), 64,false)) + ), + 32, true), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -3069,18 +3069,18 @@ private: else{ auto res =this->builder.CreateMul( this->gen_ext(this->gen_ext( - this->gen_reg_load(rs1+ traits::X0, 0), 32,true), 64,true), - this->gen_ext(this->gen_reg_load(rs2+ traits::X0, 0), 64,false)) + this->gen_reg_load(traits::X0+ rs1), 32,true), 64,true), + this->gen_ext(this->gen_reg_load(traits::X0+ rs2), 64,false)) ; if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAShr( - res, - this->gen_ext(this->gen_const(32,static_cast(traits::XLEN)), 64,false)) - ), - 32, true), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + (this->builder.CreateAShr( + res, + this->gen_ext(this->gen_const(32,static_cast(traits::XLEN)), 64,false)) + ), + 32, true), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -3125,18 +3125,18 @@ private: } else{ auto res =this->builder.CreateMul( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), - this->gen_ext(this->gen_reg_load(rs2+ traits::X0, 0), 64,false)) + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs2), 64,false)) ; if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateLShr( - res, - this->gen_ext(this->gen_const(32,static_cast(traits::XLEN)), 64,false)) - ), - 32, false), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + (this->builder.CreateLShr( + res, + this->gen_ext(this->gen_const(32,static_cast(traits::XLEN)), 64,false)) + ), + 32, false), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -3181,9 +3181,9 @@ private: } else{ auto dividend =this->gen_ext( - this->gen_reg_load(rs1+ traits::X0, 0), 32,true); + this->gen_reg_load(traits::X0+ rs1), 32,true); auto divisor =this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), 32,true); + this->gen_reg_load(traits::X0+ rs2), 32,true); if(rd!=0){ auto bb_merge = BasicBlock::Create(this->mod->getContext(), "bb_merge", this->func, this->leave_blk); auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); auto bb_else = BasicBlock::Create(this->mod->getContext(), "bb_else", this->func, bb_merge); @@ -3199,7 +3199,7 @@ private: auto bb_else = BasicBlock::Create(this->mod->getContext(), "bb_else", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateAnd( this->builder.CreateICmp(ICmpInst::ICMP_EQ, - this->gen_reg_load(rs1+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs1), this->gen_const(32,MMIN)) , this->builder.CreateICmp(ICmpInst::ICMP_EQ, @@ -3210,20 +3210,20 @@ private: this->builder.SetInsertPoint(bb_then); { this->builder.CreateStore( - this->gen_const(32,MMIN), - get_reg_ptr(rd + traits::X0), false); + this->gen_const(32,MMIN), + get_reg_ptr(rd + traits::X0), false); } this->builder.CreateBr(bb_merge); this->builder.SetInsertPoint(bb_else); { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateSDiv( - this->gen_ext(dividend, 64,true), - this->gen_ext(divisor, 64,true)) - ), - 32, true), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + (this->builder.CreateSDiv( + this->gen_ext(dividend, 64,true), + this->gen_ext(divisor, 64,true)) + ), + 32, true), + get_reg_ptr(rd + traits::X0), false); } this->builder.CreateBr(bb_merge); this->builder.SetInsertPoint(bb_merge); @@ -3232,8 +3232,8 @@ private: this->builder.SetInsertPoint(bb_else); { this->builder.CreateStore( - this->gen_const(32,(uint32_t)- 1), - get_reg_ptr(rd + traits::X0), false); + this->gen_const(32,(uint32_t)- 1), + get_reg_ptr(rd + traits::X0), false); } this->builder.CreateBr(bb_merge); this->builder.SetInsertPoint(bb_merge); @@ -3284,18 +3284,18 @@ private: auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); auto bb_else = BasicBlock::Create(this->mod->getContext(), "bb_else", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_NE, - this->gen_reg_load(rs2+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs2), this->gen_ext(this->gen_const(8,0), 32,false)) ), bb_then, bb_else); this->builder.SetInsertPoint(bb_then); { if(rd!=0) { this->builder.CreateStore( - this->builder.CreateUDiv( - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_reg_load(rs2+ traits::X0, 0)) - , - get_reg_ptr(rd + traits::X0), false); + this->builder.CreateUDiv( + this->gen_reg_load(traits::X0+ rs1), + this->gen_reg_load(traits::X0+ rs2)) + , + get_reg_ptr(rd + traits::X0), false); } } this->builder.CreateBr(bb_merge); @@ -3303,8 +3303,8 @@ private: { if(rd!=0) { this->builder.CreateStore( - this->gen_const(32,(uint32_t)- 1), - get_reg_ptr(rd + traits::X0), false); + this->gen_const(32,(uint32_t)- 1), + get_reg_ptr(rd + traits::X0), false); } } this->builder.CreateBr(bb_merge); @@ -3355,7 +3355,7 @@ private: auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); auto bb_else = BasicBlock::Create(this->mod->getContext(), "bb_else", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_NE, - this->gen_reg_load(rs2+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs2), this->gen_ext(this->gen_const(8,0), 32,false)) ), bb_then, bb_else); this->builder.SetInsertPoint(bb_then); @@ -3366,12 +3366,12 @@ private: auto bb_else = BasicBlock::Create(this->mod->getContext(), "bb_else", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateAnd( this->builder.CreateICmp(ICmpInst::ICMP_EQ, - this->gen_reg_load(rs1+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs1), this->gen_const(32,MMIN)) , this->builder.CreateICmp(ICmpInst::ICMP_EQ, this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs2), 32, false), this->gen_ext(this->gen_const(8,- 1), 32,true)) ) @@ -3380,8 +3380,8 @@ private: { if(rd!=0) { this->builder.CreateStore( - this->gen_ext(this->gen_const(8,0), 32), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext(this->gen_const(8,0), 32), + get_reg_ptr(rd + traits::X0), false); } } this->builder.CreateBr(bb_merge); @@ -3389,14 +3389,14 @@ private: { if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateSRem( - this->gen_ext( - this->gen_reg_load(rs1+ traits::X0, 0), 32,true), - this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), 32,true)) - ), 32,false), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + (this->builder.CreateSRem( + this->gen_ext( + this->gen_reg_load(traits::X0+ rs1), 32,true), + this->gen_ext( + this->gen_reg_load(traits::X0+ rs2), 32,true)) + ), 32,false), + get_reg_ptr(rd + traits::X0), false); } } this->builder.CreateBr(bb_merge); @@ -3407,8 +3407,8 @@ private: { if(rd!=0) { this->builder.CreateStore( - this->gen_reg_load(rs1+ traits::X0, 0), - get_reg_ptr(rd + traits::X0), false); + this->gen_reg_load(traits::X0+ rs1), + get_reg_ptr(rd + traits::X0), false); } } this->builder.CreateBr(bb_merge); @@ -3459,18 +3459,18 @@ private: auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); auto bb_else = BasicBlock::Create(this->mod->getContext(), "bb_else", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_NE, - this->gen_reg_load(rs2+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs2), this->gen_ext(this->gen_const(8,0), 32,false)) ), bb_then, bb_else); this->builder.SetInsertPoint(bb_then); { if(rd!=0) { this->builder.CreateStore( - this->builder.CreateURem( - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_reg_load(rs2+ traits::X0, 0)) - , - get_reg_ptr(rd + traits::X0), false); + this->builder.CreateURem( + this->gen_reg_load(traits::X0+ rs1), + this->gen_reg_load(traits::X0+ rs2)) + , + get_reg_ptr(rd + traits::X0), false); } } this->builder.CreateBr(bb_merge); @@ -3478,8 +3478,8 @@ private: { if(rd!=0) { this->builder.CreateStore( - this->gen_reg_load(rs1+ traits::X0, 0), - get_reg_ptr(rd + traits::X0), false); + this->gen_reg_load(traits::X0+ rs1), + get_reg_ptr(rd + traits::X0), false); } } this->builder.CreateBr(bb_merge); @@ -3523,13 +3523,13 @@ private: /*generate behavior*/ if(imm) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(2+ traits::X0, 0), 64,false), - this->gen_ext(this->gen_const(16,imm), 64,false)) - ), - 32, false), - get_reg_ptr(rd+8 + traits::X0), false); + this->gen_ext( + (this->builder.CreateAdd( + this->gen_ext(this->gen_reg_load(traits::X0+ 2), 64,false), + this->gen_ext(this->gen_const(16,imm), 64,false)) + ), + 32, false), + get_reg_ptr(rd+8 + traits::X0), false); } else{ this->gen_raise_trap(0, static_cast(traits::RV_CAUSE_ILLEGAL_INSTRUCTION)); @@ -3573,17 +3573,17 @@ private: /*generate behavior*/ auto offs =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+8+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs1+8), 64,false), this->gen_ext(this->gen_const(8,uimm), 64,false)) ), 32, false); this->builder.CreateStore( - this->gen_ext( - this->gen_ext( - this->gen_read_mem(traits::MEM, offs, 4), - 32, false), - 32, true), - get_reg_ptr(rd+8 + traits::X0), false); + this->gen_ext( + this->gen_ext( + this->gen_read_mem(traits::MEM, offs, 4), + 32, false), + 32, true), + get_reg_ptr(rd+8 + traits::X0), false); bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); auto returnValue = std::make_tuple(CONT,bb); @@ -3623,14 +3623,14 @@ private: /*generate behavior*/ auto offs =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+8+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs1+8), 64,false), this->gen_ext(this->gen_const(8,uimm), 64,false)) ), 32, false); this->gen_write_mem(traits::MEM, offs, this->gen_ext( - this->gen_reg_load(rs2+8+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs2+8), 32, false)); bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); auto returnValue = std::make_tuple(CONT,bb); @@ -3674,13 +3674,13 @@ private: else{ if(rs1!=0) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rs1+ traits::X0, 0), 64,false), - this->gen_ext(this->gen_const(8,(int8_t)sext<6>(imm)), 64,true)) - ), - 32, true), - get_reg_ptr(rs1 + traits::X0), false); + this->gen_ext( + (this->builder.CreateAdd( + this->gen_ext(this->gen_reg_load(traits::X0+ rs1), 64,false), + this->gen_ext(this->gen_const(8,(int8_t)sext<6>(imm)), 64,true)) + ), + 32, true), + get_reg_ptr(rs1 + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -3754,8 +3754,8 @@ private: /*generate behavior*/ this->builder.CreateStore(this->gen_const(32U, static_cast(NO_JUMP)), get_reg_ptr(traits::LAST_BRANCH), false); this->builder.CreateStore( - this->gen_const(32,(uint32_t)(PC+2)), - get_reg_ptr(1 + traits::X0), false); + this->gen_const(32,(uint32_t)(PC+2)), + get_reg_ptr(1 + traits::X0), false); auto PC_val_v = (uint32_t)(PC+(int16_t)sext<12>(imm)); this->builder.CreateStore(this->gen_const(32,PC_val_v), get_reg_ptr(traits::NEXT_PC), false); this->builder.CreateStore(this->gen_const(32, static_cast(KNOWN_JUMP)), get_reg_ptr(traits::LAST_BRANCH), false); @@ -3801,8 +3801,8 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_const(32,(uint32_t)((int8_t)sext<6>(imm))), - get_reg_ptr(rd + traits::X0), false); + this->gen_const(32,(uint32_t)((int8_t)sext<6>(imm))), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -3846,8 +3846,8 @@ private: } if(rd!=0) { this->builder.CreateStore( - this->gen_const(32,(uint32_t)((int32_t)sext<18>(imm))), - get_reg_ptr(rd + traits::X0), false); + this->gen_const(32,(uint32_t)((int32_t)sext<18>(imm))), + get_reg_ptr(rd + traits::X0), false); } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); auto returnValue = std::make_tuple(CONT,bb); @@ -3886,13 +3886,13 @@ private: /*generate behavior*/ if(nzimm) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(2+ traits::X0, 0), 64,false), - this->gen_ext(this->gen_const(16,(int16_t)sext<10>(nzimm)), 64,true)) - ), - 32, true), - get_reg_ptr(2 + traits::X0), false); + this->gen_ext( + (this->builder.CreateAdd( + this->gen_ext(this->gen_reg_load(traits::X0+ 2), 64,false), + this->gen_ext(this->gen_const(16,(int16_t)sext<10>(nzimm)), 64,true)) + ), + 32, true), + get_reg_ptr(2 + traits::X0), false); } else{ this->gen_raise_trap(0, static_cast(traits::RV_CAUSE_ILLEGAL_INSTRUCTION)); @@ -3969,11 +3969,11 @@ private: this->gen_instr_prologue(); /*generate behavior*/ this->builder.CreateStore( - this->builder.CreateLShr( - this->gen_reg_load(rs1+8+ traits::X0, 0), - this->gen_ext(this->gen_const(8,shamt), 32,false)) - , - get_reg_ptr(rs1+8 + traits::X0), false); + this->builder.CreateLShr( + this->gen_reg_load(traits::X0+ rs1+8), + this->gen_ext(this->gen_const(8,shamt), 32,false)) + , + get_reg_ptr(rs1+8 + traits::X0), false); bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); auto returnValue = std::make_tuple(CONT,bb); @@ -4011,27 +4011,27 @@ private: this->gen_instr_prologue(); /*generate behavior*/ if(shamt){ this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAShr( - (this->gen_ext( - this->gen_reg_load(rs1+8+ traits::X0, 0), - 32, false)), - this->gen_ext(this->gen_const(8,shamt), 32,false)) - ), - 32, true), - get_reg_ptr(rs1+8 + traits::X0), false); + this->gen_ext( + (this->builder.CreateAShr( + (this->gen_ext( + this->gen_reg_load(traits::X0+ rs1+8), + 32, false)), + this->gen_ext(this->gen_const(8,shamt), 32,false)) + ), + 32, true), + get_reg_ptr(rs1+8 + traits::X0), false); } else{ if(static_cast(traits::XLEN)==128){ this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAShr( - (this->gen_ext( - this->gen_reg_load(rs1+8+ traits::X0, 0), - 32, false)), - this->gen_ext(this->gen_const(8,64), 32,false)) - ), - 32, true), - get_reg_ptr(rs1+8 + traits::X0), false); + this->gen_ext( + (this->builder.CreateAShr( + (this->gen_ext( + this->gen_reg_load(traits::X0+ rs1+8), + 32, false)), + this->gen_ext(this->gen_const(8,64), 32,false)) + ), + 32, true), + get_reg_ptr(rs1+8 + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -4071,13 +4071,13 @@ private: this->gen_instr_prologue(); /*generate behavior*/ this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAnd( - this->gen_reg_load(rs1+8+ traits::X0, 0), - this->gen_ext(this->gen_const(8,(int8_t)sext<6>(imm)), 32,true)) - ), - 32, true), - get_reg_ptr(rs1+8 + traits::X0), false); + this->gen_ext( + (this->builder.CreateAnd( + this->gen_reg_load(traits::X0+ rs1+8), + this->gen_ext(this->gen_const(8,(int8_t)sext<6>(imm)), 32,true)) + ), + 32, true), + get_reg_ptr(rs1+8 + traits::X0), false); bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); auto returnValue = std::make_tuple(CONT,bb); @@ -4115,13 +4115,13 @@ private: this->gen_instr_prologue(); /*generate behavior*/ this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateSub( - this->gen_ext(this->gen_reg_load(rd+8+ traits::X0, 0), 64,false), - this->gen_ext(this->gen_reg_load(rs2+8+ traits::X0, 0), 64,false)) - ), - 32, true), - get_reg_ptr(rd+8 + traits::X0), false); + this->gen_ext( + (this->builder.CreateSub( + this->gen_ext(this->gen_reg_load(traits::X0+ rd+8), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs2+8), 64,false)) + ), + 32, true), + get_reg_ptr(rd+8 + traits::X0), false); bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); auto returnValue = std::make_tuple(CONT,bb); @@ -4159,11 +4159,11 @@ private: this->gen_instr_prologue(); /*generate behavior*/ this->builder.CreateStore( - this->builder.CreateXor( - this->gen_reg_load(rd+8+ traits::X0, 0), - this->gen_reg_load(rs2+8+ traits::X0, 0)) - , - get_reg_ptr(rd+8 + traits::X0), false); + this->builder.CreateXor( + this->gen_reg_load(traits::X0+ rd+8), + this->gen_reg_load(traits::X0+ rs2+8)) + , + get_reg_ptr(rd+8 + traits::X0), false); bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); auto returnValue = std::make_tuple(CONT,bb); @@ -4201,11 +4201,11 @@ private: this->gen_instr_prologue(); /*generate behavior*/ this->builder.CreateStore( - this->builder.CreateOr( - this->gen_reg_load(rd+8+ traits::X0, 0), - this->gen_reg_load(rs2+8+ traits::X0, 0)) - , - get_reg_ptr(rd+8 + traits::X0), false); + this->builder.CreateOr( + this->gen_reg_load(traits::X0+ rd+8), + this->gen_reg_load(traits::X0+ rs2+8)) + , + get_reg_ptr(rd+8 + traits::X0), false); bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); auto returnValue = std::make_tuple(CONT,bb); @@ -4243,11 +4243,11 @@ private: this->gen_instr_prologue(); /*generate behavior*/ this->builder.CreateStore( - this->builder.CreateAnd( - this->gen_reg_load(rd+8+ traits::X0, 0), - this->gen_reg_load(rs2+8+ traits::X0, 0)) - , - get_reg_ptr(rd+8 + traits::X0), false); + this->builder.CreateAnd( + this->gen_reg_load(traits::X0+ rd+8), + this->gen_reg_load(traits::X0+ rs2+8)) + , + get_reg_ptr(rd+8 + traits::X0), false); bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); auto returnValue = std::make_tuple(CONT,bb); @@ -4327,7 +4327,7 @@ private: auto bb_merge = BasicBlock::Create(this->mod->getContext(), "bb_merge", this->func, this->leave_blk); auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_EQ, - this->gen_reg_load(rs1+8+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs1+8), this->gen_ext(this->gen_const(8,0), 32,false)) ), bb_then, bb_merge); this->builder.SetInsertPoint(bb_then); @@ -4378,7 +4378,7 @@ private: auto bb_merge = BasicBlock::Create(this->mod->getContext(), "bb_merge", this->func, this->leave_blk); auto bb_then = BasicBlock::Create(this->mod->getContext(), "bb_then", this->func, bb_merge); this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_NE, - this->gen_reg_load(rs1+8+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs1+8), this->gen_ext(this->gen_const(8,0), 32,false)) ), bb_then, bb_merge); this->builder.SetInsertPoint(bb_then); @@ -4431,11 +4431,11 @@ private: else{ if(rs1!=0) { this->builder.CreateStore( - this->builder.CreateShl( - this->gen_reg_load(rs1+ traits::X0, 0), - this->gen_ext(this->gen_const(8,nzuimm), 32,false)) - , - get_reg_ptr(rs1 + traits::X0), false); + this->builder.CreateShl( + this->gen_reg_load(traits::X0+ rs1), + this->gen_ext(this->gen_const(8,nzuimm), 32,false)) + , + get_reg_ptr(rs1 + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -4480,17 +4480,17 @@ private: else{ auto offs =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(2+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ 2), 64,false), this->gen_ext(this->gen_const(8,uimm), 64,false)) ), 32, false); this->builder.CreateStore( - this->gen_ext( - this->gen_ext( - this->gen_read_mem(traits::MEM, offs, 4), - 32, false), - 32, true), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + this->gen_ext( + this->gen_read_mem(traits::MEM, offs, 4), + 32, false), + 32, true), + get_reg_ptr(rd + traits::X0), false); } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); auto returnValue = std::make_tuple(CONT,bb); @@ -4534,8 +4534,8 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_reg_load(rs2+ traits::X0, 0), - get_reg_ptr(rd + traits::X0), false); + this->gen_reg_load(traits::X0+ rs2), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -4576,7 +4576,7 @@ private: this->builder.CreateStore(this->gen_const(32U, static_cast(NO_JUMP)), get_reg_ptr(traits::LAST_BRANCH), false); if(rs1&&rs1(traits::RFS)){ auto addr_mask =(uint32_t)- 2; auto PC_val_v = this->builder.CreateAnd( - this->gen_reg_load(rs1%static_cast(traits::RFS)+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs1%static_cast(traits::RFS)), this->gen_const(32,addr_mask)) ; this->builder.CreateStore(PC_val_v, get_reg_ptr(traits::NEXT_PC), false); @@ -4661,13 +4661,13 @@ private: else{ if(rd!=0) { this->builder.CreateStore( - this->gen_ext( - (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(rd+ traits::X0, 0), 64,false), - this->gen_ext(this->gen_reg_load(rs2+ traits::X0, 0), 64,false)) - ), - 32, false), - get_reg_ptr(rd + traits::X0), false); + this->gen_ext( + (this->builder.CreateAdd( + this->gen_ext(this->gen_reg_load(traits::X0+ rd), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ rs2), 64,false)) + ), + 32, false), + get_reg_ptr(rd + traits::X0), false); } } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk); @@ -4711,10 +4711,10 @@ private: } else{ auto addr_mask =(uint32_t)- 2; - auto new_pc =this->gen_reg_load(rs1+ traits::X0, 0); + auto new_pc =this->gen_reg_load(traits::X0+ rs1); this->builder.CreateStore( - this->gen_const(32,(uint32_t)(PC+2)), - get_reg_ptr(1 + traits::X0), false); + this->gen_const(32,(uint32_t)(PC+2)), + get_reg_ptr(1 + traits::X0), false); auto PC_val_v = this->builder.CreateAnd( new_pc, this->gen_const(32,addr_mask)) @@ -4798,14 +4798,14 @@ private: else{ auto offs =this->gen_ext( (this->builder.CreateAdd( - this->gen_ext(this->gen_reg_load(2+ traits::X0, 0), 64,false), + this->gen_ext(this->gen_reg_load(traits::X0+ 2), 64,false), this->gen_ext(this->gen_const(8,uimm), 64,false)) ), 32, false); this->gen_write_mem(traits::MEM, offs, this->gen_ext( - this->gen_reg_load(rs2+ traits::X0, 0), + this->gen_reg_load(traits::X0+ rs2), 32, false)); } bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk);