|
|
|
@ -1852,31 +1852,6 @@ void disassembler_t::add_instructions(const isa_parser_t* isa) |
|
|
|
DEFINE_VECTOR_VV(vfwmaccbf16_vv); |
|
|
|
DEFINE_VECTOR_VF(vfwmaccbf16_vf); |
|
|
|
} |
|
|
|
|
|
|
|
#define DEFINE_PI3TYPE(code) add_pitype3_insn(this, #code, match_##code, mask_##code); |
|
|
|
#define DEFINE_PI4TYPE(code) add_pitype4_insn(this, #code, match_##code, mask_##code); |
|
|
|
#define DEFINE_PI5TYPE(code) add_pitype5_insn(this, #code, match_##code, mask_##code); |
|
|
|
#define DEFINE_PI6TYPE(code) add_pitype6_insn(this, #code, match_##code, mask_##code); |
|
|
|
|
|
|
|
#define DISASM_8_AND_16_RINSN(code) \ |
|
|
|
DEFINE_RTYPE(code##8); \ |
|
|
|
DEFINE_RTYPE(code##16); |
|
|
|
|
|
|
|
#define DISASM_8_AND_16_RINSN_ROUND(code) \ |
|
|
|
DEFINE_RTYPE(code##8_u); \ |
|
|
|
DEFINE_RTYPE(code##16_u); |
|
|
|
|
|
|
|
#define DISASM_8_AND_16_PIINSN(code) \ |
|
|
|
DEFINE_PI3TYPE(code##8); \ |
|
|
|
DEFINE_PI4TYPE(code##16); |
|
|
|
|
|
|
|
#define DISASM_8_AND_16_PIINSN_ROUND(code) \ |
|
|
|
DEFINE_PI3TYPE(code##8_u); \ |
|
|
|
DEFINE_PI4TYPE(code##16_u); |
|
|
|
|
|
|
|
#define DISASM_RINSN_AND_ROUND(code) \ |
|
|
|
DEFINE_RTYPE(code); \ |
|
|
|
DEFINE_RTYPE(code##_u); \ |
|
|
|
|
|
|
|
if (isa->extension_enabled(EXT_ZMMUL)) { |
|
|
|
DEFINE_RTYPE(mul); |
|
|
|
@ -1886,300 +1861,6 @@ void disassembler_t::add_instructions(const isa_parser_t* isa) |
|
|
|
DEFINE_RTYPE(mulw); |
|
|
|
} |
|
|
|
|
|
|
|
if (isa->extension_enabled(EXT_ZBPBO)) { |
|
|
|
DEFINE_RTYPE(min); |
|
|
|
DEFINE_RTYPE(max); |
|
|
|
DEFINE_R3TYPE(cmix); |
|
|
|
DEFINE_RTYPE(pack); |
|
|
|
DEFINE_RTYPE(packu); |
|
|
|
add_insn(new disasm_insn_t("rev", match_grevi | ((isa->get_max_xlen() - 1) << imm_shift), mask_grevi | mask_imm, {&xrd, &xrs1})); |
|
|
|
add_insn(new disasm_insn_t("rev8.h", match_grevi | (0x8 << imm_shift), mask_grevi | mask_imm, {&xrd, &xrs1})); // swap16
|
|
|
|
if (isa->get_max_xlen() == 32) { |
|
|
|
DEFINE_R1TYPE(clz); |
|
|
|
DEFINE_R3TYPE(fsr); |
|
|
|
DEFINE_R3TYPE(fsri); |
|
|
|
} else { |
|
|
|
DEFINE_R3TYPE(fsrw); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (isa->extension_enabled(EXT_ZPSFOPERAND)) { |
|
|
|
DEFINE_RTYPE(smal) |
|
|
|
DEFINE_RTYPE(radd64); |
|
|
|
DEFINE_RTYPE(uradd64); |
|
|
|
DEFINE_RTYPE(kadd64); |
|
|
|
DEFINE_RTYPE(ukadd64); |
|
|
|
DEFINE_RTYPE(rsub64); |
|
|
|
DEFINE_RTYPE(ursub64); |
|
|
|
DEFINE_RTYPE(ksub64); |
|
|
|
DEFINE_RTYPE(uksub64); |
|
|
|
DEFINE_RTYPE(smar64); |
|
|
|
DEFINE_RTYPE(smsr64); |
|
|
|
DEFINE_RTYPE(umar64); |
|
|
|
DEFINE_RTYPE(umsr64); |
|
|
|
DEFINE_RTYPE(kmar64); |
|
|
|
DEFINE_RTYPE(kmsr64); |
|
|
|
DEFINE_RTYPE(ukmar64); |
|
|
|
DEFINE_RTYPE(ukmsr64); |
|
|
|
DEFINE_RTYPE(smalbb); |
|
|
|
DEFINE_RTYPE(smalbt); |
|
|
|
DEFINE_RTYPE(smaltt); |
|
|
|
DEFINE_RTYPE(smalda); |
|
|
|
DEFINE_RTYPE(smalxda); |
|
|
|
DEFINE_RTYPE(smalds); |
|
|
|
DEFINE_RTYPE(smaldrs); |
|
|
|
DEFINE_RTYPE(smalxds); |
|
|
|
DEFINE_RTYPE(smslda); |
|
|
|
DEFINE_RTYPE(smslxda); |
|
|
|
DEFINE_RTYPE(mulr64); |
|
|
|
DEFINE_RTYPE(mulsr64); |
|
|
|
if (isa->get_max_xlen() == 32) { |
|
|
|
DEFINE_RTYPE(add64); |
|
|
|
DEFINE_RTYPE(sub64); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (isa->extension_enabled(EXT_ZPN)) { |
|
|
|
DISASM_8_AND_16_RINSN(add); |
|
|
|
DISASM_8_AND_16_RINSN(radd); |
|
|
|
DISASM_8_AND_16_RINSN(uradd); |
|
|
|
DISASM_8_AND_16_RINSN(kadd); |
|
|
|
DISASM_8_AND_16_RINSN(ukadd); |
|
|
|
DISASM_8_AND_16_RINSN(sub); |
|
|
|
DISASM_8_AND_16_RINSN(rsub); |
|
|
|
DISASM_8_AND_16_RINSN(ursub); |
|
|
|
DISASM_8_AND_16_RINSN(ksub); |
|
|
|
DISASM_8_AND_16_RINSN(uksub); |
|
|
|
DEFINE_RTYPE(cras16); |
|
|
|
DEFINE_RTYPE(rcras16); |
|
|
|
DEFINE_RTYPE(urcras16); |
|
|
|
DEFINE_RTYPE(kcras16); |
|
|
|
DEFINE_RTYPE(ukcras16); |
|
|
|
DEFINE_RTYPE(crsa16); |
|
|
|
DEFINE_RTYPE(rcrsa16); |
|
|
|
DEFINE_RTYPE(urcrsa16); |
|
|
|
DEFINE_RTYPE(kcrsa16); |
|
|
|
DEFINE_RTYPE(ukcrsa16); |
|
|
|
DEFINE_RTYPE(stas16); |
|
|
|
DEFINE_RTYPE(rstas16); |
|
|
|
DEFINE_RTYPE(urstas16); |
|
|
|
DEFINE_RTYPE(kstas16); |
|
|
|
DEFINE_RTYPE(ukstas16); |
|
|
|
DEFINE_RTYPE(stsa16); |
|
|
|
DEFINE_RTYPE(rstsa16); |
|
|
|
DEFINE_RTYPE(urstsa16); |
|
|
|
DEFINE_RTYPE(kstsa16); |
|
|
|
DEFINE_RTYPE(ukstsa16); |
|
|
|
DISASM_8_AND_16_RINSN(sra); |
|
|
|
DISASM_8_AND_16_RINSN(srl); |
|
|
|
DISASM_8_AND_16_RINSN(sll); |
|
|
|
DISASM_8_AND_16_RINSN(ksll); |
|
|
|
DISASM_8_AND_16_RINSN(kslra); |
|
|
|
DISASM_8_AND_16_PIINSN(srai); |
|
|
|
DISASM_8_AND_16_PIINSN(srli); |
|
|
|
DISASM_8_AND_16_PIINSN(slli); |
|
|
|
DISASM_8_AND_16_PIINSN(kslli); |
|
|
|
DISASM_8_AND_16_RINSN_ROUND(sra); |
|
|
|
DISASM_8_AND_16_RINSN_ROUND(srl); |
|
|
|
DISASM_8_AND_16_RINSN_ROUND(kslra); |
|
|
|
DISASM_8_AND_16_PIINSN_ROUND(srai); |
|
|
|
DISASM_8_AND_16_PIINSN_ROUND(srli); |
|
|
|
|
|
|
|
DISASM_8_AND_16_RINSN(cmpeq); |
|
|
|
DISASM_8_AND_16_RINSN(scmplt); |
|
|
|
DISASM_8_AND_16_RINSN(scmple); |
|
|
|
DISASM_8_AND_16_RINSN(ucmplt); |
|
|
|
DISASM_8_AND_16_RINSN(ucmple); |
|
|
|
|
|
|
|
DISASM_8_AND_16_RINSN(smul); |
|
|
|
DISASM_8_AND_16_RINSN(smulx); |
|
|
|
DISASM_8_AND_16_RINSN(umul); |
|
|
|
DISASM_8_AND_16_RINSN(umulx); |
|
|
|
DISASM_8_AND_16_RINSN(khm); |
|
|
|
DISASM_8_AND_16_RINSN(khmx); |
|
|
|
|
|
|
|
DISASM_8_AND_16_RINSN(smin); |
|
|
|
DISASM_8_AND_16_RINSN(umin); |
|
|
|
DISASM_8_AND_16_RINSN(smax); |
|
|
|
DISASM_8_AND_16_RINSN(umax); |
|
|
|
DISASM_8_AND_16_PIINSN(sclip); |
|
|
|
DISASM_8_AND_16_PIINSN(uclip); |
|
|
|
DEFINE_R1TYPE(kabs16); |
|
|
|
DEFINE_R1TYPE(clrs16); |
|
|
|
DEFINE_R1TYPE(clz16); |
|
|
|
DEFINE_R1TYPE(kabs8); |
|
|
|
DEFINE_R1TYPE(clrs8); |
|
|
|
DEFINE_R1TYPE(clz8); |
|
|
|
|
|
|
|
DEFINE_R1TYPE(sunpkd810); |
|
|
|
DEFINE_R1TYPE(sunpkd820); |
|
|
|
DEFINE_R1TYPE(sunpkd830); |
|
|
|
DEFINE_R1TYPE(sunpkd831); |
|
|
|
DEFINE_R1TYPE(sunpkd832); |
|
|
|
DEFINE_R1TYPE(zunpkd810); |
|
|
|
DEFINE_R1TYPE(zunpkd820); |
|
|
|
DEFINE_R1TYPE(zunpkd830); |
|
|
|
DEFINE_R1TYPE(zunpkd831); |
|
|
|
DEFINE_R1TYPE(zunpkd832); |
|
|
|
|
|
|
|
DEFINE_RTYPE(pkbb16); |
|
|
|
DEFINE_RTYPE(pkbt16); |
|
|
|
DEFINE_RTYPE(pktb16); |
|
|
|
DEFINE_RTYPE(pktt16); |
|
|
|
DISASM_RINSN_AND_ROUND(smmul); |
|
|
|
DISASM_RINSN_AND_ROUND(kmmac); |
|
|
|
DISASM_RINSN_AND_ROUND(kmmsb); |
|
|
|
DISASM_RINSN_AND_ROUND(kwmmul); |
|
|
|
DISASM_RINSN_AND_ROUND(smmwb); |
|
|
|
DISASM_RINSN_AND_ROUND(smmwt); |
|
|
|
DISASM_RINSN_AND_ROUND(kmmawb); |
|
|
|
DISASM_RINSN_AND_ROUND(kmmawt); |
|
|
|
DISASM_RINSN_AND_ROUND(kmmwb2); |
|
|
|
DISASM_RINSN_AND_ROUND(kmmwt2); |
|
|
|
DISASM_RINSN_AND_ROUND(kmmawb2); |
|
|
|
DISASM_RINSN_AND_ROUND(kmmawt2); |
|
|
|
DEFINE_RTYPE(smbb16) |
|
|
|
DEFINE_RTYPE(smbt16) |
|
|
|
DEFINE_RTYPE(smtt16) |
|
|
|
DEFINE_RTYPE(kmda) |
|
|
|
DEFINE_RTYPE(kmxda) |
|
|
|
DEFINE_RTYPE(smds) |
|
|
|
DEFINE_RTYPE(smdrs) |
|
|
|
DEFINE_RTYPE(smxds) |
|
|
|
DEFINE_RTYPE(kmabb) |
|
|
|
DEFINE_RTYPE(kmabt) |
|
|
|
DEFINE_RTYPE(kmatt) |
|
|
|
DEFINE_RTYPE(kmada) |
|
|
|
DEFINE_RTYPE(kmaxda) |
|
|
|
DEFINE_RTYPE(kmads) |
|
|
|
DEFINE_RTYPE(kmadrs) |
|
|
|
DEFINE_RTYPE(kmaxds) |
|
|
|
DEFINE_RTYPE(kmsda) |
|
|
|
DEFINE_RTYPE(kmsxda) |
|
|
|
DEFINE_RTYPE(sclip32) |
|
|
|
DEFINE_RTYPE(uclip32) |
|
|
|
DEFINE_R1TYPE(clrs32); |
|
|
|
DEFINE_R1TYPE(clz32); |
|
|
|
DEFINE_RTYPE(pbsad); |
|
|
|
DEFINE_RTYPE(pbsada); |
|
|
|
DEFINE_RTYPE(smaqa); |
|
|
|
DEFINE_RTYPE(umaqa); |
|
|
|
DEFINE_RTYPE(smaqa_su); |
|
|
|
|
|
|
|
DEFINE_RTYPE(kaddh); |
|
|
|
DEFINE_RTYPE(ksubh); |
|
|
|
DEFINE_RTYPE(khmbb); |
|
|
|
DEFINE_RTYPE(khmbt); |
|
|
|
DEFINE_RTYPE(khmtt); |
|
|
|
DEFINE_RTYPE(ukaddh); |
|
|
|
DEFINE_RTYPE(uksubh); |
|
|
|
DEFINE_RTYPE(kaddw); |
|
|
|
DEFINE_RTYPE(ukaddw); |
|
|
|
DEFINE_RTYPE(ksubw); |
|
|
|
DEFINE_RTYPE(uksubw); |
|
|
|
DEFINE_RTYPE(kdmbb); |
|
|
|
DEFINE_RTYPE(kdmbt); |
|
|
|
DEFINE_RTYPE(kdmtt); |
|
|
|
DEFINE_RTYPE(kslraw); |
|
|
|
DEFINE_RTYPE(kslraw_u); |
|
|
|
DEFINE_RTYPE(ksllw); |
|
|
|
DEFINE_PI5TYPE(kslliw); |
|
|
|
DEFINE_RTYPE(kdmabb); |
|
|
|
DEFINE_RTYPE(kdmabt); |
|
|
|
DEFINE_RTYPE(kdmatt); |
|
|
|
DEFINE_RTYPE(kabsw); |
|
|
|
DEFINE_RTYPE(raddw); |
|
|
|
DEFINE_RTYPE(uraddw); |
|
|
|
DEFINE_RTYPE(rsubw); |
|
|
|
DEFINE_RTYPE(ursubw); |
|
|
|
DEFINE_RTYPE(msubr32); |
|
|
|
DEFINE_RTYPE(ave); |
|
|
|
DEFINE_RTYPE(sra_u); |
|
|
|
DEFINE_PI6TYPE(srai_u); |
|
|
|
DEFINE_PI3TYPE(insb); |
|
|
|
DEFINE_RTYPE(maddr32) |
|
|
|
|
|
|
|
if (isa->get_max_xlen() == 64) { |
|
|
|
DEFINE_RTYPE(add32); |
|
|
|
DEFINE_RTYPE(radd32); |
|
|
|
DEFINE_RTYPE(uradd32); |
|
|
|
DEFINE_RTYPE(kadd32); |
|
|
|
DEFINE_RTYPE(ukadd32); |
|
|
|
DEFINE_RTYPE(sub32); |
|
|
|
DEFINE_RTYPE(rsub32); |
|
|
|
DEFINE_RTYPE(ursub32); |
|
|
|
DEFINE_RTYPE(ksub32); |
|
|
|
DEFINE_RTYPE(uksub32); |
|
|
|
DEFINE_RTYPE(cras32); |
|
|
|
DEFINE_RTYPE(rcras32); |
|
|
|
DEFINE_RTYPE(urcras32); |
|
|
|
DEFINE_RTYPE(kcras32); |
|
|
|
DEFINE_RTYPE(ukcras32); |
|
|
|
DEFINE_RTYPE(crsa32); |
|
|
|
DEFINE_RTYPE(rcrsa32); |
|
|
|
DEFINE_RTYPE(urcrsa32); |
|
|
|
DEFINE_RTYPE(kcrsa32); |
|
|
|
DEFINE_RTYPE(ukcrsa32); |
|
|
|
DEFINE_RTYPE(stas32); |
|
|
|
DEFINE_RTYPE(rstas32); |
|
|
|
DEFINE_RTYPE(urstas32); |
|
|
|
DEFINE_RTYPE(kstas32); |
|
|
|
DEFINE_RTYPE(ukstas32); |
|
|
|
DEFINE_RTYPE(stsa32); |
|
|
|
DEFINE_RTYPE(rstsa32); |
|
|
|
DEFINE_RTYPE(urstsa32); |
|
|
|
DEFINE_RTYPE(kstsa32); |
|
|
|
DEFINE_RTYPE(ukstsa32); |
|
|
|
DEFINE_RTYPE(sra32); |
|
|
|
DEFINE_PI5TYPE(srai32); |
|
|
|
DEFINE_RTYPE(sra32_u); |
|
|
|
DEFINE_PI5TYPE(srai32_u); |
|
|
|
DEFINE_RTYPE(srl32); |
|
|
|
DEFINE_PI5TYPE(srli32); |
|
|
|
DEFINE_RTYPE(srl32_u); |
|
|
|
DEFINE_PI5TYPE(srli32_u); |
|
|
|
DEFINE_RTYPE(sll32); |
|
|
|
DEFINE_PI5TYPE(slli32); |
|
|
|
DEFINE_RTYPE(ksll32); |
|
|
|
DEFINE_PI5TYPE(kslli32); |
|
|
|
DEFINE_RTYPE(kslra32); |
|
|
|
DEFINE_RTYPE(kslra32_u); |
|
|
|
DEFINE_RTYPE(smin32); |
|
|
|
DEFINE_RTYPE(umin32); |
|
|
|
DEFINE_RTYPE(smax32); |
|
|
|
DEFINE_RTYPE(umax32); |
|
|
|
DEFINE_R1TYPE(kabs32); |
|
|
|
DEFINE_RTYPE(khmbb16); |
|
|
|
DEFINE_RTYPE(khmbt16); |
|
|
|
DEFINE_RTYPE(khmtt16); |
|
|
|
DEFINE_RTYPE(kdmbb16); |
|
|
|
DEFINE_RTYPE(kdmbt16); |
|
|
|
DEFINE_RTYPE(kdmtt16); |
|
|
|
DEFINE_RTYPE(kdmabb16); |
|
|
|
DEFINE_RTYPE(kdmabt16); |
|
|
|
DEFINE_RTYPE(kdmatt16); |
|
|
|
DEFINE_RTYPE(smbt32); |
|
|
|
DEFINE_RTYPE(smtt32); |
|
|
|
DEFINE_RTYPE(kmabb32); |
|
|
|
DEFINE_RTYPE(kmabt32); |
|
|
|
DEFINE_RTYPE(kmatt32); |
|
|
|
DEFINE_RTYPE(kmda32); |
|
|
|
DEFINE_RTYPE(kmxda32); |
|
|
|
DEFINE_RTYPE(kmaxda32); |
|
|
|
DEFINE_RTYPE(kmads32); |
|
|
|
DEFINE_RTYPE(kmadrs32); |
|
|
|
DEFINE_RTYPE(kmaxds32); |
|
|
|
DEFINE_RTYPE(kmsda32); |
|
|
|
DEFINE_RTYPE(kmsxda32); |
|
|
|
DEFINE_RTYPE(smds32); |
|
|
|
DEFINE_RTYPE(smdrs32); |
|
|
|
DEFINE_RTYPE(smxds32); |
|
|
|
DEFINE_PI5TYPE(sraiw_u); |
|
|
|
DEFINE_RTYPE(pkbt32); |
|
|
|
DEFINE_RTYPE(pktb32); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (isa->extension_enabled(EXT_ZICBOM)) { |
|
|
|
DISASM_INSN("cbo.clean", cbo_clean, 0, {&base_only_address}); |
|
|
|
DISASM_INSN("cbo.flush", cbo_flush, 0, {&base_only_address}); |
|
|
|
|