Added RV32F extension, fixed RV32M bugs
This commit is contained in:
@ -41,9 +41,17 @@ InsructionSet RV32M extends RV32IBase {
|
||||
encoding: b0000001 | rs2[4:0] | rs1[4:0] | b100 | rd[4:0] | b0110011;
|
||||
args_disass:"x%rd$d, x%rs1$d, x%rs2$d";
|
||||
if(rd != 0){
|
||||
if(X[rs2]!=0)
|
||||
X[rd] <= sext(X[rs1], 32) / sext(X[rs2], 32);
|
||||
else
|
||||
if(X[rs2]!=0){
|
||||
val M1[XLEN] <= -1;
|
||||
val MMIN[XLEN] <= -1<<(XLEN-1);
|
||||
if(X[rs1]s==MMIN's)
|
||||
if(X[rs2]s==M1's)
|
||||
X[rd]<=MMIN;
|
||||
else
|
||||
X[rd] <= X[rs1]s / X[rs2]s;
|
||||
else
|
||||
X[rd] <= X[rs1]s / X[rs2]s;
|
||||
}else
|
||||
X[rd] <= -1;
|
||||
}
|
||||
}
|
||||
@ -61,9 +69,17 @@ InsructionSet RV32M extends RV32IBase {
|
||||
encoding: b0000001 | rs2[4:0] | rs1[4:0] | b110 | rd[4:0] | b0110011;
|
||||
args_disass:"x%rd$d, x%rs1$d, x%rs2$d";
|
||||
if(rd != 0){
|
||||
if(X[rs2]!=0)
|
||||
X[rd] <= sext(X[rs1], 32) % sext(X[rs2], 32);
|
||||
else
|
||||
if(X[rs2]!=0) {
|
||||
val M1[XLEN] <= -1;
|
||||
val MMIN[XLEN] <= -1<<(XLEN-1);
|
||||
if(X[rs1]s==MMIN's)
|
||||
if(X[rs2]s==M1's)
|
||||
X[rd] <= 0;
|
||||
else
|
||||
X[rd] <= sext(X[rs1], 32) % sext(X[rs2], 32);
|
||||
else
|
||||
X[rd] <= sext(X[rs1], 32) % sext(X[rs2], 32);
|
||||
} else
|
||||
X[rd] <= X[rs1];
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user