Streamline arch descriptions according to latest CoreDSL changes

This commit is contained in:
Eyck Jentzsch 2018-04-24 17:18:24 +02:00
parent 65ceedd157
commit 142654b0a2
12 changed files with 73 additions and 55 deletions

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.cdt.launch.applicationLaunchType">
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.AUTO_SOLIB" value="true"/>
<listAttribute key="org.eclipse.cdt.dsf.gdb.AUTO_SOLIB_LIST"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="gdb"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_ON_FORK" value="false"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.GDB_INIT" value=".gdbinit"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.NON_STOP" value="false"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.REVERSE" value="false"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.REVERSE_MODE" value="UseSoftTrace"/>
<listAttribute key="org.eclipse.cdt.dsf.gdb.SOLIB_PATH"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.TRACEPOINT_MODE" value="TP_NORMAL_ONLY"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.internal.ui.launching.LocalApplicationCDebuggerTab.DEFAULTS_SET" value="true"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_ID" value="gdb"/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="run"/>
<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_ARGUMENTS" value="-v4&#10;${project_loc:dhrystone}/dhrystone"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="build/Release/riscv/bin/riscv"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="DBT-RISE-RISCV"/>
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value=""/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/DBT-RISE-RISCV"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;/&gt;&#10;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
</launchConfiguration>

View File

@ -2,7 +2,7 @@ import "RV32IBase.core_desc"
InsructionSet RV32D extends RV32IBase{ InsructionSet RV32D extends RV32IBase{
constants { constants {
FLEN, FFLAG_MASK FLEN, FFLAG_MASK := 0x1f
} }
registers { registers {
[31:0] F[FLEN], FCSR[32] [31:0] F[FLEN], FCSR[32]

View File

@ -2,7 +2,7 @@ import "RV32IBase.core_desc"
InsructionSet RV32F extends RV32IBase{ InsructionSet RV32F extends RV32IBase{
constants { constants {
FLEN, FFLAG_MASK FLEN, FFLAG_MASK := 0x1f
} }
registers { registers {
[31:0] F[FLEN], FCSR[32] [31:0] F[FLEN], FCSR[32]

View File

@ -1,12 +1,12 @@
InsructionSet RV32IBase { InsructionSet RV32IBase {
constants { constants {
XLEN, XLEN,
XLEN_BIT_MASK,
PCLEN, PCLEN,
fence, XLEN_BIT_MASK:=0x1f,
fencei, fence:=0,
fencevmal, fencei:=1,
fencevmau fencevmal:=2,
fencevmau:=3
} }
address_spaces { address_spaces {

View File

@ -2,14 +2,14 @@ import "RV32IBase.core_desc"
InsructionSet RV32M extends RV32IBase { InsructionSet RV32M extends RV32IBase {
constants { constants {
XLEN2 MAXLEN:=128
} }
instructions{ instructions{
MUL{ MUL{
encoding: b0000001 | rs2[4:0] | rs1[4:0] | b000 | rd[4:0] | b0110011; encoding: b0000001 | rs2[4:0] | rs1[4:0] | b000 | rd[4:0] | b0110011;
args_disass:"x%rd$d, x%rs1$d, x%rs2$d"; args_disass:"x%rd$d, x%rs1$d, x%rs2$d";
if(rd != 0){ 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); 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; encoding: b0000001 | rs2[4:0] | rs1[4:0] | b001 | rd[4:0] | b0110011;
args_disass:"x%rd$d, x%rs1$d, x%rs2$d"; args_disass:"x%rd$d, x%rs1$d, x%rs2$d";
if(rd != 0){ 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); 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; encoding: b0000001 | rs2[4:0] | rs1[4:0] | b010 | rd[4:0] | b0110011;
args_disass:"x%rd$d, x%rs1$d, x%rs2$d"; args_disass:"x%rd$d, x%rs1$d, x%rs2$d";
if(rd != 0){ 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); 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; encoding: b0000001 | rs2[4:0] | rs1[4:0] | b011 | rd[4:0] | b0110011;
args_disass:"x%rd$d, x%rs1$d, x%rs2$d"; args_disass:"x%rd$d, x%rs1$d, x%rs2$d";
if(rd != 0){ 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); X[rd]<= zext(res >> XLEN, XLEN);
} }
} }

View File

@ -13,15 +13,10 @@ Core RV32IMAC provides RV32IBase, RV32M, RV32A, RV32IC {
template:"vm_riscv.in.cpp"; template:"vm_riscv.in.cpp";
constants { constants {
XLEN:=32; XLEN:=32;
XLEN2:=64;
XLEN_BIT_MASK:=0x1f;
PCLEN:=32; PCLEN:=32;
fence:=0; // definitions for the architecture wrapper
fencei:=1;
fencevmal:=2;
fencevmau:=3;
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA // XL ZYXWVUTSRQPONMLKJIHGFEDCBA
MISA_VAL:=0b01000000000101000001000100000001; MISA_VAL:=0b01000000000101000001000100000101;
PGSIZE := 4096; //1 << 12; PGSIZE := 4096; //1 << 12;
PGMASK := 4095; //PGSIZE-1 PGMASK := 4095; //PGSIZE-1
} }
@ -31,18 +26,12 @@ Core RV32GC provides RV32IBase, RV32M, RV32A, RV32IC, RV32F, RV32FC, RV32D, RV32
constants { constants {
XLEN:=32; XLEN:=32;
FLEN:=64; FLEN:=64;
XLEN2:=64;
XLEN_BIT_MASK:=0x1f;
PCLEN:=32; PCLEN:=32;
fence:=0; // definitions for the architecture wrapper
fencei:=1;
fencevmal:=2;
fencevmau:=3;
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA // XL ZYXWVUTSRQPONMLKJIHGFEDCBA
MISA_VAL:=0b01000000000101000001000100000001; MISA_VAL:=0b01000000000101000001000100101101;
PGSIZE := 4096; //1 << 12; PGSIZE := 4096; //1 << 12;
PGMASK := 4095; //PGSIZE-1 PGMASK := 4095; //PGSIZE-1
FFLAG_MASK:=0x1f;
} }
} }
@ -51,13 +40,8 @@ Core RV64IA provides RV64IBase, RV64A, RV32A {
template:"vm_riscv.in.cpp"; template:"vm_riscv.in.cpp";
constants { constants {
XLEN:=64; XLEN:=64;
XLEN2:=128;
XLEN_BIT_MASK:=0x3f;
PCLEN:=64; PCLEN:=64;
fence:=0; // definitions for the architecture wrapper
fencei:=1;
fencevmal:=2;
fencevmau:=3;
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA // XL ZYXWVUTSRQPONMLKJIHGFEDCBA
MISA_VAL:=0b10000000000001000000000100000001; MISA_VAL:=0b10000000000001000000000100000001;
PGSIZE := 4096; //1 << 12; PGSIZE := 4096; //1 << 12;

View File

@ -48,7 +48,7 @@ struct traits<rv32gc> {
constexpr static char const* const core_type = "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; constexpr static unsigned FP_REGS_SIZE = 64;

View File

@ -48,7 +48,7 @@ struct traits<rv32imac> {
constexpr static char const* const core_type = "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; constexpr static unsigned FP_REGS_SIZE = 0;

View File

@ -48,7 +48,7 @@ struct traits<rv64ia> {
constexpr static char const* const core_type = "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; constexpr static unsigned FP_REGS_SIZE = 0;

View File

@ -2578,11 +2578,11 @@ private:
Value* res_val = this->builder.CreateMul( Value* res_val = this->builder.CreateMul(
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
64, 128,
false), false),
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
64, 128,
false)); false));
Value* X_rd_val = this->gen_ext( Value* X_rd_val = this->gen_ext(
res_val, res_val,
@ -2625,11 +2625,11 @@ private:
Value* res_val = this->builder.CreateMul( Value* res_val = this->builder.CreateMul(
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
64, 128,
true), true),
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
64, 128,
true)); true));
Value* X_rd_val = this->gen_ext( Value* X_rd_val = this->gen_ext(
this->builder.CreateLShr( this->builder.CreateLShr(
@ -2674,11 +2674,11 @@ private:
Value* res_val = this->builder.CreateMul( Value* res_val = this->builder.CreateMul(
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
64, 128,
true), true),
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
64, 128,
false)); false));
Value* X_rd_val = this->gen_ext( Value* X_rd_val = this->gen_ext(
this->builder.CreateLShr( this->builder.CreateLShr(
@ -2723,11 +2723,11 @@ private:
Value* res_val = this->builder.CreateMul( Value* res_val = this->builder.CreateMul(
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
64, 128,
false), false),
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
64, 128,
false)); false));
Value* X_rd_val = this->gen_ext( Value* X_rd_val = this->gen_ext(
this->builder.CreateLShr( this->builder.CreateLShr(

View File

@ -2458,11 +2458,11 @@ private:
Value* res_val = this->builder.CreateMul( Value* res_val = this->builder.CreateMul(
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
64, 128,
false), false),
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
64, 128,
false)); false));
Value* X_rd_val = this->gen_ext( Value* X_rd_val = this->gen_ext(
res_val, res_val,
@ -2505,11 +2505,11 @@ private:
Value* res_val = this->builder.CreateMul( Value* res_val = this->builder.CreateMul(
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
64, 128,
true), true),
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
64, 128,
true)); true));
Value* X_rd_val = this->gen_ext( Value* X_rd_val = this->gen_ext(
this->builder.CreateLShr( this->builder.CreateLShr(
@ -2554,11 +2554,11 @@ private:
Value* res_val = this->builder.CreateMul( Value* res_val = this->builder.CreateMul(
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
64, 128,
true), true),
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
64, 128,
false)); false));
Value* X_rd_val = this->gen_ext( Value* X_rd_val = this->gen_ext(
this->builder.CreateLShr( this->builder.CreateLShr(
@ -2603,11 +2603,11 @@ private:
Value* res_val = this->builder.CreateMul( Value* res_val = this->builder.CreateMul(
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
64, 128,
false), false),
this->gen_ext( this->gen_ext(
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0),
64, 128,
false)); false));
Value* X_rd_val = this->gen_ext( Value* X_rd_val = this->gen_ext(
this->builder.CreateLShr( this->builder.CreateLShr(

View File

@ -2128,7 +2128,7 @@ private:
this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0), this->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
this->builder.CreateAnd( this->builder.CreateAnd(
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0), 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->builder.CreateStore(X_rd_val, get_reg_ptr(fld_rd_val + traits<ARCH>::X0), false);
} }
this->gen_set_pc(pc, traits<ARCH>::NEXT_PC); 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->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
this->builder.CreateAnd( this->builder.CreateAnd(
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0), 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->builder.CreateStore(X_rd_val, get_reg_ptr(fld_rd_val + traits<ARCH>::X0), false);
} }
this->gen_set_pc(pc, traits<ARCH>::NEXT_PC); 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->gen_reg_load(fld_rs1_val + traits<ARCH>::X0, 0),
this->builder.CreateAnd( this->builder.CreateAnd(
this->gen_reg_load(fld_rs2_val + traits<ARCH>::X0, 0), 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->builder.CreateStore(X_rd_val, get_reg_ptr(fld_rd_val + traits<ARCH>::X0), false);
} }
this->gen_set_pc(pc, traits<ARCH>::NEXT_PC); this->gen_set_pc(pc, traits<ARCH>::NEXT_PC);