Lines Matching refs:OpcodeStr

190                                   string OpcodeStr,
200 OpcodeStr#"\t{"#AttSrcAsm#", $dst|"#
207 OpcodeStr#"\t{"#AttSrcAsm#", $dst {${mask}}|"#
216 OpcodeStr#"\t{"#AttSrcAsm#", $dst {${mask}} {z}|"#
228 string OpcodeStr,
235 AVX512_maskable_custom<O, F, Outs, Ins, MaskingIns, ZeroMaskingIns, OpcodeStr,
247 dag Outs, dag Ins, string OpcodeStr,
255 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
262 dag Outs, dag Ins, string OpcodeStr,
270 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
279 dag Outs, dag NonTiedIns, string OpcodeStr,
286 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
294 dag Outs, dag NonTiedIns, string OpcodeStr,
301 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
306 dag Outs, dag NonTiedIns, string OpcodeStr,
313 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
319 string OpcodeStr,
325 OpcodeStr, AttSrcAsm, IntelSrcAsm, Pattern, [], [],
334 string OpcodeStr,
339 OpcodeStr#"\t{"#AttSrcAsm#", $dst|"#
344 OpcodeStr#"\t{"#AttSrcAsm#", $dst {${mask}}|"#
352 string OpcodeStr,
355 AVX512_maskable_custom_cmp<O, F, Outs, Ins, MaskingIns, OpcodeStr,
361 dag Outs, dag Ins, string OpcodeStr,
366 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
370 dag Outs, dag Ins, string OpcodeStr,
373 Ins, !con((ins _.KRCWM:$mask),Ins), OpcodeStr,
798 multiclass avx512_broadcast_scalar<bits<8> opc, string OpcodeStr,
803 (ins SrcInfo.FRC:$src), OpcodeStr#"\t{$src, $dst|$dst, $src}",
810 OpcodeStr#"\t{$src, $dst {${mask}} |$dst {${mask}}, $src}",
819 OpcodeStr#"\t{$src, $dst {${mask}} {z}|$dst {${mask}} {z}, $src}",
828 multiclass avx512_broadcast_rm<bits<8> opc, string OpcodeStr,
832 (ins SrcInfo.RC:$src), OpcodeStr, "$src", "$src",
836 (ins SrcInfo.ScalarMemOp:$src), OpcodeStr, "$src", "$src",
843 (ins SrcInfo.ScalarMemOp:$src), OpcodeStr, "$src", "$src",
851 multiclass avx512_fp_broadcast_vl<bits<8> opc, string OpcodeStr,
853 defm Z : avx512_broadcast_rm<opc, OpcodeStr, _.info512, _.info128>,
854 avx512_broadcast_scalar<opc, OpcodeStr, _.info512, _.info128>,
858 defm Z256 : avx512_broadcast_rm<opc, OpcodeStr, _.info256, _.info128>,
859 avx512_broadcast_scalar<opc, OpcodeStr, _.info256, _.info128>,
934 multiclass avx512_int_broadcast_rm_vl<bits<8> opc, string OpcodeStr,
937 defm Z : avx512_broadcast_rm<opc, OpcodeStr, _.info512, _.info128>,
944 defm Z256 : avx512_broadcast_rm<opc, OpcodeStr, _.info256, _.info128>,
947 defm Z128 : avx512_broadcast_rm<opc, OpcodeStr, _.info128, _.info128>,
961 multiclass avx512_subvec_broadcast_rm<bits<8> opc, string OpcodeStr,
964 (ins _Src.MemOp:$src), OpcodeStr, "$src", "$src",
1014 multiclass avx512_common_broadcast_32x2<bits<8> opc, string OpcodeStr,
1017 defm Z : avx512_broadcast_rm<opc, OpcodeStr, _Dst.info512, _Src.info128>,
1020 defm Z256 : avx512_broadcast_rm<opc, OpcodeStr, _Dst.info256, _Src.info128>,
1024 multiclass avx512_common_broadcast_i32x2<bits<8> opc, string OpcodeStr,
1026 avx512_common_broadcast_32x2<opc, OpcodeStr, _Dst, _Src> {
1029 defm Z128 : avx512_broadcast_rm<opc, OpcodeStr, _Dst.info128, _Src.info128>,
1051 multiclass avx512_mask_broadcastm<bits<8> opc, string OpcodeStr,
1054 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
1058 multiclass avx512_mask_broadcast<bits<8> opc, string OpcodeStr,
1061 defm Z : avx512_mask_broadcastm<opc, OpcodeStr, VTInfo.info512, KRC>, EVEX_V512;
1063 defm Z256 : avx512_mask_broadcastm<opc, OpcodeStr, VTInfo.info256, KRC>, EVEX_V256;
1064 defm Z128 : avx512_mask_broadcastm<opc, OpcodeStr, VTInfo.info128, KRC>, EVEX_V128;
1075 multiclass avx512_perm_i<bits<8> opc, string OpcodeStr,
1080 OpcodeStr, "$src3, $src2", "$src2, $src3",
1086 OpcodeStr, "$src3, $src2", "$src2, $src3",
1092 multiclass avx512_perm_i_mb<bits<8> opc, string OpcodeStr,
1097 OpcodeStr, !strconcat("${src3}", _.BroadcastStr,", $src2"),
1104 multiclass avx512_perm_i_sizes<bits<8> opc, string OpcodeStr,
1107 defm NAME: avx512_perm_i<opc, OpcodeStr, VTInfo.info512,
1109 avx512_perm_i_mb<opc, OpcodeStr, VTInfo.info512,
1112 defm NAME#128: avx512_perm_i<opc, OpcodeStr, VTInfo.info128,
1114 avx512_perm_i_mb<opc, OpcodeStr, VTInfo.info128,
1116 defm NAME#256: avx512_perm_i<opc, OpcodeStr, VTInfo.info256,
1118 avx512_perm_i_mb<opc, OpcodeStr, VTInfo.info256,
1123 multiclass avx512_perm_i_sizes_bw<bits<8> opc, string OpcodeStr,
1128 defm NAME: avx512_perm_i<opc, OpcodeStr, VTInfo.info512,
1131 defm NAME#128: avx512_perm_i<opc, OpcodeStr, VTInfo.info128,
1133 defm NAME#256: avx512_perm_i<opc, OpcodeStr, VTInfo.info256,
1154 multiclass avx512_perm_t<bits<8> opc, string OpcodeStr,
1159 OpcodeStr, "$src3, $src2", "$src2, $src3",
1165 OpcodeStr, "$src3, $src2", "$src2, $src3",
1171 multiclass avx512_perm_t_mb<bits<8> opc, string OpcodeStr,
1176 OpcodeStr, !strconcat("${src3}", _.BroadcastStr,", $src2"),
1183 multiclass avx512_perm_t_sizes<bits<8> opc, string OpcodeStr,
1186 defm NAME: avx512_perm_t<opc, OpcodeStr, VTInfo.info512,
1188 avx512_perm_t_mb<opc, OpcodeStr, VTInfo.info512,
1191 defm NAME#128: avx512_perm_t<opc, OpcodeStr, VTInfo.info128,
1193 avx512_perm_t_mb<opc, OpcodeStr, VTInfo.info128,
1195 defm NAME#256: avx512_perm_t<opc, OpcodeStr, VTInfo.info256,
1197 avx512_perm_t_mb<opc, OpcodeStr, VTInfo.info256,
1202 multiclass avx512_perm_t_sizes_bw<bits<8> opc, string OpcodeStr,
1207 defm NAME: avx512_perm_t<opc, OpcodeStr, VTInfo.info512,
1210 defm NAME#128: avx512_perm_t<opc, OpcodeStr, VTInfo.info128,
1212 defm NAME#256: avx512_perm_t<opc, OpcodeStr, VTInfo.info256,
1235 multiclass avx512_blendmask<bits<8> opc, string OpcodeStr, X86VectorVTInfo _> {
1240 !strconcat(OpcodeStr,
1245 !strconcat(OpcodeStr,
1253 !strconcat(OpcodeStr,
1259 !strconcat(OpcodeStr,
1264 !strconcat(OpcodeStr,
1273 !strconcat(OpcodeStr,
1278 multiclass avx512_blendmask_rmb<bits<8> opc, string OpcodeStr, X86VectorVTInfo _> {
1282 !strconcat(OpcodeStr,
1293 !strconcat(OpcodeStr,
1300 multiclass blendmask_dq <bits<8> opc, string OpcodeStr,
1302 defm Z : avx512_blendmask <opc, OpcodeStr, VTInfo.info512>,
1303 avx512_blendmask_rmb <opc, OpcodeStr, VTInfo.info512>, EVEX_V512;
1306 defm Z256 : avx512_blendmask<opc, OpcodeStr, VTInfo.info256>,
1307 avx512_blendmask_rmb <opc, OpcodeStr, VTInfo.info256>, EVEX_V256;
1308 defm Z128 : avx512_blendmask<opc, OpcodeStr, VTInfo.info128>,
1309 avx512_blendmask_rmb <opc, OpcodeStr, VTInfo.info128>, EVEX_V128;
1313 multiclass blendmask_bw <bits<8> opc, string OpcodeStr,
1316 defm Z : avx512_blendmask <opc, OpcodeStr, VTInfo.info512>, EVEX_V512;
1319 defm Z256 : avx512_blendmask <opc, OpcodeStr, VTInfo.info256>, EVEX_V256;
1320 defm Z128 : avx512_blendmask <opc, OpcodeStr, VTInfo.info128>, EVEX_V128;
1432 multiclass avx512_icmp_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
1436 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
1441 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
1447 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst {${mask}}|",
1454 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst {${mask}}|",
1463 multiclass avx512_icmp_packed_rmb<bits<8> opc, string OpcodeStr, SDNode OpNode,
1465 avx512_icmp_packed<opc, OpcodeStr, OpNode, _> {
1468 !strconcat(OpcodeStr, "\t{${src2}", _.BroadcastStr, ", $src1, $dst",
1476 !strconcat(OpcodeStr,
1486 multiclass avx512_icmp_packed_vl<bits<8> opc, string OpcodeStr, SDNode OpNode,
1489 defm Z : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info512>,
1493 defm Z256 : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info256>,
1495 defm Z128 : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info128>,
1500 multiclass avx512_icmp_packed_rmb_vl<bits<8> opc, string OpcodeStr,
1504 defm Z : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info512>,
1508 defm Z256 : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info256>,
1510 defm Z128 : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info128>,
1826 multiclass avx512_scalar_fpclass<bits<8> opc, string OpcodeStr, SDNode OpNode,
1831 OpcodeStr##_.Suffix#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
1836 OpcodeStr##_.Suffix#
1844 OpcodeStr##_.Suffix##
1851 OpcodeStr##_.Suffix##
1863 multiclass avx512_vector_fpclass<bits<8> opc, string OpcodeStr, SDNode OpNode,
1867 OpcodeStr##_.Suffix#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
1872 OpcodeStr##_.Suffix#
1879 OpcodeStr##_.Suffix##mem#
1886 OpcodeStr##_.Suffix##mem#
1893 OpcodeStr##_.Suffix##broadcast##"\t{$src2, ${src1}"##
1902 OpcodeStr##_.Suffix##broadcast##"\t{$src2, ${src1}"##
1912 multiclass avx512_vector_fpclass_all<string OpcodeStr,
1916 defm Z : avx512_vector_fpclass<opc, OpcodeStr, OpNode, _.info512, "{z}",
1920 defm Z128 : avx512_vector_fpclass<opc, OpcodeStr, OpNode, _.info128, "{x}",
1922 defm Z256 : avx512_vector_fpclass<opc, OpcodeStr, OpNode, _.info256, "{y}",
1927 multiclass avx512_fp_fpclass_all<string OpcodeStr, bits<8> opcVec,
1929 defm PS : avx512_vector_fpclass_all<OpcodeStr, avx512vl_f32_info, opcVec,
1931 defm PD : avx512_vector_fpclass_all<OpcodeStr, avx512vl_f64_info, opcVec,
1933 defm SS : avx512_scalar_fpclass<opcScalar, OpcodeStr, ScalarOpNode,
1935 defm SD : avx512_scalar_fpclass<opcScalar, OpcodeStr, ScalarOpNode,
1949 string OpcodeStr, RegisterClass KRC,
1953 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"), []>;
1955 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
1958 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
1963 string OpcodeStr,
1967 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"), []>;
1969 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"), []>;
2196 multiclass avx512_mask_unop<bits<8> opc, string OpcodeStr,
2201 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
2205 multiclass avx512_mask_unop_all<bits<8> opc, string OpcodeStr,
2207 defm B : avx512_mask_unop<opc, !strconcat(OpcodeStr, "b"), VK8, OpNode,
2209 defm W : avx512_mask_unop<opc, !strconcat(OpcodeStr, "w"), VK16, OpNode,
2211 defm D : avx512_mask_unop<opc, !strconcat(OpcodeStr, "d"), VK32, OpNode,
2213 defm Q : avx512_mask_unop<opc, !strconcat(OpcodeStr, "q"), VK64, OpNode,
2252 multiclass avx512_mask_binop<bits<8> opc, string OpcodeStr,
2257 !strconcat(OpcodeStr,
2262 multiclass avx512_mask_binop_all<bits<8> opc, string OpcodeStr,
2265 defm B : avx512_mask_binop<opc, !strconcat(OpcodeStr, "b"), VK8, OpNode,
2267 defm W : avx512_mask_binop<opc, !strconcat(OpcodeStr, "w"), VK16, OpNode,
2269 defm D : avx512_mask_binop<opc, !strconcat(OpcodeStr, "d"), VK32, OpNode,
2271 defm Q : avx512_mask_binop<opc, !strconcat(OpcodeStr, "q"), VK64, OpNode,
2378 multiclass avx512_mask_testop<bits<8> opc, string OpcodeStr, RegisterClass KRC,
2382 !strconcat(OpcodeStr, "\t{$src2, $src1|$src1, $src2}"),
2386 multiclass avx512_mask_testop_w<bits<8> opc, string OpcodeStr, SDNode OpNode,
2388 defm B : avx512_mask_testop<opc, OpcodeStr#"b", VK8, OpNode, HasDQI>,
2390 defm W : avx512_mask_testop<opc, OpcodeStr#"w", VK16, OpNode, prdW>,
2392 defm Q : avx512_mask_testop<opc, OpcodeStr#"q", VK64, OpNode, HasBWI>,
2394 defm D : avx512_mask_testop<opc, OpcodeStr#"d", VK32, OpNode, HasBWI>,
2402 multiclass avx512_mask_shiftop<bits<8> opc, string OpcodeStr, RegisterClass KRC,
2406 !strconcat(OpcodeStr,
2411 multiclass avx512_mask_shiftop_w<bits<8> opc1, bits<8> opc2, string OpcodeStr,
2413 defm W : avx512_mask_shiftop<opc1, !strconcat(OpcodeStr, "w"), VK16, OpNode>,
2416 defm B : avx512_mask_shiftop<opc1, !strconcat(OpcodeStr, "b"), VK8, OpNode>,
2419 defm Q : avx512_mask_shiftop<opc2, !strconcat(OpcodeStr, "q"), VK64, OpNode>,
2421 defm D : avx512_mask_shiftop<opc2, !strconcat(OpcodeStr, "d"), VK32, OpNode>,
2517 multiclass avx512_load<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
2523 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"), [],
2527 !strconcat(OpcodeStr, "\t{$src, ${dst} {${mask}} {z}|",
2537 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
2544 !strconcat(OpcodeStr, "\t{$src1, ${dst} {${mask}}|",
2553 !strconcat(OpcodeStr, "\t{$src1, ${dst} {${mask}}|",
2563 OpcodeStr #"\t{$src, ${dst} {${mask}} {z}|"#
2580 multiclass avx512_alignedload_vl<bits<8> opc, string OpcodeStr,
2585 defm Z : avx512_load<opc, OpcodeStr, _.info512, _.info512.AlignedLdFrag,
2589 defm Z256 : avx512_load<opc, OpcodeStr, _.info256, _.info256.AlignedLdFrag,
2591 defm Z128 : avx512_load<opc, OpcodeStr, _.info128, _.info128.AlignedLdFrag,
2596 multiclass avx512_load_vl<bits<8> opc, string OpcodeStr,
2602 defm Z : avx512_load<opc, OpcodeStr, _.info512, _.info512.LdFrag,
2607 defm Z256 : avx512_load<opc, OpcodeStr, _.info256, _.info256.LdFrag,
2610 defm Z128 : avx512_load<opc, OpcodeStr, _.info128, _.info128.LdFrag,
2616 multiclass avx512_store<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
2621 OpcodeStr # ".s\t{$src, $dst|$dst, $src}",
2625 OpcodeStr # ".s\t{$src, ${dst} {${mask}}|"#
2630 OpcodeStr # ".s\t{$src, ${dst} {${mask}} {z}|" #
2636 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
2640 OpcodeStr # "\t{$src, ${dst} {${mask}}|${dst} {${mask}}, $src}",
2649 multiclass avx512_store_vl< bits<8> opc, string OpcodeStr,
2652 defm Z : avx512_store<opc, OpcodeStr, _.info512, store,
2656 defm Z256 : avx512_store<opc, OpcodeStr, _.info256, store,
2658 defm Z128 : avx512_store<opc, OpcodeStr, _.info128, store,
2663 multiclass avx512_alignedstore_vl<bits<8> opc, string OpcodeStr,
2666 defm Z : avx512_store<opc, OpcodeStr, _.info512, alignedstore512,
2670 defm Z256 : avx512_store<opc, OpcodeStr, _.info256, alignedstore256,
2672 defm Z128 : avx512_store<opc, OpcodeStr, _.info128, alignedstore,
3311 multiclass avx512_movnt<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
3316 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
3321 multiclass avx512_movnt_vl<bits<8> opc, string OpcodeStr,
3324 defm Z : avx512_movnt<opc, OpcodeStr, VTInfo.info512>, EVEX_V512;
3327 defm Z256 : avx512_movnt<opc, OpcodeStr, VTInfo.info256>, EVEX_V256;
3328 defm Z128 : avx512_movnt<opc, OpcodeStr, VTInfo.info128>, EVEX_V128;
3403 multiclass avx512_binop_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
3407 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
3414 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr,
3422 multiclass avx512_binop_rmb<bits<8> opc, string OpcodeStr, SDNode OpNode,
3425 avx512_binop_rm<opc, OpcodeStr, OpNode, _, itins, IsCommutable> {
3427 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
3437 multiclass avx512_binop_rm_vl<bits<8> opc, string OpcodeStr, SDNode OpNode,
3441 defm Z : avx512_binop_rm<opc, OpcodeStr, OpNode, VTInfo.info512, itins,
3445 defm Z256 : avx512_binop_rm<opc, OpcodeStr, OpNode, VTInfo.info256, itins,
3447 defm Z128 : avx512_binop_rm<opc, OpcodeStr, OpNode, VTInfo.info128, itins,
3452 multiclass avx512_binop_rmb_vl<bits<8> opc, string OpcodeStr, SDNode OpNode,
3456 defm Z : avx512_binop_rmb<opc, OpcodeStr, OpNode, VTInfo.info512, itins,
3460 defm Z256 : avx512_binop_rmb<opc, OpcodeStr, OpNode, VTInfo.info256, itins,
3462 defm Z128 : avx512_binop_rmb<opc, OpcodeStr, OpNode, VTInfo.info128, itins,
3467 multiclass avx512_binop_rm_vl_q<bits<8> opc, string OpcodeStr, SDNode OpNode,
3470 defm NAME : avx512_binop_rmb_vl<opc, OpcodeStr, OpNode, avx512vl_i64_info,
3475 multiclass avx512_binop_rm_vl_d<bits<8> opc, string OpcodeStr, SDNode OpNode,
3478 defm NAME : avx512_binop_rmb_vl<opc, OpcodeStr, OpNode, avx512vl_i32_info,
3482 multiclass avx512_binop_rm_vl_w<bits<8> opc, string OpcodeStr, SDNode OpNode,
3485 defm NAME : avx512_binop_rm_vl<opc, OpcodeStr, OpNode, avx512vl_i16_info,
3489 multiclass avx512_binop_rm_vl_b<bits<8> opc, string OpcodeStr, SDNode OpNode,
3492 defm NAME : avx512_binop_rm_vl<opc, OpcodeStr, OpNode, avx512vl_i8_info,
3496 multiclass avx512_binop_rm_vl_dq<bits<8> opc_d, bits<8> opc_q, string OpcodeStr,
3499 defm Q : avx512_binop_rm_vl_q<opc_q, OpcodeStr#"q", OpNode, itins, prd,
3502 defm D : avx512_binop_rm_vl_d<opc_d, OpcodeStr#"d", OpNode, itins, prd,
3506 multiclass avx512_binop_rm_vl_bw<bits<8> opc_b, bits<8> opc_w, string OpcodeStr,
3509 defm W : avx512_binop_rm_vl_w<opc_w, OpcodeStr#"w", OpNode, itins, prd,
3512 defm B : avx512_binop_rm_vl_b<opc_b, OpcodeStr#"b", OpNode, itins, prd,
3518 string OpcodeStr, SDNode OpNode,
3520 defm NAME : avx512_binop_rm_vl_dq<opc_d, opc_q, OpcodeStr, OpNode,
3522 avx512_binop_rm_vl_bw<opc_b, opc_w, OpcodeStr, OpNode,
3526 multiclass avx512_binop_rm2<bits<8> opc, string OpcodeStr, OpndItins itins,
3531 (ins _Src.RC:$src1, _Src.RC:$src2), OpcodeStr,
3539 (ins _Src.RC:$src1, _Src.MemOp:$src2), OpcodeStr,
3548 OpcodeStr,
3585 multiclass avx512_binop_all<bits<8> opc, string OpcodeStr, OpndItins itins,
3589 defm NAME#Z : avx512_binop_rm2<opc, OpcodeStr, itins, OpNode,
3594 defm NAME#Z256 : avx512_binop_rm2<opc, OpcodeStr, itins, OpNode,
3598 defm NAME#Z128 : avx512_binop_rm2<opc, OpcodeStr, itins, OpNode,
3615 multiclass avx512_packs_rmb<bits<8> opc, string OpcodeStr, SDNode OpNode,
3619 OpcodeStr,
3628 multiclass avx512_packs_rm<bits<8> opc, string OpcodeStr,
3632 (ins _Src.RC:$src1, _Src.RC:$src2), OpcodeStr,
3639 (ins _Src.RC:$src1, _Src.MemOp:$src2), OpcodeStr,
3646 multiclass avx512_packs_all_i32_i16<bits<8> opc, string OpcodeStr,
3649 defm NAME#Z : avx512_packs_rm<opc, OpcodeStr, OpNode, v16i32_info,
3651 avx512_packs_rmb<opc, OpcodeStr, OpNode, v16i32_info,
3654 defm NAME#Z256 : avx512_packs_rm<opc, OpcodeStr, OpNode, v8i32x_info,
3656 avx512_packs_rmb<opc, OpcodeStr, OpNode, v8i32x_info,
3658 defm NAME#Z128 : avx512_packs_rm<opc, OpcodeStr, OpNode, v4i32x_info,
3660 avx512_packs_rmb<opc, OpcodeStr, OpNode, v4i32x_info,
3664 multiclass avx512_packs_all_i16_i8<bits<8> opc, string OpcodeStr,
3667 defm NAME#Z : avx512_packs_rm<opc, OpcodeStr, OpNode, v32i16_info,
3670 defm NAME#Z256 : avx512_packs_rm<opc, OpcodeStr, OpNode, v16i16x_info,
3672 defm NAME#Z128 : avx512_packs_rm<opc, OpcodeStr, OpNode, v8i16x_info,
3677 multiclass avx512_vpmadd<bits<8> opc, string OpcodeStr,
3681 defm NAME#Z : avx512_packs_rm<opc, OpcodeStr, OpNode, _Src.info512,
3684 defm NAME#Z256 : avx512_packs_rm<opc, OpcodeStr, OpNode, _Src.info256,
3686 defm NAME#Z128 : avx512_packs_rm<opc, OpcodeStr, OpNode, _Src.info128,
3744 multiclass avx512_fp_scalar<bits<8> opc, string OpcodeStr,X86VectorVTInfo _,
3749 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
3756 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
3766 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
3771 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
3777 multiclass avx512_fp_scalar_round<bits<8> opc, string OpcodeStr,X86VectorVTInfo _,
3781 (ins _.RC:$src1, _.RC:$src2, AVX512RC:$rc), OpcodeStr,
3787 multiclass avx512_fp_scalar_sae<bits<8> opc, string OpcodeStr,X86VectorVTInfo _,
3791 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
3797 multiclass avx512_binop_s_round<bits<8> opc, string OpcodeStr, SDNode OpNode,
3800 defm SSZ : avx512_fp_scalar<opc, OpcodeStr#"ss", f32x_info, OpNode, VecNode,
3802 avx512_fp_scalar_round<opc, OpcodeStr#"ss", f32x_info, VecNode,
3805 defm SDZ : avx512_fp_scalar<opc, OpcodeStr#"sd", f64x_info, OpNode, VecNode,
3807 avx512_fp_scalar_round<opc, OpcodeStr#"sd", f64x_info, VecNode,
3812 multiclass avx512_binop_s_sae<bits<8> opc, string OpcodeStr, SDNode OpNode,
3815 defm SSZ : avx512_fp_scalar<opc, OpcodeStr#"ss", f32x_info, OpNode, VecNode,
3817 avx512_fp_scalar_sae<opc, OpcodeStr#"ss", f32x_info, VecNode,
3820 defm SDZ : avx512_fp_scalar<opc, OpcodeStr#"sd", f64x_info, OpNode, VecNode,
3822 avx512_fp_scalar_sae<opc, OpcodeStr#"sd", f64x_info, VecNode,
3835 multiclass avx512_comutable_binop_s<bits<8> opc, string OpcodeStr,
3840 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
3845 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
3866 multiclass avx512_fp_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
3869 (ins _.RC:$src1, _.RC:$src2), OpcodeStr##_.Suffix,
3873 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr##_.Suffix,
3877 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr##_.Suffix,
3885 multiclass avx512_fp_round_packed<bits<8> opc, string OpcodeStr, SDNode OpNodeRnd,
3888 (ins _.RC:$src1, _.RC:$src2, AVX512RC:$rc), OpcodeStr##_.Suffix,
3895 multiclass avx512_fp_sae_packed<bits<8> opc, string OpcodeStr, SDNode OpNodeRnd,
3898 (ins _.RC:$src1, _.RC:$src2), OpcodeStr##_.Suffix,
3904 multiclass avx512_fp_binop_p<bits<8> opc, string OpcodeStr, SDNode OpNode,
3907 defm PSZ : avx512_fp_packed<opc, OpcodeStr, OpNode, v16f32_info,
3910 defm PDZ : avx512_fp_packed<opc, OpcodeStr, OpNode, v8f64_info,
3917 defm PSZ128 : avx512_fp_packed<opc, OpcodeStr, OpNode, v4f32x_info,
3920 defm PSZ256 : avx512_fp_packed<opc, OpcodeStr, OpNode, v8f32x_info,
3923 defm PDZ128 : avx512_fp_packed<opc, OpcodeStr, OpNode, v2f64x_info,
3926 defm PDZ256 : avx512_fp_packed<opc, OpcodeStr, OpNode, v4f64x_info,
3932 multiclass avx512_fp_binop_p_round<bits<8> opc, string OpcodeStr, SDNode OpNodeRnd> {
3933 defm PSZ : avx512_fp_round_packed<opc, OpcodeStr, OpNodeRnd, v16f32_info>,
3935 defm PDZ : avx512_fp_round_packed<opc, OpcodeStr, OpNodeRnd, v8f64_info>,
3939 multiclass avx512_fp_binop_p_sae<bits<8> opc, string OpcodeStr, SDNode OpNodeRnd> {
3940 defm PSZ : avx512_fp_sae_packed<opc, OpcodeStr, OpNodeRnd, v16f32_info>,
3942 defm PDZ : avx512_fp_sae_packed<opc, OpcodeStr, OpNodeRnd, v8f64_info>,
3967 multiclass avx512_fp_scalef_p<bits<8> opc, string OpcodeStr, SDNode OpNode,
3970 (ins _.RC:$src1, _.RC:$src2), OpcodeStr##_.Suffix,
3974 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr##_.Suffix,
3978 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr##_.Suffix,
3986 multiclass avx512_fp_scalef_scalar<bits<8> opc, string OpcodeStr, SDNode OpNode,
3989 (ins _.RC:$src1, _.RC:$src2), OpcodeStr##_.Suffix,
3993 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr##_.Suffix,
4000 multiclass avx512_fp_scalef_all<bits<8> opc, bits<8> opcScaler, string OpcodeStr, SDNode OpNode, SD…
4001 defm PSZ : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v16f32_info>,
4002 avx512_fp_round_packed<opc, OpcodeStr, OpNode, v16f32_info>,
4004 defm PDZ : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v8f64_info>,
4005 avx512_fp_round_packed<opc, OpcodeStr, OpNode, v8f64_info>,
4007 defm SSZ128 : avx512_fp_scalef_scalar<opcScaler, OpcodeStr, OpNodeScal, f32x_info>,
4008 … avx512_fp_scalar_round<opcScaler, OpcodeStr##"ss", f32x_info, OpNodeScal, SSE_ALU_ITINS_S.s>,
4010 defm SDZ128 : avx512_fp_scalef_scalar<opcScaler, OpcodeStr, OpNodeScal, f64x_info>,
4011 … avx512_fp_scalar_round<opcScaler, OpcodeStr##"sd", f64x_info, OpNodeScal, SSE_ALU_ITINS_S.d>,
4016 defm PSZ128 : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v4f32x_info>,
4018 defm PSZ256 : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v8f32x_info>,
4020 defm PDZ128 : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v2f64x_info>,
4022 defm PDZ256 : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v4f64x_info>,
4032 multiclass avx512_vptest<bits<8> opc, string OpcodeStr, SDNode OpNode,
4036 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
4041 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr,
4049 multiclass avx512_vptest_mb<bits<8> opc, string OpcodeStr, SDNode OpNode,
4052 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
4073 multiclass avx512_vptest_dq_sizes<bits<8> opc, string OpcodeStr, SDNode OpNode,
4076 defm Z : avx512_vptest<opc, OpcodeStr, OpNode, _.info512>,
4077 avx512_vptest_mb<opc, OpcodeStr, OpNode, _.info512>, EVEX_V512;
4080 defm Z256 : avx512_vptest<opc, OpcodeStr, OpNode, _.info256>,
4081 avx512_vptest_mb<opc, OpcodeStr, OpNode, _.info256>, EVEX_V256;
4082 defm Z128 : avx512_vptest<opc, OpcodeStr, OpNode, _.info128>,
4083 avx512_vptest_mb<opc, OpcodeStr, OpNode, _.info128>, EVEX_V128;
4091 multiclass avx512_vptest_dq<bits<8> opc, string OpcodeStr, SDNode OpNode> {
4092 defm D : avx512_vptest_dq_sizes<opc, OpcodeStr#"d", OpNode,
4094 defm Q : avx512_vptest_dq_sizes<opc, OpcodeStr#"q", OpNode,
4098 multiclass avx512_vptest_wb<bits<8> opc, string OpcodeStr,
4101 defm WZ: avx512_vptest<opc, OpcodeStr#"w", OpNode, v32i16_info>,
4103 defm BZ: avx512_vptest<opc, OpcodeStr#"b", OpNode, v64i8_info>,
4108 defm WZ256: avx512_vptest<opc, OpcodeStr#"w", OpNode, v16i16x_info>,
4110 defm WZ128: avx512_vptest<opc, OpcodeStr#"w", OpNode, v8i16x_info>,
4112 defm BZ256: avx512_vptest<opc, OpcodeStr#"b", OpNode, v32i8x_info>,
4114 defm BZ128: avx512_vptest<opc, OpcodeStr#"b", OpNode, v16i8x_info>,
4127 multiclass avx512_vptest_all_forms<bits<8> opc_wb, bits<8> opc_dq, string OpcodeStr,
4129 avx512_vptest_wb <opc_wb, OpcodeStr, OpNode>,
4130 avx512_vptest_dq<opc_dq, OpcodeStr, OpNode>;
4140 string OpcodeStr, SDNode OpNode, X86VectorVTInfo _> {
4142 (ins _.RC:$src1, u8imm:$src2), OpcodeStr,
4147 (ins _.MemOp:$src1, u8imm:$src2), OpcodeStr,
4155 string OpcodeStr, SDNode OpNode, X86VectorVTInfo _> {
4157 (ins _.ScalarMemOp:$src1, u8imm:$src2), OpcodeStr,
4163 multiclass avx512_shift_rrm<bits<8> opc, string OpcodeStr, SDNode OpNode,
4167 (ins _.RC:$src1, VR128X:$src2), OpcodeStr,
4172 (ins _.RC:$src1, i128mem:$src2), OpcodeStr,
4179 multiclass avx512_shift_sizes<bits<8> opc, string OpcodeStr, SDNode OpNode,
4183 defm Z : avx512_shift_rrm<opc, OpcodeStr, OpNode, SrcVT, bc_frag,
4187 defm Z256 : avx512_shift_rrm<opc, OpcodeStr, OpNode, SrcVT, bc_frag,
4190 defm Z128 : avx512_shift_rrm<opc, OpcodeStr, OpNode, SrcVT, bc_frag,
4197 string OpcodeStr, SDNode OpNode> {
4198 defm D : avx512_shift_sizes<opcd, OpcodeStr#"d", OpNode, v4i32, bc_v4i32,
4200 defm Q : avx512_shift_sizes<opcq, OpcodeStr#"q", OpNode, v2i64, bc_v2i64,
4202 defm W : avx512_shift_sizes<opcw, OpcodeStr#"w", OpNode, v8i16, bc_v8i16,
4207 string OpcodeStr, SDNode OpNode,
4210 defm Z: avx512_shift_rmi<opc, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4212 avx512_shift_rmbi<opc, ImmFormM, OpcodeStr, OpNode,
4215 defm Z256: avx512_shift_rmi<opc, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4217 avx512_shift_rmbi<opc, ImmFormM, OpcodeStr, OpNode,
4219 defm Z128: avx512_shift_rmi<opc, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4221 avx512_shift_rmbi<opc, ImmFormM, OpcodeStr, OpNode,
4228 string OpcodeStr, SDNode OpNode> {
4230 defm WZ: avx512_shift_rmi<opcw, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4233 defm WZ256: avx512_shift_rmi<opcw, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4235 defm WZ128: avx512_shift_rmi<opcw, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4242 string OpcodeStr, SDNode OpNode> {
4243 defm D: avx512_shift_rmi_sizes<opcd, ImmFormR, ImmFormM, OpcodeStr#"d", OpNode,
4245 defm Q: avx512_shift_rmi_sizes<opcq, ImmFormR, ImmFormM, OpcodeStr#"q", OpNode,
4268 multiclass avx512_var_shift<bits<8> opc, string OpcodeStr, SDNode OpNode,
4271 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
4276 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr,
4284 multiclass avx512_var_shift_mb<bits<8> opc, string OpcodeStr, SDNode OpNode,
4287 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
4295 multiclass avx512_var_shift_sizes<bits<8> opc, string OpcodeStr, SDNode OpNode,
4298 defm Z : avx512_var_shift<opc, OpcodeStr, OpNode, _.info512>,
4299 avx512_var_shift_mb<opc, OpcodeStr, OpNode, _.info512>, EVEX_V512;
4302 defm Z256 : avx512_var_shift<opc, OpcodeStr, OpNode, _.info256>,
4303 avx512_var_shift_mb<opc, OpcodeStr, OpNode, _.info256>, EVEX_V256;
4304 defm Z128 : avx512_var_shift<opc, OpcodeStr, OpNode, _.info128>,
4305 avx512_var_shift_mb<opc, OpcodeStr, OpNode, _.info128>, EVEX_V128;
4309 multiclass avx512_var_shift_types<bits<8> opc, string OpcodeStr,
4311 defm D : avx512_var_shift_sizes<opc, OpcodeStr#"d", OpNode,
4313 defm Q : avx512_var_shift_sizes<opc, OpcodeStr#"q", OpNode,
4338 multiclass avx512_var_shift_w<bits<8> opc, string OpcodeStr,
4341 defm WZ: avx512_var_shift<opc, OpcodeStr, OpNode, v32i16_info>,
4345 defm WZ256: avx512_var_shift<opc, OpcodeStr, OpNode, v16i16x_info>,
4347 defm WZ128: avx512_var_shift<opc, OpcodeStr, OpNode, v8i16x_info>,
4372 multiclass avx512_vperm_dq_sizes<bits<8> opc, string OpcodeStr, SDNode OpNode,
4375 defm Z : avx512_var_shift<opc, OpcodeStr, OpNode, _.info512>,
4376 avx512_var_shift_mb<opc, OpcodeStr, OpNode, _.info512>, EVEX_V512;
4379 defm Z256 : avx512_var_shift<opc, OpcodeStr, OpNode, _.info256>,
4380 avx512_var_shift_mb<opc, OpcodeStr, OpNode, _.info256>, EVEX_V256;
4384 string OpcodeStr, SDNode OpNode,
4387 defm Z: avx512_shift_rmi<opc, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4389 avx512_shift_rmbi<opc, ImmFormM, OpcodeStr, OpNode,
4392 defm Z256: avx512_shift_rmi<opc, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4394 avx512_shift_rmbi<opc, ImmFormM, OpcodeStr, OpNode,
4398 multiclass avx512_vperm_bw<bits<8> opc, string OpcodeStr,
4402 defm Z: avx512_var_shift<opc, OpcodeStr, OpNode, _.info512>,
4405 defm Z256: avx512_var_shift<opc, OpcodeStr, OpNode, _.info256>,
4407 defm Z128: avx512_var_shift<opc, OpcodeStr, OpNode, _.info128>,
4436 multiclass avx512_permil_vec<bits<8> OpcVar, string OpcodeStr, SDNode OpNode,
4439 (ins _.RC:$src1, Ctrl.RC:$src2), OpcodeStr,
4445 (ins _.RC:$src1, Ctrl.MemOp:$src2), OpcodeStr,
4452 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
4462 multiclass avx512_permil_vec_common<string OpcodeStr, bits<8> OpcVar,
4465 defm Z : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, _.info512,
4469 defm Z128 : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, _.info128,
4471 defm Z256 : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, _.info256,
4476 multiclass avx512_permil<string OpcodeStr, bits<8> OpcImm, bits<8> OpcVar,
4479 defm NAME: avx512_permil_vec_common<OpcodeStr, OpcVar, _, Ctrl>;
4480 defm NAME: avx512_shift_rmi_sizes<OpcImm, MRMSrcReg, MRMSrcMem, OpcodeStr,
4501 multiclass avx512_pshufb_sizes<bits<8> opc, string OpcodeStr, SDNode OpNode> {
4503 defm Z: avx512_var_shift<opc, OpcodeStr, OpNode, v64i8_info>, EVEX_V512;
4506 defm Z256: avx512_var_shift<opc, OpcodeStr, OpNode, v32i8x_info>, EVEX_V256;
4507 defm Z128: avx512_var_shift<opc, OpcodeStr, OpNode, v16i8x_info>, EVEX_V128;
4543 multiclass avx512_mov_hilo_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
4547 !strconcat(OpcodeStr,
4651 multiclass avx512_fma3p_213_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
4655 OpcodeStr, "$src3, $src2", "$src2, $src3",
4661 OpcodeStr, "$src3, $src2", "$src2, $src3",
4667 OpcodeStr, !strconcat("${src3}", _.BroadcastStr,", $src2"),
4674 multiclass avx512_fma3_213_round<bits<8> opc, string OpcodeStr, SDNode OpNode,
4678 OpcodeStr, "$rc, $src3, $src2", "$src2, $src3, $rc",
4684 multiclass avx512_fma3p_213_common<bits<8> opc, string OpcodeStr, SDNode OpNode,
4687 defm Z : avx512_fma3p_213_rm<opc, OpcodeStr, OpNode, _.info512>,
4688 avx512_fma3_213_round<opc, OpcodeStr, OpNodeRnd, _.info512>,
4692 defm Z256 : avx512_fma3p_213_rm<opc, OpcodeStr, OpNode, _.info256>,
4694 defm Z128 : avx512_fma3p_213_rm<opc, OpcodeStr, OpNode, _.info128>,
4699 multiclass avx512_fma3p_213_f<bits<8> opc, string OpcodeStr, SDNode OpNode,
4701 defm PS : avx512_fma3p_213_common<opc, OpcodeStr#"ps", OpNode, OpNodeRnd,
4703 defm PD : avx512_fma3p_213_common<opc, OpcodeStr#"pd", OpNode, OpNodeRnd,
4716 multiclass avx512_fma3p_231_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
4720 OpcodeStr, "$src3, $src2", "$src2, $src3",
4726 OpcodeStr, "$src3, $src2", "$src2, $src3",
4732 OpcodeStr, "${src3}"##_.BroadcastStr##", $src2",
4739 multiclass avx512_fma3_231_round<bits<8> opc, string OpcodeStr, SDNode OpNode,
4743 OpcodeStr, "$rc, $src3, $src2", "$src2, $src3, $rc",
4749 multiclass avx512_fma3p_231_common<bits<8> opc, string OpcodeStr, SDNode OpNode,
4752 defm Z : avx512_fma3p_231_rm<opc, OpcodeStr, OpNode, _.info512>,
4753 avx512_fma3_231_round<opc, OpcodeStr, OpNodeRnd, _.info512>,
4757 defm Z256 : avx512_fma3p_231_rm<opc, OpcodeStr, OpNode, _.info256>,
4759 defm Z128 : avx512_fma3p_231_rm<opc, OpcodeStr, OpNode, _.info128>,
4764 multiclass avx512_fma3p_231_f<bits<8> opc, string OpcodeStr, SDNode OpNode,
4766 defm PS : avx512_fma3p_231_common<opc, OpcodeStr#"ps", OpNode, OpNodeRnd,
4768 defm PD : avx512_fma3p_231_common<opc, OpcodeStr#"pd", OpNode, OpNodeRnd,
4780 multiclass avx512_fma3p_132_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
4784 OpcodeStr, "$src2, $src3", "$src3, $src2",
4790 OpcodeStr, "$src2, $src3", "$src3, $src2",
4796 OpcodeStr, "${src2}"##_.BroadcastStr##", $src3",
4803 multiclass avx512_fma3_132_round<bits<8> opc, string OpcodeStr, SDNode OpNode,
4807 OpcodeStr, "$rc, $src2, $src3", "$src3, $src2, $rc",
4813 multiclass avx512_fma3p_132_common<bits<8> opc, string OpcodeStr, SDNode OpNode,
4816 defm Z : avx512_fma3p_132_rm<opc, OpcodeStr, OpNode, _.info512>,
4817 avx512_fma3_132_round<opc, OpcodeStr, OpNodeRnd, _.info512>,
4821 defm Z256 : avx512_fma3p_132_rm<opc, OpcodeStr, OpNode, _.info256>,
4823 defm Z128 : avx512_fma3p_132_rm<opc, OpcodeStr, OpNode, _.info128>,
4828 multiclass avx512_fma3p_132_f<bits<8> opc, string OpcodeStr, SDNode OpNode,
4830 defm PS : avx512_fma3p_132_common<opc, OpcodeStr#"ps", OpNode, OpNodeRnd,
4832 defm PD : avx512_fma3p_132_common<opc, OpcodeStr#"pd", OpNode, OpNodeRnd,
4845 multiclass avx512_fma3s_common<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
4849 (ins _.RC:$src2, _.RC:$src3), OpcodeStr,
4853 (ins _.RC:$src2, _.ScalarMemOp:$src3), OpcodeStr,
4858 OpcodeStr, "$rc, $src3, $src2", "$src2, $src3, $rc", RHS_VEC_rb>,
4864 !strconcat(OpcodeStr,
4869 !strconcat(OpcodeStr,
4877 string OpcodeStr, SDNode OpNode, SDNode OpNodeRnd, X86VectorVTInfo _ ,
4880 defm NAME#213#SUFF: avx512_fma3s_common<opc213, OpcodeStr#"213"#_.Suffix , _ ,
4891 defm NAME#231#SUFF: avx512_fma3s_common<opc231, OpcodeStr#"231"#_.Suffix , _ ,
4903 defm NAME#132#SUFF: avx512_fma3s_common<opc132, OpcodeStr#"132"#_.Suffix , _ ,
4917 string OpcodeStr, SDNode OpNode, SDNode OpNodeRnd>{
4919 defm NAME : avx512_fma3s_all<opc213, opc231, opc132, OpcodeStr, OpNode,
4922 defm NAME : avx512_fma3s_all<opc213, opc231, opc132, OpcodeStr, OpNode,
4937 multiclass avx512_pmadd52_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
4941 OpcodeStr, "$src3, $src2", "$src2, $src3",
4947 OpcodeStr, "$src3, $src2", "$src2, $src3",
4953 OpcodeStr, !strconcat("${src3}", _.BroadcastStr,", $src2"),
4961 multiclass avx512_pmadd52_common<bits<8> opc, string OpcodeStr, SDNode OpNode,
4964 defm Z : avx512_pmadd52_rm<opc, OpcodeStr, OpNode, _.info512>,
4968 defm Z256 : avx512_pmadd52_rm<opc, OpcodeStr, OpNode, _.info256>,
4970 defm Z128 : avx512_pmadd52_rm<opc, OpcodeStr, OpNode, _.info128>,
5258 multiclass avx512_cvt_fp_scalar<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5261 (ins _.RC:$src1, _Src.RC:$src2), OpcodeStr,
5267 (ins _Src.RC:$src1, _Src.ScalarMemOp:$src2), OpcodeStr,
5276 multiclass avx512_cvt_fp_sae_scalar<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5279 (ins _.RC:$src1, _Src.RC:$src2), OpcodeStr,
5288 multiclass avx512_cvt_fp_rc_scalar<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5291 (ins _.RC:$src1, _Src.RC:$src2, AVX512RC:$rc), OpcodeStr,
5298 multiclass avx512_cvt_fp_scalar_sd2ss<bits<8> opc, string OpcodeStr, SDNode OpNode,
5302 defm Z : avx512_cvt_fp_scalar<opc, OpcodeStr, _dst, _src, OpNode>,
5303 avx512_cvt_fp_rc_scalar<opc, OpcodeStr, _dst, _src,
5309 multiclass avx512_cvt_fp_scalar_ss2sd<bits<8> opc, string OpcodeStr, SDNode OpNode,
5313 defm Z : avx512_cvt_fp_scalar<opc, OpcodeStr, _dst, _src, OpNode>,
5314 avx512_cvt_fp_sae_scalar<opc, OpcodeStr, _dst, _src, OpNodeRnd>,
5349 multiclass avx512_vcvt_fp<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5355 (ins _Src.RC:$src), OpcodeStr, "$src", "$src",
5359 (ins _Src.MemOp:$src), OpcodeStr#Alias, "$src", "$src",
5364 (ins _Src.ScalarMemOp:$src), OpcodeStr,
5371 multiclass avx512_vcvt_fp_sae<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5374 (ins _Src.RC:$src), OpcodeStr,
5382 multiclass avx512_vcvt_fp_rc<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5385 (ins _Src.RC:$src, AVX512RC:$rc), OpcodeStr,
5392 multiclass avx512_cvtps2pd<bits<8> opc, string OpcodeStr> {
5394 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8f64_info, v8f32x_info, fextend>,
5395 avx512_vcvt_fp_sae<opc, OpcodeStr, v8f64_info, v8f32x_info,
5399 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2f64x_info, v4f32x_info,
5401 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f64x_info, v4f32x_info, fextend>,
5407 multiclass avx512_cvtpd2ps<bits<8> opc, string OpcodeStr> {
5409 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8f32x_info, v8f64_info, fround>,
5410 avx512_vcvt_fp_rc<opc, OpcodeStr, v8f32x_info, v8f64_info,
5414 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v2f64x_info,
5416 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v4f64x_info, fround,
5435 multiclass avx512_cvtdq2pd<bits<8> opc, string OpcodeStr, SDNode OpNode,
5439 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8f64_info, v8i32x_info, OpNode>,
5443 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2f64x_info, v4i32x_info,
5445 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f64x_info, v4i32x_info, OpNode>,
5451 multiclass avx512_cvtdq2ps<bits<8> opc, string OpcodeStr, SDNode OpNode,
5454 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v16f32_info, v16i32_info, OpNode>,
5455 avx512_vcvt_fp_rc<opc, OpcodeStr, v16f32_info, v16i32_info,
5459 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v4i32x_info, OpNode>,
5461 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v8f32x_info, v8i32x_info, OpNode>,
5467 multiclass avx512_cvttps2dq<bits<8> opc, string OpcodeStr,
5470 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v16i32_info, v16f32_info, OpNode>,
5471 avx512_vcvt_fp_sae<opc, OpcodeStr, v16i32_info, v16f32_info,
5475 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v4f32x_info, OpNode>,
5477 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v8i32x_info, v8f32x_info, OpNode>,
5483 multiclass avx512_cvtps2dq<bits<8> opc, string OpcodeStr,
5486 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v16i32_info, v16f32_info, OpNode>,
5487 avx512_vcvt_fp_rc<opc, OpcodeStr, v16i32_info, v16f32_info,
5491 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v4f32x_info, OpNode>,
5493 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v8i32x_info, v8f32x_info, OpNode>,
5499 multiclass avx512_cvttpd2dq<bits<8> opc, string OpcodeStr,
5502 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i32x_info, v8f64_info, OpNode>,
5503 avx512_vcvt_fp_sae<opc, OpcodeStr, v8i32x_info, v8f64_info,
5511 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v2f64x_info, OpNode,
5513 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v4f64x_info, OpNode,
5519 multiclass avx512_cvtpd2dq<bits<8> opc, string OpcodeStr,
5522 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i32x_info, v8f64_info, OpNode>,
5523 avx512_vcvt_fp_rc<opc, OpcodeStr, v8i32x_info, v8f64_info,
5531 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v2f64x_info, OpNode,
5533 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v4f64x_info, OpNode,
5539 multiclass avx512_cvtpd2qq<bits<8> opc, string OpcodeStr,
5542 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i64_info, v8f64_info, OpNode>,
5543 avx512_vcvt_fp_rc<opc, OpcodeStr, v8i64_info, v8f64_info,
5547 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2i64x_info, v2f64x_info, OpNode>,
5549 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i64x_info, v4f64x_info, OpNode>,
5555 multiclass avx512_cvttpd2qq<bits<8> opc, string OpcodeStr,
5558 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i64_info, v8f64_info, OpNode>,
5559 avx512_vcvt_fp_sae<opc, OpcodeStr, v8i64_info, v8f64_info,
5563 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2i64x_info, v2f64x_info, OpNode>,
5565 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i64x_info, v4f64x_info, OpNode>,
5571 multiclass avx512_cvtqq2pd<bits<8> opc, string OpcodeStr,
5574 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8f64_info, v8i64_info, OpNode>,
5575 avx512_vcvt_fp_rc<opc, OpcodeStr, v8f64_info, v8i64_info,
5579 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2f64x_info, v2i64x_info, OpNode>,
5581 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f64x_info, v4i64x_info, OpNode>,
5587 multiclass avx512_cvtps2qq<bits<8> opc, string OpcodeStr,
5590 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i64_info, v8f32x_info, OpNode>,
5591 avx512_vcvt_fp_rc<opc, OpcodeStr, v8i64_info, v8f32x_info,
5597 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2i64x_info, v4f32x_info, OpNode,
5599 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i64x_info, v4f32x_info, OpNode>,
5605 multiclass avx512_cvttps2qq<bits<8> opc, string OpcodeStr,
5608 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i64_info, v8f32x_info, OpNode>,
5609 avx512_vcvt_fp_sae<opc, OpcodeStr, v8i64_info, v8f32x_info,
5615 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2i64x_info, v4f32x_info, OpNode,
5617 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i64x_info, v4f32x_info, OpNode>,
5623 multiclass avx512_cvtqq2ps<bits<8> opc, string OpcodeStr,
5626 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8f32x_info, v8i64_info, OpNode>,
5627 avx512_vcvt_fp_rc<opc, OpcodeStr, v8f32x_info, v8i64_info,
5635 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v2i64x_info, OpNode,
5637 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v4i64x_info, OpNode,
5838 string OpcodeStr> {
5840 !strconcat(OpcodeStr, "\t{{sae}, $src2, $src1|$src1, $src2, {sae}}"),
5891 multiclass avx512_fp14_s<bits<8> opc, string OpcodeStr, SDNode OpNode,
5895 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
5899 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
5916 multiclass avx512_fp14_p<bits<8> opc, string OpcodeStr, SDNode OpNode,
5919 (ins _.RC:$src), OpcodeStr, "$src", "$src",
5922 (ins _.MemOp:$src), OpcodeStr, "$src", "$src",
5926 (ins _.ScalarMemOp:$src), OpcodeStr,
5933 multiclass avx512_fp14_p_vl_all<bits<8> opc, string OpcodeStr, SDNode OpNode> {
5934 defm PSZ : avx512_fp14_p<opc, !strconcat(OpcodeStr, "ps"), OpNode, v16f32_info>,
5936 defm PDZ : avx512_fp14_p<opc, !strconcat(OpcodeStr, "pd"), OpNode, v8f64_info>,
5941 defm PSZ128 : avx512_fp14_p<opc, !strconcat(OpcodeStr, "ps"),
5944 defm PSZ256 : avx512_fp14_p<opc, !strconcat(OpcodeStr, "ps"),
5947 defm PDZ128 : avx512_fp14_p<opc, !strconcat(OpcodeStr, "pd"),
5950 defm PDZ256 : avx512_fp14_p<opc, !strconcat(OpcodeStr, "pd"),
5960 multiclass avx512_fp28_s<bits<8> opc, string OpcodeStr,X86VectorVTInfo _,
5964 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
5970 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
5976 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
5983 multiclass avx512_eri_s<bits<8> opc, string OpcodeStr, SDNode OpNode> {
5984 defm SS : avx512_fp28_s<opc, OpcodeStr#"ss", f32x_info, OpNode>,
5986 defm SD : avx512_fp28_s<opc, OpcodeStr#"sd", f64x_info, OpNode>,
5998 multiclass avx512_fp28_p<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
6002 (ins _.RC:$src), OpcodeStr, "$src", "$src",
6006 (ins _.MemOp:$src), OpcodeStr, "$src", "$src",
6012 (ins _.ScalarMemOp:$src), OpcodeStr,
6018 multiclass avx512_fp28_p_round<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
6021 (ins _.RC:$src), OpcodeStr,
6026 multiclass avx512_eri<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6027 defm PS : avx512_fp28_p<opc, OpcodeStr#"ps", v16f32_info, OpNode>,
6028 avx512_fp28_p_round<opc, OpcodeStr#"ps", v16f32_info, OpNode>,
6030 defm PD : avx512_fp28_p<opc, OpcodeStr#"pd", v8f64_info, OpNode>,
6031 avx512_fp28_p_round<opc, OpcodeStr#"pd", v8f64_info, OpNode>,
6035 multiclass avx512_fp_unaryop_packed<bits<8> opc, string OpcodeStr,
6039 defm PSZ128 : avx512_fp28_p<opc, OpcodeStr#"ps", v4f32x_info, OpNode>,
6041 defm PSZ256 : avx512_fp28_p<opc, OpcodeStr#"ps", v8f32x_info, OpNode>,
6043 defm PDZ128 : avx512_fp28_p<opc, OpcodeStr#"pd", v2f64x_info, OpNode>,
6045 defm PDZ256 : avx512_fp28_p<opc, OpcodeStr#"pd", v4f64x_info, OpNode>,
6058 multiclass avx512_sqrt_packed_round<bits<8> opc, string OpcodeStr,
6061 (ins _.RC:$src, AVX512RC:$rc), OpcodeStr, "$rc, $src", "$src, $rc",
6066 multiclass avx512_sqrt_packed<bits<8> opc, string OpcodeStr,
6069 (ins _.RC:$src), OpcodeStr, "$src", "$src",
6072 (ins _.MemOp:$src), OpcodeStr, "$src", "$src",
6077 (ins _.ScalarMemOp:$src), OpcodeStr,
6084 multiclass avx512_sqrt_packed_all<bits<8> opc, string OpcodeStr,
6086 defm PSZ : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "ps"), OpNode,
6089 defm PDZ : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "pd"), OpNode,
6094 defm PSZ128 : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "ps"),
6097 defm PSZ256 : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "ps"),
6100 defm PDZ128 : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "pd"),
6103 defm PDZ256 : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "pd"),
6109 multiclass avx512_sqrt_packed_all_round<bits<8> opc, string OpcodeStr,
6111 defm PSZ : avx512_sqrt_packed_round<opc, !strconcat(OpcodeStr, "ps"), OpNodeRnd,
6113 defm PDZ : avx512_sqrt_packed_round<opc, !strconcat(OpcodeStr, "pd"), OpNodeRnd,
6117 multiclass avx512_sqrt_scalar<bits<8> opc, string OpcodeStr,X86VectorVTInfo _,
6121 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
6127 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
6135 (ins _.RC:$src1, _.RC:$src2, AVX512RC:$rc), OpcodeStr,
6145 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}", []>;
6150 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}", []>;
6162 multiclass avx512_sqrt_scalar_all<bits<8> opc, string OpcodeStr> {
6163 defm SSZ : avx512_sqrt_scalar<opc, OpcodeStr#"ss", f32x_info, "SS", fsqrt,
6165 defm SDZ : avx512_sqrt_scalar<opc, OpcodeStr#"sd", f64x_info, "SD", fsqrt,
6188 avx512_rndscale_scalar<bits<8> opc, string OpcodeStr, X86VectorVTInfo _> {
6192 (ins _.RC:$src1, _.RC:$src2, i32u8imm:$src3), OpcodeStr,
6198 (ins _.RC:$src1, _.RC:$src2, i32u8imm:$src3), OpcodeStr,
6205 OpcodeStr,
6256 multiclass avx512_trunc_common<bits<8> opc, string OpcodeStr, SDNode OpNode,
6261 (ins SrcInfo.RC:$src1), OpcodeStr ,"$src1", "$src1",
6288 OpcodeStr # "\t{$src, $dst|$dst, $src}",
6293 OpcodeStr # "\t{$src, $dst {${mask}}|$dst {${mask}}, $src}",
6329 multiclass avx512_trunc<bits<8> opc, string OpcodeStr, SDNode OpNode,
6337 defm Z128: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info128,
6342 defm Z256: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info256,
6348 defm Z: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info512,
6354 multiclass avx512_trunc_sat<bits<8> opc, string OpcodeStr, SDNode OpNode,
6361 defm Z128: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info128,
6366 defm Z256: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info256,
6372 defm Z: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info512,
6378 multiclass avx512_trunc_qb<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6379 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i64_info,
6389 multiclass avx512_trunc_qw<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6390 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i64_info,
6400 multiclass avx512_trunc_qd<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6401 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i64_info,
6411 multiclass avx512_trunc_db<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6412 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i32_info,
6422 multiclass avx512_trunc_dw<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6423 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i32_info,
6433 multiclass avx512_trunc_wb<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6434 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i16_info,
6485 multiclass avx512_extend_common<bits<8> opc, string OpcodeStr,
6489 (ins SrcInfo.RC:$src), OpcodeStr ,"$src", "$src",
6494 (ins x86memop:$src), OpcodeStr ,"$src", "$src",
6499 multiclass avx512_extend_BW<bits<8> opc, string OpcodeStr,
6503 defm Z128: avx512_extend_common<opc, OpcodeStr, v8i16x_info,
6507 defm Z256: avx512_extend_common<opc, OpcodeStr, v16i16x_info,
6512 defm Z : avx512_extend_common<opc, OpcodeStr, v32i16_info,
6518 multiclass avx512_extend_BD<bits<8> opc, string OpcodeStr,
6522 defm Z128: avx512_extend_common<opc, OpcodeStr, v4i32x_info,
6526 defm Z256: avx512_extend_common<opc, OpcodeStr, v8i32x_info,
6531 defm Z : avx512_extend_common<opc, OpcodeStr, v16i32_info,
6537 multiclass avx512_extend_BQ<bits<8> opc, string OpcodeStr,
6541 defm Z128: avx512_extend_common<opc, OpcodeStr, v2i64x_info,
6545 defm Z256: avx512_extend_common<opc, OpcodeStr, v4i64x_info,
6550 defm Z : avx512_extend_common<opc, OpcodeStr, v8i64_info,
6556 multiclass avx512_extend_WD<bits<8> opc, string OpcodeStr,
6560 defm Z128: avx512_extend_common<opc, OpcodeStr, v4i32x_info,
6564 defm Z256: avx512_extend_common<opc, OpcodeStr, v8i32x_info,
6569 defm Z : avx512_extend_common<opc, OpcodeStr, v16i32_info,
6575 multiclass avx512_extend_WQ<bits<8> opc, string OpcodeStr,
6579 defm Z128: avx512_extend_common<opc, OpcodeStr, v2i64x_info,
6583 defm Z256: avx512_extend_common<opc, OpcodeStr, v4i64x_info,
6588 defm Z : avx512_extend_common<opc, OpcodeStr, v8i64_info,
6594 multiclass avx512_extend_DQ<bits<8> opc, string OpcodeStr,
6599 defm Z128: avx512_extend_common<opc, OpcodeStr, v2i64x_info,
6603 defm Z256: avx512_extend_common<opc, OpcodeStr, v4i64x_info,
6608 defm Z : avx512_extend_common<opc, OpcodeStr, v8i64_info,
6672 multiclass avx512_gather<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
6678 !strconcat(OpcodeStr#_.Suffix,
6687 AVX512VLVectorVTInfo _, string OpcodeStr, string SUFF> {
6688 defm NAME##D##SUFF##Z: avx512_gather<dopc, OpcodeStr##"d", _.info512,
6690 defm NAME##Q##SUFF##Z: avx512_gather<qopc, OpcodeStr##"q", _.info512,
6693 defm NAME##D##SUFF##Z256: avx512_gather<dopc, OpcodeStr##"d", _.info256,
6695 defm NAME##Q##SUFF##Z256: avx512_gather<qopc, OpcodeStr##"q", _.info256,
6697 defm NAME##D##SUFF##Z128: avx512_gather<dopc, OpcodeStr##"d", _.info128,
6699 defm NAME##Q##SUFF##Z128: avx512_gather<qopc, OpcodeStr##"q", _.info128,
6705 AVX512VLVectorVTInfo _, string OpcodeStr, string SUFF> {
6706 defm NAME##D##SUFF##Z: avx512_gather<dopc, OpcodeStr##"d", _.info512, vz512mem,
6708 defm NAME##Q##SUFF##Z: avx512_gather<qopc, OpcodeStr##"q", _.info256, vz512mem,
6711 defm NAME##D##SUFF##Z256: avx512_gather<dopc, OpcodeStr##"d", _.info256,
6713 defm NAME##Q##SUFF##Z256: avx512_gather<qopc, OpcodeStr##"q", _.info128,
6715 defm NAME##D##SUFF##Z128: avx512_gather<dopc, OpcodeStr##"d", _.info128,
6717 defm NAME##Q##SUFF##Z128: avx512_gather<qopc, OpcodeStr##"q", _.info128,
6729 multiclass avx512_scatter<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
6736 !strconcat(OpcodeStr#_.Suffix,
6744 AVX512VLVectorVTInfo _, string OpcodeStr, string SUFF> {
6745 defm NAME##D##SUFF##Z: avx512_scatter<dopc, OpcodeStr##"d", _.info512,
6747 defm NAME##Q##SUFF##Z: avx512_scatter<qopc, OpcodeStr##"q", _.info512,
6750 defm NAME##D##SUFF##Z256: avx512_scatter<dopc, OpcodeStr##"d", _.info256,
6752 defm NAME##Q##SUFF##Z256: avx512_scatter<qopc, OpcodeStr##"q", _.info256,
6754 defm NAME##D##SUFF##Z128: avx512_scatter<dopc, OpcodeStr##"d", _.info128,
6756 defm NAME##Q##SUFF##Z128: avx512_scatter<qopc, OpcodeStr##"q", _.info128,
6762 AVX512VLVectorVTInfo _, string OpcodeStr, string SUFF> {
6763 defm NAME##D##SUFF##Z: avx512_scatter<dopc, OpcodeStr##"d", _.info512, vz512mem,
6765 defm NAME##Q##SUFF##Z: avx512_scatter<qopc, OpcodeStr##"q", _.info256, vz512mem,
6768 defm NAME##D##SUFF##Z256: avx512_scatter<dopc, OpcodeStr##"d", _.info256,
6770 defm NAME##Q##SUFF##Z256: avx512_scatter<qopc, OpcodeStr##"q", _.info128,
6772 defm NAME##D##SUFF##Z128: avx512_scatter<dopc, OpcodeStr##"d", _.info128,
6774 defm NAME##Q##SUFF##Z128: avx512_scatter<qopc, OpcodeStr##"q", _.info128,
6786 multiclass avx512_gather_scatter_prefetch<bits<8> opc, Format F, string OpcodeStr,
6790 !strconcat(OpcodeStr, "\t{$src {${mask}}|{${mask}}, $src}"),
6846 multiclass cvt_by_vec_width<bits<8> opc, X86VectorVTInfo Vec, string OpcodeStr > {
6848 !strconcat(OpcodeStr##Vec.Suffix, "\t{$src, $dst|$dst, $src}"),
6853 string OpcodeStr, Predicate prd> {
6855 defm Z : cvt_by_vec_width<opc, VTInfo.info512, OpcodeStr>, EVEX_V512;
6858 defm Z256 : cvt_by_vec_width<opc, VTInfo.info256, OpcodeStr>, EVEX_V256;
6859 defm Z128 : cvt_by_vec_width<opc, VTInfo.info128, OpcodeStr>, EVEX_V128;
6863 multiclass avx512_convert_mask_to_vector<string OpcodeStr> {
6864 defm NAME##B : cvt_mask_by_elt_width<0x28, avx512vl_i8_info, OpcodeStr,
6866 defm NAME##W : cvt_mask_by_elt_width<0x28, avx512vl_i16_info, OpcodeStr,
6868 defm NAME##D : cvt_mask_by_elt_width<0x38, avx512vl_i32_info, OpcodeStr,
6870 defm NAME##Q : cvt_mask_by_elt_width<0x38, avx512vl_i64_info, OpcodeStr,
6876 multiclass convert_vector_to_mask_common<bits<8> opc, X86VectorVTInfo _, string OpcodeStr > {
6878 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
6894 multiclass avx512_convert_vector_to_mask<bits<8> opc, string OpcodeStr,
6897 defm Z : convert_vector_to_mask_common <opc, VTInfo.info512, OpcodeStr>,
6901 defm Z256 : convert_vector_to_mask_common<opc, VTInfo.info256, OpcodeStr>,
6903 defm Z128 : convert_vector_to_mask_common<opc, VTInfo.info128, OpcodeStr>,
6926 string OpcodeStr> {
6928 (ins _.RC:$src1), OpcodeStr, "$src1", "$src1",
6934 OpcodeStr # "\t{$src, $dst|$dst, $src}",
6939 OpcodeStr # "\t{$src, $dst {${mask}}|$dst {${mask}}, $src}",
6946 multiclass compress_by_elt_width<bits<8> opc, string OpcodeStr,
6948 defm Z : compress_by_vec_width<opc, VTInfo.info512, OpcodeStr>, EVEX_V512;
6951 defm Z256 : compress_by_vec_width<opc, VTInfo.info256, OpcodeStr>, EVEX_V256;
6952 defm Z128 : compress_by_vec_width<opc, VTInfo.info128, OpcodeStr>, EVEX_V128;
6967 string OpcodeStr> {
6969 (ins _.RC:$src1), OpcodeStr, "$src1", "$src1",
6973 (ins _.MemOp:$src1), OpcodeStr, "$src1", "$src1",
6979 multiclass expand_by_elt_width<bits<8> opc, string OpcodeStr,
6981 defm Z : expand_by_vec_width<opc, VTInfo.info512, OpcodeStr>, EVEX_V512;
6984 defm Z256 : expand_by_vec_width<opc, VTInfo.info256, OpcodeStr>, EVEX_V256;
6985 defm Z128 : expand_by_vec_width<opc, VTInfo.info128, OpcodeStr>, EVEX_V128;
7002 multiclass avx512_unary_fp_packed_imm<bits<8> opc, string OpcodeStr, SDNode OpNode,
7006 OpcodeStr##_.Suffix, "$src2, $src1", "$src1, $src2",
7012 OpcodeStr##_.Suffix, "$src2, $src1", "$src1, $src2",
7018 OpcodeStr##_.Suffix, "$src2, ${src1}"##_.BroadcastStr,
7026 multiclass avx512_unary_fp_sae_packed_imm<bits<8> opc, string OpcodeStr,
7030 OpcodeStr##_.Suffix, "$src2, {sae}, $src1",
7037 multiclass avx512_common_unary_fp_sae_packed_imm<string OpcodeStr,
7040 defm Z : avx512_unary_fp_packed_imm<opc, OpcodeStr, OpNode, _.info512>,
7041 avx512_unary_fp_sae_packed_imm<opc, OpcodeStr, OpNode, _.info512>,
7045 defm Z128 : avx512_unary_fp_packed_imm<opc, OpcodeStr, OpNode, _.info128>,
7047 defm Z256 : avx512_unary_fp_packed_imm<opc, OpcodeStr, OpNode, _.info256>,
7056 multiclass avx512_fp_packed_imm<bits<8> opc, string OpcodeStr, SDNode OpNode,
7060 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
7067 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
7074 OpcodeStr, "$src3, ${src2}"##_.BroadcastStr##", $src1",
7084 multiclass avx512_3Op_rm_imm8<bits<8> opc, string OpcodeStr, SDNode OpNode,
7089 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
7095 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
7105 multiclass avx512_3Op_imm8<bits<8> opc, string OpcodeStr, SDNode OpNode,
7107 avx512_3Op_rm_imm8<opc, OpcodeStr, OpNode, _, _>{
7111 OpcodeStr, "$src3, ${src2}"##_.BroadcastStr##", $src1",
7121 multiclass avx512_fp_scalar_imm<bits<8> opc, string OpcodeStr, SDNode OpNode,
7126 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
7133 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
7143 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
7149 multiclass avx512_fp_sae_packed_imm<bits<8> opc, string OpcodeStr,
7153 OpcodeStr, "$src3, {sae}, $src2, $src1",
7161 multiclass avx512_fp_sae_scalar_imm<bits<8> opc, string OpcodeStr,
7165 OpcodeStr, "$src3, {sae}, $src2, $src1",
7173 multiclass avx512_common_fp_sae_packed_imm<string OpcodeStr,
7176 defm Z : avx512_fp_packed_imm<opc, OpcodeStr, OpNode, _.info512>,
7177 avx512_fp_sae_packed_imm<opc, OpcodeStr, OpNode, _.info512>,
7182 defm Z128 : avx512_fp_packed_imm<opc, OpcodeStr, OpNode, _.info128>,
7184 defm Z256 : avx512_fp_packed_imm<opc, OpcodeStr, OpNode, _.info256>,
7203 multiclass avx512_common_3Op_imm8<string OpcodeStr, AVX512VLVectorVTInfo _,
7206 defm Z : avx512_3Op_imm8<opc, OpcodeStr, OpNode, _.info512>, EVEX_V512;
7209 defm Z128 : avx512_3Op_imm8<opc, OpcodeStr, OpNode, _.info128>, EVEX_V128;
7210 defm Z256 : avx512_3Op_imm8<opc, OpcodeStr, OpNode, _.info256>, EVEX_V256;
7214 multiclass avx512_common_fp_sae_scalar_imm<string OpcodeStr,
7217 defm Z128 : avx512_fp_scalar_imm<opc, OpcodeStr, OpNode, _>,
7218 avx512_fp_sae_scalar_imm<opc, OpcodeStr, OpNode, _>;
7222 multiclass avx512_common_unary_fp_sae_packed_imm_all<string OpcodeStr,
7224 defm PS : avx512_common_unary_fp_sae_packed_imm<OpcodeStr, avx512vl_f32_info,
7226 defm PD : avx512_common_unary_fp_sae_packed_imm<OpcodeStr, avx512vl_f64_info,
7267 multiclass avx512_shuff_packed_128<string OpcodeStr, AVX512VLVectorVTInfo _,
7270 defm Z : avx512_3Op_imm8<opc, OpcodeStr, OpNode, _.info512>, EVEX_V512;
7274 defm Z256 : avx512_3Op_imm8<opc, OpcodeStr, OpNode, _.info256>, EVEX_V256;
7310 multiclass avx512_valign<string OpcodeStr, AVX512VLVectorVTInfo VTInfo_I> {
7311 defm NAME: avx512_common_3Op_imm8<OpcodeStr, VTInfo_I, 0x03, X86VAlign>,
7345 multiclass avx512_unary_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
7348 (ins _.RC:$src1), OpcodeStr,
7353 (ins _.MemOp:$src1), OpcodeStr,
7359 multiclass avx512_unary_rmb<bits<8> opc, string OpcodeStr, SDNode OpNode,
7361 avx512_unary_rm<opc, OpcodeStr, OpNode, _> {
7363 (ins _.ScalarMemOp:$src1), OpcodeStr,
7371 multiclass avx512_unary_rm_vl<bits<8> opc, string OpcodeStr, SDNode OpNode,
7374 defm Z : avx512_unary_rm<opc, OpcodeStr, OpNode, VTInfo.info512>, EVEX_V512;
7377 defm Z256 : avx512_unary_rm<opc, OpcodeStr, OpNode, VTInfo.info256>,
7379 defm Z128 : avx512_unary_rm<opc, OpcodeStr, OpNode, VTInfo.info128>,
7384 multiclass avx512_unary_rmb_vl<bits<8> opc, string OpcodeStr, SDNode OpNode,
7387 defm Z : avx512_unary_rmb<opc, OpcodeStr, OpNode, VTInfo.info512>,
7391 defm Z256 : avx512_unary_rmb<opc, OpcodeStr, OpNode, VTInfo.info256>,
7393 defm Z128 : avx512_unary_rmb<opc, OpcodeStr, OpNode, VTInfo.info128>,
7398 multiclass avx512_unary_rm_vl_dq<bits<8> opc_d, bits<8> opc_q, string OpcodeStr,
7400 defm Q : avx512_unary_rmb_vl<opc_q, OpcodeStr#"q", OpNode, avx512vl_i64_info,
7402 defm D : avx512_unary_rmb_vl<opc_d, OpcodeStr#"d", OpNode, avx512vl_i32_info,
7406 multiclass avx512_unary_rm_vl_bw<bits<8> opc_b, bits<8> opc_w, string OpcodeStr,
7408 defm W : avx512_unary_rm_vl<opc_w, OpcodeStr#"w", OpNode, avx512vl_i16_info, prd>;
7409 defm B : avx512_unary_rm_vl<opc_b, OpcodeStr#"b", OpNode, avx512vl_i8_info, prd>;
7414 string OpcodeStr, SDNode OpNode> {
7415 defm NAME : avx512_unary_rm_vl_dq<opc_d, opc_q, OpcodeStr, OpNode,
7417 avx512_unary_rm_vl_bw<opc_b, opc_w, OpcodeStr, OpNode,
7432 multiclass avx512_ctlz<bits<8> opc, string OpcodeStr, Predicate prd>{
7434 defm NAME : avx512_unary_rm_vl_dq<opc, opc, OpcodeStr, ctlz, prd>;
7443 multiclass avx512_replicate<bits<8> opc, string OpcodeStr, SDNode OpNode>{
7444 defm NAME: avx512_unary_rm_vl<opc, OpcodeStr, OpNode, avx512vl_f32_info,
7455 multiclass avx512_movddup_128<bits<8> opc, string OpcodeStr, SDNode OpNode,
7458 (ins _.RC:$src), OpcodeStr, "$src", "$src",
7461 (ins _.ScalarMemOp:$src), OpcodeStr, "$src", "$src",
7467 multiclass avx512_movddup_common<bits<8> opc, string OpcodeStr, SDNode OpNode,
7470 defm Z : avx512_unary_rm<opc, OpcodeStr, OpNode, VTInfo.info512>, EVEX_V512;
7473 defm Z256 : avx512_unary_rm<opc, OpcodeStr, OpNode, VTInfo.info256>,
7475 defm Z128 : avx512_movddup_128<opc, OpcodeStr, OpNode, VTInfo.info128>,
7480 multiclass avx512_movddup<bits<8> opc, string OpcodeStr, SDNode OpNode>{
7481 defm NAME: avx512_movddup_common<opc, OpcodeStr, OpNode,
7520 multiclass avx512_extract_elt_bw_m<bits<8> opc, string OpcodeStr, SDNode OpNode,
7524 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
7531 multiclass avx512_extract_elt_b<string OpcodeStr, X86VectorVTInfo _> {
7535 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
7540 defm NAME : avx512_extract_elt_bw_m<0x14, OpcodeStr, X86pextrb, _>, TAPD;
7544 multiclass avx512_extract_elt_w<string OpcodeStr, X86VectorVTInfo _> {
7548 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
7556 OpcodeStr#".s\t{$src2, $src1, $dst|$dst, $src1, $src2}", []>,
7559 defm NAME : avx512_extract_elt_bw_m<0x15, OpcodeStr, X86pextrw, _>, TAPD;
7563 multiclass avx512_extract_elt_dq<string OpcodeStr, X86VectorVTInfo _,
7568 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
7575 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
7587 multiclass avx512_insert_elt_m<bits<8> opc, string OpcodeStr, SDNode OpNode,
7591 OpcodeStr#"\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
7597 multiclass avx512_insert_elt_bw<bits<8> opc, string OpcodeStr, SDNode OpNode,
7602 OpcodeStr#"\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
7606 defm NAME : avx512_insert_elt_m<opc, OpcodeStr, OpNode, _, LdFrag>;
7610 multiclass avx512_insert_elt_dq<bits<8> opc, string OpcodeStr,
7615 OpcodeStr#"\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
7620 defm NAME : avx512_insert_elt_m<opc, OpcodeStr, insertelt, _,
7634 multiclass avx512_shufp<string OpcodeStr, AVX512VLVectorVTInfo VTInfo_I,
7636 defm NAME: avx512_common_3Op_imm8<OpcodeStr, VTInfo_FP, 0xC6, X86Shufp>,
7648 Format MRMm, string OpcodeStr, X86VectorVTInfo _>{
7651 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
7655 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
7662 Format MRMm, string OpcodeStr, Predicate prd>{
7665 OpcodeStr, v64i8_info>, EVEX_V512;
7668 OpcodeStr, v32i8x_info>, EVEX_V256;
7670 OpcodeStr, v16i8x_info>, EVEX_V128;
7680 string OpcodeStr, X86VectorVTInfo _dst,
7684 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
7690 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
7698 string OpcodeStr, Predicate prd> {
7700 defm Z512 : avx512_psadbw_packed<opc, OpNode, OpcodeStr, v8i64_info,
7703 defm Z256 : avx512_psadbw_packed<opc, OpNode, OpcodeStr, v4i64x_info,
7705 defm Z128 : avx512_psadbw_packed<opc, OpNode, OpcodeStr, v2i64x_info,
7713 multiclass avx512_ternlog<bits<8> opc, string OpcodeStr, SDNode OpNode,
7718 OpcodeStr, "$src4, $src3, $src2", "$src2, $src3, $src4",
7725 OpcodeStr, "$src4, $src3, $src2", "$src2, $src3, $src4",
7733 OpcodeStr, "$src4, ${src3}"##_.BroadcastStr##", $src2",
7743 multiclass avx512_common_ternlog<string OpcodeStr, AVX512VLVectorVTInfo _>{
7745 defm Z : avx512_ternlog<0x25, OpcodeStr, X86vpternlog, _.info512>, EVEX_V512;
7747 defm Z128 : avx512_ternlog<0x25, OpcodeStr, X86vpternlog, _.info128>, EVEX_V128;
7748 defm Z256 : avx512_ternlog<0x25, OpcodeStr, X86vpternlog, _.info256>, EVEX_V256;
7759 multiclass avx512_fixupimm_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
7764 OpcodeStr##_.Suffix, "$src4, $src3, $src2", "$src2, $src3, $src4",
7772 OpcodeStr##_.Suffix, "$src4, $src3, $src2", "$src2, $src3, $src4",
7780 OpcodeStr##_.Suffix, "$src4, ${src3}"##_.BroadcastStr##", $src2",
7790 multiclass avx512_fixupimm_packed_sae<bits<8> opc, string OpcodeStr,
7795 OpcodeStr##_.Suffix, "$src4, {sae}, $src3, $src2",
7805 multiclass avx512_fixupimm_scalar<bits<8> opc, string OpcodeStr, SDNode OpNode,
7810 OpcodeStr##_.Suffix, "$src4, $src3, $src2", "$src2, $src3, $src4",
7819 OpcodeStr##_.Suffix, "$src4, {sae}, $src3, $src2",
7828 OpcodeStr##_.Suffix, "$src4, $src3, $src2", "$src2, $src3, $src4",