#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;
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();
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) \
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);
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);