Fix makefile race condition
[riscv-isa-sim.git] / spike / disasm.cc
index e4e731508a3ed05f8b4a4eea38ed67390a23c6c0..8fb1db8dbc50881102585f2e861c5d43ccb75d20 100644 (file)
@@ -7,77 +7,64 @@
 #include <sstream>
 #include <stdlib.h>
 
-static const char* xpr[] = {
-  "zero", "ra", "s0", "s1",  "s2",  "s3",  "s4",  "s5",
-  "s6",   "s7", "s8", "s9", "s10", "s11",  "sp",  "tp",
-  "v0",   "v1", "a0", "a1",  "a2",  "a3",  "a4",  "a5",
-  "a6",   "a7", "t0", "t1",  "t2",  "t3",  "t4",  "gp"
-};
-
-static const char* fpr[] = {
-  "fs0", "fs1",  "fs2",  "fs3",  "fs4",  "fs5",  "fs6",  "fs7",
-  "fs8", "fs9", "fs10", "fs11", "fs12", "fs13", "fs14", "fs15",
-  "fv0", "fv1", "fa0",   "fa1",  "fa2",  "fa3",  "fa4",  "fa5",
-  "fa6", "fa7", "ft0",   "ft1",  "ft2",  "ft3",  "ft4",  "ft5"
-};
 
 struct : public arg_t {
   std::string to_string(insn_t insn) const {
-    return std::to_string((int)insn.i_imm()) + '(' + xpr[insn.rs1()] + ')';
+    return std::to_string((int)insn.i_imm()) + '(' + xpr_name[insn.rs1()] + ')';
   }
 } load_address;
 
 struct : public arg_t {
   std::string to_string(insn_t insn) const {
-    return std::to_string((int)insn.s_imm()) + '(' + xpr[insn.rs1()] + ')';
+    return std::to_string((int)insn.s_imm()) + '(' + xpr_name[insn.rs1()] + ')';
   }
 } store_address;
 
 struct : public arg_t {
   std::string to_string(insn_t insn) const {
-    return std::string("0(") + xpr[insn.rs1()] + ')';
+    return std::string("0(") + xpr_name[insn.rs1()] + ')';
   }
 } amo_address;
 
 struct : public arg_t {
   std::string to_string(insn_t insn) const {
-    return xpr[insn.rd()];
+    return xpr_name[insn.rd()];
   }
 } xrd;
 
 struct : public arg_t {
   std::string to_string(insn_t insn) const {
-    return xpr[insn.rs1()];
+    return xpr_name[insn.rs1()];
   }
 } xrs1;
 
 struct : public arg_t {
   std::string to_string(insn_t insn) const {
-    return xpr[insn.rs2()];
+    return xpr_name[insn.rs2()];
   }
 } xrs2;
 
 struct : public arg_t {
   std::string to_string(insn_t insn) const {
-    return fpr[insn.rd()];
+    return fpr_name[insn.rd()];
   }
 } frd;
 
 struct : public arg_t {
   std::string to_string(insn_t insn) const {
-    return fpr[insn.rs1()];
+    return fpr_name[insn.rs1()];
   }
 } frs1;
 
 struct : public arg_t {
   std::string to_string(insn_t insn) const {
-    return fpr[insn.rs2()];
+    return fpr_name[insn.rs2()];
   }
 } frs2;
 
 struct : public arg_t {
   std::string to_string(insn_t insn) const {
-    return fpr[insn.rs3()];
+    return fpr_name[insn.rs3()];
   }
 } frs3;
 
@@ -126,7 +113,7 @@ struct : public arg_t {
 struct : public arg_t {
   std::string to_string(insn_t insn) const {
     std::stringstream s;
-    int32_t target = insn.sb_imm();
+    int32_t target = insn.uj_imm();
     char sign = target >= 0 ? '+' : '-';
     s << "pc " << sign << std::hex << " 0x" << abs(target);
     return s.str();
@@ -145,7 +132,7 @@ disassembler_t::disassembler_t()
   const uint32_t match_rd_ra = 1UL << 7;
   const uint32_t mask_rs1 = 0x1fUL << 15;
   const uint32_t match_rs1_ra = 1UL << 15;
-  const uint32_t mask_rs2 = 0x1fUL << 15;
+  const uint32_t mask_rs2 = 0x1fUL << 20;
   const uint32_t mask_imm = 0xfffUL << 20;
 
   #define DECLARE_INSN(code, match, mask) \
@@ -333,6 +320,7 @@ disassembler_t::disassembler_t()
   DEFINE_FXTYPE(fcvt_lu_s);
   DEFINE_FXTYPE(fcvt_w_s);
   DEFINE_FXTYPE(fcvt_wu_s);
+  DEFINE_FXTYPE(fclass_s);
   DEFINE_FXTYPE(fmv_x_s);
   DEFINE_FXTYPE(feq_s);
   DEFINE_FXTYPE(flt_s);
@@ -363,6 +351,7 @@ disassembler_t::disassembler_t()
   DEFINE_FXTYPE(fcvt_lu_d);
   DEFINE_FXTYPE(fcvt_w_d);
   DEFINE_FXTYPE(fcvt_wu_d);
+  DEFINE_FXTYPE(fclass_d);
   DEFINE_FXTYPE(fmv_x_d);
   DEFINE_FXTYPE(feq_d);
   DEFINE_FXTYPE(flt_d);