Skip to content

Commit b47d0ba

Browse files
committed
vector: disassemble: Let operand ordering be vd, [vf]s1, vs2 to vector single-width floating-point fused multiply-add instructions
1 parent 7f38a50 commit b47d0ba

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

disasm/disasm.cc

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -755,6 +755,11 @@ static void NOINLINE add_vector_vf_insn(disassembler_t* d, const char* name, uin
755755
d->add_insn(new disasm_insn_t(name, match, mask, {&vd, &vs2, &frs1, opt, &vm}));
756756
}
757757

758+
static void NOINLINE add_vector_multiplyadd_vf_insn(disassembler_t* d, const char* name, uint32_t match, uint32_t mask)
759+
{
760+
d->add_insn(new disasm_insn_t(name, match, mask, {&vd, &frs1, &vs2, opt, &vm}));
761+
}
762+
758763
static void NOINLINE add_vector_vi_insn(disassembler_t* d, const char* name, uint32_t match, uint32_t mask)
759764
{
760765
d->add_insn(new disasm_insn_t(name, match, mask, {&vd, &vs2, &v_simm5, opt, &vm}));
@@ -1656,6 +1661,7 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
16561661
#define DEFINE_VECTOR_VX(code) add_vector_vx_insn(this, #code, match_##code, mask_##code)
16571662
#define DEFINE_VECTOR_MULTIPLYADD_VX(code) add_vector_multiplyadd_vx_insn(this, #code, match_##code, mask_##code)
16581663
#define DEFINE_VECTOR_VF(code) add_vector_vf_insn(this, #code, match_##code, mask_##code)
1664+
#define DEFINE_VECTOR_MULTIPLYADD_VF(code) add_vector_multiplyadd_vf_insn(this, #code, match_##code, mask_##code)
16591665
#define DEFINE_VECTOR_VI(code) add_vector_vi_insn(this, #code, match_##code, mask_##code)
16601666
#define DEFINE_VECTOR_VIU(code) add_vector_viu_insn(this, #code, match_##code, mask_##code)
16611667

@@ -1876,6 +1882,10 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
18761882
DEFINE_VECTOR_VV(name##_vv); \
18771883
DEFINE_VECTOR_VF(name##_vf)
18781884

1885+
#define DISASM_OPIV_MULTIPLYADD_VF_INSN(name) \
1886+
DEFINE_VECTOR_MULTIPLYADD_VV(name##_vv); \
1887+
DEFINE_VECTOR_MULTIPLYADD_VF(name##_vf)
1888+
18791889
#define DISASM_OPIV_WF_INSN(name) \
18801890
DEFINE_VECTOR_VV(name##_wv); \
18811891
DEFINE_VECTOR_VF(name##_wf)
@@ -1943,14 +1953,14 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
19431953

19441954
DISASM_OPIV_VF_INSN(vfmul);
19451955
DISASM_OPIV__F_INSN(vfrsub);
1946-
DISASM_OPIV_VF_INSN(vfmadd);
1947-
DISASM_OPIV_VF_INSN(vfnmadd);
1948-
DISASM_OPIV_VF_INSN(vfmsub);
1949-
DISASM_OPIV_VF_INSN(vfnmsub);
1950-
DISASM_OPIV_VF_INSN(vfmacc);
1951-
DISASM_OPIV_VF_INSN(vfnmacc);
1952-
DISASM_OPIV_VF_INSN(vfmsac);
1953-
DISASM_OPIV_VF_INSN(vfnmsac);
1956+
DISASM_OPIV_MULTIPLYADD_VF_INSN(vfmadd);
1957+
DISASM_OPIV_MULTIPLYADD_VF_INSN(vfnmadd);
1958+
DISASM_OPIV_MULTIPLYADD_VF_INSN(vfmsub);
1959+
DISASM_OPIV_MULTIPLYADD_VF_INSN(vfnmsub);
1960+
DISASM_OPIV_MULTIPLYADD_VF_INSN(vfmacc);
1961+
DISASM_OPIV_MULTIPLYADD_VF_INSN(vfnmacc);
1962+
DISASM_OPIV_MULTIPLYADD_VF_INSN(vfmsac);
1963+
DISASM_OPIV_MULTIPLYADD_VF_INSN(vfnmsac);
19541964

19551965
//0b11_0000
19561966
DISASM_OPIV_VF_INSN(vfwadd);

0 commit comments

Comments
 (0)