@@ -359,9 +359,12 @@ class VOP3FP8OpSel_src_bytesel_gfx11_gfx12<bits<10> op, VOPProfile p> : VOP3e_gf
359
359
let Inst{14-13} = byte_sel; // op_sel2/3
360
360
}
361
361
362
- class VOP3DotOpSel_gfx11_gfx12<bits<10> op, VOPProfile p> : VOP3OpSel_gfx11_gfx12<op, p>{
362
+ class VOP3DotOpSel_gfx11_gfx12<bits<10> op, VOPProfile p> :
363
+ VOP3e_t16_gfx11_gfx12<op, p>{
363
364
let Inst{11} = ?;
364
365
let Inst{12} = ?;
366
+ let Inst{13} = !if(p.HasSrc2Mods, src2_modifiers{2}, 0);
367
+ let Inst{14} = !if(!and(p.HasDst, p.HasSrc0Mods), src0_modifiers{3}, 0);
365
368
}
366
369
367
370
// NB: For V_INTERP* opcodes, src0 is encoded as src1 and vice versa
@@ -1706,10 +1709,12 @@ multiclass VOP3_Real_Base<GFXGen Gen, bits<10> op, string opName = NAME,
1706
1709
}
1707
1710
}
1708
1711
1709
- multiclass VOP3Dot_Real_Base<GFXGen Gen, bits<10> op, string opName = NAME,
1712
+ multiclass VOP3Dot_Real_Base<GFXGen Gen, bits<10> op, string asmName, string opName = NAME,
1710
1713
bit isSingle = 0> {
1711
1714
defvar ps = !cast<VOP_Pseudo>(opName#"_e64");
1712
- let IsSingle = !or(isSingle, ps.Pfl.IsSingle) in {
1715
+ let AsmString = asmName # ps.AsmOperands,
1716
+ DecoderNamespace = Gen.DecoderNamespace # !if(ps.Pfl.IsRealTrue16, "", "_FAKE16"),
1717
+ IsSingle = !or(isSingle, ps.Pfl.IsSingle) in {
1713
1718
def _e64#Gen.Suffix :
1714
1719
VOP3_Real_Gen<ps, Gen>,
1715
1720
VOP3DotOpSel_gfx11_gfx12<op, ps.Pfl>;
@@ -1773,9 +1778,13 @@ multiclass VOP3_Real_dpp_Base<GFXGen Gen, bits<10> op, string opName = NAME> {
1773
1778
VOP3_DPP16_Gen<op, ps, Gen>;
1774
1779
}
1775
1780
1776
- multiclass VOP3Dot_Real_dpp_Base<GFXGen Gen, bits<10> op, string opName = NAME> {
1781
+ multiclass VOP3Dot_Real_dpp_Base<GFXGen Gen, bits<10> op, string asmName, string opName = NAME> {
1782
+ defvar ps = !cast<VOP_DPP_Pseudo>(opName#"_e64"#"_dpp");
1777
1783
def _e64_dpp#Gen.Suffix :
1778
- VOP3_DPP16_Gen<op, !cast<VOP_DPP_Pseudo>(opName#"_e64"#"_dpp"), Gen> {
1784
+ VOP3_DPP16_Gen_t16<op, ps, Gen> {
1785
+ let AsmString = asmName # ps.Pfl.AsmVOP3DPP16;
1786
+ let DecoderNamespace = Gen.DecoderNamespace
1787
+ # !if(ps.Pfl.IsRealTrue16, "", "_FAKE16");
1779
1788
let Inst{11} = ?;
1780
1789
let Inst{12} = ?;
1781
1790
}
@@ -1797,12 +1806,14 @@ multiclass VOP3_Real_dpp8_Base<GFXGen Gen, bits<10> op, string opName = NAME> {
1797
1806
}
1798
1807
}
1799
1808
1800
- multiclass VOP3Dot_Real_dpp8_Base<GFXGen Gen, bits<10> op, string opName = NAME> {
1809
+ multiclass VOP3Dot_Real_dpp8_Base<GFXGen Gen, bits<10> op, string asmName, string opName = NAME> {
1801
1810
defvar ps = !cast<VOP3_Pseudo>(opName#"_e64");
1802
- def _e64_dpp8#Gen.Suffix : Base_VOP3_DPP8 <op, ps> {
1811
+ def _e64_dpp8#Gen.Suffix : Base_VOP3_DPP8_t16 <op, ps> {
1803
1812
let Inst{11} = ?;
1804
1813
let Inst{12} = ?;
1805
- let DecoderNamespace = Gen.DecoderNamespace;
1814
+ let AsmString = asmName # ps.Pfl.AsmVOP3DPP8;
1815
+ let DecoderNamespace = Gen.DecoderNamespace
1816
+ # !if(ps.Pfl.IsRealTrue16, "", "_FAKE16");
1806
1817
let AssemblerPredicate = Gen.AssemblerPredicate;
1807
1818
}
1808
1819
}
@@ -1855,11 +1866,11 @@ multiclass VOP3_Realtriple<GFXGen Gen, bits<10> op, bit isSingle = 0,
1855
1866
VOP3_Real_dpp_Base<Gen, op, opName>,
1856
1867
VOP3_Real_dpp8_Base<Gen, op, opName>;
1857
1868
1858
- multiclass VOP3Dot_Realtriple<GFXGen Gen, bits<10> op, bit isSingle = 0,
1869
+ multiclass VOP3Dot_Realtriple<GFXGen Gen, bits<10> op, string asmName, bit isSingle = 0,
1859
1870
string opName = NAME> :
1860
- VOP3Dot_Real_Base<Gen, op, opName, isSingle>,
1861
- VOP3Dot_Real_dpp_Base<Gen, op, opName>,
1862
- VOP3Dot_Real_dpp8_Base<Gen, op, opName>;
1871
+ VOP3Dot_Real_Base<Gen, op, asmName, opName, isSingle>,
1872
+ VOP3Dot_Real_dpp_Base<Gen, op, asmName, opName>,
1873
+ VOP3Dot_Real_dpp8_Base<Gen, op, asmName, opName>;
1863
1874
1864
1875
multiclass VOP3Only_Realtriple<GFXGen Gen, bits<10> op> :
1865
1876
VOP3_Realtriple<Gen, op, 1>;
@@ -1957,6 +1968,12 @@ multiclass VOP3Only_Realtriple_with_name_gfx11_gfx12<bits<10> op, string opName,
1957
1968
VOP3Only_Realtriple_with_name<GFX11Gen, op, opName, asmName>,
1958
1969
VOP3Only_Realtriple_with_name<GFX12Gen, op, opName, asmName>;
1959
1970
1971
+ multiclass VOP3Dot_Realtriple_gfx11_gfx12<bits<10> op, string asmName, bit isSingle = 0,
1972
+ string opName = NAME> :
1973
+ VOP3Dot_Realtriple<GFX11Gen, op, asmName, isSingle, opName>,
1974
+ VOP3Dot_Realtriple<GFX12Gen, op, asmName, isSingle, opName>;
1975
+
1976
+
1960
1977
//===----------------------------------------------------------------------===//
1961
1978
1962
1979
include "VOPCInstructions.td"
0 commit comments