Adapted descriptions to improved Core DSL and regenerated code
This commit is contained in:
parent
9ad29ddb64
commit
19b660962b
|
@ -10,15 +10,14 @@
|
||||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1751741082" name="Debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=" parent="cdt.managedbuild.config.gnu.exe.debug">
|
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1751741082" name="Debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="cdt.managedbuild.config.gnu.exe.debug">
|
||||||
<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1751741082." name="/" resourcePath="">
|
<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1751741082." name="/" resourcePath="">
|
||||||
<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1289745146" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
|
<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1289745146" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
|
||||||
<targetPlatform binaryParser="org.eclipse.cdt.core.GNU_ELF;org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.exe.debug.1460698591" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
|
<targetPlatform binaryParser="org.eclipse.cdt.core.GNU_ELF;org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.exe.debug.1460698591" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
|
||||||
<builder buildPath="/DBT-RISE-RISCV/build/{ConfigName}" id="de.marw.cdt.cmake.core.genmakebuilder.2061143699" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CMake Builder (GNU Make)" parallelBuildOn="true" parallelizationNumber="optimal" superClass="de.marw.cdt.cmake.core.genmakebuilder"/>
|
<builder buildPath="/DBT-RISE-RISCV/build/Debug" id="de.marw.cdt.cmake.core.genscriptbuilder.2135578907" keepEnvironmentInBuildfile="false" name="CMake Builder (portable)" parallelBuildOn="false" superClass="de.marw.cdt.cmake.core.genscriptbuilder"/>
|
||||||
<tool id="cdt.managedbuild.tool.gnu.archiver.base.366643800" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
|
<tool id="cdt.managedbuild.tool.gnu.archiver.base.366643800" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
|
||||||
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1510612390" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
|
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1510612390" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
|
||||||
<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1768317780" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
|
<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1768317780" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
|
||||||
|
@ -46,7 +45,7 @@
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
<storageModule buildDir="build/${ConfigName}" moduleId="de.marw.cdt.cmake.core.settings">
|
<storageModule buildDir="build/${ConfigName}" moduleId="de.marw.cdt.cmake.core.settings">
|
||||||
<options clearCache="true"/>
|
<options/>
|
||||||
<linux command="cmake" generator="UnixMakefiles" use-default="true">
|
<linux command="cmake" generator="UnixMakefiles" use-default="true">
|
||||||
<defs>
|
<defs>
|
||||||
<def name="CMAKE_VERBOSE_MAKEFILE" type="BOOL" val="OFF"/>
|
<def name="CMAKE_VERBOSE_MAKEFILE" type="BOOL" val="OFF"/>
|
||||||
|
|
2
dbt-core
2
dbt-core
|
@ -1 +1 @@
|
||||||
Subproject commit 393c374cac4950e629036dda1615abedf866961f
|
Subproject commit 23dbab0b768d122c492110d1db34408e9ae787f3
|
|
@ -23,25 +23,19 @@ InsructionSet RV32IC {
|
||||||
encoding: b000 | imm[5:4] | imm[9:6] | imm[2:2] | imm[3:3] | rd[2:0] | b00;
|
encoding: b000 | imm[5:4] | imm[9:6] | imm[2:2] | imm[3:3] | rd[2:0] | b00;
|
||||||
args_disass: "x%rd$d, 0x%imm$05x";
|
args_disass: "x%rd$d, 0x%imm$05x";
|
||||||
if(imm == 0) raise(0, 2);
|
if(imm == 0) raise(0, 2);
|
||||||
val rd_idx[5] <= rd+8;
|
X[rd+8] <= X[2] + imm;
|
||||||
val x2_idx[5] <= 2;
|
|
||||||
X[rd_idx] <= X[x2_idx] + imm;
|
|
||||||
}
|
}
|
||||||
C.LW { // (RV32)
|
C.LW { // (RV32)
|
||||||
encoding: b010 | uimm[5:3] | rs1[2:0] | uimm[2:2] | uimm[6:6] | rd[2:0] | b00;
|
encoding: b010 | uimm[5:3] | rs1[2:0] | uimm[2:2] | uimm[6:6] | rd[2:0] | b00;
|
||||||
args_disass: "x(8+%rd$d), x(8+%rs1$d), 0x%uimm$05x";
|
args_disass: "x(8+%rd$d), x(8+%rs1$d), 0x%uimm$05x";
|
||||||
val rs1_idx[5] <= rs1+8;
|
val offs[XLEN] <= X[rs1+8]+uimm;
|
||||||
val rd_idx[5] <= rd+8;
|
X[rd+8] <= MEM[offs]{32};
|
||||||
val offs[XLEN] <= X[rs1_idx]+uimm;
|
|
||||||
X[rd_idx] <= MEM[offs]{32};
|
|
||||||
}
|
}
|
||||||
C.SW {//(RV32)
|
C.SW {//(RV32)
|
||||||
encoding: b110 | uimm[5:3] | rs1[2:0] | uimm[2:2] | uimm[6:6] | rs2[2:0] | b00;
|
encoding: b110 | uimm[5:3] | rs1[2:0] | uimm[2:2] | uimm[6:6] | rs2[2:0] | b00;
|
||||||
args_disass: "x(8+%rs1$d), x(8+%rs2$d), 0x%uimm$05x";
|
args_disass: "x(8+%rs1$d), x(8+%rs2$d), 0x%uimm$05x";
|
||||||
val rs1_idx[5] <= rs1+8;
|
val offs[XLEN] <= X[rs1+8]+uimm;
|
||||||
val rs2_idx[5] <= rs2+8;
|
MEM[offs]{32} <= X[rs2+8];
|
||||||
val offs[XLEN] <= X[rs1_idx]+uimm;
|
|
||||||
MEM[offs]{32} <= X[rs2_idx];
|
|
||||||
}
|
}
|
||||||
C.ADDI {//(RV32)
|
C.ADDI {//(RV32)
|
||||||
encoding:b000 | imm[5:5]s | rs1[4:0] | imm[4:0]s | b01;
|
encoding:b000 | imm[5:5]s | rs1[4:0] | imm[4:0]s | b01;
|
||||||
|
@ -55,8 +49,7 @@ InsructionSet RV32IC {
|
||||||
C.JAL(no_cont) {//(RV32)
|
C.JAL(no_cont) {//(RV32)
|
||||||
encoding: b001 | imm[11:11]s | imm[4:4]s | imm[9:8]s | imm[10:10]s | imm[6:6]s | imm[7:7]s | imm[3:1]s | imm[5:5]s | b01;
|
encoding: b001 | imm[11:11]s | imm[4:4]s | imm[9:8]s | imm[10:10]s | imm[6:6]s | imm[7:7]s | imm[3:1]s | imm[5:5]s | b01;
|
||||||
args_disass: "0x%imm$05x";
|
args_disass: "0x%imm$05x";
|
||||||
val rd[5] <= 1;
|
X[1] <= PC+2;
|
||||||
X[rd] <= PC+2;
|
|
||||||
PC<=PC+imm;
|
PC<=PC+imm;
|
||||||
}
|
}
|
||||||
C.LI {//(RV32)
|
C.LI {//(RV32)
|
||||||
|
@ -76,8 +69,7 @@ InsructionSet RV32IC {
|
||||||
C.ADDI16SP {//(RV32)
|
C.ADDI16SP {//(RV32)
|
||||||
encoding:b011 | imm[9:9]s | b00010 | imm[4:4]s | imm[6:6]s | imm[8:7]s | imm[5:5]s | b01;
|
encoding:b011 | imm[9:9]s | b00010 | imm[4:4]s | imm[6:6]s | imm[8:7]s | imm[5:5]s | b01;
|
||||||
args_disass: "0x%imm$05x";
|
args_disass: "0x%imm$05x";
|
||||||
val x2_idx[5] <= 2;
|
X[2] <= X[2]s + imm;
|
||||||
X[x2_idx] <= X[x2_idx]s + imm;
|
|
||||||
}
|
}
|
||||||
C.SRLI {//(RV32 nse)
|
C.SRLI {//(RV32 nse)
|
||||||
encoding:b100 | b0 | b00 | rs1[2:0] | shamt[4:0] | b01;
|
encoding:b100 | b0 | b00 | rs1[2:0] | shamt[4:0] | b01;
|
||||||
|
@ -101,29 +93,25 @@ InsructionSet RV32IC {
|
||||||
encoding:b100 | b0 | b11 | rd[2:0] | b00 | rs2[2:0] | b01;
|
encoding:b100 | b0 | b11 | rd[2:0] | b00 | rs2[2:0] | b01;
|
||||||
args_disass: "x(8+%rd$d), x(8+%rs2$d)";
|
args_disass: "x(8+%rd$d), x(8+%rs2$d)";
|
||||||
val rd_idx[5] <= rd + 8;
|
val rd_idx[5] <= rd + 8;
|
||||||
val rs2_idx[5] <= rs2 + 8;
|
X[rd_idx] <= X[rd_idx] - X[rs2 + 8];
|
||||||
X[rd_idx] <= X[rd_idx] - X[rs2_idx];
|
|
||||||
}
|
}
|
||||||
C.XOR {//(RV32)
|
C.XOR {//(RV32)
|
||||||
encoding:b100 | b0 | b11 | rd[2:0] | b01 | rs2[2:0] | b01;
|
encoding:b100 | b0 | b11 | rd[2:0] | b01 | rs2[2:0] | b01;
|
||||||
args_disass: "x(8+%rd$d), x(8+%rs2$d)";
|
args_disass: "x(8+%rd$d), x(8+%rs2$d)";
|
||||||
val rd_idx[5] <= rd + 8;
|
val rd_idx[5] <= rd + 8;
|
||||||
val rs2_idx[5] <= rs2 + 8;
|
X[rd_idx] <= X[rd_idx] ^ X[rs2 + 8];
|
||||||
X[rd_idx] <= X[rd_idx] ^ X[rs2_idx];
|
|
||||||
}
|
}
|
||||||
C.OR {//(RV32)
|
C.OR {//(RV32)
|
||||||
encoding:b100 | b0 | b11 | rd[2:0] | b10 | rs2[2:0] | b01;
|
encoding:b100 | b0 | b11 | rd[2:0] | b10 | rs2[2:0] | b01;
|
||||||
args_disass: "x(8+%rd$d), x(8+%rs2$d)";
|
args_disass: "x(8+%rd$d), x(8+%rs2$d)";
|
||||||
val rd_idx[5] <= rd + 8;
|
val rd_idx[5] <= rd + 8;
|
||||||
val rs2_idx[5] <= rs2 + 8;
|
X[rd_idx] <= X[rd_idx] | X[rs2 + 8];
|
||||||
X[rd_idx] <= X[rd_idx] | X[rs2_idx];
|
|
||||||
}
|
}
|
||||||
C.AND {//(RV32)
|
C.AND {//(RV32)
|
||||||
encoding:b100 | b0 | b11 | rd[2:0] | b11 | rs2[2:0] | b01;
|
encoding:b100 | b0 | b11 | rd[2:0] | b11 | rs2[2:0] | b01;
|
||||||
args_disass: "x(8+%rd$d), x(8+%rs2$d)";
|
args_disass: "x(8+%rd$d), x(8+%rs2$d)";
|
||||||
val rd_idx[5] <= rd + 8;
|
val rd_idx[5] <= rd + 8;
|
||||||
val rs2_idx[5] <= rs2 + 8;
|
X[rd_idx] <= X[rd_idx] & X[rs2 + 8];
|
||||||
X[rd_idx] <= X[rd_idx] & X[rs2_idx];
|
|
||||||
}
|
}
|
||||||
C.J(no_cont) {//(RV32)
|
C.J(no_cont) {//(RV32)
|
||||||
encoding:b101 | imm[11:11]s | imm[4:4]s | imm[9:8]s | imm[10:10]s | imm[6:6]s | imm[7:7]s | imm[3:1]s | imm[5:5]s | b01;
|
encoding:b101 | imm[11:11]s | imm[4:4]s | imm[9:8]s | imm[10:10]s | imm[6:6]s | imm[7:7]s | imm[3:1]s | imm[5:5]s | b01;
|
||||||
|
@ -133,14 +121,12 @@ InsructionSet RV32IC {
|
||||||
C.BEQZ(no_cont,cond) {//(RV32)
|
C.BEQZ(no_cont,cond) {//(RV32)
|
||||||
encoding:b110 | imm[8:8]s | imm[4:3]s | rs1[2:0] | imm[7:6]s |imm[2:1]s | imm[5:5]s | b01;
|
encoding:b110 | imm[8:8]s | imm[4:3]s | rs1[2:0] | imm[7:6]s |imm[2:1]s | imm[5:5]s | b01;
|
||||||
args_disass: "x(8+%rs1$d), 0x%imm$05x";
|
args_disass: "x(8+%rs1$d), 0x%imm$05x";
|
||||||
val rs1_idx[5] <= rs1+8;
|
PC<=choose(X[rs1+8]==0, PC+imm, PC+2);
|
||||||
PC<=choose(X[rs1_idx]==0, PC+imm, PC+2);
|
|
||||||
}
|
}
|
||||||
C.BNEZ(no_cont,cond) {//(RV32)
|
C.BNEZ(no_cont,cond) {//(RV32)
|
||||||
encoding:b111 | imm[8:8]s | imm[4:3]s | rs1[2:0] | imm[7:6]s | imm[2:1]s | imm[5:5]s | b01;
|
encoding:b111 | imm[8:8]s | imm[4:3]s | rs1[2:0] | imm[7:6]s | imm[2:1]s | imm[5:5]s | b01;
|
||||||
args_disass: "x(8+%rs1$d), 0x%imm$05x";
|
args_disass: "x(8+%rs1$d), 0x%imm$05x";
|
||||||
val rs1_idx[5] <= rs1+8;
|
PC<=choose(X[rs1+8]!=0, PC+imm, PC+2);
|
||||||
PC<=choose(X[rs1_idx]!=0, PC+imm, PC+2);
|
|
||||||
}
|
}
|
||||||
C.SLLI {//(RV32)
|
C.SLLI {//(RV32)
|
||||||
encoding:b000 | b0 | rs1[4:0] | shamt[4:0] | b10;
|
encoding:b000 | b0 | rs1[4:0] | shamt[4:0] | b10;
|
||||||
|
@ -151,8 +137,7 @@ InsructionSet RV32IC {
|
||||||
C.LWSP {//
|
C.LWSP {//
|
||||||
encoding:b010 | uimm[5:5] | rd[4:0] | uimm[4:2] | uimm[7:6] | b10;
|
encoding:b010 | uimm[5:5] | rd[4:0] | uimm[4:2] | uimm[7:6] | b10;
|
||||||
args_disass: "x%rd$d, sp, 0x%uimm$05x";
|
args_disass: "x%rd$d, sp, 0x%uimm$05x";
|
||||||
val x2_idx[5] <= 2;
|
val offs[XLEN] <= X[2] + uimm;
|
||||||
val offs[XLEN] <= X[x2_idx] + uimm;
|
|
||||||
X[rd] <= MEM[offs]{32};
|
X[rd] <= MEM[offs]{32};
|
||||||
}
|
}
|
||||||
// order matters as C.JR is a special case of C.MV
|
// order matters as C.JR is a special case of C.MV
|
||||||
|
@ -175,8 +160,7 @@ InsructionSet RV32IC {
|
||||||
C.JALR(no_cont) {//(RV32)
|
C.JALR(no_cont) {//(RV32)
|
||||||
encoding:b100 | b1 | rs1[4:0] | b00000 | b10;
|
encoding:b100 | b1 | rs1[4:0] | b00000 | b10;
|
||||||
args_disass: "x%rs1$d";
|
args_disass: "x%rs1$d";
|
||||||
val r_idx[5] <= 1;
|
X[1] <= PC+2;
|
||||||
X[r_idx] <= PC+2;
|
|
||||||
PC<=X[rs1];
|
PC<=X[rs1];
|
||||||
}
|
}
|
||||||
C.EBREAK(no_cont) {//(RV32)
|
C.EBREAK(no_cont) {//(RV32)
|
||||||
|
@ -186,8 +170,7 @@ InsructionSet RV32IC {
|
||||||
C.SWSP {//
|
C.SWSP {//
|
||||||
encoding:b110 | uimm[5:2] | uimm[7:6] | rs2[4:0] | b10;
|
encoding:b110 | uimm[5:2] | uimm[7:6] | rs2[4:0] | b10;
|
||||||
args_disass: "x2+0x%uimm$05x, x%rs2$d";
|
args_disass: "x2+0x%uimm$05x, x%rs2$d";
|
||||||
val x2_idx[5] <= 2;
|
val offs[XLEN] <= X[2] + uimm;
|
||||||
val offs[XLEN] <= X[x2_idx] + uimm;
|
|
||||||
MEM[offs]{32} <= X[rs2];
|
MEM[offs]{32} <= X[rs2];
|
||||||
}
|
}
|
||||||
DII {
|
DII {
|
||||||
|
@ -212,30 +195,25 @@ InsructionSet RV32FC extends RV32IC{
|
||||||
C.FLW {
|
C.FLW {
|
||||||
encoding: b011 | uimm[5:3] | rs1[2:0] | uimm[2:2] | uimm[6:6] | rd[2:0] | b00;
|
encoding: b011 | uimm[5:3] | rs1[2:0] | uimm[2:2] | uimm[6:6] | rd[2:0] | b00;
|
||||||
args_disass:"f(8+%rd$d), %uimm%(x(8+%rs1$d))";
|
args_disass:"f(8+%rd$d), %uimm%(x(8+%rs1$d))";
|
||||||
val rs1_idx[5] <= rs1+8;
|
val offs[XLEN] <= X[rs1+8]+uimm;
|
||||||
val rd_idx[5] <= rd+8;
|
|
||||||
val offs[XLEN] <= X[rs1_idx]+uimm;
|
|
||||||
val res[32] <= MEM[offs]{32};
|
val res[32] <= MEM[offs]{32};
|
||||||
if(FLEN==32)
|
if(FLEN==32)
|
||||||
F[rd_idx] <= res;
|
F[rd+8] <= res;
|
||||||
else { // NaN boxing
|
else { // NaN boxing
|
||||||
val upper[FLEN] <= -1;
|
val upper[FLEN] <= -1;
|
||||||
F[rd] <= (upper<<32) | zext(res, FLEN);
|
F[rd+8] <= (upper<<32) | zext(res, FLEN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
C.FSW {
|
C.FSW {
|
||||||
encoding: b111 | uimm[5:3] | rs1[2:0] | uimm[2:2] | uimm[6:6] | rs2[2:0] | b00;
|
encoding: b111 | uimm[5:3] | rs1[2:0] | uimm[2:2] | uimm[6:6] | rs2[2:0] | b00;
|
||||||
args_disass:"f(8+%rs2$d), %uimm%(x(8+%rs1$d))";
|
args_disass:"f(8+%rs2$d), %uimm%(x(8+%rs1$d))";
|
||||||
val rs1_idx[5] <= rs1+8;
|
val offs[XLEN] <= X[rs1+8]+uimm;
|
||||||
val rs2_idx[5] <= rs2+8;
|
MEM[offs]{32}<=F[rs2+8]{32};
|
||||||
val offs[XLEN] <= X[rs1_idx]+uimm;
|
|
||||||
MEM[offs]{32}<=F[rs2_idx]{32};
|
|
||||||
}
|
}
|
||||||
C.FLWSP {
|
C.FLWSP {
|
||||||
encoding:b011 | uimm[5:5] | rd[4:0] | uimm[4:2] | uimm[7:6] | b10;
|
encoding:b011 | uimm[5:5] | rd[4:0] | uimm[4:2] | uimm[7:6] | b10;
|
||||||
args_disass:"f%rd$d, %uimm%(x2)";
|
args_disass:"f%rd$d, %uimm%(x2)";
|
||||||
val x2_idx[5] <= 2;
|
val offs[XLEN] <= X[2]+uimm;
|
||||||
val offs[XLEN] <= X[x2_idx]+uimm;
|
|
||||||
val res[32] <= MEM[offs]{32};
|
val res[32] <= MEM[offs]{32};
|
||||||
if(FLEN==32)
|
if(FLEN==32)
|
||||||
F[rd] <= res;
|
F[rd] <= res;
|
||||||
|
@ -247,8 +225,7 @@ InsructionSet RV32FC extends RV32IC{
|
||||||
C.FSWSP {
|
C.FSWSP {
|
||||||
encoding:b111 | uimm[5:2] | uimm[7:6] | rs2[4:0] | b10;
|
encoding:b111 | uimm[5:2] | uimm[7:6] | rs2[4:0] | b10;
|
||||||
args_disass:"f%rs2$d, %uimm%(x2), ";
|
args_disass:"f%rs2$d, %uimm%(x2), ";
|
||||||
val x2_idx[5] <= 2;
|
val offs[XLEN] <= X[2]+uimm;
|
||||||
val offs[XLEN] <= X[x2_idx]+uimm;
|
|
||||||
MEM[offs]{32}<=F[rs2]{32};
|
MEM[offs]{32}<=F[rs2]{32};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -269,30 +246,25 @@ InsructionSet RV32DC extends RV32IC{
|
||||||
C.FLD { //(RV32/64)
|
C.FLD { //(RV32/64)
|
||||||
encoding: b001 | uimm[5:3] | rs1[2:0] | uimm[7:6] | rd[2:0] | b00;
|
encoding: b001 | uimm[5:3] | rs1[2:0] | uimm[7:6] | rd[2:0] | b00;
|
||||||
args_disass:"f(8+%rd$d), %uimm%(x(8+%rs1$d))";
|
args_disass:"f(8+%rd$d), %uimm%(x(8+%rs1$d))";
|
||||||
val rs1_idx[5] <= rs1+8;
|
val offs[XLEN] <= X[rs1+8]+uimm;
|
||||||
val rd_idx[5] <= rd+8;
|
|
||||||
val offs[XLEN] <= X[rs1_idx]+uimm;
|
|
||||||
val res[64] <= MEM[offs]{64};
|
val res[64] <= MEM[offs]{64};
|
||||||
if(FLEN==64)
|
if(FLEN==64)
|
||||||
F[rd_idx] <= res;
|
F[rd+8] <= res;
|
||||||
else { // NaN boxing
|
else { // NaN boxing
|
||||||
val upper[FLEN] <= -1;
|
val upper[FLEN] <= -1;
|
||||||
F[rd_idx] <= (upper<<64) | res;
|
F[rd+8] <= (upper<<64) | res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
C.FSD { //(RV32/64)
|
C.FSD { //(RV32/64)
|
||||||
encoding: b101 | uimm[5:3] | rs1[2:0] | uimm[7:6] | rs2[2:0] | b00;
|
encoding: b101 | uimm[5:3] | rs1[2:0] | uimm[7:6] | rs2[2:0] | b00;
|
||||||
args_disass:"f(8+%rs2$d), %uimm%(x(8+%rs1$d))";
|
args_disass:"f(8+%rs2$d), %uimm%(x(8+%rs1$d))";
|
||||||
val rs1_idx[5] <= rs1+8;
|
val offs[XLEN] <= X[rs1+8]+uimm;
|
||||||
val rs2_idx[5] <= rs2+8;
|
MEM[offs]{64}<=F[rs2+8]{64};
|
||||||
val offs[XLEN] <= X[rs1_idx]+uimm;
|
|
||||||
MEM[offs]{64}<=F[rs2_idx]{64};
|
|
||||||
}
|
}
|
||||||
C.FLDSP {//(RV32/64)
|
C.FLDSP {//(RV32/64)
|
||||||
encoding:b001 | uimm[5:5] | rd[4:0] | uimm[4:3] | uimm[8:6] | b10;
|
encoding:b001 | uimm[5:5] | rd[4:0] | uimm[4:3] | uimm[8:6] | b10;
|
||||||
args_disass:"f%rd$d, %uimm%(x2)";
|
args_disass:"f%rd$d, %uimm%(x2)";
|
||||||
val x2_idx[5] <= 2;
|
val offs[XLEN] <= X[2]+uimm;
|
||||||
val offs[XLEN] <= X[x2_idx]+uimm;
|
|
||||||
val res[64] <= MEM[offs]{64};
|
val res[64] <= MEM[offs]{64};
|
||||||
if(FLEN==64)
|
if(FLEN==64)
|
||||||
F[rd] <= res;
|
F[rd] <= res;
|
||||||
|
@ -304,8 +276,7 @@ InsructionSet RV32DC extends RV32IC{
|
||||||
C.FSDSP {//(RV32/64)
|
C.FSDSP {//(RV32/64)
|
||||||
encoding:b101 | uimm[5:3] | uimm[8:6] | rs2[4:0] | b10;
|
encoding:b101 | uimm[5:3] | uimm[8:6] | rs2[4:0] | b10;
|
||||||
args_disass:"f%rs2$d, %uimm%(x2), ";
|
args_disass:"f%rs2$d, %uimm%(x2), ";
|
||||||
val x2_idx[5] <= 2;
|
val offs[XLEN] <= X[2]+uimm;
|
||||||
val offs[XLEN] <= X[x2_idx]+uimm;
|
|
||||||
MEM[offs]{64}<=F[rs2]{64};
|
MEM[offs]{64}<=F[rs2]{64};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,8 @@ InsructionSet RV32IBase {
|
||||||
|
|
||||||
registers {
|
registers {
|
||||||
[31:0] X[XLEN],
|
[31:0] X[XLEN],
|
||||||
PC[XLEN](is_pc)
|
PC[XLEN](is_pc),
|
||||||
|
alias ZERO[XLEN] is X[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
instructions {
|
instructions {
|
||||||
|
@ -133,7 +134,7 @@ InsructionSet RV32IBase {
|
||||||
SLTI {
|
SLTI {
|
||||||
encoding: imm[11:0]s | rs1[4:0] | b010 | rd[4:0] | b0010011;
|
encoding: imm[11:0]s | rs1[4:0] | b010 | rd[4:0] | b0010011;
|
||||||
args_disass:"x%rd$d, x%rs1$d, %imm%";
|
args_disass:"x%rd$d, x%rs1$d, %imm%";
|
||||||
if (rd != 0) X[rd] <= choose(X[rs1]s < imm's, 1, 0); //TODO: needs fix
|
if (rd != 0) X[rd] <= choose(X[rs1]s < imm's, 1, 0);
|
||||||
}
|
}
|
||||||
SLTIU {
|
SLTIU {
|
||||||
encoding: imm[11:0]s | rs1[4:0] | b011 | rd[4:0] | b0010011;
|
encoding: imm[11:0]s | rs1[4:0] | b011 | rd[4:0] | b0010011;
|
||||||
|
|
|
@ -8,7 +8,6 @@ import "RV64IBase.core_desc"
|
||||||
//import "RV64M.core_desc"
|
//import "RV64M.core_desc"
|
||||||
import "RV64A.core_desc"
|
import "RV64A.core_desc"
|
||||||
|
|
||||||
|
|
||||||
Core RV32IMAC provides RV32IBase, RV32M, RV32A, RV32IC {
|
Core RV32IMAC provides RV32IBase, RV32M, RV32A, RV32IC {
|
||||||
template:"vm_riscv.in.cpp";
|
template:"vm_riscv.in.cpp";
|
||||||
constants {
|
constants {
|
||||||
|
@ -17,8 +16,8 @@ Core RV32IMAC provides RV32IBase, RV32M, RV32A, RV32IC {
|
||||||
// definitions for the architecture wrapper
|
// definitions for the architecture wrapper
|
||||||
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA
|
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA
|
||||||
MISA_VAL:=0b01000000000101000001000100000101;
|
MISA_VAL:=0b01000000000101000001000100000101;
|
||||||
PGSIZE := 4096; //1 << 12;
|
PGSIZE := 0x1000; //1 << 12;
|
||||||
PGMASK := 4095; //PGSIZE-1
|
PGMASK := 0xfff; //PGSIZE-1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,8 +29,8 @@ Core RV32GC provides RV32IBase, RV32M, RV32A, RV32IC, RV32F, RV32FC, RV32D, RV32
|
||||||
// definitions for the architecture wrapper
|
// definitions for the architecture wrapper
|
||||||
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA
|
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA
|
||||||
MISA_VAL:=0b01000000000101000001000100101101;
|
MISA_VAL:=0b01000000000101000001000100101101;
|
||||||
PGSIZE := 4096; //1 << 12;
|
PGSIZE := 0x1000; //1 << 12;
|
||||||
PGMASK := 4095; //PGSIZE-1
|
PGMASK := 0xfff; //PGSIZE-1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +43,7 @@ Core RV64IA provides RV64IBase, RV64A, RV32A {
|
||||||
// definitions for the architecture wrapper
|
// definitions for the architecture wrapper
|
||||||
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA
|
// XL ZYXWVUTSRQPONMLKJIHGFEDCBA
|
||||||
MISA_VAL:=0b10000000000001000000000100000001;
|
MISA_VAL:=0b10000000000001000000000100000001;
|
||||||
PGSIZE := 4096; //1 << 12;
|
PGSIZE := 0x1000; //1 << 12;
|
||||||
PGMASK := 4095; //PGSIZE-1
|
PGMASK := 0xfff; //PGSIZE-1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,6 +80,8 @@ struct traits<${coreDef.name.toLowerCase()}> {
|
||||||
|
|
||||||
using addr_t = uint${addrDataWidth}_t;
|
using addr_t = uint${addrDataWidth}_t;
|
||||||
|
|
||||||
|
using code_word_t = uint${addrDataWidth}_t; //TODO: check removal
|
||||||
|
|
||||||
using virt_addr_t = iss::typed_addr_t<iss::address_type::VIRTUAL>;
|
using virt_addr_t = iss::typed_addr_t<iss::address_type::VIRTUAL>;
|
||||||
|
|
||||||
using phys_addr_t = iss::typed_addr_t<iss::address_type::PHYSICAL>;
|
using phys_addr_t = iss::typed_addr_t<iss::address_type::PHYSICAL>;
|
||||||
|
|
|
@ -320,6 +320,8 @@ template <typename ARCH> inline void vm_impl<ARCH>::gen_trap_check(llvm::BasicBl
|
||||||
bb, this->trap_blk, 1);
|
bb, this->trap_blk, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace ${coreDef.name.toLowerCase()}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
std::unique_ptr<vm_if> create<arch::${coreDef.name.toLowerCase()}>(arch::${coreDef.name.toLowerCase()} *core, unsigned short port, bool dump) {
|
std::unique_ptr<vm_if> create<arch::${coreDef.name.toLowerCase()}>(arch::${coreDef.name.toLowerCase()} *core, unsigned short port, bool dump) {
|
||||||
std::unique_ptr<${coreDef.name.toLowerCase()}::vm_impl<arch::${coreDef.name.toLowerCase()}>> ret =
|
std::unique_ptr<${coreDef.name.toLowerCase()}::vm_impl<arch::${coreDef.name.toLowerCase()}>> ret =
|
||||||
|
|
|
@ -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, PCLEN=32, MISA_VAL=1075056941, PGSIZE=4096, PGMASK=4095};
|
enum constants {XLEN=32, FLEN=64, PCLEN=32, MISA_VAL=0b1000000000101000001000100101101, PGSIZE=0x1000, PGMASK=0xfff};
|
||||||
|
|
||||||
constexpr static unsigned FP_REGS_SIZE = 64;
|
constexpr static unsigned FP_REGS_SIZE = 64;
|
||||||
|
|
||||||
|
|
|
@ -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, PCLEN=32, MISA_VAL=1075056901, PGSIZE=4096, PGMASK=4095};
|
enum constants {XLEN=32, PCLEN=32, MISA_VAL=0b1000000000101000001000100000101, PGSIZE=0x1000, PGMASK=0xfff};
|
||||||
|
|
||||||
constexpr static unsigned FP_REGS_SIZE = 0;
|
constexpr static unsigned FP_REGS_SIZE = 0;
|
||||||
|
|
||||||
|
|
|
@ -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, PCLEN=64, MISA_VAL=2147746049, PGSIZE=4096, PGMASK=4095};
|
enum constants {XLEN=64, PCLEN=64, MISA_VAL=0b10000000000001000000000100000001, PGSIZE=0x1000, PGMASK=0xfff};
|
||||||
|
|
||||||
constexpr static unsigned FP_REGS_SIZE = 0;
|
constexpr static unsigned FP_REGS_SIZE = 0;
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue