@@ -735,16 +735,31 @@ static void NOINLINE add_vector_vv_insn(disassembler_t* d, const char* name, uin
735
735
d->add_insn (new disasm_insn_t (name, match, mask, {&vd, &vs2, &vs1, opt, &vm}));
736
736
}
737
737
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
+
738
743
static void NOINLINE add_vector_vx_insn (disassembler_t * d, const char * name, uint32_t match, uint32_t mask)
739
744
{
740
745
d->add_insn (new disasm_insn_t (name, match, mask, {&vd, &vs2, &xrs1, opt, &vm}));
741
746
}
742
747
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
+
743
753
static void NOINLINE add_vector_vf_insn (disassembler_t * d, const char * name, uint32_t match, uint32_t mask)
744
754
{
745
755
d->add_insn (new disasm_insn_t (name, match, mask, {&vd, &vs2, &frs1, opt, &vm}));
746
756
}
747
757
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
+
748
763
static void NOINLINE add_vector_vi_insn (disassembler_t * d, const char * name, uint32_t match, uint32_t mask)
749
764
{
750
765
d->add_insn (new disasm_insn_t (name, match, mask, {&vd, &vs2, &v_simm5, opt, &vm}));
@@ -1642,8 +1657,11 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
1642
1657
1643
1658
#define DEFINE_VECTOR_V (code ) add_vector_v_insn(this , #code, match_##code, mask_##code)
1644
1659
#define DEFINE_VECTOR_VV (code ) add_vector_vv_insn(this , #code, match_##code, mask_##code)
1660
+ #define DEFINE_VECTOR_MULTIPLYADD_VV (code ) add_vector_multiplyadd_vv_insn(this , #code, match_##code, mask_##code)
1645
1661
#define DEFINE_VECTOR_VX (code ) add_vector_vx_insn(this , #code, match_##code, mask_##code)
1662
+ #define DEFINE_VECTOR_MULTIPLYADD_VX (code ) add_vector_multiplyadd_vx_insn(this , #code, match_##code, mask_##code)
1646
1663
#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)
1647
1665
#define DEFINE_VECTOR_VI (code ) add_vector_vi_insn(this , #code, match_##code, mask_##code)
1648
1666
#define DEFINE_VECTOR_VIU (code ) add_vector_viu_insn(this , #code, match_##code, mask_##code)
1649
1667
@@ -1659,6 +1677,10 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
1659
1677
DEFINE_VECTOR_VV (name##_vv); \
1660
1678
DEFINE_VECTOR_VX (name##_vx)
1661
1679
1680
+ #define DISASM_OPIV_MULTIPLYADD_VX__INSN (name, sign ) \
1681
+ DEFINE_VECTOR_MULTIPLYADD_VV (name##_vv); \
1682
+ DEFINE_VECTOR_MULTIPLYADD_VX (name##_vx)
1683
+
1662
1684
#define DISASM_OPIV__XI_INSN (name, sign ) \
1663
1685
DEFINE_VECTOR_VX (name##_vx); \
1664
1686
if (sign) \
@@ -1678,6 +1700,8 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
1678
1700
1679
1701
#define DISASM_OPIV__X__INSN (name, sign ) DEFINE_VECTOR_VX(name##_vx)
1680
1702
1703
+ #define DISASM_OPIV_MULTIPLYADD__X__INSN (name, sign ) DEFINE_VECTOR_MULTIPLYADD_VX(name##_vx)
1704
+
1681
1705
#define DEFINE_VECTOR_VVM (name ) \
1682
1706
add_vector_vvm_insn (this , #name, match_##name, mask_##name | mask_vm)
1683
1707
@@ -1821,10 +1845,10 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
1821
1845
DISASM_OPIV_VX__INSN (vmul, 1 );
1822
1846
DISASM_OPIV_VX__INSN (vmulhsu, 0 );
1823
1847
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 );
1848
+ DISASM_OPIV_MULTIPLYADD_VX__INSN (vmadd, 1 );
1849
+ DISASM_OPIV_MULTIPLYADD_VX__INSN (vnmsub, 1 );
1850
+ DISASM_OPIV_MULTIPLYADD_VX__INSN (vmacc, 1 );
1851
+ DISASM_OPIV_MULTIPLYADD_VX__INSN (vnmsac, 1 );
1828
1852
1829
1853
// 0b11_0000
1830
1854
DISASM_OPIV_VX__INSN (vwaddu, 0 );
@@ -1838,10 +1862,10 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
1838
1862
DISASM_OPIV_VX__INSN (vwmulu, 0 );
1839
1863
DISASM_OPIV_VX__INSN (vwmulsu, 0 );
1840
1864
DISASM_OPIV_VX__INSN (vwmul, 1 );
1841
- DISASM_OPIV_VX__INSN (vwmaccu, 0 );
1842
- DISASM_OPIV_VX__INSN (vwmacc, 1 );
1843
- DISASM_OPIV__X__INSN (vwmaccus, 1 );
1844
- DISASM_OPIV_VX__INSN (vwmaccsu, 0 );
1865
+ DISASM_OPIV_MULTIPLYADD_VX__INSN (vwmaccu, 0 );
1866
+ DISASM_OPIV_MULTIPLYADD_VX__INSN (vwmacc, 1 );
1867
+ DISASM_OPIV_MULTIPLYADD__X__INSN (vwmaccus, 1 );
1868
+ DISASM_OPIV_MULTIPLYADD_VX__INSN (vwmaccsu, 0 );
1845
1869
1846
1870
#undef DISASM_OPIV_VXI_INSN
1847
1871
#undef DISASM_OPIV_VX__INSN
@@ -1858,6 +1882,10 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
1858
1882
DEFINE_VECTOR_VV (name##_vv); \
1859
1883
DEFINE_VECTOR_VF (name##_vf)
1860
1884
1885
+ #define DISASM_OPIV_MULTIPLYADD_VF_INSN (name ) \
1886
+ DEFINE_VECTOR_MULTIPLYADD_VV (name##_vv); \
1887
+ DEFINE_VECTOR_MULTIPLYADD_VF (name##_vf)
1888
+
1861
1889
#define DISASM_OPIV_WF_INSN (name ) \
1862
1890
DEFINE_VECTOR_VV (name##_wv); \
1863
1891
DEFINE_VECTOR_VF (name##_wf)
@@ -1925,14 +1953,14 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
1925
1953
1926
1954
DISASM_OPIV_VF_INSN (vfmul);
1927
1955
DISASM_OPIV__F_INSN (vfrsub);
1928
- DISASM_OPIV_VF_INSN (vfmadd);
1929
- DISASM_OPIV_VF_INSN (vfnmadd);
1930
- DISASM_OPIV_VF_INSN (vfmsub);
1931
- DISASM_OPIV_VF_INSN (vfnmsub);
1932
- DISASM_OPIV_VF_INSN (vfmacc);
1933
- DISASM_OPIV_VF_INSN (vfnmacc);
1934
- DISASM_OPIV_VF_INSN (vfmsac);
1935
- 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);
1936
1964
1937
1965
// 0b11_0000
1938
1966
DISASM_OPIV_VF_INSN (vfwadd);
@@ -1942,10 +1970,10 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
1942
1970
DISASM_OPIV_WF_INSN (vfwadd);
1943
1971
DISASM_OPIV_WF_INSN (vfwsub);
1944
1972
DISASM_OPIV_VF_INSN (vfwmul);
1945
- DISASM_OPIV_VF_INSN (vfwmacc);
1946
- DISASM_OPIV_VF_INSN (vfwnmacc);
1947
- DISASM_OPIV_VF_INSN (vfwmsac);
1948
- DISASM_OPIV_VF_INSN (vfwnmsac);
1973
+ DISASM_OPIV_MULTIPLYADD_VF_INSN (vfwmacc);
1974
+ DISASM_OPIV_MULTIPLYADD_VF_INSN (vfwnmacc);
1975
+ DISASM_OPIV_MULTIPLYADD_VF_INSN (vfwmsac);
1976
+ DISASM_OPIV_MULTIPLYADD_VF_INSN (vfwnmsac);
1949
1977
1950
1978
#undef DISASM_OPIV_VF_INSN
1951
1979
#undef DISASM_OPIV__F_INSN
0 commit comments