Skip to content

Commit ff62109

Browse files
committed
vector: disassemble: Let operand ordering be vd, [vr]s1, vs2 to vector single-width integer multiply-add instructions
1 parent 3c5b1bb commit ff62109

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

disasm/disasm.cc

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
738743
static 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+
743753
static 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

Comments
 (0)