@@ -735,11 +735,21 @@ static void NOINLINE add_vector_vv_insn(disassembler_t* d, const char* name, uin
735735 d->add_insn (new disasm_insn_t (name, match, mask, {&vd, &vs2, &vs1, opt, &vm}));
736736}
737737
738+ static void NOINLINE add_vector_multiplyadd_vv_insn (disassembler_t * d, const char * name, uint32_t match, uint32_t mask)
739+ {
740+ d->add_insn (new disasm_insn_t (name, match, mask, {&vd, &vs1, &vs2, opt, &vm}));
741+ }
742+
738743static void NOINLINE add_vector_vx_insn (disassembler_t * d, const char * name, uint32_t match, uint32_t mask)
739744{
740745 d->add_insn (new disasm_insn_t (name, match, mask, {&vd, &vs2, &xrs1, opt, &vm}));
741746}
742747
748+ static void NOINLINE add_vector_multiplyadd_vx_insn (disassembler_t * d, const char * name, uint32_t match, uint32_t mask)
749+ {
750+ d->add_insn (new disasm_insn_t (name, match, mask, {&vd, &xrs1, &vs2, opt, &vm}));
751+ }
752+
743753static void NOINLINE add_vector_vf_insn (disassembler_t * d, const char * name, uint32_t match, uint32_t mask)
744754{
745755 d->add_insn (new disasm_insn_t (name, match, mask, {&vd, &vs2, &frs1, opt, &vm}));
@@ -1642,7 +1652,9 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
16421652
16431653 #define DEFINE_VECTOR_V (code ) add_vector_v_insn(this , #code, match_##code, mask_##code)
16441654 #define DEFINE_VECTOR_VV (code ) add_vector_vv_insn(this , #code, match_##code, mask_##code)
1655+ #define DEFINE_VECTOR_MULTIPLYADD_VV (code ) add_vector_multiplyadd_vv_insn(this , #code, match_##code, mask_##code)
16451656 #define DEFINE_VECTOR_VX (code ) add_vector_vx_insn(this , #code, match_##code, mask_##code)
1657+ #define DEFINE_VECTOR_MULTIPLYADD_VX (code ) add_vector_multiplyadd_vx_insn(this , #code, match_##code, mask_##code)
16461658 #define DEFINE_VECTOR_VF (code ) add_vector_vf_insn(this , #code, match_##code, mask_##code)
16471659 #define DEFINE_VECTOR_VI (code ) add_vector_vi_insn(this , #code, match_##code, mask_##code)
16481660 #define DEFINE_VECTOR_VIU (code ) add_vector_viu_insn(this , #code, match_##code, mask_##code)
@@ -1659,6 +1671,10 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
16591671 DEFINE_VECTOR_VV (name##_vv); \
16601672 DEFINE_VECTOR_VX (name##_vx)
16611673
1674+ #define DISASM_OPIV_MULTIPLYADD_VX__INSN (name, sign ) \
1675+ DEFINE_VECTOR_MULTIPLYADD_VV (name##_vv); \
1676+ DEFINE_VECTOR_MULTIPLYADD_VX (name##_vx)
1677+
16621678 #define DISASM_OPIV__XI_INSN (name, sign ) \
16631679 DEFINE_VECTOR_VX (name##_vx); \
16641680 if (sign) \
@@ -1821,10 +1837,10 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
18211837 DISASM_OPIV_VX__INSN (vmul, 1 );
18221838 DISASM_OPIV_VX__INSN (vmulhsu, 0 );
18231839 DISASM_OPIV_VX__INSN (vmulh, 1 );
1824- DISASM_OPIV_VX__INSN (vmadd, 1 );
1825- DISASM_OPIV_VX__INSN (vnmsub, 1 );
1826- DISASM_OPIV_VX__INSN (vmacc, 1 );
1827- DISASM_OPIV_VX__INSN (vnmsac, 1 );
1840+ DISASM_OPIV_MULTIPLYADD_VX__INSN (vmadd, 1 );
1841+ DISASM_OPIV_MULTIPLYADD_VX__INSN (vnmsub, 1 );
1842+ DISASM_OPIV_MULTIPLYADD_VX__INSN (vmacc, 1 );
1843+ DISASM_OPIV_MULTIPLYADD_VX__INSN (vnmsac, 1 );
18281844
18291845 // 0b11_0000
18301846 DISASM_OPIV_VX__INSN (vwaddu, 0 );
0 commit comments