@@ -3787,16 +3787,15 @@ multiclass sve2p1_two_way_dot_vv<string mnemonic, bit u, SDPatternOperator intri
37873787// SVE Integer Dot Product Group - Indexed Group
37883788//===----------------------------------------------------------------------===//
37893789
3790- class sve_intx_dot_by_indexed_elem<bit sz, bit U, string asm,
3790+ class sve_intx_dot_by_indexed_elem<bit U, string asm,
37913791 ZPRRegOp zprty1, ZPRRegOp zprty2,
37923792 ZPRRegOp zprty3, Operand itype>
37933793: I<(outs zprty1:$Zda), (ins zprty1:$_Zda, zprty2:$Zn, zprty3:$Zm, itype:$iop),
37943794 asm, "\t$Zda, $Zn, $Zm$iop",
37953795 "", []>, Sched<[]> {
37963796 bits<5> Zda;
37973797 bits<5> Zn;
3798- let Inst{31-23} = 0b010001001;
3799- let Inst{22} = sz;
3798+ let Inst{31-24} = 0b01000100;
38003799 let Inst{21} = 0b1;
38013800 let Inst{15-11} = 0;
38023801 let Inst{10} = U;
@@ -3810,23 +3809,35 @@ class sve_intx_dot_by_indexed_elem<bit sz, bit U, string asm,
38103809
38113810multiclass sve_intx_dot_by_indexed_elem<bit opc, string asm,
38123811 SDPatternOperator op> {
3813- def _BtoS : sve_intx_dot_by_indexed_elem<0b0, opc, asm, ZPR32, ZPR8, ZPR3b8, VectorIndexS32b_timm> {
3812+ def _BtoS : sve_intx_dot_by_indexed_elem<opc, asm, ZPR32, ZPR8, ZPR3b8, VectorIndexS32b_timm> {
38143813 bits<2> iop;
38153814 bits<3> Zm;
3815+ let Inst{23-22} = 0b10;
38163816 let Inst{20-19} = iop;
38173817 let Inst{18-16} = Zm;
38183818 }
3819- def _HtoD : sve_intx_dot_by_indexed_elem<0b1, opc, asm, ZPR64, ZPR16, ZPR4b16, VectorIndexD32b_timm> {
3819+ def _HtoD : sve_intx_dot_by_indexed_elem<opc, asm, ZPR64, ZPR16, ZPR4b16, VectorIndexD32b_timm> {
38203820 bits<1> iop;
38213821 bits<4> Zm;
3822- let Inst{20} = iop;
3822+ let Inst{23-22} = 0b11;
3823+ let Inst{20} = iop;
38233824 let Inst{19-16} = Zm;
38243825 }
38253826
38263827 def : SVE_4_Op_Imm_Pat<nxv4i32, op, nxv4i32, nxv16i8, nxv16i8, i32, VectorIndexS32b_timm, !cast<Instruction>(NAME # _BtoS)>;
38273828 def : SVE_4_Op_Imm_Pat<nxv2i64, op, nxv2i64, nxv8i16, nxv8i16, i32, VectorIndexD32b_timm, !cast<Instruction>(NAME # _HtoD)>;
38283829}
38293830
3831+ class sve_intx_dot_by_indexed_elem_x<bit opc, string asm>
3832+ : sve_intx_dot_by_indexed_elem<opc, asm, ZPR16, ZPR8, ZPR3b8, VectorIndexH32b_timm> {
3833+ bits<3> iop;
3834+ bits<3> Zm;
3835+ let Inst{23} = 0b0;
3836+ let Inst{22} = iop{2-2};
3837+ let Inst{20-19} = iop{1-0};
3838+ let Inst{18-16} = Zm;
3839+ }
3840+
38303841//===----------------------------------------------------------------------===//
38313842// SVE2 Complex Integer Dot Product Group
38323843//===----------------------------------------------------------------------===//
@@ -9616,17 +9627,18 @@ multiclass sve_int_dot_mixed_indexed<bit U, string asm, SDPatternOperator op> {
96169627// SVE Floating Point Matrix Multiply Accumulate Group
96179628//===----------------------------------------------------------------------===//
96189629
9619- class sve_fp_matrix_mla<bits<2 > opc, string asm, ZPRRegOp zda_ty, ZPRRegOp reg_ty>
9630+ class sve_fp_matrix_mla<bits<3 > opc, string asm, ZPRRegOp zda_ty, ZPRRegOp reg_ty>
96209631: I<(outs zda_ty:$Zda), (ins zda_ty:$_Zda, reg_ty:$Zn, reg_ty:$Zm),
96219632 asm, "\t$Zda, $Zn, $Zm", "", []>, Sched<[]> {
96229633 bits<5> Zda;
96239634 bits<5> Zn;
96249635 bits<5> Zm;
96259636 let Inst{31-24} = 0b01100100;
9626- let Inst{23-22} = opc;
9637+ let Inst{23-22} = opc{2-1} ;
96279638 let Inst{21} = 1;
96289639 let Inst{20-16} = Zm;
9629- let Inst{15-10} = 0b111001;
9640+ let Inst{15-11} = 0b11100;
9641+ let Inst{10} = opc{0};
96309642 let Inst{9-5} = Zn;
96319643 let Inst{4-0} = Zda;
96329644
@@ -9636,10 +9648,12 @@ class sve_fp_matrix_mla<bits<2> opc, string asm, ZPRRegOp zda_ty, ZPRRegOp reg_t
96369648 let mayRaiseFPException = 1;
96379649}
96389650
9639- multiclass sve_fp_matrix_mla<bits<2> opc, string asm, ZPRRegOp zda_ty, ZPRRegOp reg_ty, SDPatternOperator op, ValueType zda_vt, ValueType reg_vt> {
9651+ multiclass sve_fp_matrix_mla<bits<3> opc, string asm, ZPRRegOp zda_ty,
9652+ ZPRRegOp reg_ty, SDPatternOperator op,
9653+ ValueType zda_vt, ValueType reg_vt> {
96409654 def NAME : sve_fp_matrix_mla<opc, asm, zda_ty, reg_ty>;
96419655
9642- def : SVE_3_Op_Pat<zda_vt, op , zda_vt, reg_vt, reg_vt, !cast<Instruction>(NAME)>;
9656+ def : SVE_3_Op_Pat<zda_vt, op, zda_vt, reg_vt, reg_vt, !cast<Instruction>(NAME)>;
96439657}
96449658
96459659//===----------------------------------------------------------------------===//
0 commit comments