Lines Matching refs:OpcodeStr

180                                   string OpcodeStr,
190 OpcodeStr#"\t{"#AttSrcAsm#", $dst|"#
197 OpcodeStr#"\t{"#AttSrcAsm#", $dst {${mask}}|"#
206 OpcodeStr#"\t{"#AttSrcAsm#", $dst {${mask}} {z}|"#
218 string OpcodeStr,
225 AVX512_maskable_custom<O, F, Outs, Ins, MaskingIns, ZeroMaskingIns, OpcodeStr,
237 dag Outs, dag Ins, string OpcodeStr,
245 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
252 dag Outs, dag Ins, string OpcodeStr,
260 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
269 dag Outs, dag NonTiedIns, string OpcodeStr,
276 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
284 dag Outs, dag NonTiedIns, string OpcodeStr,
291 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
296 dag Outs, dag NonTiedIns, string OpcodeStr,
303 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
308 string OpcodeStr,
314 OpcodeStr, AttSrcAsm, IntelSrcAsm, Pattern, [], [],
323 string OpcodeStr,
330 OpcodeStr#"\t{"#AttSrcAsm#", $dst "#Round#"|"#
335 OpcodeStr#"\t{"#Round#AttSrcAsm#", $dst {${mask}}|"#
343 string OpcodeStr,
348 AVX512_maskable_custom_cmp<O, F, Outs, Ins, MaskingIns, OpcodeStr,
355 dag Outs, dag Ins, string OpcodeStr,
361 OpcodeStr, AttSrcAsm, IntelSrcAsm, RHS,
366 dag Outs, dag Ins, string OpcodeStr,
369 Ins, !con((ins _.KRCWM:$mask),Ins), OpcodeStr,
827 multiclass avx512_broadcast_rm<bits<8> opc, string OpcodeStr,
831 (ins SrcInfo.RC:$src), OpcodeStr, "$src", "$src",
836 (ins SrcInfo.ScalarMemOp:$src), OpcodeStr, "$src", "$src",
842 multiclass avx512_fp_broadcast_vl<bits<8> opc, string OpcodeStr,
844 defm Z : avx512_broadcast_rm<opc, OpcodeStr, _.info512, _.info128>,
848 defm Z256 : avx512_broadcast_rm<opc, OpcodeStr, _.info256, _.info128>,
974 multiclass avx512_int_broadcast_rm_vl<bits<8> opc, string OpcodeStr,
977 defm Z : avx512_broadcast_rm<opc, OpcodeStr, _.info512, _.info128>,
984 defm Z256 : avx512_broadcast_rm<opc, OpcodeStr, _.info256, _.info128>,
987 defm Z128 : avx512_broadcast_rm<opc, OpcodeStr, _.info128, _.info128>,
1001 multiclass avx512_subvec_broadcast_rm<bits<8> opc, string OpcodeStr,
1005 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
1011 !strconcat(OpcodeStr,
1016 !strconcat(OpcodeStr,
1066 multiclass avx512_broadcast_32x2<bits<8> opc, string OpcodeStr,
1071 (ins _Src.RC:$src), OpcodeStr, "$src", "$src",
1076 (ins _Src.ScalarMemOp:$src), OpcodeStr, "$src", "$src",
1082 multiclass avx512_common_broadcast_32x2<bits<8> opc, string OpcodeStr,
1085 defm Z : avx512_broadcast_32x2<opc, OpcodeStr, _.info512, _.info128>,
1088 defm Z256 : avx512_broadcast_32x2<opc, OpcodeStr, _.info256, _.info128>,
1092 multiclass avx512_common_broadcast_i32x2<bits<8> opc, string OpcodeStr,
1094 avx512_common_broadcast_32x2<opc, OpcodeStr, _> {
1097 defm Z128 : avx512_broadcast_32x2<opc, OpcodeStr, _.info128, _.info128,
1132 multiclass avx512_mask_broadcastm<bits<8> opc, string OpcodeStr,
1135 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
1139 multiclass avx512_mask_broadcast<bits<8> opc, string OpcodeStr,
1142 defm Z : avx512_mask_broadcastm<opc, OpcodeStr, VTInfo.info512, KRC>, EVEX_V512;
1144 defm Z256 : avx512_mask_broadcastm<opc, OpcodeStr, VTInfo.info256, KRC>, EVEX_V256;
1145 defm Z128 : avx512_mask_broadcastm<opc, OpcodeStr, VTInfo.info128, KRC>, EVEX_V128;
1156 multiclass avx512_perm_i<bits<8> opc, string OpcodeStr,
1161 OpcodeStr, "$src3, $src2", "$src2, $src3",
1168 OpcodeStr, "$src3, $src2", "$src2, $src3",
1174 multiclass avx512_perm_i_mb<bits<8> opc, string OpcodeStr,
1179 OpcodeStr, !strconcat("${src3}", _.BroadcastStr,", $src2"),
1186 multiclass avx512_perm_i_sizes<bits<8> opc, string OpcodeStr,
1189 defm NAME: avx512_perm_i<opc, OpcodeStr, VTInfo.info512,
1191 avx512_perm_i_mb<opc, OpcodeStr, VTInfo.info512,
1194 defm NAME#128: avx512_perm_i<opc, OpcodeStr, VTInfo.info128,
1196 avx512_perm_i_mb<opc, OpcodeStr, VTInfo.info128,
1198 defm NAME#256: avx512_perm_i<opc, OpcodeStr, VTInfo.info256,
1200 avx512_perm_i_mb<opc, OpcodeStr, VTInfo.info256,
1205 multiclass avx512_perm_i_sizes_w<bits<8> opc, string OpcodeStr,
1209 defm NAME: avx512_perm_i<opc, OpcodeStr, VTInfo.info512,
1212 defm NAME#128: avx512_perm_i<opc, OpcodeStr, VTInfo.info128,
1214 defm NAME#256: avx512_perm_i<opc, OpcodeStr, VTInfo.info256,
1231 multiclass avx512_perm_t<bits<8> opc, string OpcodeStr,
1236 OpcodeStr, "$src3, $src2", "$src2, $src3",
1243 OpcodeStr, "$src3, $src2", "$src2, $src3",
1249 multiclass avx512_perm_t_mb<bits<8> opc, string OpcodeStr,
1254 OpcodeStr, !strconcat("${src3}", _.BroadcastStr,", $src2"),
1261 multiclass avx512_perm_t_sizes<bits<8> opc, string OpcodeStr,
1264 defm NAME: avx512_perm_t<opc, OpcodeStr, VTInfo.info512,
1266 avx512_perm_t_mb<opc, OpcodeStr, VTInfo.info512,
1269 defm NAME#128: avx512_perm_t<opc, OpcodeStr, VTInfo.info128,
1271 avx512_perm_t_mb<opc, OpcodeStr, VTInfo.info128,
1273 defm NAME#256: avx512_perm_t<opc, OpcodeStr, VTInfo.info256,
1275 avx512_perm_t_mb<opc, OpcodeStr, VTInfo.info256,
1280 multiclass avx512_perm_t_sizes_w<bits<8> opc, string OpcodeStr,
1284 defm NAME: avx512_perm_t<opc, OpcodeStr, VTInfo.info512,
1287 defm NAME#128: avx512_perm_t<opc, OpcodeStr, VTInfo.info128,
1289 defm NAME#256: avx512_perm_t<opc, OpcodeStr, VTInfo.info256,
1308 multiclass avx512_blendmask<bits<8> opc, string OpcodeStr, X86VectorVTInfo _> {
1312 !strconcat(OpcodeStr,
1317 !strconcat(OpcodeStr,
1323 !strconcat(OpcodeStr,
1329 !strconcat(OpcodeStr,
1334 !strconcat(OpcodeStr,
1341 !strconcat(OpcodeStr,
1347 multiclass avx512_blendmask_rmb<bits<8> opc, string OpcodeStr, X86VectorVTInfo _> {
1351 !strconcat(OpcodeStr,
1360 !strconcat(OpcodeStr,
1367 multiclass blendmask_dq <bits<8> opc, string OpcodeStr,
1369 defm Z : avx512_blendmask <opc, OpcodeStr, VTInfo.info512>,
1370 avx512_blendmask_rmb <opc, OpcodeStr, VTInfo.info512>, EVEX_V512;
1373 defm Z256 : avx512_blendmask<opc, OpcodeStr, VTInfo.info256>,
1374 avx512_blendmask_rmb <opc, OpcodeStr, VTInfo.info256>, EVEX_V256;
1375 defm Z128 : avx512_blendmask<opc, OpcodeStr, VTInfo.info128>,
1376 avx512_blendmask_rmb <opc, OpcodeStr, VTInfo.info128>, EVEX_V128;
1380 multiclass blendmask_bw <bits<8> opc, string OpcodeStr,
1383 defm Z : avx512_blendmask <opc, OpcodeStr, VTInfo.info512>, EVEX_V512;
1386 defm Z256 : avx512_blendmask <opc, OpcodeStr, VTInfo.info256>, EVEX_V256;
1387 defm Z128 : avx512_blendmask <opc, OpcodeStr, VTInfo.info128>, EVEX_V128;
1501 multiclass avx512_icmp_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
1505 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
1511 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
1517 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst {${mask}}|",
1525 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst {${mask}}|",
1534 multiclass avx512_icmp_packed_rmb<bits<8> opc, string OpcodeStr, SDNode OpNode,
1536 avx512_icmp_packed<opc, OpcodeStr, OpNode, _> {
1540 !strconcat(OpcodeStr, "\t{${src2}", _.BroadcastStr, ", $src1, $dst",
1548 !strconcat(OpcodeStr,
1559 multiclass avx512_icmp_packed_vl<bits<8> opc, string OpcodeStr, SDNode OpNode,
1562 defm Z : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info512>,
1566 defm Z256 : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info256>,
1568 defm Z128 : avx512_icmp_packed<opc, OpcodeStr, OpNode, VTInfo.info128>,
1573 multiclass avx512_icmp_packed_rmb_vl<bits<8> opc, string OpcodeStr,
1577 defm Z : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info512>,
1581 defm Z256 : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info256>,
1583 defm Z128 : avx512_icmp_packed_rmb<opc, OpcodeStr, OpNode, VTInfo.info128>,
1903 multiclass avx512_scalar_fpclass<bits<8> opc, string OpcodeStr, SDNode OpNode,
1908 OpcodeStr##_.Suffix#"\t{$src2, $src1, $dst | $dst, $src1, $src2}",
1913 OpcodeStr##_.Suffix#
1921 OpcodeStr##_.Suffix##
1928 OpcodeStr##_.Suffix##
1940 multiclass avx512_vector_fpclass<bits<8> opc, string OpcodeStr, SDNode OpNode,
1944 OpcodeStr##_.Suffix#"\t{$src2, $src1, $dst | $dst, $src1, $src2}",
1949 OpcodeStr##_.Suffix#
1957 OpcodeStr##_.Suffix##mem#
1964 OpcodeStr##_.Suffix##mem#
1971 OpcodeStr##_.Suffix##broadcast##"\t{$src2, ${src1}"##
1980 OpcodeStr##_.Suffix##broadcast##"\t{$src2, ${src1}"##
1991 multiclass avx512_vector_fpclass_all<string OpcodeStr,
1995 defm Z : avx512_vector_fpclass<opc, OpcodeStr, OpNode, _.info512, "{z}",
1999 defm Z128 : avx512_vector_fpclass<opc, OpcodeStr, OpNode, _.info128, "{x}",
2001 defm Z256 : avx512_vector_fpclass<opc, OpcodeStr, OpNode, _.info256, "{y}",
2006 multiclass avx512_fp_fpclass_all<string OpcodeStr, bits<8> opcVec,
2008 defm PS : avx512_vector_fpclass_all<OpcodeStr, avx512vl_f32_info, opcVec,
2010 defm PD : avx512_vector_fpclass_all<OpcodeStr, avx512vl_f64_info, opcVec,
2012 defm SS : avx512_scalar_fpclass<opcScalar, OpcodeStr, ScalarOpNode,
2014 defm SD : avx512_scalar_fpclass<opcScalar, OpcodeStr, ScalarOpNode,
2028 string OpcodeStr, RegisterClass KRC,
2032 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"), []>;
2035 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
2039 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
2045 string OpcodeStr,
2049 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"), []>;
2051 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"), []>;
2221 multiclass avx512_mask_unop<bits<8> opc, string OpcodeStr,
2226 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
2230 multiclass avx512_mask_unop_all<bits<8> opc, string OpcodeStr,
2232 defm B : avx512_mask_unop<opc, !strconcat(OpcodeStr, "b"), VK8, OpNode,
2234 defm W : avx512_mask_unop<opc, !strconcat(OpcodeStr, "w"), VK16, OpNode,
2236 defm D : avx512_mask_unop<opc, !strconcat(OpcodeStr, "d"), VK32, OpNode,
2238 defm Q : avx512_mask_unop<opc, !strconcat(OpcodeStr, "q"), VK64, OpNode,
2277 multiclass avx512_mask_binop<bits<8> opc, string OpcodeStr,
2282 !strconcat(OpcodeStr,
2287 multiclass avx512_mask_binop_all<bits<8> opc, string OpcodeStr,
2290 defm B : avx512_mask_binop<opc, !strconcat(OpcodeStr, "b"), VK8, OpNode,
2292 defm W : avx512_mask_binop<opc, !strconcat(OpcodeStr, "w"), VK16, OpNode,
2294 defm D : avx512_mask_binop<opc, !strconcat(OpcodeStr, "d"), VK32, OpNode,
2296 defm Q : avx512_mask_binop<opc, !strconcat(OpcodeStr, "q"), VK64, OpNode,
2402 multiclass avx512_mask_testop<bits<8> opc, string OpcodeStr, RegisterClass KRC,
2406 !strconcat(OpcodeStr, "\t{$src2, $src1|$src1, $src2}"),
2410 multiclass avx512_mask_testop_w<bits<8> opc, string OpcodeStr, SDNode OpNode,
2412 defm B : avx512_mask_testop<opc, OpcodeStr#"b", VK8, OpNode, HasDQI>,
2414 defm W : avx512_mask_testop<opc, OpcodeStr#"w", VK16, OpNode, prdW>,
2416 defm Q : avx512_mask_testop<opc, OpcodeStr#"q", VK64, OpNode, HasBWI>,
2418 defm D : avx512_mask_testop<opc, OpcodeStr#"d", VK32, OpNode, HasBWI>,
2426 multiclass avx512_mask_shiftop<bits<8> opc, string OpcodeStr, RegisterClass KRC,
2430 !strconcat(OpcodeStr,
2435 multiclass avx512_mask_shiftop_w<bits<8> opc1, bits<8> opc2, string OpcodeStr,
2437 defm W : avx512_mask_shiftop<opc1, !strconcat(OpcodeStr, "w"), VK16, OpNode>,
2440 defm B : avx512_mask_shiftop<opc1, !strconcat(OpcodeStr, "b"), VK8, OpNode>,
2443 defm Q : avx512_mask_shiftop<opc2, !strconcat(OpcodeStr, "q"), VK64, OpNode>,
2446 defm D : avx512_mask_shiftop<opc2, !strconcat(OpcodeStr, "d"), VK32, OpNode>,
2563 multiclass avx512_load<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
2568 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"), [],
2572 !strconcat(OpcodeStr, "\t{$src, ${dst} {${mask}} {z}|",
2579 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
2586 !strconcat(OpcodeStr, "\t{$src1, ${dst} {${mask}}|",
2595 !strconcat(OpcodeStr, "\t{$src1, ${dst} {${mask}}|",
2605 OpcodeStr #"\t{$src, ${dst} {${mask}} {z}|"#
2622 multiclass avx512_alignedload_vl<bits<8> opc, string OpcodeStr,
2627 defm Z : avx512_load<opc, OpcodeStr, _.info512, _.info512.AlignedLdFrag,
2631 defm Z256 : avx512_load<opc, OpcodeStr, _.info256, _.info256.AlignedLdFrag,
2633 defm Z128 : avx512_load<opc, OpcodeStr, _.info128, _.info128.AlignedLdFrag,
2638 multiclass avx512_load_vl<bits<8> opc, string OpcodeStr,
2643 defm Z : avx512_load<opc, OpcodeStr, _.info512, _.info512.LdFrag,
2647 defm Z256 : avx512_load<opc, OpcodeStr, _.info256, _.info256.LdFrag,
2649 defm Z128 : avx512_load<opc, OpcodeStr, _.info128, _.info128.LdFrag,
2654 multiclass avx512_store<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
2658 OpcodeStr # ".s\t{$src, $dst|$dst, $src}",
2662 OpcodeStr # ".s\t{$src, ${dst} {${mask}}|"#
2667 OpcodeStr # ".s\t{$src, ${dst} {${mask}} {z}|" #
2673 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
2677 OpcodeStr # "\t{$src, ${dst} {${mask}}|${dst} {${mask}}, $src}",
2687 multiclass avx512_store_vl< bits<8> opc, string OpcodeStr,
2690 defm Z : avx512_store<opc, OpcodeStr, _.info512, store,
2694 defm Z256 : avx512_store<opc, OpcodeStr, _.info256, store,
2696 defm Z128 : avx512_store<opc, OpcodeStr, _.info128, store,
2701 multiclass avx512_alignedstore_vl<bits<8> opc, string OpcodeStr,
2704 defm Z : avx512_store<opc, OpcodeStr, _.info512, alignedstore512,
2708 defm Z256 : avx512_store<opc, OpcodeStr, _.info256, alignedstore256,
2710 defm Z128 : avx512_store<opc, OpcodeStr, _.info128, alignedstore,
3243 multiclass avx512_movnt<bits<8> opc, string OpcodeStr, PatFrag st_frag,
3249 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
3253 multiclass avx512_movnt_vl<bits<8> opc, string OpcodeStr, PatFrag st_frag,
3258 defm Z : avx512_movnt<opc, OpcodeStr, st_frag,
3264 defm Z256 : avx512_movnt<opc, OpcodeStr, st_frag,
3269 defm Z128 : avx512_movnt<opc, OpcodeStr, st_frag,
3291 multiclass avx512_binop_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
3295 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
3303 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr,
3311 multiclass avx512_binop_rmb<bits<8> opc, string OpcodeStr, SDNode OpNode,
3314 avx512_binop_rm<opc, OpcodeStr, OpNode, _, itins, IsCommutable> {
3317 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
3327 multiclass avx512_binop_rm_vl<bits<8> opc, string OpcodeStr, SDNode OpNode,
3331 defm Z : avx512_binop_rm<opc, OpcodeStr, OpNode, VTInfo.info512, itins,
3335 defm Z256 : avx512_binop_rm<opc, OpcodeStr, OpNode, VTInfo.info256, itins,
3337 defm Z128 : avx512_binop_rm<opc, OpcodeStr, OpNode, VTInfo.info128, itins,
3342 multiclass avx512_binop_rmb_vl<bits<8> opc, string OpcodeStr, SDNode OpNode,
3346 defm Z : avx512_binop_rmb<opc, OpcodeStr, OpNode, VTInfo.info512, itins,
3350 defm Z256 : avx512_binop_rmb<opc, OpcodeStr, OpNode, VTInfo.info256, itins,
3352 defm Z128 : avx512_binop_rmb<opc, OpcodeStr, OpNode, VTInfo.info128, itins,
3357 multiclass avx512_binop_rm_vl_q<bits<8> opc, string OpcodeStr, SDNode OpNode,
3360 defm NAME : avx512_binop_rmb_vl<opc, OpcodeStr, OpNode, avx512vl_i64_info,
3365 multiclass avx512_binop_rm_vl_d<bits<8> opc, string OpcodeStr, SDNode OpNode,
3368 defm NAME : avx512_binop_rmb_vl<opc, OpcodeStr, OpNode, avx512vl_i32_info,
3372 multiclass avx512_binop_rm_vl_w<bits<8> opc, string OpcodeStr, SDNode OpNode,
3375 defm NAME : avx512_binop_rm_vl<opc, OpcodeStr, OpNode, avx512vl_i16_info,
3379 multiclass avx512_binop_rm_vl_b<bits<8> opc, string OpcodeStr, SDNode OpNode,
3382 defm NAME : avx512_binop_rm_vl<opc, OpcodeStr, OpNode, avx512vl_i8_info,
3386 multiclass avx512_binop_rm_vl_dq<bits<8> opc_d, bits<8> opc_q, string OpcodeStr,
3389 defm Q : avx512_binop_rm_vl_q<opc_q, OpcodeStr#"q", OpNode, itins, prd,
3392 defm D : avx512_binop_rm_vl_d<opc_d, OpcodeStr#"d", OpNode, itins, prd,
3396 multiclass avx512_binop_rm_vl_bw<bits<8> opc_b, bits<8> opc_w, string OpcodeStr,
3399 defm W : avx512_binop_rm_vl_w<opc_w, OpcodeStr#"w", OpNode, itins, prd,
3402 defm B : avx512_binop_rm_vl_b<opc_b, OpcodeStr#"b", OpNode, itins, prd,
3408 string OpcodeStr, SDNode OpNode,
3410 defm NAME : avx512_binop_rm_vl_dq<opc_d, opc_q, OpcodeStr, OpNode,
3412 avx512_binop_rm_vl_bw<opc_b, opc_w, OpcodeStr, OpNode,
3416 multiclass avx512_binop_rm2<bits<8> opc, string OpcodeStr, OpndItins itins,
3420 (ins _Src.RC:$src1, _Src.RC:$src2), OpcodeStr,
3429 (ins _Src.RC:$src1, _Src.MemOp:$src2), OpcodeStr,
3438 OpcodeStr,
3476 multiclass avx512_binop_all<bits<8> opc, string OpcodeStr, OpndItins itins,
3479 defm NAME#Z : avx512_binop_rm2<opc, OpcodeStr, itins, OpNode,
3483 defm NAME#Z256 : avx512_binop_rm2<opc, OpcodeStr, itins, OpNode,
3486 defm NAME#Z128 : avx512_binop_rm2<opc, OpcodeStr, itins, OpNode,
3497 multiclass avx512_packs_rmb<bits<8> opc, string OpcodeStr, SDNode OpNode,
3502 OpcodeStr,
3512 multiclass avx512_packs_rm<bits<8> opc, string OpcodeStr,
3516 (ins _Src.RC:$src1, _Src.RC:$src2), OpcodeStr,
3524 (ins _Src.RC:$src1, _Src.MemOp:$src2), OpcodeStr,
3532 multiclass avx512_packs_all_i32_i16<bits<8> opc, string OpcodeStr,
3534 defm NAME#Z : avx512_packs_rm<opc, OpcodeStr, OpNode, v16i32_info,
3536 avx512_packs_rmb<opc, OpcodeStr, OpNode, v16i32_info,
3539 defm NAME#Z256 : avx512_packs_rm<opc, OpcodeStr, OpNode, v8i32x_info,
3541 avx512_packs_rmb<opc, OpcodeStr, OpNode, v8i32x_info,
3543 defm NAME#Z128 : avx512_packs_rm<opc, OpcodeStr, OpNode, v4i32x_info,
3545 avx512_packs_rmb<opc, OpcodeStr, OpNode, v4i32x_info,
3549 multiclass avx512_packs_all_i16_i8<bits<8> opc, string OpcodeStr,
3551 defm NAME#Z : avx512_packs_rm<opc, OpcodeStr, OpNode, v32i16_info,
3554 defm NAME#Z256 : avx512_packs_rm<opc, OpcodeStr, OpNode, v16i16x_info,
3556 defm NAME#Z128 : avx512_packs_rm<opc, OpcodeStr, OpNode, v8i16x_info,
3561 multiclass avx512_vpmadd<bits<8> opc, string OpcodeStr,
3564 defm NAME#Z : avx512_packs_rm<opc, OpcodeStr, OpNode, _Src.info512,
3567 defm NAME#Z256 : avx512_packs_rm<opc, OpcodeStr, OpNode, _Src.info256,
3569 defm NAME#Z128 : avx512_packs_rm<opc, OpcodeStr, OpNode, _Src.info128,
3629 multiclass avx512_fp_scalar<bits<8> opc, string OpcodeStr,X86VectorVTInfo _,
3634 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
3641 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr,
3651 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
3656 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
3662 multiclass avx512_fp_scalar_round<bits<8> opc, string OpcodeStr,X86VectorVTInfo _,
3666 (ins _.RC:$src1, _.RC:$src2, AVX512RC:$rc), OpcodeStr,
3672 multiclass avx512_fp_scalar_sae<bits<8> opc, string OpcodeStr,X86VectorVTInfo _,
3676 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
3682 multiclass avx512_binop_s_round<bits<8> opc, string OpcodeStr, SDNode OpNode,
3685 defm SSZ : avx512_fp_scalar<opc, OpcodeStr#"ss", f32x_info, OpNode, VecNode,
3687 avx512_fp_scalar_round<opc, OpcodeStr#"ss", f32x_info, VecNode,
3690 defm SDZ : avx512_fp_scalar<opc, OpcodeStr#"sd", f64x_info, OpNode, VecNode,
3692 avx512_fp_scalar_round<opc, OpcodeStr#"sd", f64x_info, VecNode,
3697 multiclass avx512_binop_s_sae<bits<8> opc, string OpcodeStr, SDNode OpNode,
3700 defm SSZ : avx512_fp_scalar<opc, OpcodeStr#"ss", f32x_info, OpNode, VecNode,
3702 avx512_fp_scalar_sae<opc, OpcodeStr#"ss", f32x_info, VecNode,
3705 defm SDZ : avx512_fp_scalar<opc, OpcodeStr#"sd", f64x_info, OpNode, VecNode,
3707 avx512_fp_scalar_sae<opc, OpcodeStr#"sd", f64x_info, VecNode,
3718 multiclass avx512_fp_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
3721 (ins _.RC:$src1, _.RC:$src2), OpcodeStr##_.Suffix,
3726 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr##_.Suffix,
3730 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr##_.Suffix,
3739 multiclass avx512_fp_round_packed<bits<8> opc, string OpcodeStr, SDNode OpNodeRnd,
3742 (ins _.RC:$src1, _.RC:$src2, AVX512RC:$rc), OpcodeStr##_.Suffix,
3749 multiclass avx512_fp_sae_packed<bits<8> opc, string OpcodeStr, SDNode OpNodeRnd,
3752 (ins _.RC:$src1, _.RC:$src2), OpcodeStr##_.Suffix,
3758 multiclass avx512_fp_binop_p<bits<8> opc, string OpcodeStr, SDNode OpNode,
3760 defm PSZ : avx512_fp_packed<opc, OpcodeStr, OpNode, v16f32_info,
3763 defm PDZ : avx512_fp_packed<opc, OpcodeStr, OpNode, v8f64_info,
3769 defm PSZ128 : avx512_fp_packed<opc, OpcodeStr, OpNode, v4f32x_info,
3772 defm PSZ256 : avx512_fp_packed<opc, OpcodeStr, OpNode, v8f32x_info,
3775 defm PDZ128 : avx512_fp_packed<opc, OpcodeStr, OpNode, v2f64x_info,
3778 defm PDZ256 : avx512_fp_packed<opc, OpcodeStr, OpNode, v4f64x_info,
3784 multiclass avx512_fp_binop_p_round<bits<8> opc, string OpcodeStr, SDNode OpNodeRnd> {
3785 defm PSZ : avx512_fp_round_packed<opc, OpcodeStr, OpNodeRnd, v16f32_info>,
3787 defm PDZ : avx512_fp_round_packed<opc, OpcodeStr, OpNodeRnd, v8f64_info>,
3791 multiclass avx512_fp_binop_p_sae<bits<8> opc, string OpcodeStr, SDNode OpNodeRnd> {
3792 defm PSZ : avx512_fp_sae_packed<opc, OpcodeStr, OpNodeRnd, v16f32_info>,
3794 defm PDZ : avx512_fp_sae_packed<opc, OpcodeStr, OpNodeRnd, v8f64_info>,
3817 multiclass avx512_fp_scalef_p<bits<8> opc, string OpcodeStr, SDNode OpNode,
3820 (ins _.RC:$src1, _.RC:$src2), OpcodeStr##_.Suffix,
3825 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr##_.Suffix,
3829 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr##_.Suffix,
3838 multiclass avx512_fp_scalef_scalar<bits<8> opc, string OpcodeStr, SDNode OpNode,
3841 (ins _.RC:$src1, _.RC:$src2), OpcodeStr##_.Suffix,
3846 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr##_.Suffix,
3852 multiclass avx512_fp_scalef_all<bits<8> opc, bits<8> opcScaler, string OpcodeStr, SDNode OpNode> {
3853 defm PSZ : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v16f32_info>,
3854 avx512_fp_round_packed<opc, OpcodeStr, OpNode, v16f32_info>,
3856 defm PDZ : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v8f64_info>,
3857 avx512_fp_round_packed<opc, OpcodeStr, OpNode, v8f64_info>,
3859 defm SSZ128 : avx512_fp_scalef_scalar<opcScaler, OpcodeStr, OpNode, f32x_info>,
3860 … avx512_fp_scalar_round<opcScaler, OpcodeStr##"ss", f32x_info, OpNode, SSE_ALU_ITINS_S.s>,
3862 defm SDZ128 : avx512_fp_scalef_scalar<opcScaler, OpcodeStr, OpNode, f64x_info>,
3863 … avx512_fp_scalar_round<opcScaler, OpcodeStr##"sd", f64x_info, OpNode, SSE_ALU_ITINS_S.d>,
3868 defm PSZ128 : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v4f32x_info>,
3870 defm PSZ256 : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v8f32x_info>,
3872 defm PDZ128 : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v2f64x_info>,
3874 defm PDZ256 : avx512_fp_scalef_p<opc, OpcodeStr, OpNode, v4f64x_info>,
3884 multiclass avx512_vptest<bits<8> opc, string OpcodeStr, SDNode OpNode,
3887 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
3893 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr,
3901 multiclass avx512_vptest_mb<bits<8> opc, string OpcodeStr, SDNode OpNode,
3905 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
3912 multiclass avx512_vptest_dq_sizes<bits<8> opc, string OpcodeStr, SDNode OpNode,
3915 defm Z : avx512_vptest<opc, OpcodeStr, OpNode, _.info512>,
3916 avx512_vptest_mb<opc, OpcodeStr, OpNode, _.info512>, EVEX_V512;
3919 defm Z256 : avx512_vptest<opc, OpcodeStr, OpNode, _.info256>,
3920 avx512_vptest_mb<opc, OpcodeStr, OpNode, _.info256>, EVEX_V256;
3921 defm Z128 : avx512_vptest<opc, OpcodeStr, OpNode, _.info128>,
3922 avx512_vptest_mb<opc, OpcodeStr, OpNode, _.info128>, EVEX_V128;
3926 multiclass avx512_vptest_dq<bits<8> opc, string OpcodeStr, SDNode OpNode> {
3927 defm D : avx512_vptest_dq_sizes<opc, OpcodeStr#"d", OpNode,
3929 defm Q : avx512_vptest_dq_sizes<opc, OpcodeStr#"q", OpNode,
3933 multiclass avx512_vptest_wb<bits<8> opc, string OpcodeStr,
3936 defm WZ: avx512_vptest<opc, OpcodeStr#"w", OpNode, v32i16_info>,
3938 defm BZ: avx512_vptest<opc, OpcodeStr#"b", OpNode, v64i8_info>,
3943 defm WZ256: avx512_vptest<opc, OpcodeStr#"w", OpNode, v16i16x_info>,
3945 defm WZ128: avx512_vptest<opc, OpcodeStr#"w", OpNode, v8i16x_info>,
3947 defm BZ256: avx512_vptest<opc, OpcodeStr#"b", OpNode, v32i8x_info>,
3949 defm BZ128: avx512_vptest<opc, OpcodeStr#"b", OpNode, v16i8x_info>,
3954 multiclass avx512_vptest_all_forms<bits<8> opc_wb, bits<8> opc_dq, string OpcodeStr,
3956 avx512_vptest_wb <opc_wb, OpcodeStr, OpNode>,
3957 avx512_vptest_dq<opc_dq, OpcodeStr, OpNode>;
3974 string OpcodeStr, SDNode OpNode, X86VectorVTInfo _> {
3976 (ins _.RC:$src1, u8imm:$src2), OpcodeStr,
3982 (ins _.MemOp:$src1, u8imm:$src2), OpcodeStr,
3990 string OpcodeStr, SDNode OpNode, X86VectorVTInfo _> {
3993 (ins _.ScalarMemOp:$src1, u8imm:$src2), OpcodeStr,
3999 multiclass avx512_shift_rrm<bits<8> opc, string OpcodeStr, SDNode OpNode,
4003 (ins _.RC:$src1, VR128X:$src2), OpcodeStr,
4008 (ins _.RC:$src1, i128mem:$src2), OpcodeStr,
4015 multiclass avx512_shift_sizes<bits<8> opc, string OpcodeStr, SDNode OpNode,
4019 defm Z : avx512_shift_rrm<opc, OpcodeStr, OpNode, SrcVT, bc_frag,
4023 defm Z256 : avx512_shift_rrm<opc, OpcodeStr, OpNode, SrcVT, bc_frag,
4026 defm Z128 : avx512_shift_rrm<opc, OpcodeStr, OpNode, SrcVT, bc_frag,
4033 string OpcodeStr, SDNode OpNode> {
4034 defm D : avx512_shift_sizes<opcd, OpcodeStr#"d", OpNode, v4i32, bc_v4i32,
4036 defm Q : avx512_shift_sizes<opcq, OpcodeStr#"q", OpNode, v2i64, bc_v2i64,
4038 defm W : avx512_shift_sizes<opcw, OpcodeStr#"w", OpNode, v8i16, bc_v8i16,
4043 string OpcodeStr, SDNode OpNode,
4046 defm Z: avx512_shift_rmi<opc, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4048 avx512_shift_rmbi<opc, ImmFormM, OpcodeStr, OpNode,
4051 defm Z256: avx512_shift_rmi<opc, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4053 avx512_shift_rmbi<opc, ImmFormM, OpcodeStr, OpNode,
4055 defm Z128: avx512_shift_rmi<opc, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4057 avx512_shift_rmbi<opc, ImmFormM, OpcodeStr, OpNode,
4064 string OpcodeStr, SDNode OpNode> {
4066 defm WZ: avx512_shift_rmi<opcw, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4069 defm WZ256: avx512_shift_rmi<opcw, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4071 defm WZ128: avx512_shift_rmi<opcw, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4078 string OpcodeStr, SDNode OpNode> {
4079 defm D: avx512_shift_rmi_sizes<opcd, ImmFormR, ImmFormM, OpcodeStr#"d", OpNode,
4081 defm Q: avx512_shift_rmi_sizes<opcq, ImmFormR, ImmFormM, OpcodeStr#"q", OpNode,
4104 multiclass avx512_var_shift<bits<8> opc, string OpcodeStr, SDNode OpNode,
4107 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
4113 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr,
4121 multiclass avx512_var_shift_mb<bits<8> opc, string OpcodeStr, SDNode OpNode,
4125 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
4133 multiclass avx512_var_shift_sizes<bits<8> opc, string OpcodeStr, SDNode OpNode,
4136 defm Z : avx512_var_shift<opc, OpcodeStr, OpNode, _.info512>,
4137 avx512_var_shift_mb<opc, OpcodeStr, OpNode, _.info512>, EVEX_V512;
4140 defm Z256 : avx512_var_shift<opc, OpcodeStr, OpNode, _.info256>,
4141 avx512_var_shift_mb<opc, OpcodeStr, OpNode, _.info256>, EVEX_V256;
4142 defm Z128 : avx512_var_shift<opc, OpcodeStr, OpNode, _.info128>,
4143 avx512_var_shift_mb<opc, OpcodeStr, OpNode, _.info128>, EVEX_V128;
4147 multiclass avx512_var_shift_types<bits<8> opc, string OpcodeStr,
4149 defm D : avx512_var_shift_sizes<opc, OpcodeStr#"d", OpNode,
4151 defm Q : avx512_var_shift_sizes<opc, OpcodeStr#"q", OpNode,
4155 multiclass avx512_var_shift_w<bits<8> opc, string OpcodeStr,
4158 defm WZ: avx512_var_shift<opc, OpcodeStr, OpNode, v32i16_info>,
4162 defm WZ256: avx512_var_shift<opc, OpcodeStr, OpNode, v16i16x_info>,
4164 defm WZ128: avx512_var_shift<opc, OpcodeStr, OpNode, v8i16x_info>,
4181 multiclass avx512_vperm_dq_sizes<bits<8> opc, string OpcodeStr, SDNode OpNode,
4184 defm Z : avx512_var_shift<opc, OpcodeStr, OpNode, _.info512>,
4185 avx512_var_shift_mb<opc, OpcodeStr, OpNode, _.info512>, EVEX_V512;
4188 defm Z256 : avx512_var_shift<opc, OpcodeStr, OpNode, _.info256>,
4189 avx512_var_shift_mb<opc, OpcodeStr, OpNode, _.info256>, EVEX_V256;
4193 string OpcodeStr, SDNode OpNode,
4196 defm Z: avx512_shift_rmi<opc, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4198 avx512_shift_rmbi<opc, ImmFormM, OpcodeStr, OpNode,
4201 defm Z256: avx512_shift_rmi<opc, ImmFormR, ImmFormM, OpcodeStr, OpNode,
4203 avx512_shift_rmbi<opc, ImmFormM, OpcodeStr, OpNode,
4229 multiclass avx512_permil_vec<bits<8> OpcVar, string OpcodeStr, SDNode OpNode,
4232 (ins _.RC:$src1, Ctrl.RC:$src2), OpcodeStr,
4239 (ins _.RC:$src1, Ctrl.MemOp:$src2), OpcodeStr,
4246 (ins _.RC:$src1, _.ScalarMemOp:$src2), OpcodeStr,
4257 multiclass avx512_permil_vec_common<string OpcodeStr, bits<8> OpcVar,
4260 defm Z : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, _.info512,
4264 defm Z128 : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, _.info128,
4266 defm Z256 : avx512_permil_vec<OpcVar, OpcodeStr, X86VPermilpv, _.info256,
4271 multiclass avx512_permil<string OpcodeStr, bits<8> OpcImm, bits<8> OpcVar,
4274 defm NAME: avx512_permil_vec_common<OpcodeStr, OpcVar, _, Ctrl>;
4275 defm NAME: avx512_shift_rmi_sizes<OpcImm, MRMSrcReg, MRMSrcMem, OpcodeStr,
4281 defm NAME#_I: avx512_permil_vec_common<OpcodeStr, OpcVar, Ctrl, Ctrl>;
4283 OpcodeStr, X86VPermilpi, Ctrl>,
4304 multiclass avx512_pshufb_sizes<bits<8> opc, string OpcodeStr, SDNode OpNode> {
4306 defm Z: avx512_var_shift<opc, OpcodeStr, OpNode, v64i8_info>, EVEX_V512;
4309 defm Z256: avx512_var_shift<opc, OpcodeStr, OpNode, v32i8x_info>, EVEX_V256;
4310 defm Z128: avx512_var_shift<opc, OpcodeStr, OpNode, v16i8x_info>, EVEX_V128;
4346 multiclass avx512_mov_hilo_packed<bits<8> opc, string OpcodeStr, SDNode OpNode,
4351 !strconcat(OpcodeStr,
4456 multiclass avx512_fma3p_213_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
4460 OpcodeStr, "$src3, $src2", "$src2, $src3",
4467 OpcodeStr, "$src3, $src2", "$src2, $src3",
4473 OpcodeStr, !strconcat("${src3}", _.BroadcastStr,", $src2"),
4481 multiclass avx512_fma3_213_round<bits<8> opc, string OpcodeStr, SDNode OpNode,
4485 OpcodeStr, "$rc, $src3, $src2", "$src2, $src3, $rc",
4491 multiclass avx512_fma3p_213_common<bits<8> opc, string OpcodeStr, SDNode OpNode,
4494 defm Z : avx512_fma3p_213_rm<opc, OpcodeStr, OpNode, _.info512>,
4495 avx512_fma3_213_round<opc, OpcodeStr, OpNodeRnd, _.info512>,
4499 defm Z256 : avx512_fma3p_213_rm<opc, OpcodeStr, OpNode, _.info256>,
4501 defm Z128 : avx512_fma3p_213_rm<opc, OpcodeStr, OpNode, _.info128>,
4506 multiclass avx512_fma3p_213_f<bits<8> opc, string OpcodeStr, SDNode OpNode,
4508 defm PS : avx512_fma3p_213_common<opc, OpcodeStr#"ps", OpNode, OpNodeRnd,
4510 defm PD : avx512_fma3p_213_common<opc, OpcodeStr#"pd", OpNode, OpNodeRnd,
4523 multiclass avx512_fma3p_231_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
4527 OpcodeStr, "$src3, $src2", "$src2, $src3",
4534 OpcodeStr, "$src3, $src2", "$src2, $src3",
4540 OpcodeStr, "${src3}"##_.BroadcastStr##", $src2",
4548 multiclass avx512_fma3_231_round<bits<8> opc, string OpcodeStr, SDNode OpNode,
4552 OpcodeStr, "$rc, $src3, $src2", "$src2, $src3, $rc",
4558 multiclass avx512_fma3p_231_common<bits<8> opc, string OpcodeStr, SDNode OpNode,
4561 defm Z : avx512_fma3p_231_rm<opc, OpcodeStr, OpNode, _.info512>,
4562 avx512_fma3_231_round<opc, OpcodeStr, OpNodeRnd, _.info512>,
4566 defm Z256 : avx512_fma3p_231_rm<opc, OpcodeStr, OpNode, _.info256>,
4568 defm Z128 : avx512_fma3p_231_rm<opc, OpcodeStr, OpNode, _.info128>,
4573 multiclass avx512_fma3p_231_f<bits<8> opc, string OpcodeStr, SDNode OpNode,
4575 defm PS : avx512_fma3p_231_common<opc, OpcodeStr#"ps", OpNode, OpNodeRnd,
4577 defm PD : avx512_fma3p_231_common<opc, OpcodeStr#"pd", OpNode, OpNodeRnd,
4589 multiclass avx512_fma3p_132_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
4593 OpcodeStr, "$src2, $src3", "$src3, $src2",
4600 OpcodeStr, "$src2, $src3", "$src3, $src2",
4606 OpcodeStr, "${src2}"##_.BroadcastStr##", $src3",
4614 multiclass avx512_fma3_132_round<bits<8> opc, string OpcodeStr, SDNode OpNode,
4618 OpcodeStr, "$rc, $src2, $src3", "$src3, $src2, $rc",
4624 multiclass avx512_fma3p_132_common<bits<8> opc, string OpcodeStr, SDNode OpNode,
4627 defm Z : avx512_fma3p_132_rm<opc, OpcodeStr, OpNode, _.info512>,
4628 avx512_fma3_132_round<opc, OpcodeStr, OpNodeRnd, _.info512>,
4632 defm Z256 : avx512_fma3p_132_rm<opc, OpcodeStr, OpNode, _.info256>,
4634 defm Z128 : avx512_fma3p_132_rm<opc, OpcodeStr, OpNode, _.info128>,
4639 multiclass avx512_fma3p_132_f<bits<8> opc, string OpcodeStr, SDNode OpNode,
4641 defm PS : avx512_fma3p_132_common<opc, OpcodeStr#"ps", OpNode, OpNodeRnd,
4643 defm PD : avx512_fma3p_132_common<opc, OpcodeStr#"pd", OpNode, OpNodeRnd,
4656 multiclass avx512_fma3s_common<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
4660 (ins _.RC:$src2, _.RC:$src3), OpcodeStr,
4665 (ins _.RC:$src2, _.MemOp:$src3), OpcodeStr,
4670 OpcodeStr, "$rc, $src3, $src2", "$src2, $src3, $rc", RHS_VEC_rb>,
4676 !strconcat(OpcodeStr,
4682 !strconcat(OpcodeStr,
4690 string OpcodeStr, SDNode OpNode, SDNode OpNodeRnd, X86VectorVTInfo _ ,
4693 defm NAME#213#SUFF: avx512_fma3s_common<opc213, OpcodeStr#"213"#_.Suffix , _ ,
4704 defm NAME#231#SUFF: avx512_fma3s_common<opc231, OpcodeStr#"231"#_.Suffix , _ ,
4716 defm NAME#132#SUFF: avx512_fma3s_common<opc132, OpcodeStr#"132"#_.Suffix , _ ,
4730 string OpcodeStr, SDNode OpNode, SDNode OpNodeRnd>{
4732 defm NAME : avx512_fma3s_all<opc213, opc231, opc132, OpcodeStr, OpNode,
4735 defm NAME : avx512_fma3s_all<opc213, opc231, opc132, OpcodeStr, OpNode,
5013 multiclass avx512_cvt_fp_scalar<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5016 (ins _Src.RC:$src1, _Src.RC:$src2), OpcodeStr,
5022 (ins _Src.RC:$src1, _Src.MemOp:$src2), OpcodeStr,
5031 multiclass avx512_cvt_fp_sae_scalar<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5034 (ins _Src.RC:$src1, _Src.RC:$src2), OpcodeStr,
5043 multiclass avx512_cvt_fp_rc_scalar<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5046 (ins _Src.RC:$src1, _Src.RC:$src2, AVX512RC:$rc), OpcodeStr,
5053 multiclass avx512_cvt_fp_scalar_sd2ss<bits<8> opc, string OpcodeStr, SDNode OpNode,
5057 defm Z : avx512_cvt_fp_scalar<opc, OpcodeStr, _dst, _src, OpNode>,
5058 avx512_cvt_fp_rc_scalar<opc, OpcodeStr, _dst, _src,
5064 multiclass avx512_cvt_fp_scalar_ss2sd<bits<8> opc, string OpcodeStr, SDNode OpNode,
5068 defm Z : avx512_cvt_fp_scalar<opc, OpcodeStr, _dst, _src, OpNode>,
5069 avx512_cvt_fp_sae_scalar<opc, OpcodeStr, _dst, _src, OpNodeRnd>,
5104 multiclass avx512_vcvt_fp<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5110 (ins _Src.RC:$src), OpcodeStr, "$src", "$src",
5114 (ins _Src.MemOp:$src), OpcodeStr#Alias, "$src", "$src",
5119 (ins _Src.MemOp:$src), OpcodeStr,
5126 multiclass avx512_vcvt_fp_sae<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5129 (ins _Src.RC:$src), OpcodeStr,
5137 multiclass avx512_vcvt_fp_rc<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5140 (ins _Src.RC:$src, AVX512RC:$rc), OpcodeStr,
5147 multiclass avx512_cvtps2pd<bits<8> opc, string OpcodeStr> {
5149 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8f64_info, v8f32x_info, fextend>,
5150 avx512_vcvt_fp_sae<opc, OpcodeStr, v8f64_info, v8f32x_info,
5154 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2f64x_info, v4f32x_info,
5156 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f64x_info, v4f32x_info, fextend>,
5162 multiclass avx512_cvtpd2ps<bits<8> opc, string OpcodeStr> {
5164 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8f32x_info, v8f64_info, fround>,
5165 avx512_vcvt_fp_rc<opc, OpcodeStr, v8f32x_info, v8f64_info,
5169 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v2f64x_info,
5171 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v4f64x_info, fround,
5190 multiclass avx512_cvtdq2pd<bits<8> opc, string OpcodeStr, SDNode OpNode,
5194 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8f64_info, v8i32x_info, OpNode>,
5198 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2f64x_info, v4i32x_info,
5200 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f64x_info, v4i32x_info, OpNode>,
5206 multiclass avx512_cvtdq2ps<bits<8> opc, string OpcodeStr, SDNode OpNode,
5209 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v16f32_info, v16i32_info, OpNode>,
5210 avx512_vcvt_fp_rc<opc, OpcodeStr, v16f32_info, v16i32_info,
5214 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v4i32x_info, OpNode>,
5216 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v8f32x_info, v8i32x_info, OpNode>,
5222 multiclass avx512_cvttps2dq<bits<8> opc, string OpcodeStr,
5225 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v16i32_info, v16f32_info, OpNode>,
5226 avx512_vcvt_fp_sae<opc, OpcodeStr, v16i32_info, v16f32_info,
5230 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v4f32x_info, OpNode>,
5232 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v8i32x_info, v8f32x_info, OpNode>,
5238 multiclass avx512_cvtps2dq<bits<8> opc, string OpcodeStr,
5241 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v16i32_info, v16f32_info, OpNode>,
5242 avx512_vcvt_fp_rc<opc, OpcodeStr, v16i32_info, v16f32_info,
5246 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v4f32x_info, OpNode>,
5248 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v8i32x_info, v8f32x_info, OpNode>,
5254 multiclass avx512_cvttpd2dq<bits<8> opc, string OpcodeStr,
5257 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i32x_info, v8f64_info, OpNode>,
5258 avx512_vcvt_fp_sae<opc, OpcodeStr, v8i32x_info, v8f64_info,
5266 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v2f64x_info, OpNode,
5268 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v4f64x_info, OpNode,
5274 multiclass avx512_cvtpd2dq<bits<8> opc, string OpcodeStr,
5277 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i32x_info, v8f64_info, OpNode>,
5278 avx512_vcvt_fp_rc<opc, OpcodeStr, v8i32x_info, v8f64_info,
5286 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v2f64x_info, OpNode,
5288 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i32x_info, v4f64x_info, OpNode,
5294 multiclass avx512_cvtpd2qq<bits<8> opc, string OpcodeStr,
5297 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i64_info, v8f64_info, OpNode>,
5298 avx512_vcvt_fp_rc<opc, OpcodeStr, v8i64_info, v8f64_info,
5302 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2i64x_info, v2f64x_info, OpNode>,
5304 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i64x_info, v4f64x_info, OpNode>,
5310 multiclass avx512_cvttpd2qq<bits<8> opc, string OpcodeStr,
5313 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i64_info, v8f64_info, OpNode>,
5314 avx512_vcvt_fp_sae<opc, OpcodeStr, v8i64_info, v8f64_info,
5318 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2i64x_info, v2f64x_info, OpNode>,
5320 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i64x_info, v4f64x_info, OpNode>,
5326 multiclass avx512_cvtqq2pd<bits<8> opc, string OpcodeStr,
5329 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8f64_info, v8i64_info, OpNode>,
5330 avx512_vcvt_fp_rc<opc, OpcodeStr, v8f64_info, v8i64_info,
5334 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2f64x_info, v2i64x_info, OpNode>,
5336 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f64x_info, v4i64x_info, OpNode>,
5342 multiclass avx512_cvtps2qq<bits<8> opc, string OpcodeStr,
5345 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i64_info, v8f32x_info, OpNode>,
5346 avx512_vcvt_fp_rc<opc, OpcodeStr, v8i64_info, v8f32x_info,
5352 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2i64x_info, v4f32x_info, OpNode,
5354 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i64x_info, v4f32x_info, OpNode>,
5360 multiclass avx512_cvttps2qq<bits<8> opc, string OpcodeStr,
5363 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8i64_info, v8f32x_info, OpNode>,
5364 avx512_vcvt_fp_sae<opc, OpcodeStr, v8i64_info, v8f32x_info,
5370 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v2i64x_info, v4f32x_info, OpNode,
5372 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4i64x_info, v4f32x_info, OpNode>,
5378 multiclass avx512_cvtqq2ps<bits<8> opc, string OpcodeStr,
5381 defm Z : avx512_vcvt_fp<opc, OpcodeStr, v8f32x_info, v8i64_info, OpNode>,
5382 avx512_vcvt_fp_rc<opc, OpcodeStr, v8f32x_info, v8i64_info,
5390 defm Z128 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v2i64x_info, OpNode,
5392 defm Z256 : avx512_vcvt_fp<opc, OpcodeStr, v4f32x_info, v4i64x_info, OpNode,
5590 string OpcodeStr> {
5592 !strconcat(OpcodeStr, "\t{{sae}, $src2, $src1|$src1, $src2, {sae}}"),
5643 multiclass avx512_fp14_s<bits<8> opc, string OpcodeStr, SDNode OpNode,
5647 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
5652 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr,
5670 multiclass avx512_fp14_p<bits<8> opc, string OpcodeStr, SDNode OpNode,
5673 (ins _.RC:$src), OpcodeStr, "$src", "$src",
5677 (ins _.MemOp:$src), OpcodeStr, "$src", "$src",
5681 (ins _.ScalarMemOp:$src), OpcodeStr,
5689 multiclass avx512_fp14_p_vl_all<bits<8> opc, string OpcodeStr, SDNode OpNode> {
5690 defm PSZ : avx512_fp14_p<opc, !strconcat(OpcodeStr, "ps"), OpNode, v16f32_info>,
5692 defm PDZ : avx512_fp14_p<opc, !strconcat(OpcodeStr, "pd"), OpNode, v8f64_info>,
5697 defm PSZ128 : avx512_fp14_p<opc, !strconcat(OpcodeStr, "ps"),
5700 defm PSZ256 : avx512_fp14_p<opc, !strconcat(OpcodeStr, "ps"),
5703 defm PDZ128 : avx512_fp14_p<opc, !strconcat(OpcodeStr, "pd"),
5706 defm PDZ256 : avx512_fp14_p<opc, !strconcat(OpcodeStr, "pd"),
5730 multiclass avx512_fp28_s<bits<8> opc, string OpcodeStr,X86VectorVTInfo _,
5734 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
5740 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
5746 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr,
5753 multiclass avx512_eri_s<bits<8> opc, string OpcodeStr, SDNode OpNode> {
5754 defm SS : avx512_fp28_s<opc, OpcodeStr#"ss", f32x_info, OpNode>,
5756 defm SD : avx512_fp28_s<opc, OpcodeStr#"sd", f64x_info, OpNode>,
5768 multiclass avx512_fp28_p<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5772 (ins _.RC:$src), OpcodeStr, "$src", "$src",
5776 (ins _.MemOp:$src), OpcodeStr, "$src", "$src",
5782 (ins _.MemOp:$src), OpcodeStr,
5788 multiclass avx512_fp28_p_round<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
5791 (ins _.RC:$src), OpcodeStr,
5796 multiclass avx512_eri<bits<8> opc, string OpcodeStr, SDNode OpNode> {
5797 defm PS : avx512_fp28_p<opc, OpcodeStr#"ps", v16f32_info, OpNode>,
5798 avx512_fp28_p_round<opc, OpcodeStr#"ps", v16f32_info, OpNode>,
5800 defm PD : avx512_fp28_p<opc, OpcodeStr#"pd", v8f64_info, OpNode>,
5801 avx512_fp28_p_round<opc, OpcodeStr#"pd", v8f64_info, OpNode>,
5805 multiclass avx512_fp_unaryop_packed<bits<8> opc, string OpcodeStr,
5809 defm PSZ128 : avx512_fp28_p<opc, OpcodeStr#"ps", v4f32x_info, OpNode>,
5811 defm PSZ256 : avx512_fp28_p<opc, OpcodeStr#"ps", v8f32x_info, OpNode>,
5813 defm PDZ128 : avx512_fp28_p<opc, OpcodeStr#"pd", v2f64x_info, OpNode>,
5815 defm PDZ256 : avx512_fp28_p<opc, OpcodeStr#"pd", v4f64x_info, OpNode>,
5828 multiclass avx512_sqrt_packed_round<bits<8> opc, string OpcodeStr,
5831 (ins _.RC:$src, AVX512RC:$rc), OpcodeStr, "$rc, $src", "$src, $rc",
5836 multiclass avx512_sqrt_packed<bits<8> opc, string OpcodeStr,
5839 (ins _.RC:$src), OpcodeStr, "$src", "$src",
5843 (ins _.MemOp:$src), OpcodeStr, "$src", "$src",
5848 (ins _.ScalarMemOp:$src), OpcodeStr,
5856 multiclass avx512_sqrt_packed_all<bits<8> opc, string OpcodeStr,
5858 defm PSZ : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "ps"), OpNode,
5861 defm PDZ : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "pd"), OpNode,
5866 defm PSZ128 : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "ps"),
5869 defm PSZ256 : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "ps"),
5872 defm PDZ128 : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "pd"),
5875 defm PDZ256 : avx512_sqrt_packed<opc, !strconcat(OpcodeStr, "pd"),
5881 multiclass avx512_sqrt_packed_all_round<bits<8> opc, string OpcodeStr,
5883 defm PSZ : avx512_sqrt_packed_round<opc, !strconcat(OpcodeStr, "ps"), OpNodeRnd,
5885 defm PDZ : avx512_sqrt_packed_round<opc, !strconcat(OpcodeStr, "pd"), OpNodeRnd,
5889 multiclass avx512_sqrt_scalar<bits<8> opc, string OpcodeStr,X86VectorVTInfo _,
5893 (ins _.RC:$src1, _.RC:$src2), OpcodeStr,
5900 (ins _.RC:$src1, _.MemOp:$src2), OpcodeStr,
5908 (ins _.RC:$src1, _.RC:$src2, AVX512RC:$rc), OpcodeStr,
5918 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}", []>;
5923 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}", []>;
5935 multiclass avx512_sqrt_scalar_all<bits<8> opc, string OpcodeStr> {
5936 defm SSZ : avx512_sqrt_scalar<opc, OpcodeStr#"ss", f32x_info, "SS", fsqrt,
5938 defm SDZ : avx512_sqrt_scalar<opc, OpcodeStr#"sd", f64x_info, "SD", fsqrt,
5961 avx512_rndscale_scalar<bits<8> opc, string OpcodeStr, X86VectorVTInfo _> {
5965 (ins _.RC:$src1, _.RC:$src2, i32u8imm:$src3), OpcodeStr,
5971 (ins _.RC:$src1, _.RC:$src2, i32u8imm:$src3), OpcodeStr,
5978 (ins _.RC:$src1, _.MemOp:$src2, i32u8imm:$src3), OpcodeStr,
6029 multiclass avx512_trunc_common<bits<8> opc, string OpcodeStr, SDNode OpNode,
6034 (ins SrcInfo.RC:$src1), OpcodeStr ,"$src1", "$src1",
6061 OpcodeStr # "\t{$src, $dst |$dst, $src}",
6066 OpcodeStr # "\t{$src, $dst {${mask}} |$dst {${mask}}, $src}",
6102 multiclass avx512_trunc<bits<8> opc, string OpcodeStr, SDNode OpNode,
6110 defm Z128: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info128,
6115 defm Z256: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info256,
6121 defm Z: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info512,
6127 multiclass avx512_trunc_sat<bits<8> opc, string OpcodeStr, SDNode OpNode,
6134 defm Z128: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info128,
6139 defm Z256: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info256,
6145 defm Z: avx512_trunc_common<opc, OpcodeStr, OpNode, VTSrcInfo.info512,
6151 multiclass avx512_trunc_qb<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6152 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i64_info,
6162 multiclass avx512_trunc_qw<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6163 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i64_info,
6173 multiclass avx512_trunc_qd<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6174 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i64_info,
6184 multiclass avx512_trunc_db<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6185 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i32_info,
6195 multiclass avx512_trunc_dw<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6196 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i32_info,
6206 multiclass avx512_trunc_wb<bits<8> opc, string OpcodeStr, SDNode OpNode> {
6207 defm NAME: avx512_trunc<opc, OpcodeStr, OpNode, avx512vl_i16_info,
6258 multiclass avx512_extend_common<bits<8> opc, string OpcodeStr,
6263 (ins SrcInfo.RC:$src), OpcodeStr ,"$src", "$src",
6269 (ins x86memop:$src), OpcodeStr ,"$src", "$src",
6275 multiclass avx512_extend_BW<bits<8> opc, string OpcodeStr, SDNode OpNode,
6278 defm Z128: avx512_extend_common<opc, OpcodeStr, v8i16x_info,
6282 defm Z256: avx512_extend_common<opc, OpcodeStr, v16i16x_info,
6287 defm Z : avx512_extend_common<opc, OpcodeStr, v32i16_info,
6293 multiclass avx512_extend_BD<bits<8> opc, string OpcodeStr, SDNode OpNode,
6296 defm Z128: avx512_extend_common<opc, OpcodeStr, v4i32x_info,
6300 defm Z256: avx512_extend_common<opc, OpcodeStr, v8i32x_info,
6305 defm Z : avx512_extend_common<opc, OpcodeStr, v16i32_info,
6311 multiclass avx512_extend_BQ<bits<8> opc, string OpcodeStr, SDNode OpNode,
6314 defm Z128: avx512_extend_common<opc, OpcodeStr, v2i64x_info,
6318 defm Z256: avx512_extend_common<opc, OpcodeStr, v4i64x_info,
6323 defm Z : avx512_extend_common<opc, OpcodeStr, v8i64_info,
6329 multiclass avx512_extend_WD<bits<8> opc, string OpcodeStr, SDNode OpNode,
6332 defm Z128: avx512_extend_common<opc, OpcodeStr, v4i32x_info,
6336 defm Z256: avx512_extend_common<opc, OpcodeStr, v8i32x_info,
6341 defm Z : avx512_extend_common<opc, OpcodeStr, v16i32_info,
6347 multiclass avx512_extend_WQ<bits<8> opc, string OpcodeStr, SDNode OpNode,
6350 defm Z128: avx512_extend_common<opc, OpcodeStr, v2i64x_info,
6354 defm Z256: avx512_extend_common<opc, OpcodeStr, v4i64x_info,
6359 defm Z : avx512_extend_common<opc, OpcodeStr, v8i64_info,
6365 multiclass avx512_extend_DQ<bits<8> opc, string OpcodeStr, SDNode OpNode,
6369 defm Z128: avx512_extend_common<opc, OpcodeStr, v2i64x_info,
6373 defm Z256: avx512_extend_common<opc, OpcodeStr, v4i64x_info,
6378 defm Z : avx512_extend_common<opc, OpcodeStr, v8i64_info,
6402 multiclass avx512_gather<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
6408 !strconcat(OpcodeStr#_.Suffix,
6417 AVX512VLVectorVTInfo _, string OpcodeStr, string SUFF> {
6418 defm NAME##D##SUFF##Z: avx512_gather<dopc, OpcodeStr##"d", _.info512,
6420 defm NAME##Q##SUFF##Z: avx512_gather<qopc, OpcodeStr##"q", _.info512,
6423 defm NAME##D##SUFF##Z256: avx512_gather<dopc, OpcodeStr##"d", _.info256,
6425 defm NAME##Q##SUFF##Z256: avx512_gather<qopc, OpcodeStr##"q", _.info256,
6427 defm NAME##D##SUFF##Z128: avx512_gather<dopc, OpcodeStr##"d", _.info128,
6429 defm NAME##Q##SUFF##Z128: avx512_gather<qopc, OpcodeStr##"q", _.info128,
6435 AVX512VLVectorVTInfo _, string OpcodeStr, string SUFF> {
6436 defm NAME##D##SUFF##Z: avx512_gather<dopc, OpcodeStr##"d", _.info512, vz32mem,
6438 defm NAME##Q##SUFF##Z: avx512_gather<qopc, OpcodeStr##"q", _.info256, vz64mem,
6441 defm NAME##D##SUFF##Z256: avx512_gather<dopc, OpcodeStr##"d", _.info256,
6443 defm NAME##Q##SUFF##Z256: avx512_gather<qopc, OpcodeStr##"q", _.info128,
6445 defm NAME##D##SUFF##Z128: avx512_gather<dopc, OpcodeStr##"d", _.info128,
6447 defm NAME##Q##SUFF##Z128: avx512_gather<qopc, OpcodeStr##"q", _.info128,
6459 multiclass avx512_scatter<bits<8> opc, string OpcodeStr, X86VectorVTInfo _,
6466 !strconcat(OpcodeStr#_.Suffix,
6474 AVX512VLVectorVTInfo _, string OpcodeStr, string SUFF> {
6475 defm NAME##D##SUFF##Z: avx512_scatter<dopc, OpcodeStr##"d", _.info512,
6477 defm NAME##Q##SUFF##Z: avx512_scatter<qopc, OpcodeStr##"q", _.info512,
6480 defm NAME##D##SUFF##Z256: avx512_scatter<dopc, OpcodeStr##"d", _.info256,
6482 defm NAME##Q##SUFF##Z256: avx512_scatter<qopc, OpcodeStr##"q", _.info256,
6484 defm NAME##D##SUFF##Z128: avx512_scatter<dopc, OpcodeStr##"d", _.info128,
6486 defm NAME##Q##SUFF##Z128: avx512_scatter<qopc, OpcodeStr##"q", _.info128,
6492 AVX512VLVectorVTInfo _, string OpcodeStr, string SUFF> {
6493 defm NAME##D##SUFF##Z: avx512_scatter<dopc, OpcodeStr##"d", _.info512, vz32mem,
6495 defm NAME##Q##SUFF##Z: avx512_scatter<qopc, OpcodeStr##"q", _.info256, vz64mem,
6498 defm NAME##D##SUFF##Z256: avx512_scatter<dopc, OpcodeStr##"d", _.info256,
6500 defm NAME##Q##SUFF##Z256: avx512_scatter<qopc, OpcodeStr##"q", _.info128,
6502 defm NAME##D##SUFF##Z128: avx512_scatter<dopc, OpcodeStr##"d", _.info128,
6504 defm NAME##Q##SUFF##Z128: avx512_scatter<qopc, OpcodeStr##"q", _.info128,
6516 multiclass avx512_gather_scatter_prefetch<bits<8> opc, Format F, string OpcodeStr,
6520 !strconcat(OpcodeStr, "\t{$src {${mask}}|{${mask}}, $src}"),
6598 multiclass cvt_by_vec_width<bits<8> opc, X86VectorVTInfo Vec, string OpcodeStr > {
6600 !strconcat(OpcodeStr##Vec.Suffix, "\t{$src, $dst|$dst, $src}"),
6605 string OpcodeStr, Predicate prd> {
6607 defm Z : cvt_by_vec_width<opc, VTInfo.info512, OpcodeStr>, EVEX_V512;
6610 defm Z256 : cvt_by_vec_width<opc, VTInfo.info256, OpcodeStr>, EVEX_V256;
6611 defm Z128 : cvt_by_vec_width<opc, VTInfo.info128, OpcodeStr>, EVEX_V128;
6615 multiclass avx512_convert_mask_to_vector<string OpcodeStr> {
6616 defm NAME##B : cvt_mask_by_elt_width<0x28, avx512vl_i8_info, OpcodeStr,
6618 defm NAME##W : cvt_mask_by_elt_width<0x28, avx512vl_i16_info, OpcodeStr,
6620 defm NAME##D : cvt_mask_by_elt_width<0x38, avx512vl_i32_info, OpcodeStr,
6622 defm NAME##Q : cvt_mask_by_elt_width<0x38, avx512vl_i64_info, OpcodeStr,
6628 multiclass convert_vector_to_mask_common<bits<8> opc, X86VectorVTInfo _, string OpcodeStr > {
6630 !strconcat(OpcodeStr, "\t{$src, $dst|$dst, $src}"),
6634 multiclass avx512_convert_vector_to_mask<bits<8> opc, string OpcodeStr,
6637 defm Z : convert_vector_to_mask_common <opc, VTInfo.info512, OpcodeStr>,
6641 defm Z256 : convert_vector_to_mask_common<opc, VTInfo.info256, OpcodeStr>,
6643 defm Z128 : convert_vector_to_mask_common<opc, VTInfo.info128, OpcodeStr>,
6662 string OpcodeStr> {
6664 (ins _.RC:$src1), OpcodeStr, "$src1", "$src1",
6670 OpcodeStr # "\t{$src, $dst |$dst, $src}",
6675 OpcodeStr # "\t{$src, $dst {${mask}} |$dst {${mask}}, $src}",
6683 multiclass compress_by_elt_width<bits<8> opc, string OpcodeStr,
6685 defm Z : compress_by_vec_width<opc, VTInfo.info512, OpcodeStr>, EVEX_V512;
6688 defm Z256 : compress_by_vec_width<opc, VTInfo.info256, OpcodeStr>, EVEX_V256;
6689 defm Z128 : compress_by_vec_width<opc, VTInfo.info128, OpcodeStr>, EVEX_V128;
6704 string OpcodeStr> {
6706 (ins _.RC:$src1), OpcodeStr, "$src1", "$src1",
6711 (ins _.MemOp:$src1), OpcodeStr, "$src1", "$src1",
6717 multiclass expand_by_elt_width<bits<8> opc, string OpcodeStr,
6719 defm Z : expand_by_vec_width<opc, VTInfo.info512, OpcodeStr>, EVEX_V512;
6722 defm Z256 : expand_by_vec_width<opc, VTInfo.info256, OpcodeStr>, EVEX_V256;
6723 defm Z128 : expand_by_vec_width<opc, VTInfo.info128, OpcodeStr>, EVEX_V128;
6740 multiclass avx512_unary_fp_packed_imm<bits<8> opc, string OpcodeStr, SDNode OpNode,
6744 OpcodeStr##_.Suffix, "$src2, $src1", "$src2, $src2",
6751 OpcodeStr##_.Suffix, "$src2, $src1", "$src1, $src2",
6757 OpcodeStr##_.Suffix, "$src2, ${src1}"##_.BroadcastStr,
6766 multiclass avx512_unary_fp_sae_packed_imm<bits<8> opc, string OpcodeStr,
6770 OpcodeStr##_.Suffix, "$src2,{sae}, $src1",
6777 multiclass avx512_common_unary_fp_sae_packed_imm<string OpcodeStr,
6780 defm Z : avx512_unary_fp_packed_imm<opc, OpcodeStr, OpNode, _.info512>,
6781 avx512_unary_fp_sae_packed_imm<opc, OpcodeStr, OpNode, _.info512>,
6785 defm Z128 : avx512_unary_fp_packed_imm<opc, OpcodeStr, OpNode, _.info128>,
6787 defm Z256 : avx512_unary_fp_packed_imm<opc, OpcodeStr, OpNode, _.info256>,
6796 multiclass avx512_fp_packed_imm<bits<8> opc, string OpcodeStr, SDNode OpNode,
6800 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
6808 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
6815 OpcodeStr, "$src3, ${src2}"##_.BroadcastStr##", $src1",
6826 multiclass avx512_3Op_rm_imm8<bits<8> opc, string OpcodeStr, SDNode OpNode,
6831 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
6838 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
6848 multiclass avx512_3Op_imm8<bits<8> opc, string OpcodeStr, SDNode OpNode,
6850 avx512_3Op_rm_imm8<opc, OpcodeStr, OpNode, _, _>{
6855 OpcodeStr, "$src3, ${src2}"##_.BroadcastStr##", $src1",
6865 multiclass avx512_fp_scalar_imm<bits<8> opc, string OpcodeStr, SDNode OpNode,
6870 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
6878 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
6888 OpcodeStr, "$src3, $src2, $src1", "$src1, $src2, $src3",
6895 multiclass avx512_fp_sae_packed_imm<bits<8> opc, string OpcodeStr,
6899 OpcodeStr, "$src3,{sae}, $src2, $src1",
6907 multiclass avx512_fp_sae_scalar_imm<bits<8> opc, string OpcodeStr,
6911 OpcodeStr, "$src3,{sae}, $src2, $src1",
6919 multiclass avx512_common_fp_sae_packed_imm<string OpcodeStr,
6922 defm Z : avx512_fp_packed_imm<opc, OpcodeStr, OpNode, _.info512>,
6923 avx512_fp_sae_packed_imm<opc, OpcodeStr, OpNode, _.info512>,
6928 defm Z128 : avx512_fp_packed_imm<opc, OpcodeStr, OpNode, _.info128>,
6930 defm Z256 : avx512_fp_packed_imm<opc, OpcodeStr, OpNode, _.info256>,
6949 multiclass avx512_common_3Op_imm8<string OpcodeStr, AVX512VLVectorVTInfo _,
6952 defm Z : avx512_3Op_imm8<opc, OpcodeStr, OpNode, _.info512>, EVEX_V512;
6955 defm Z128 : avx512_3Op_imm8<opc, OpcodeStr, OpNode, _.info128>, EVEX_V128;
6956 defm Z256 : avx512_3Op_imm8<opc, OpcodeStr, OpNode, _.info256>, EVEX_V256;
6960 multiclass avx512_common_fp_sae_scalar_imm<string OpcodeStr,
6963 defm Z128 : avx512_fp_scalar_imm<opc, OpcodeStr, OpNode, _>,
6964 avx512_fp_sae_scalar_imm<opc, OpcodeStr, OpNode, _>;
6968 multiclass avx512_common_unary_fp_sae_packed_imm_all<string OpcodeStr,
6970 defm PS : avx512_common_unary_fp_sae_packed_imm<OpcodeStr, avx512vl_f32_info,
6972 defm PD : avx512_common_unary_fp_sae_packed_imm<OpcodeStr, avx512vl_f64_info,
7026 multiclass avx512_shuff_packed_128<string OpcodeStr, AVX512VLVectorVTInfo _,
7029 defm Z : avx512_3Op_imm8<opc, OpcodeStr, OpNode, _.info512>, EVEX_V512;
7033 defm Z256 : avx512_3Op_imm8<opc, OpcodeStr, OpNode, _.info256>, EVEX_V256;
7069 multiclass avx512_valign<string OpcodeStr, AVX512VLVectorVTInfo VTInfo_I,
7071 defm NAME: avx512_common_3Op_imm8<OpcodeStr, VTInfo_I, 0x03, X86VAlign>,
7074 defm NAME#_FP: avx512_common_3Op_imm8<OpcodeStr, VTInfo_FP, 0x03, X86VAlign>,
7109 multiclass avx512_unary_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
7112 (ins _.RC:$src1), OpcodeStr,
7118 (ins _.MemOp:$src1), OpcodeStr,
7124 multiclass avx512_unary_rmb<bits<8> opc, string OpcodeStr, SDNode OpNode,
7126 avx512_unary_rm<opc, OpcodeStr, OpNode, _> {
7129 (ins _.ScalarMemOp:$src1), OpcodeStr,
7137 multiclass avx512_unary_rm_vl<bits<8> opc, string OpcodeStr, SDNode OpNode,
7140 defm Z : avx512_unary_rm<opc, OpcodeStr, OpNode, VTInfo.info512>, EVEX_V512;
7143 defm Z256 : avx512_unary_rm<opc, OpcodeStr, OpNode, VTInfo.info256>,
7145 defm Z128 : avx512_unary_rm<opc, OpcodeStr, OpNode, VTInfo.info128>,
7150 multiclass avx512_unary_rmb_vl<bits<8> opc, string OpcodeStr, SDNode OpNode,
7153 defm Z : avx512_unary_rmb<opc, OpcodeStr, OpNode, VTInfo.info512>,
7157 defm Z256 : avx512_unary_rmb<opc, OpcodeStr, OpNode, VTInfo.info256>,
7159 defm Z128 : avx512_unary_rmb<opc, OpcodeStr, OpNode, VTInfo.info128>,
7164 multiclass avx512_unary_rm_vl_dq<bits<8> opc_d, bits<8> opc_q, string OpcodeStr,
7166 defm Q : avx512_unary_rmb_vl<opc_q, OpcodeStr#"q", OpNode, avx512vl_i64_info,
7168 defm D : avx512_unary_rmb_vl<opc_d, OpcodeStr#"d", OpNode, avx512vl_i32_info,
7172 multiclass avx512_unary_rm_vl_bw<bits<8> opc_b, bits<8> opc_w, string OpcodeStr,
7174 defm W : avx512_unary_rm_vl<opc_w, OpcodeStr#"w", OpNode, avx512vl_i16_info, prd>;
7175 defm B : avx512_unary_rm_vl<opc_b, OpcodeStr#"b", OpNode, avx512vl_i8_info, prd>;
7180 string OpcodeStr, SDNode OpNode> {
7181 defm NAME : avx512_unary_rm_vl_dq<opc_d, opc_q, OpcodeStr, OpNode,
7183 avx512_unary_rm_vl_bw<opc_b, opc_w, OpcodeStr, OpNode,
7198 multiclass avx512_ctlz<bits<8> opc, string OpcodeStr, Predicate prd>{
7200 defm NAME : avx512_unary_rm_vl_dq<opc, opc, OpcodeStr, ctlz, prd>;
7202 defm NAME#_UNDEF : avx512_unary_rm_vl_dq<opc, opc, OpcodeStr,
7212 multiclass avx512_replicate<bits<8> opc, string OpcodeStr, SDNode OpNode>{
7213 defm NAME: avx512_unary_rm_vl<opc, OpcodeStr, OpNode, avx512vl_f32_info,
7216 defm NAME#_I: avx512_unary_rm_vl<opc, OpcodeStr, OpNode, avx512vl_i32_info,
7227 multiclass avx512_movddup_128<bits<8> opc, string OpcodeStr, SDNode OpNode,
7230 (ins _.RC:$src), OpcodeStr, "$src", "$src",
7234 (ins _.ScalarMemOp:$src), OpcodeStr, "$src", "$src",
7240 multiclass avx512_movddup_common<bits<8> opc, string OpcodeStr, SDNode OpNode,
7243 defm Z : avx512_unary_rm<opc, OpcodeStr, OpNode, VTInfo.info512>, EVEX_V512;
7246 defm Z256 : avx512_unary_rm<opc, OpcodeStr, OpNode, VTInfo.info256>,
7248 defm Z128 : avx512_movddup_128<opc, OpcodeStr, OpNode, VTInfo.info128>,
7253 multiclass avx512_movddup<bits<8> opc, string OpcodeStr, SDNode OpNode>{
7254 defm NAME: avx512_movddup_common<opc, OpcodeStr, OpNode,
7257 defm NAME#_I: avx512_movddup_common<opc, OpcodeStr, OpNode,
7296 multiclass avx512_extract_elt_bw_m<bits<8> opc, string OpcodeStr, SDNode OpNode,
7301 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
7308 multiclass avx512_extract_elt_b<string OpcodeStr, X86VectorVTInfo _> {
7312 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
7317 defm NAME : avx512_extract_elt_bw_m<0x14, OpcodeStr, X86pextrb, _>, TAPD;
7321 multiclass avx512_extract_elt_w<string OpcodeStr, X86VectorVTInfo _> {
7325 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
7332 OpcodeStr#".s\t{$src2, $src1, $dst|$dst, $src1, $src2}", []>,
7335 defm NAME : avx512_extract_elt_bw_m<0x15, OpcodeStr, X86pextrw, _>, TAPD;
7339 multiclass avx512_extract_elt_dq<string OpcodeStr, X86VectorVTInfo _,
7344 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
7352 OpcodeStr#"\t{$src2, $src1, $dst|$dst, $src1, $src2}",
7364 multiclass avx512_insert_elt_m<bits<8> opc, string OpcodeStr, SDNode OpNode,
7368 OpcodeStr#"\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
7374 multiclass avx512_insert_elt_bw<bits<8> opc, string OpcodeStr, SDNode OpNode,
7379 OpcodeStr#"\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
7383 defm NAME : avx512_insert_elt_m<opc, OpcodeStr, OpNode, _, LdFrag>;
7387 multiclass avx512_insert_elt_dq<bits<8> opc, string OpcodeStr,
7392 OpcodeStr#"\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
7397 defm NAME : avx512_insert_elt_m<opc, OpcodeStr, insertelt, _,
7411 multiclass avx512_shufp<string OpcodeStr, AVX512VLVectorVTInfo VTInfo_I,
7413 defm NAME: avx512_common_3Op_imm8<OpcodeStr, VTInfo_FP, 0xC6, X86Shufp>,
7417 defm NAME#_I: avx512_common_3Op_imm8<OpcodeStr, VTInfo_I, 0xC6, X86Shufp>,
7430 Format MRMm, string OpcodeStr, X86VectorVTInfo _>{
7433 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
7438 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
7444 Format MRMm, string OpcodeStr, Predicate prd>{
7447 OpcodeStr, v8i64_info>, EVEX_V512;
7450 OpcodeStr, v4i64x_info>, EVEX_V256;
7452 OpcodeStr, v2i64x_info>, EVEX_V128;
7462 string OpcodeStr, X86VectorVTInfo _dst,
7466 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
7473 !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
7481 string OpcodeStr, Predicate prd> {
7483 defm Z512 : avx512_psadbw_packed<opc, OpNode, OpcodeStr, v8i64_info,
7486 defm Z256 : avx512_psadbw_packed<opc, OpNode, OpcodeStr, v4i64x_info,
7488 defm Z128 : avx512_psadbw_packed<opc, OpNode, OpcodeStr, v2i64x_info,
7496 multiclass avx512_ternlog<bits<8> opc, string OpcodeStr, SDNode OpNode,
7501 OpcodeStr, "$src4, $src3, $src2", "$src2, $src3, $src3",
7509 OpcodeStr, "$src4, $src3, $src2", "$src2, $src3, $src3",
7517 OpcodeStr, "$src4, ${src3}"##_.BroadcastStr##", $src2",
7528 multiclass avx512_common_ternlog<string OpcodeStr, AVX512VLVectorVTInfo _>{
7530 defm Z : avx512_ternlog<0x25, OpcodeStr, X86vpternlog, _.info512>, EVEX_V512;
7532 defm Z128 : avx512_ternlog<0x25, OpcodeStr, X86vpternlog, _.info128>, EVEX_V128;
7533 defm Z256 : avx512_ternlog<0x25, OpcodeStr, X86vpternlog, _.info256>, EVEX_V256;