Streamline arch descriptions according to latest CoreDSL changes
This commit is contained in:
@ -2,7 +2,7 @@ import "RV32IBase.core_desc"
|
||||
|
||||
InsructionSet RV32D extends RV32IBase{
|
||||
constants {
|
||||
FLEN, FFLAG_MASK
|
||||
FLEN, FFLAG_MASK := 0x1f
|
||||
}
|
||||
registers {
|
||||
[31:0] F[FLEN], FCSR[32]
|
||||
|
@ -2,7 +2,7 @@ import "RV32IBase.core_desc"
|
||||
|
||||
InsructionSet RV32F extends RV32IBase{
|
||||
constants {
|
||||
FLEN, FFLAG_MASK
|
||||
FLEN, FFLAG_MASK := 0x1f
|
||||
}
|
||||
registers {
|
||||
[31:0] F[FLEN], FCSR[32]
|
||||
|
@ -1,12 +1,12 @@
|
||||
InsructionSet RV32IBase {
|
||||
constants {
|
||||
XLEN,
|
||||
XLEN_BIT_MASK,
|
||||
PCLEN,
|
||||
fence,
|
||||
fencei,
|
||||
fencevmal,
|
||||
fencevmau
|
||||
XLEN_BIT_MASK:=0x1f,
|
||||
fence:=0,
|
||||
fencei:=1,
|
||||
fencevmal:=2,
|
||||
fencevmau:=3
|
||||
}
|
||||
|
||||
address_spaces {
|
||||
|
@ -2,14 +2,14 @@ import "RV32IBase.core_desc"
|
||||
|
||||
InsructionSet RV32M extends RV32IBase {
|
||||
constants {
|
||||
XLEN2
|
||||
MAXLEN:=128
|
||||
}
|
||||
instructions{
|
||||
MUL{
|
||||
encoding: b0000001 | rs2[4:0] | rs1[4:0] | b000 | rd[4:0] | b0110011;
|
||||
args_disass:"x%rd$d, x%rs1$d, x%rs2$d";
|
||||
if(rd != 0){
|
||||
val res[XLEN2] <= zext(X[rs1], XLEN2) * zext(X[rs2], XLEN2);
|
||||
val res[MAXLEN] <= zext(X[rs1], MAXLEN) * zext(X[rs2], MAXLEN);
|
||||
X[rd]<= zext(res , XLEN);
|
||||
}
|
||||
}
|
||||
@ -17,7 +17,7 @@ InsructionSet RV32M extends RV32IBase {
|
||||
encoding: b0000001 | rs2[4:0] | rs1[4:0] | b001 | rd[4:0] | b0110011;
|
||||
args_disass:"x%rd$d, x%rs1$d, x%rs2$d";
|
||||
if(rd != 0){
|
||||
val res[XLEN2] <= sext(X[rs1], XLEN2) * sext(X[rs2], XLEN2);
|
||||
val res[MAXLEN] <= sext(X[rs1], MAXLEN) * sext(X[rs2], MAXLEN);
|
||||
X[rd]<= zext(res >> XLEN, XLEN);
|
||||
}
|
||||
}
|
||||
@ -25,7 +25,7 @@ InsructionSet RV32M extends RV32IBase {
|
||||
encoding: b0000001 | rs2[4:0] | rs1[4:0] | b010 | rd[4:0] | b0110011;
|
||||
args_disass:"x%rd$d, x%rs1$d, x%rs2$d";
|
||||
if(rd != 0){
|
||||
val res[XLEN2] <= sext(X[rs1], XLEN2) * zext(X[rs2], XLEN2);
|
||||
val res[MAXLEN] <= sext(X[rs1], MAXLEN) * zext(X[rs2], MAXLEN);
|
||||
X[rd]<= zext(res >> XLEN, XLEN);
|
||||
}
|
||||
}
|
||||
@ -33,7 +33,7 @@ InsructionSet RV32M extends RV32IBase {
|
||||
encoding: b0000001 | rs2[4:0] | rs1[4:0] | b011 | rd[4:0] | b0110011;
|
||||
args_disass:"x%rd$d, x%rs1$d, x%rs2$d";
|
||||
if(rd != 0){
|
||||
val res[XLEN2] <= zext(X[rs1], XLEN2) * zext(X[rs2], XLEN2);
|
||||
val res[MAXLEN] <= zext(X[rs1], MAXLEN) * zext(X[rs2], MAXLEN);
|
||||
X[rd]<= zext(res >> XLEN, XLEN);
|
||||
}
|
||||
}
|
||||
|
@ -13,15 +13,10 @@ Core RV32IMAC provides RV32IBase, RV32M, RV32A, RV32IC {
|
||||
template:"vm_riscv.in.cpp";
|
||||
constants {
|
||||
XLEN:=32;
|
||||
XLEN2:=64;
|
||||
XLEN_BIT_MASK:=0x1f;
|
||||
PCLEN:=32;
|
||||
fence:=0;
|
||||
fencei:=1;
|
||||
fencevmal:=2;
|
||||
fencevmau:=3;
|
||||
// definitions for the architecture wrapper
|
||||
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA
|
||||
MISA_VAL:=0b01000000000101000001000100000001;
|
||||
MISA_VAL:=0b01000000000101000001000100000101;
|
||||
PGSIZE := 4096; //1 << 12;
|
||||
PGMASK := 4095; //PGSIZE-1
|
||||
}
|
||||
@ -31,18 +26,12 @@ Core RV32GC provides RV32IBase, RV32M, RV32A, RV32IC, RV32F, RV32FC, RV32D, RV32
|
||||
constants {
|
||||
XLEN:=32;
|
||||
FLEN:=64;
|
||||
XLEN2:=64;
|
||||
XLEN_BIT_MASK:=0x1f;
|
||||
PCLEN:=32;
|
||||
fence:=0;
|
||||
fencei:=1;
|
||||
fencevmal:=2;
|
||||
fencevmau:=3;
|
||||
// definitions for the architecture wrapper
|
||||
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA
|
||||
MISA_VAL:=0b01000000000101000001000100000001;
|
||||
MISA_VAL:=0b01000000000101000001000100101101;
|
||||
PGSIZE := 4096; //1 << 12;
|
||||
PGMASK := 4095; //PGSIZE-1
|
||||
FFLAG_MASK:=0x1f;
|
||||
}
|
||||
}
|
||||
|
||||
@ -51,13 +40,8 @@ Core RV64IA provides RV64IBase, RV64A, RV32A {
|
||||
template:"vm_riscv.in.cpp";
|
||||
constants {
|
||||
XLEN:=64;
|
||||
XLEN2:=128;
|
||||
XLEN_BIT_MASK:=0x3f;
|
||||
PCLEN:=64;
|
||||
fence:=0;
|
||||
fencei:=1;
|
||||
fencevmal:=2;
|
||||
fencevmau:=3;
|
||||
// definitions for the architecture wrapper
|
||||
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA
|
||||
MISA_VAL:=0b10000000000001000000000100000001;
|
||||
PGSIZE := 4096; //1 << 12;
|
||||
|
@ -48,7 +48,7 @@ struct traits<rv32gc> {
|
||||
|
||||
constexpr static char const* const core_type = "RV32GC";
|
||||
|
||||
enum constants {XLEN=32, FLEN=64, XLEN2=64, XLEN_BIT_MASK=31, PCLEN=32, fence=0, fencei=1, fencevmal=2, fencevmau=3, MISA_VAL=1075056897, PGSIZE=4096, PGMASK=4095, FFLAG_MASK=31};
|
||||
enum constants {XLEN=32, FLEN=64, PCLEN=32, MISA_VAL=1075056941, PGSIZE=4096, PGMASK=4095};
|
||||
|
||||
constexpr static unsigned FP_REGS_SIZE = 64;
|
||||
|
||||
|
@ -48,7 +48,7 @@ struct traits<rv32imac> {
|
||||
|
||||
constexpr static char const* const core_type = "RV32IMAC";
|
||||
|
||||
enum constants {XLEN=32, XLEN2=64, XLEN_BIT_MASK=31, PCLEN=32, fence=0, fencei=1, fencevmal=2, fencevmau=3, MISA_VAL=1075056897, PGSIZE=4096, PGMASK=4095};
|
||||
enum constants {XLEN=32, PCLEN=32, MISA_VAL=1075056901, PGSIZE=4096, PGMASK=4095};
|
||||
|
||||
constexpr static unsigned FP_REGS_SIZE = 0;
|
||||
|
||||
|
@ -48,7 +48,7 @@ struct traits<rv64ia> {
|
||||
|
||||
constexpr static char const* const core_type = "RV64IA";
|
||||
|
||||
enum constants {XLEN=64, XLEN2=128, XLEN_BIT_MASK=63, PCLEN=64, fence=0, fencei=1, fencevmal=2, fencevmau=3, MISA_VAL=2147746049, PGSIZE=4096, PGMASK=4095};
|
||||
enum constants {XLEN=64, PCLEN=64, MISA_VAL=2147746049, PGSIZE=4096, PGMASK=4095};
|
||||
|
||||
constexpr static unsigned FP_REGS_SIZE = 0;
|
||||
|
||||
|
@ -2578,11 +2578,11 @@ private:
|
||||
Value* res_val = this->builder.CreateMul(
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
false),
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
false));
|
||||
Value* X_rd_val = this->gen_ext(
|
||||
res_val,
|
||||
@ -2625,11 +2625,11 @@ private:
|
||||
Value* res_val = this->builder.CreateMul(
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
true),
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
true));
|
||||
Value* X_rd_val = this->gen_ext(
|
||||
this->builder.CreateLShr(
|
||||
@ -2674,11 +2674,11 @@ private:
|
||||
Value* res_val = this->builder.CreateMul(
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
true),
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
false));
|
||||
Value* X_rd_val = this->gen_ext(
|
||||
this->builder.CreateLShr(
|
||||
@ -2723,11 +2723,11 @@ private:
|
||||
Value* res_val = this->builder.CreateMul(
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
false),
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
false));
|
||||
Value* X_rd_val = this->gen_ext(
|
||||
this->builder.CreateLShr(
|
||||
|
@ -2458,11 +2458,11 @@ private:
|
||||
Value* res_val = this->builder.CreateMul(
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
false),
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
false));
|
||||
Value* X_rd_val = this->gen_ext(
|
||||
res_val,
|
||||
@ -2505,11 +2505,11 @@ private:
|
||||
Value* res_val = this->builder.CreateMul(
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
true),
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
true));
|
||||
Value* X_rd_val = this->gen_ext(
|
||||
this->builder.CreateLShr(
|
||||
@ -2554,11 +2554,11 @@ private:
|
||||
Value* res_val = this->builder.CreateMul(
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
true),
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
false));
|
||||
Value* X_rd_val = this->gen_ext(
|
||||
this->builder.CreateLShr(
|
||||
@ -2603,11 +2603,11 @@ private:
|
||||
Value* res_val = this->builder.CreateMul(
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
false),
|
||||
this->gen_ext(
|
||||
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
|
||||
64,
|
||||
128,
|
||||
false));
|
||||
Value* X_rd_val = this->gen_ext(
|
||||
this->builder.CreateLShr(
|
||||
|
@ -2128,7 +2128,7 @@ private:
|
||||
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
|
||||
this->builder.CreateAnd(
|
||||
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
|
||||
this->gen_const(64U, 63)));
|
||||
this->gen_const(64U, 31)));
|
||||
this->builder.CreateStore(X_rd_val, get_reg_ptr(fld_rd_val + traits<ARCH>::X0), false);
|
||||
}
|
||||
this->gen_set_pc(pc, traits<ARCH>::NEXT_PC);
|
||||
@ -2298,7 +2298,7 @@ private:
|
||||
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
|
||||
this->builder.CreateAnd(
|
||||
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
|
||||
this->gen_const(64U, 63)));
|
||||
this->gen_const(64U, 31)));
|
||||
this->builder.CreateStore(X_rd_val, get_reg_ptr(fld_rd_val + traits<ARCH>::X0), false);
|
||||
}
|
||||
this->gen_set_pc(pc, traits<ARCH>::NEXT_PC);
|
||||
@ -2337,7 +2337,7 @@ private:
|
||||
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
|
||||
this->builder.CreateAnd(
|
||||
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
|
||||
this->gen_const(64U, 63)));
|
||||
this->gen_const(64U, 31)));
|
||||
this->builder.CreateStore(X_rd_val, get_reg_ptr(fld_rd_val + traits<ARCH>::X0), false);
|
||||
}
|
||||
this->gen_set_pc(pc, traits<ARCH>::NEXT_PC);
|
||||
|
Reference in New Issue
Block a user