Improved disassembly of running ISS
This commit is contained in:
		| @@ -10,7 +10,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|     instructions{ | ||||
|         FLD { | ||||
|             encoding: imm[11:0]s | rs1[4:0] | b011 | rd[4:0] | b0000111; | ||||
|             args_disass:"f%rd$d, %imm%(x%rs1$d)"; | ||||
|             args_disass:"f{rd}, {imm}({rs1})"; | ||||
|             val offs[XLEN] <= X[rs1]'s + imm; | ||||
|             val res[64] <= MEM[offs]{64}; | ||||
|             if(FLEN==64) | ||||
| @@ -22,13 +22,13 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FSD { | ||||
|             encoding: imm[11:5]s | rs2[4:0] | rs1[4:0] | b011 | imm[4:0]s | b0100111; | ||||
|             args_disass:"f%rs2$d, %imm%(x%rs1$d)"; | ||||
|             args_disass:"f{rs2}, {imm}({rs1})"; | ||||
|             val offs[XLEN] <= X[rs1]'s + imm; | ||||
|             MEM[offs]{64}<=F[rs2]{64}; | ||||
|         } | ||||
|         FMADD.D { | ||||
|             encoding: rs3[4:0] | b01 | rs2[4:0] | rs1[4:0] | rm[2:0] | rd[4:0] | b1000011; | ||||
|             args_disass:"x%rd$d, f%rs1$d, f%rs2$d, f%rs3$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}, f{rs2}, f{rs3}"; | ||||
|             //F[rd]f<= F[rs1]f * F[rs2]f + F[rs3]f; | ||||
|             val res[64] <= fdispatch_fmadd_d(F[rs1]{64}, F[rs2]{64}, F[rs3]{64}, zext(0, 64), choose(rm<7, rm{8}, FCSR{8})); | ||||
|             if(FLEN==64) | ||||
| @@ -42,7 +42,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FMSUB.D { | ||||
|             encoding: rs3[4:0] | b01 | rs2[4:0] | rs1[4:0] | rm[2:0] | rd[4:0] | b1000111; | ||||
|             args_disass:"x%rd$d, f%rs1$d, f%rs2$d, f%rs3$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}, f{rs2}, f{rs3}"; | ||||
|             //F[rd]f<=F[rs1]f * F[rs2]f - F[rs3]f; | ||||
|             val res[64] <= fdispatch_fmadd_d(F[rs1]{64}, F[rs2]{64}, F[rs3]{64}, zext(1, 32), choose(rm<7, rm{8}, FCSR{8})); | ||||
|             if(FLEN==64) | ||||
| @@ -56,7 +56,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FNMADD.D { | ||||
|             encoding: rs3[4:0] | b01 | rs2[4:0] | rs1[4:0] | rm[2:0] | rd[4:0] | b1001111; | ||||
|             args_disass:"x%rd$d, f%rs1$d, f%rs2$d, f%rs3$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}, f{rs2}, f{rs3}"; | ||||
|             //F[rd]f<=-F[rs1]f * F[rs2]f + F[rs3]f; | ||||
|             val res[64] <= fdispatch_fmadd_d(F[rs1]{64}, F[rs2]{64}, F[rs3]{64}, zext(2, 32), choose(rm<7, rm{8}, FCSR{8})); | ||||
|             if(FLEN==64) | ||||
| @@ -70,7 +70,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FNMSUB.D { | ||||
|             encoding: rs3[4:0] | b01 | rs2[4:0] | rs1[4:0] | rm[2:0] | rd[4:0] | b1001011; | ||||
|             args_disass:"x%rd$d, f%rs1$d, f%rs2$d, f%rs3$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}, f{rs2}, f{rs3}"; | ||||
|             //F[rd]f<=-F[rs1]f * F[rs2]f - F[rs3]f; | ||||
|             val res[64] <= fdispatch_fmadd_d(F[rs1]{64}, F[rs2]{64}, F[rs3]{64}, zext(3, 32), choose(rm<7, rm{8}, FCSR{8})); | ||||
|             if(FLEN==64) | ||||
| @@ -84,7 +84,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FADD.D { | ||||
|             encoding: b0000001 | rs2[4:0] | rs1[4:0] | rm[2:0] | rd[4:0] | b1010011; | ||||
|             args_disass:"x%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}, f{rs2}"; | ||||
|             // F[rd]f <= F[rs1]f + F[rs2]f; | ||||
|             val res[64] <= fdispatch_fadd_d(F[rs1]{64}, F[rs2]{64}, choose(rm<7, rm{8}, FCSR{8})); | ||||
|             if(FLEN==64) | ||||
| @@ -98,7 +98,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FSUB.D { | ||||
|             encoding: b0000101 | rs2[4:0] | rs1[4:0] | rm[2:0] | rd[4:0] | b1010011; | ||||
|             args_disass:"x%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}, f{rs2}"; | ||||
|             // F[rd]f <= F[rs1]f - F[rs2]f; | ||||
|             val res[64] <= fdispatch_fsub_d(F[rs1]{64}, F[rs2]{64}, choose(rm<7, rm{8}, FCSR{8})); | ||||
|             if(FLEN==64) | ||||
| @@ -112,7 +112,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FMUL.D { | ||||
|             encoding: b0001001 | rs2[4:0] | rs1[4:0] | rm[2:0] | rd[4:0] | b1010011; | ||||
|             args_disass:"x%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}, f{rs2}"; | ||||
|             // F[rd]f <= F[rs1]f * F[rs2]f; | ||||
|             val res[64] <= fdispatch_fmul_d(F[rs1]{64}, F[rs2]{64}, choose(rm<7, rm{8}, FCSR{8})); | ||||
|             if(FLEN==64) | ||||
| @@ -126,7 +126,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FDIV.D { | ||||
|             encoding: b0001101 | rs2[4:0] | rs1[4:0] | rm[2:0] | rd[4:0] | b1010011; | ||||
|             args_disass:"x%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}, f{rs2}"; | ||||
|             // F[rd]f <= F[rs1]f / F[rs2]f; | ||||
|             val res[64] <= fdispatch_fdiv_d(F[rs1]{64}, F[rs2]{64}, choose(rm<7, rm{8}, FCSR{8})); | ||||
|             if(FLEN==64) | ||||
| @@ -140,7 +140,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FSQRT.D { | ||||
|             encoding: b0101101 | b00000 | rs1[4:0] | rm[2:0] | rd[4:0] | b1010011; | ||||
|             args_disass:"x%rd$d, f%rs1$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}"; | ||||
|             //F[rd]f<=sqrt(F[rs1]f); | ||||
|             val res[64] <= fdispatch_fsqrt_d(F[rs1]{64}, choose(rm<7, rm{8}, FCSR{8})); | ||||
|             if(FLEN==64) | ||||
| @@ -154,7 +154,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FSGNJ.D { | ||||
|             encoding: b0010001 | rs2[4:0] | rs1[4:0] | b000 | rd[4:0] | b1010011; | ||||
|             args_disass:"f%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"f{rd}, f{rs1}, f{rs2}"; | ||||
|             val res[64] <= (F[rs1]{64} & 0x7fffffff) | (F[rs2]{64} & 0x80000000); | ||||
|             if(FLEN==64) | ||||
|                 F[rd] <= res; | ||||
| @@ -165,7 +165,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FSGNJN.D { | ||||
|             encoding: b0010001 | rs2[4:0] | rs1[4:0] | b001 | rd[4:0] | b1010011; | ||||
|             args_disass:"f%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"f{rd}, f{rs1}, f{rs2}"; | ||||
|             val res[64] <= (F[rs1]{64} & 0x7fffffff) | (~F[rs2]{64} & 0x80000000); | ||||
|             if(FLEN==64) | ||||
|                 F[rd] <= res; | ||||
| @@ -176,7 +176,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FSGNJX.D { | ||||
|             encoding: b0010001 | rs2[4:0] | rs1[4:0] | b010 | rd[4:0] | b1010011; | ||||
|             args_disass:"f%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"f{rd}, f{rs1}, f{rs2}"; | ||||
|             val res[64] <= F[rs1]{64} ^ (F[rs2]{64} & 0x80000000); | ||||
|             if(FLEN==64) | ||||
|                 F[rd] <= res; | ||||
| @@ -187,7 +187,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FMIN.D  { | ||||
|             encoding: b0010101 | rs2[4:0] | rs1[4:0] | b000 | rd[4:0] | b1010011; | ||||
|             args_disass:"f%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"f{rd}, f{rs1}, f{rs2}"; | ||||
|             //F[rd]f<= choose(F[rs1]f<F[rs2]f, F[rs1]f, F[rs2]f); | ||||
|             val res[64] <= fdispatch_fsel_d(F[rs1]{64}, F[rs2]{64}, zext(0, 32)); | ||||
|             if(FLEN==64) | ||||
| @@ -201,7 +201,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FMAX.D { | ||||
|             encoding: b0010101 | rs2[4:0] | rs1[4:0] | b001 | rd[4:0] | b1010011; | ||||
|             args_disass:"f%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"f{rd}, f{rs1}, f{rs2}"; | ||||
|             //F[rd]f<= choose(F[rs1]f>F[rs2]f, F[rs1]f, F[rs2]f); | ||||
|             val res[64] <= fdispatch_fsel_d(F[rs1]{64}, F[rs2]{64}, zext(1, 32)); | ||||
|             if(FLEN==64) | ||||
| @@ -215,7 +215,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FCVT.S.D { | ||||
|             encoding: b0100000 | b00001 | rs1[4:0] | rm[2:0] | rd[4:0] | b1010011; | ||||
|             args_disass:"f%rd$d, f%rs1$d"; | ||||
|             args_disass:"f{rd}, f{rs1}"; | ||||
|             val res[32] <= fdispatch_fconv_d2f(F[rs1], rm{8}); | ||||
|             // NaN boxing | ||||
|             val upper[FLEN] <= -1; | ||||
| @@ -223,7 +223,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FCVT.D.S { | ||||
|             encoding: b0100001 | b00000 | rs1[4:0] | rm[2:0] | rd[4:0] | b1010011; | ||||
|             args_disass:"f%rd$d, f%rs1$d"; | ||||
|             args_disass:"f{rd}, f{rs1}"; | ||||
|             val res[64] <= fdispatch_fconv_f2d(F[rs1]{32}, rm{8}); | ||||
|             if(FLEN==64){ | ||||
|                 F[rd] <= res; | ||||
| @@ -234,47 +234,47 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FEQ.D { | ||||
|             encoding: b1010001 | rs2[4:0] | rs1[4:0] | b010 | rd[4:0] | b1010011; | ||||
|             args_disass:"x%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}, f{rs2}"; | ||||
|             X[rd]<=fdispatch_fcmp_d(F[rs1]{64}, F[rs2]{64}, zext(0, 32)); | ||||
|             val flags[32] <= fdispatch_fget_flags(); | ||||
|             FCSR <= (FCSR & ~FFLAG_MASK) + flags{5}; | ||||
|         } | ||||
|         FLT.D { | ||||
|             encoding: b1010001 | rs2[4:0] | rs1[4:0] | b001 | rd[4:0] | b1010011; | ||||
|             args_disass:"x%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}, f{rs2}"; | ||||
|             X[rd]<=fdispatch_fcmp_d(F[rs1]{64}, F[rs2]{64}, zext(2, 32)); | ||||
|             val flags[32] <= fdispatch_fget_flags(); | ||||
|             FCSR <= (FCSR & ~FFLAG_MASK) + flags{5}; | ||||
|         } | ||||
|         FLE.D { | ||||
|             encoding: b1010001 | rs2[4:0] | rs1[4:0] | b000 | rd[4:0] | b1010011; | ||||
|             args_disass:"x%rd$d, f%rs1$d, f%rs2$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}, f{rs2}"; | ||||
|             X[rd]<=fdispatch_fcmp_d(F[rs1]{64}, F[rs2]{64}, zext(1, 32)); | ||||
|             val flags[32] <= fdispatch_fget_flags(); | ||||
|             FCSR <= (FCSR & ~FFLAG_MASK) + flags{5}; | ||||
|         } | ||||
|         FCLASS.D { | ||||
|             encoding: b1110001 | b00000 | rs1[4:0] | b001 | rd[4:0] | b1010011; | ||||
|             args_disass:"x%rd$d, f%rs1$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}"; | ||||
|             X[rd]<=fdispatch_fclass_d(F[rs1]{64}); | ||||
|         } | ||||
|         FCVT.W.D { | ||||
|             encoding: b1100001 | b00000 | rs1[4:0] | rm[2:0] | rd[4:0] | b1010011; | ||||
|             args_disass:"x%rd$d, f%rs1$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}"; | ||||
|             X[rd]<= sext(fdispatch_fcvt_d(F[rs1]{64}, zext(0, 32), rm{8}), XLEN); | ||||
|             val flags[32] <= fdispatch_fget_flags(); | ||||
|             FCSR <= (FCSR & ~FFLAG_MASK) + flags{5}; | ||||
|         } | ||||
|         FCVT.WU.D { | ||||
|             encoding: b1100001 | b00001 | rs1[4:0] | rm[2:0] | rd[4:0] | b1010011; | ||||
|             args_disass:"x%rd$d, f%rs1$d"; | ||||
|             args_disass:"{name(rd)}, f{rs1}"; | ||||
|             X[rd]<= zext(fdispatch_fcvt_d(F[rs1]{64}, zext(1, 32), rm{8}), XLEN); | ||||
|             val flags[32] <= fdispatch_fget_flags(); | ||||
|             FCSR <= (FCSR & ~FFLAG_MASK) + flags{5}; | ||||
|         } | ||||
|         FCVT.D.W { | ||||
|             encoding: b1101001 | b00000 | rs1[4:0] | rm[2:0] | rd[4:0] | b1010011; | ||||
|             args_disass:"f%rd$d, x%rs1$d"; | ||||
|             args_disass:"f{rd}, {rs1}"; | ||||
|             val res[64] <= fdispatch_fcvt_d(sext(X[rs1],64), zext(2, 32), rm{8}); | ||||
|             if(FLEN==64) | ||||
|                 F[rd] <= res; | ||||
| @@ -285,7 +285,7 @@ InsructionSet RV32D extends RV32IBase{ | ||||
|         } | ||||
|         FCVT.D.WU { | ||||
|             encoding: b1101001 | b00001 | rs1[4:0] | rm[2:0] | rd[4:0] | b1010011; | ||||
|             args_disass:"f%rd$d, x%rs1$d"; | ||||
|             args_disass:"f{rd}, {rs1}"; | ||||
|             val res[64] <=fdispatch_fcvt_d(zext(X[rs1],64), zext(3,32), rm{8}); | ||||
|             if(FLEN==64) | ||||
|                 F[rd] <= res; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user