updates template with fcsr check, adds extra braces on If Statements
This commit is contained in:
@ -130,7 +130,7 @@ protected:
|
||||
auto mask = (1ULL<<W) - 1;
|
||||
auto sign_mask = 1ULL<<(W-1);
|
||||
return (from & mask) | ((from & sign_mask) ? ~mask : 0);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
/****************************************************************************
|
||||
@ -516,6 +516,7 @@ private:
|
||||
this->gen_ext(this->gen_const(32,addr_mask), 64,false))
|
||||
),
|
||||
32, true);
|
||||
{
|
||||
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);
|
||||
@ -542,6 +543,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
bb = this->leave_blk;
|
||||
auto returnValue = std::make_tuple(BRANCH,nullptr);
|
||||
@ -585,6 +587,7 @@ private:
|
||||
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
|
||||
}
|
||||
else{
|
||||
{
|
||||
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,
|
||||
@ -605,6 +608,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
bb = this->leave_blk;
|
||||
auto returnValue = std::make_tuple(BRANCH,nullptr);
|
||||
@ -648,6 +652,7 @@ private:
|
||||
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
|
||||
}
|
||||
else{
|
||||
{
|
||||
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,
|
||||
@ -668,6 +673,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
bb = this->leave_blk;
|
||||
auto returnValue = std::make_tuple(BRANCH,nullptr);
|
||||
@ -711,6 +717,7 @@ private:
|
||||
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
|
||||
}
|
||||
else{
|
||||
{
|
||||
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_SLT,
|
||||
@ -735,6 +742,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
bb = this->leave_blk;
|
||||
auto returnValue = std::make_tuple(BRANCH,nullptr);
|
||||
@ -778,6 +786,7 @@ private:
|
||||
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
|
||||
}
|
||||
else{
|
||||
{
|
||||
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_SGE,
|
||||
@ -802,6 +811,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
bb = this->leave_blk;
|
||||
auto returnValue = std::make_tuple(BRANCH,nullptr);
|
||||
@ -845,6 +855,7 @@ private:
|
||||
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
|
||||
}
|
||||
else{
|
||||
{
|
||||
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,
|
||||
@ -865,6 +876,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
bb = this->leave_blk;
|
||||
auto returnValue = std::make_tuple(BRANCH,nullptr);
|
||||
@ -908,6 +920,7 @@ private:
|
||||
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
|
||||
}
|
||||
else{
|
||||
{
|
||||
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,
|
||||
@ -928,6 +941,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
bb = this->leave_blk;
|
||||
auto returnValue = std::make_tuple(BRANCH,nullptr);
|
||||
@ -3184,7 +3198,8 @@ private:
|
||||
this->gen_reg_load(traits::X0+ rs1), 32,true);
|
||||
auto divisor =this->gen_ext(
|
||||
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);
|
||||
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);
|
||||
this->builder.CreateCondBr(this->gen_bool(this->builder.CreateICmp(ICmpInst::ICMP_NE,
|
||||
@ -3194,6 +3209,7 @@ private:
|
||||
this->builder.SetInsertPoint(bb_then);
|
||||
{
|
||||
auto MMIN =((uint32_t)1)<<(static_cast<uint32_t>(traits::XLEN)-1);
|
||||
{
|
||||
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);
|
||||
@ -3227,6 +3243,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_else);
|
||||
@ -3238,6 +3255,7 @@ private:
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
}
|
||||
bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk);
|
||||
auto returnValue = std::make_tuple(CONT,bb);
|
||||
@ -3280,6 +3298,7 @@ private:
|
||||
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
|
||||
}
|
||||
else{
|
||||
{
|
||||
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);
|
||||
@ -3309,6 +3328,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk);
|
||||
auto returnValue = std::make_tuple(CONT,bb);
|
||||
@ -3351,6 +3371,7 @@ private:
|
||||
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
|
||||
}
|
||||
else{
|
||||
{
|
||||
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);
|
||||
@ -3361,6 +3382,7 @@ private:
|
||||
this->builder.SetInsertPoint(bb_then);
|
||||
{
|
||||
auto MMIN =(uint32_t)1<<(static_cast<uint32_t>(traits::XLEN)-1);
|
||||
{
|
||||
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);
|
||||
@ -3401,6 +3423,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_else);
|
||||
@ -3413,6 +3436,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk);
|
||||
auto returnValue = std::make_tuple(CONT,bb);
|
||||
@ -3455,6 +3479,7 @@ private:
|
||||
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
|
||||
}
|
||||
else{
|
||||
{
|
||||
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);
|
||||
@ -3484,6 +3509,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
}
|
||||
bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk);
|
||||
auto returnValue = std::make_tuple(CONT,bb);
|
||||
@ -4324,6 +4350,7 @@ private:
|
||||
this->gen_instr_prologue();
|
||||
/*generate behavior*/
|
||||
this->builder.CreateStore(this->gen_const(32U, static_cast<int>(NO_JUMP)), get_reg_ptr(traits::LAST_BRANCH), false);
|
||||
{
|
||||
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,
|
||||
@ -4338,6 +4365,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
bb = this->leave_blk;
|
||||
auto returnValue = std::make_tuple(BRANCH,nullptr);
|
||||
|
||||
@ -4375,6 +4403,7 @@ private:
|
||||
this->gen_instr_prologue();
|
||||
/*generate behavior*/
|
||||
this->builder.CreateStore(this->gen_const(32U, static_cast<int>(NO_JUMP)), get_reg_ptr(traits::LAST_BRANCH), false);
|
||||
{
|
||||
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,
|
||||
@ -4389,6 +4418,7 @@ private:
|
||||
}
|
||||
this->builder.CreateBr(bb_merge);
|
||||
this->builder.SetInsertPoint(bb_merge);
|
||||
}
|
||||
bb = this->leave_blk;
|
||||
auto returnValue = std::make_tuple(BRANCH,nullptr);
|
||||
|
||||
|
Reference in New Issue
Block a user