Skip to content

Commit

Permalink
Addressing review comments on disassembler and parser
Browse files Browse the repository at this point in the history
  • Loading branch information
christian-herber-nxp committed May 29, 2024
1 parent 02fbb0d commit 9b27b67
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
11 changes: 5 additions & 6 deletions disasm/disasm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1411,12 +1411,11 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
DISASM_INSN("c.flwsp", c_flwsp, 0, {&frd, &rvc_lwsp_address});
DISASM_INSN("c.fsw", c_fsw, 0, {&rvc_fp_rs2s, &rvc_lw_address});
DISASM_INSN("c.fswsp", c_fswsp, 0, {&rvc_fp_rs2, &rvc_swsp_address});
}
else if (isa->extension_enabled(EXT_ZCMLSD)) {
DISASM_INSN("c.ld", c_ld, 0, {&rvc_rs2s, &rvc_ld_address});
DISASM_INSN("c.ldsp", c_ldsp, 0, {&xrd, &rvc_ldsp_address});
DISASM_INSN("c.sd", c_sd, 0, {&rvc_rs2s, &rvc_ld_address});
DISASM_INSN("c.sdsp", c_sdsp, 0, {&rvc_rs2, &rvc_sdsp_address});
} else if (isa->extension_enabled(EXT_ZCMLSD)) {
DISASM_INSN("c.ld", c_ld, 0, {&rvc_rs2s, &rvc_ld_address});
DISASM_INSN("c.ldsp", c_ldsp, 0, {&xrd, &rvc_ldsp_address});
DISASM_INSN("c.sd", c_sd, 0, {&rvc_rs2s, &rvc_ld_address});
DISASM_INSN("c.sdsp", c_sdsp, 0, {&rvc_rs2, &rvc_sdsp_address});
}

if (isa->extension_enabled(EXT_ZCB)) {
Expand Down
10 changes: 10 additions & 0 deletions disasm/isa_parser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,8 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
} else if (ext_str == "zihpm") {
extension_table[EXT_ZIHPM] = true;
} else if (ext_str == "zilsd") {
if (max_xlen != 32)
bad_isa_string(str, "'Zilsd' requires RV32");
extension_table[EXT_ZILSD] = true;
} else if (ext_str == "zcmlsd") {
extension_table[EXT_ZCMLSD] = true;
Expand Down Expand Up @@ -328,6 +330,14 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
bad_isa_string(str, ("can't parse: " + std::string(p)).c_str());
}

if (extension_table[EXT_ZCMLSD] && extension_table[EXT_ZCF]) {
bad_isa_string(str, ("'Zcmlsd' extension conflicts with 'Zcf' extensions"));
}

if (extension_table[EXT_ZCMLSD] && (!extension_table[EXT_ZCA] || !extension_table[EXT_ZILSD])) {
bad_isa_string(str, ("'Zcmlsd' extension requires 'Zca' and 'Zilsd' extensions"));
}

if (extension_table[EXT_ZFBFMIN] && !extension_table['F']) {
bad_isa_string(str, "'Zfbfmin' extension requires 'F' extension");
}
Expand Down

0 comments on commit 9b27b67

Please sign in to comment.