updates vms with fixed Zc in tgc5c.core_desc

This commit is contained in:
2024-07-10 12:43:43 +02:00
parent b2cbf90d0b
commit ac8f8b0539
3 changed files with 189 additions and 215 deletions

View File

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (C) 2017, 2018 MINRES Technologies GmbH
* Copyright (C) 2017-2024 MINRES Technologies GmbH
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -352,7 +352,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -395,7 +395,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -438,7 +438,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(imm%static_cast<uint32_t>(traits::INSTR_ALIGNMENT)){ this->gen_raise_trap(0, 0);
@ -489,7 +489,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto addr_mask =this->gen_const(32,(uint32_t)- 2);
@ -563,7 +563,7 @@ private:
/*generate behavior*/
if(rs2>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
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);
@ -620,7 +620,7 @@ private:
/*generate behavior*/
if(rs2>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
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);
@ -677,7 +677,7 @@ private:
/*generate behavior*/
if(rs2>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
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);
@ -738,7 +738,7 @@ private:
/*generate behavior*/
if(rs2>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
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);
@ -799,7 +799,7 @@ private:
/*generate behavior*/
if(rs2>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
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);
@ -856,7 +856,7 @@ private:
/*generate behavior*/
if(rs2>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
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);
@ -913,7 +913,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto load_address =this->gen_ext(
@ -968,7 +968,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto load_address =this->gen_ext(
@ -1023,7 +1023,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto load_address =this->gen_ext(
@ -1078,7 +1078,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto load_address =this->gen_ext(
@ -1131,7 +1131,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto load_address =this->gen_ext(
@ -1184,7 +1184,7 @@ private:
/*generate behavior*/
if(rs2>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto store_address =this->gen_ext(
@ -1234,7 +1234,7 @@ private:
/*generate behavior*/
if(rs2>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto store_address =this->gen_ext(
@ -1284,7 +1284,7 @@ private:
/*generate behavior*/
if(rs2>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto store_address =this->gen_ext(
@ -1334,7 +1334,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1383,7 +1383,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1434,7 +1434,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1484,7 +1484,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1531,7 +1531,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1578,7 +1578,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1625,7 +1625,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1672,7 +1672,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1719,7 +1719,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1729,8 +1729,7 @@ private:
this->gen_ext(
this->gen_reg_load(rs1+ traits::X0, 0), 32,true),
this->gen_ext(this->gen_const(8,shamt), 32,false))
),
32, true),
), 32,false),
get_reg_ptr(rd + traits::X0), false);
}
}
@ -1769,7 +1768,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1818,7 +1817,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1867,7 +1866,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1917,7 +1916,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -1969,7 +1968,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -2019,7 +2018,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -2066,7 +2065,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -2116,7 +2115,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -2169,7 +2168,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -2216,7 +2215,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -2398,7 +2397,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto xrs1 =this->gen_reg_load(rs1+ traits::X0, 0);
@ -2451,7 +2450,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto xrd =this->gen_read_mem(traits::CSR, csr, 4);
@ -2505,7 +2504,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto xrd =this->gen_read_mem(traits::CSR, csr, 4);
@ -2559,7 +2558,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto xrd =this->gen_read_mem(traits::CSR, csr, 4);
@ -2607,7 +2606,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto xrd =this->gen_read_mem(traits::CSR, csr, 4);
@ -2660,7 +2659,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto xrd =this->gen_read_mem(traits::CSR, csr, 4);
@ -2750,21 +2749,15 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto res =this->gen_ext(
(this->builder.CreateMul(
this->gen_ext(this->gen_ext(
this->gen_ext(
this->gen_reg_load(rs1+ traits::X0, 0), 32,true),
64, true), 128,true),
this->gen_ext(this->gen_ext(
this->gen_ext(
this->gen_reg_load(rs2+ traits::X0, 0), 32,true),
64, true), 128,true))
),
64, true);
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_ext(
this->gen_reg_load(rs2+ traits::X0, 0), 32,true), 64,true))
;
if(rd!=0) {
this->builder.CreateStore(
this->gen_ext(
@ -2808,21 +2801,15 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto res =this->gen_ext(
(this->builder.CreateMul(
this->gen_ext(this->gen_ext(
this->gen_ext(
this->gen_reg_load(rs1+ traits::X0, 0), 32,true),
64, true), 128,true),
this->gen_ext(this->gen_ext(
this->gen_ext(
this->gen_reg_load(rs2+ traits::X0, 0), 32,true),
64, true), 128,true))
),
64, true);
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_ext(
this->gen_reg_load(rs2+ traits::X0, 0), 32,true), 64,true))
;
if(rd!=0) {
this->builder.CreateStore(
this->gen_ext(
@ -2869,20 +2856,14 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto res =this->gen_ext(
(this->builder.CreateMul(
this->gen_ext(this->gen_ext(
this->gen_ext(
this->gen_reg_load(rs1+ traits::X0, 0), 32,true),
64, true), 128,true),
this->gen_ext(this->gen_ext(
this->gen_reg_load(rs2+ traits::X0, 0),
64, false), 128,false))
),
64, true);
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))
;
if(rd!=0) {
this->builder.CreateStore(
this->gen_ext(
@ -2929,19 +2910,13 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto res =this->gen_ext(
(this->builder.CreateMul(
this->gen_ext(this->gen_ext(
this->gen_reg_load(rs1+ traits::X0, 0),
64, false), 128,false),
this->gen_ext(this->gen_ext(
this->gen_reg_load(rs2+ traits::X0, 0),
64, false), 128,false))
),
64, false);
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))
;
if(rd!=0) {
this->builder.CreateStore(
this->gen_ext(
@ -2988,15 +2963,13 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto dividend =this->gen_ext(
this->gen_reg_load(rs1+ traits::X0, 0),
32, false);
this->gen_reg_load(rs1+ traits::X0, 0), 32,true);
auto divisor =this->gen_ext(
this->gen_reg_load(rs2+ traits::X0, 0),
32, false);
this->gen_reg_load(rs2+ traits::X0, 0), 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);
@ -3087,7 +3060,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
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);
@ -3101,12 +3074,10 @@ private:
{
if(rd!=0) {
this->builder.CreateStore(
this->gen_ext(
(this->builder.CreateUDiv(
this->gen_reg_load(rs1+ traits::X0, 0),
this->gen_reg_load(rs2+ traits::X0, 0))
),
32, false),
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);
}
}
@ -3157,7 +3128,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
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);
@ -3201,13 +3172,10 @@ private:
this->gen_ext(
(this->builder.CreateSRem(
this->gen_ext(
this->gen_reg_load(rs1+ traits::X0, 0),
32, false),
this->gen_reg_load(rs1+ traits::X0, 0), 32,true),
this->gen_ext(
this->gen_reg_load(rs2+ traits::X0, 0),
32, false))
),
32, true),
this->gen_reg_load(rs2+ traits::X0, 0), 32,true))
), 32,false),
get_reg_ptr(rd + traits::X0), false);
}
}
@ -3261,7 +3229,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rs1>=static_cast<uint32_t>(traits::RFS)||rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
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);
@ -3338,7 +3306,7 @@ private:
get_reg_ptr(rd+8 + traits::X0), false);
}
else{
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk);
auto returnValue = std::make_tuple(CONT,bb);
@ -3466,7 +3434,7 @@ private:
/*generate behavior*/
if(rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rs1!=0) {
@ -3576,7 +3544,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -3619,7 +3587,7 @@ private:
/*generate behavior*/
if(imm==0||rd>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
if(rd!=0) {
this->builder.CreateStore(
@ -3669,7 +3637,7 @@ private:
get_reg_ptr(2 + traits::X0), false);
}
else{
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk);
auto returnValue = std::make_tuple(CONT,bb);
@ -3695,7 +3663,7 @@ private:
this->gen_set_pc(pc, traits::NEXT_PC);
/*generate behavior*/
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk);
auto returnValue = std::make_tuple(CONT,bb);
@ -4154,7 +4122,7 @@ private:
/*generate behavior*/
if(rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rs1!=0) {
@ -4200,7 +4168,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)||rd==0) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto offs =this->gen_ext(
@ -4251,7 +4219,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -4292,9 +4260,10 @@ private:
this->gen_set_pc(pc, traits::NEXT_PC);
/*generate behavior*/
if(rs1&&rs1<static_cast<uint32_t>(traits::RFS)){ auto PC_val_v = this->builder.CreateAnd(
if(rs1&&rs1<static_cast<uint32_t>(traits::RFS)){ auto addr_mask =this->gen_const(32,(uint32_t)- 2);
auto PC_val_v = this->builder.CreateAnd(
this->gen_reg_load(rs1%static_cast<uint32_t>(traits::RFS)+ traits::X0, 0),
this->gen_const(32,~ 1))
addr_mask)
;
this->builder.CreateStore(PC_val_v, get_reg_ptr(traits::NEXT_PC), false);
this->builder.CreateStore(this->gen_const(32,2U), get_reg_ptr(traits::LAST_BRANCH), false);
@ -4360,7 +4329,7 @@ private:
/*generate behavior*/
if(rd>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
if(rd!=0) {
@ -4407,16 +4376,17 @@ private:
/*generate behavior*/
if(rs1>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto addr_mask =this->gen_const(32,(uint32_t)- 2);
auto new_pc =this->gen_reg_load(rs1+ traits::X0, 0);
this->builder.CreateStore(
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,~ 1))
addr_mask)
;
this->builder.CreateStore(PC_val_v, get_reg_ptr(traits::NEXT_PC), false);
this->builder.CreateStore(this->gen_const(32,2U), get_reg_ptr(traits::LAST_BRANCH), false);
@ -4479,7 +4449,7 @@ private:
/*generate behavior*/
if(rs2>=static_cast<uint32_t>(traits::RFS)) {
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
}
else{
auto offs =this->gen_ext(
@ -4517,7 +4487,7 @@ private:
this->gen_set_pc(pc, traits::NEXT_PC);
/*generate behavior*/
this->gen_raise_trap(0, 2);
this->gen_raise_trap(0, static_cast<int32_t>(traits::RV_CAUSE_ILLEGAL_INSTRUCTION));
bb = BasicBlock::Create(this->mod->getContext(), "entry", this->func, this->leave_blk);
auto returnValue = std::make_tuple(CONT,bb);