Lines Matching full:vr128
333 def : Pat<(f32 (extractelt (v4f32 VR128:$src), (iPTR 0))),
334 (COPY_TO_REGCLASS (v4f32 VR128:$src), FR32)>;
335 def : Pat<(f64 (extractelt (v2f64 VR128:$src), (iPTR 0))),
336 (COPY_TO_REGCLASS (v2f64 VR128:$src), FR64)>;
358 def : Pat<(insert_subvector undef, (v2i64 VR128:$src), (iPTR 0)),
359 (INSERT_SUBREG (v4i64 (IMPLICIT_DEF)), VR128:$src, sub_xmm)>;
360 def : Pat<(insert_subvector undef, (v2f64 VR128:$src), (iPTR 0)),
361 (INSERT_SUBREG (v4f64 (IMPLICIT_DEF)), VR128:$src, sub_xmm)>;
362 def : Pat<(insert_subvector undef, (v4i32 VR128:$src), (iPTR 0)),
363 (INSERT_SUBREG (v8i32 (IMPLICIT_DEF)), VR128:$src, sub_xmm)>;
364 def : Pat<(insert_subvector undef, (v4f32 VR128:$src), (iPTR 0)),
365 (INSERT_SUBREG (v8f32 (IMPLICIT_DEF)), VR128:$src, sub_xmm)>;
366 def : Pat<(insert_subvector undef, (v8i16 VR128:$src), (iPTR 0)),
367 (INSERT_SUBREG (v16i16 (IMPLICIT_DEF)), VR128:$src, sub_xmm)>;
368 def : Pat<(insert_subvector undef, (v16i8 VR128:$src), (iPTR 0)),
369 (INSERT_SUBREG (v32i8 (IMPLICIT_DEF)), VR128:$src, sub_xmm)>;
374 (COPY_TO_REGCLASS FR32:$src, VR128)>;
376 (COPY_TO_REGCLASS FR32:$src, VR128)>;
379 (COPY_TO_REGCLASS FR64:$src, VR128)>;
381 (COPY_TO_REGCLASS FR64:$src, VR128)>;
385 def : Pat<(v2i64 (bitconvert (v4i32 VR128:$src))), (v2i64 VR128:$src)>;
386 def : Pat<(v2i64 (bitconvert (v8i16 VR128:$src))), (v2i64 VR128:$src)>;
387 def : Pat<(v2i64 (bitconvert (v16i8 VR128:$src))), (v2i64 VR128:$src)>;
388 def : Pat<(v2i64 (bitconvert (v2f64 VR128:$src))), (v2i64 VR128:$src)>;
389 def : Pat<(v2i64 (bitconvert (v4f32 VR128:$src))), (v2i64 VR128:$src)>;
390 def : Pat<(v4i32 (bitconvert (v2i64 VR128:$src))), (v4i32 VR128:$src)>;
391 def : Pat<(v4i32 (bitconvert (v8i16 VR128:$src))), (v4i32 VR128:$src)>;
392 def : Pat<(v4i32 (bitconvert (v16i8 VR128:$src))), (v4i32 VR128:$src)>;
393 def : Pat<(v4i32 (bitconvert (v2f64 VR128:$src))), (v4i32 VR128:$src)>;
394 def : Pat<(v4i32 (bitconvert (v4f32 VR128:$src))), (v4i32 VR128:$src)>;
395 def : Pat<(v8i16 (bitconvert (v2i64 VR128:$src))), (v8i16 VR128:$src)>;
396 def : Pat<(v8i16 (bitconvert (v4i32 VR128:$src))), (v8i16 VR128:$src)>;
397 def : Pat<(v8i16 (bitconvert (v16i8 VR128:$src))), (v8i16 VR128:$src)>;
398 def : Pat<(v8i16 (bitconvert (v2f64 VR128:$src))), (v8i16 VR128:$src)>;
399 def : Pat<(v8i16 (bitconvert (v4f32 VR128:$src))), (v8i16 VR128:$src)>;
400 def : Pat<(v16i8 (bitconvert (v2i64 VR128:$src))), (v16i8 VR128:$src)>;
401 def : Pat<(v16i8 (bitconvert (v4i32 VR128:$src))), (v16i8 VR128:$src)>;
402 def : Pat<(v16i8 (bitconvert (v8i16 VR128:$src))), (v16i8 VR128:$src)>;
403 def : Pat<(v16i8 (bitconvert (v2f64 VR128:$src))), (v16i8 VR128:$src)>;
404 def : Pat<(v16i8 (bitconvert (v4f32 VR128:$src))), (v16i8 VR128:$src)>;
405 def : Pat<(v4f32 (bitconvert (v2i64 VR128:$src))), (v4f32 VR128:$src)>;
406 def : Pat<(v4f32 (bitconvert (v4i32 VR128:$src))), (v4f32 VR128:$src)>;
407 def : Pat<(v4f32 (bitconvert (v8i16 VR128:$src))), (v4f32 VR128:$src)>;
408 def : Pat<(v4f32 (bitconvert (v16i8 VR128:$src))), (v4f32 VR128:$src)>;
409 def : Pat<(v4f32 (bitconvert (v2f64 VR128:$src))), (v4f32 VR128:$src)>;
410 def : Pat<(v2f64 (bitconvert (v2i64 VR128:$src))), (v2f64 VR128:$src)>;
411 def : Pat<(v2f64 (bitconvert (v4i32 VR128:$src))), (v2f64 VR128:$src)>;
412 def : Pat<(v2f64 (bitconvert (v8i16 VR128:$src))), (v2f64 VR128:$src)>;
413 def : Pat<(v2f64 (bitconvert (v16i8 VR128:$src))), (v2f64 VR128:$src)>;
414 def : Pat<(v2f64 (bitconvert (v4f32 VR128:$src))), (v2f64 VR128:$src)>;
472 def V_SET0 : I<0, Pseudo, (outs VR128:$dst), (ins), "",
473 [(set VR128:$dst, (v4f32 immAllZerosV))]>;
494 def V_SETALLONES : I<0, Pseudo, (outs VR128:$dst), (ins), "",
495 [(set VR128:$dst, (v4i32 immAllOnesV))]>;
515 def rr : SI<0x10, MRMSrcReg, (outs VR128:$dst),
516 (ins VR128:$src1, RC:$src2),
518 [(set VR128:$dst, (vt (OpNode VR128:$src1,
524 def rr_REV : SI<0x11, MRMDestReg, (outs VR128:$dst),
525 (ins VR128:$src1, RC:$src2),
588 (COPY_TO_REGCLASS (VMOVSSrm addr:$src), VR128)>;
590 (COPY_TO_REGCLASS (VMOVSSrm addr:$src), VR128)>;
592 (COPY_TO_REGCLASS (VMOVSSrm addr:$src), VR128)>;
597 (COPY_TO_REGCLASS (VMOVSDrm addr:$src), VR128)>;
599 (COPY_TO_REGCLASS (VMOVSDrm addr:$src), VR128)>;
601 (COPY_TO_REGCLASS (VMOVSDrm addr:$src), VR128)>;
603 (COPY_TO_REGCLASS (VMOVSDrm addr:$src), VR128)>;
605 (COPY_TO_REGCLASS (VMOVSDrm addr:$src), VR128)>;
620 def : Pat<(store (f32 (extractelt (v4f32 VR128:$src), (iPTR 0))),
622 (VMOVSSmr addr:$dst, (COPY_TO_REGCLASS (v4f32 VR128:$src), FR32))>;
625 def : Pat<(v4i32 (X86Movss VR128:$src1, VR128:$src2)),
626 (VMOVSSrr (v4i32 VR128:$src1),
627 (COPY_TO_REGCLASS (v4i32 VR128:$src2), FR32))>;
628 def : Pat<(v4f32 (X86Movss VR128:$src1, VR128:$src2)),
629 (VMOVSSrr (v4f32 VR128:$src1),
630 (COPY_TO_REGCLASS (v4f32 VR128:$src2), FR32))>;
645 def : Pat<(v2i64 (X86Movsd VR128:$src1, VR128:$src2)),
646 (VMOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
647 def : Pat<(v2f64 (X86Movsd VR128:$src1, VR128:$src2)),
648 (VMOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
649 def : Pat<(v4f32 (X86Movsd VR128:$src1, VR128:$src2)),
650 (VMOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
651 def : Pat<(v4i32 (X86Movsd VR128:$src1, VR128:$src2)),
652 (VMOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
670 def : Pat<(v2f64 (X86Movlpd VR128:$src1, VR128:$src2)),
671 (VMOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
672 def : Pat<(v2i64 (X86Movlpd VR128:$src1, VR128:$src2)),
673 (VMOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
674 def : Pat<(v4f32 (X86Movlps VR128:$src1, VR128:$src2)),
675 (VMOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
676 def : Pat<(v4i32 (X86Movlps VR128:$src1, VR128:$src2)),
677 (VMOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
682 // Move scalar to XMM zero-extended, zeroing a VR128 then do a
686 def : Pat<(v4f32 (X86vzmovl (v4f32 VR128:$src))),
687 (MOVSSrr (v4f32 (V_SET0)), (COPY_TO_REGCLASS VR128:$src, FR32))>;
688 def : Pat<(v4i32 (X86vzmovl (v4i32 VR128:$src))),
689 (MOVSSrr (v4i32 (V_SET0)), (COPY_TO_REGCLASS VR128:$src, FR32))>;
695 (COPY_TO_REGCLASS (MOVSSrm addr:$src), VR128)>;
697 (COPY_TO_REGCLASS (MOVSSrm addr:$src), VR128)>;
699 (COPY_TO_REGCLASS (MOVSSrm addr:$src), VR128)>;
703 def : Pat<(store (f32 (extractelt (v4f32 VR128:$src), (iPTR 0))),
705 (MOVSSmr addr:$dst, (COPY_TO_REGCLASS VR128:$src, FR32))>;
708 def : Pat<(v4i32 (X86Movss VR128:$src1, VR128:$src2)),
709 (MOVSSrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR32))>;
710 def : Pat<(v4f32 (X86Movss VR128:$src1, VR128:$src2)),
711 (MOVSSrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR32))>;
716 // Move scalar to XMM zero-extended, zeroing a VR128 then do a
725 (COPY_TO_REGCLASS (MOVSDrm addr:$src), VR128)>;
727 (COPY_TO_REGCLASS (MOVSDrm addr:$src), VR128)>;
729 (COPY_TO_REGCLASS (MOVSDrm addr:$src), VR128)>;
731 (COPY_TO_REGCLASS (MOVSDrm addr:$src), VR128)>;
733 (COPY_TO_REGCLASS (MOVSDrm addr:$src), VR128)>;
737 def : Pat<(v2i64 (X86Movsd VR128:$src1, VR128:$src2)),
738 (MOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
739 def : Pat<(v2f64 (X86Movsd VR128:$src1, VR128:$src2)),
740 (MOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
741 def : Pat<(v4f32 (X86Movsd VR128:$src1, VR128:$src2)),
742 (MOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
743 def : Pat<(v4i32 (X86Movsd VR128:$src1, VR128:$src2)),
744 (MOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
750 def : Pat<(v2f64 (X86Movlpd VR128:$src1, VR128:$src2)),
751 (MOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
752 def : Pat<(v2i64 (X86Movlpd VR128:$src1, VR128:$src2)),
753 (MOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
754 def : Pat<(v4f32 (X86Movlps VR128:$src1, VR128:$src2)),
755 (MOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
756 def : Pat<(v4i32 (X86Movlps VR128:$src1, VR128:$src2)),
757 (MOVSDrr VR128:$src1, (COPY_TO_REGCLASS VR128:$src2, FR64))>;
763 (VMOVSSrr_REV VR128L:$dst, VR128:$src1, VR128H:$src2), 0>;
765 (VMOVSDrr_REV VR128L:$dst, VR128:$src1, VR128H:$src2), 0>;
788 defm VMOVAPS : sse12_mov_packed<0x28, VR128, f128mem, alignedloadv4f32,
791 defm VMOVAPD : sse12_mov_packed<0x28, VR128, f128mem, alignedloadv2f64,
794 defm VMOVUPS : sse12_mov_packed<0x10, VR128, f128mem, loadv4f32,
797 defm VMOVUPD : sse12_mov_packed<0x10, VR128, f128mem, loadv2f64,
816 defm MOVAPS : sse12_mov_packed<0x28, VR128, f128mem, alignedloadv4f32,
819 defm MOVUPS : sse12_mov_packed<0x10, VR128, f128mem, loadv4f32,
824 defm MOVAPD : sse12_mov_packed<0x28, VR128, f128mem, alignedloadv2f64,
827 defm MOVUPD : sse12_mov_packed<0x10, VR128, f128mem, loadv2f64,
833 def VMOVAPSmr : VPSI<0x29, MRMDestMem, (outs), (ins f128mem:$dst, VR128:$src),
835 [(alignedstore (v4f32 VR128:$src), addr:$dst)],
837 def VMOVAPDmr : VPDI<0x29, MRMDestMem, (outs), (ins f128mem:$dst, VR128:$src),
839 [(alignedstore (v2f64 VR128:$src), addr:$dst)],
841 def VMOVUPSmr : VPSI<0x11, MRMDestMem, (outs), (ins f128mem:$dst, VR128:$src),
843 [(store (v4f32 VR128:$src), addr:$dst)],
845 def VMOVUPDmr : VPDI<0x11, MRMDestMem, (outs), (ins f128mem:$dst, VR128:$src),
847 [(store (v2f64 VR128:$src), addr:$dst)],
870 def VMOVAPSrr_REV : VPSI<0x29, MRMDestReg, (outs VR128:$dst),
871 (ins VR128:$src),
874 def VMOVAPDrr_REV : VPDI<0x29, MRMDestReg, (outs VR128:$dst),
875 (ins VR128:$src),
878 def VMOVUPSrr_REV : VPSI<0x11, MRMDestReg, (outs VR128:$dst),
879 (ins VR128:$src),
882 def VMOVUPDrr_REV : VPDI<0x11, MRMDestReg, (outs VR128:$dst),
883 (ins VR128:$src),
924 def MOVAPSmr : PSI<0x29, MRMDestMem, (outs), (ins f128mem:$dst, VR128:$src),
926 [(alignedstore (v4f32 VR128:$src), addr:$dst)],
928 def MOVAPDmr : PDI<0x29, MRMDestMem, (outs), (ins f128mem:$dst, VR128:$src),
930 [(alignedstore (v2f64 VR128:$src), addr:$dst)],
932 def MOVUPSmr : PSI<0x11, MRMDestMem, (outs), (ins f128mem:$dst, VR128:$src),
934 [(store (v4f32 VR128:$src), addr:$dst)],
936 def MOVUPDmr : PDI<0x11, MRMDestMem, (outs), (ins f128mem:$dst, VR128:$src),
938 [(store (v2f64 VR128:$src), addr:$dst)],
945 def MOVAPSrr_REV : PSI<0x29, MRMDestReg, (outs VR128:$dst), (ins VR128:$src),
948 def MOVAPDrr_REV : PDI<0x29, MRMDestReg, (outs VR128:$dst), (ins VR128:$src),
951 def MOVUPSrr_REV : PSI<0x11, MRMDestReg, (outs VR128:$dst), (ins VR128:$src),
954 def MOVUPDrr_REV : PDI<0x11, MRMDestReg, (outs VR128:$dst), (ins VR128:$src),
967 def : Pat<(alignedstore (v2i64 VR128:$src), addr:$dst),
968 (VMOVAPSmr addr:$dst, VR128:$src)>;
969 def : Pat<(alignedstore (v4i32 VR128:$src), addr:$dst),
970 (VMOVAPSmr addr:$dst, VR128:$src)>;
971 def : Pat<(store (v2i64 VR128:$src), addr:$dst),
972 (VMOVUPSmr addr:$dst, VR128:$src)>;
973 def : Pat<(store (v4i32 VR128:$src), addr:$dst),
974 (VMOVUPSmr addr:$dst, VR128:$src)>;
1033 def : Pat<(alignedstore (v8i16 VR128:$src), addr:$dst),
1034 (VMOVAPSmr addr:$dst, VR128:$src)>;
1035 def : Pat<(alignedstore (v16i8 VR128:$src), addr:$dst),
1036 (VMOVAPSmr addr:$dst, VR128:$src)>;
1037 def : Pat<(store (v8i16 VR128:$src), addr:$dst),
1038 (VMOVUPSmr addr:$dst, VR128:$src)>;
1039 def : Pat<(store (v16i8 VR128:$src), addr:$dst),
1040 (VMOVUPSmr addr:$dst, VR128:$src)>;
1062 def : Pat<(alignedstore (v2i64 VR128:$src), addr:$dst),
1063 (MOVAPSmr addr:$dst, VR128:$src)>;
1064 def : Pat<(alignedstore (v4i32 VR128:$src), addr:$dst),
1065 (MOVAPSmr addr:$dst, VR128:$src)>;
1066 def : Pat<(alignedstore (v8i16 VR128:$src), addr:$dst),
1067 (MOVAPSmr addr:$dst, VR128:$src)>;
1068 def : Pat<(alignedstore (v16i8 VR128:$src), addr:$dst),
1069 (MOVAPSmr addr:$dst, VR128:$src)>;
1070 def : Pat<(store (v2i64 VR128:$src), addr:$dst),
1071 (MOVUPSmr addr:$dst, VR128:$src)>;
1072 def : Pat<(store (v4i32 VR128:$src), addr:$dst),
1073 (MOVUPSmr addr:$dst, VR128:$src)>;
1074 def : Pat<(store (v8i16 VR128
1075 (MOVUPSmr addr:$dst, VR128:$src)>;
1076 def : Pat<(store (v16i8 VR128:$src), addr:$dst),
1077 (MOVUPSmr addr:$dst, VR128:$src)>;
1111 (outs VR128:$dst), (ins VR128:$src1, f64mem:$src2),
1113 [(set VR128:$dst,
1114 (psnode VR128:$src1,
1120 (outs VR128:$dst), (ins VR128:$src1, f64mem:$src2),
1122 [(set VR128:$dst, (v2f64 (pdnode VR128:$src1,
1149 def VMOVLPSmr : VPSI<0x13, MRMDestMem, (outs), (ins f64mem:$dst, VR128:$src),
1151 [(store (f64 (extractelt (bc_v2f64 (v4f32 VR128:$src)),
1154 def VMOVLPDmr : VPDI<0x13, MRMDestMem, (outs), (ins f64mem:$dst, VR128:$src),
1156 [(store (f64 (extractelt (v2f64 VR128:$src),
1160 def MOVLPSmr : PSI<0x13, MRMDestMem, (outs), (ins f64mem:$dst, VR128:$src),
1162 [(store (f64 (extractelt (bc_v2f64 (v4f32 VR128:$src)),
1165 def MOVLPDmr : PDI<0x13, MRMDestMem, (outs), (ins f64mem:$dst, VR128:$src),
1167 [(store (f64 (extractelt (v2f64 VR128:$src),
1174 def : Pat<(v4f32 (X86Movlps VR128:$src1, (load addr:$src2))),
1175 (VMOVLPSrm VR128:$src1, addr:$src2)>;
1176 def : Pat<(v4i32 (X86Movlps VR128:$src1, (load addr:$src2))),
1177 (VMOVLPSrm VR128:$src1, addr:$src2)>;
1180 def : Pat<(v2f64 (X86Movlpd VR128:$src1, (load addr:$src2))),
1181 (VMOVLPDrm VR128:$src1, addr:$src2)>;
1182 def : Pat<(v2i64 (X86Movlpd VR128:$src1, (load addr:$src2))),
1183 (VMOVLPDrm VR128:$src1, addr:$src2)>;
1184 def : Pat<(v2f64 (X86Movsd VR128:$src1,
1186 (VMOVLPDrm VR128:$src1, addr:$src2)>;
1189 def : Pat<(store (v4f32 (X86Movlps (load addr:$src1), VR128:$src2)),
1191 (VMOVLPSmr addr:$src1, VR128:$src2)>;
1193 (bc_v4i32 (loadv2i64 addr:$src1)), VR128:$src2)), addr:$src1),
1194 (VMOVLPSmr addr:$src1, VR128:$src2)>;
1195 def : Pat<(store (v2f64 (X86Movlpd (load addr:$src1), VR128:$src2)),
1197 (VMOVLPDmr addr:$src1, VR128:$src2)>;
1198 def : Pat<(store (v2i64 (X86Movlpd (load addr:$src1), VR128:$src2)),
1200 (VMOVLPDmr addr:$src1, VR128:$src2)>;
1205 def : Pat<(store (i64 (extractelt (bc_v2i64 (v4f32 VR128:$src2)),
1207 (MOVLPSmr addr:$src1, VR128:$src2)>;
1210 def : Pat<(v4f32 (X86Movlps VR128:$src1, (load addr:$src2))),
1211 (MOVLPSrm VR128:$src1, addr:$src2)>;
1212 def : Pat<(v4i32 (X86Movlps VR128:$src1, (load addr:$src2))),
1213 (MOVLPSrm VR128:$src1, addr:$src2)>;
1214 def : Pat<(X86Movlps VR128:$src1,
1216 (MOVLPSrm VR128:$src1, addr:$src2)>;
1219 def : Pat<(store (v4f32 (X86Movlps (load addr:$src1), VR128:$src2)),
1221 (MOVLPSmr addr:$src1, VR128:$src2)>;
1223 (bc_v4i32 (loadv2i64 addr:$src1)), VR128:$src2)),
1225 (MOVLPSmr addr:$src1, VR128:$src2)>;
1230 def : Pat<(v2f64 (X86Movlpd VR128:$src1, (load addr:$src2))),
1231 (MOVLPDrm VR128:$src1, addr:$src2)>;
1232 def : Pat<(v2i64 (X86Movlpd VR128:$src1, (load addr:$src2))),
1233 (MOVLPDrm VR128:$src1, addr:$src2)>;
1234 def : Pat<(v2f64 (X86Movsd VR128:$src1,
1236 (MOVLPDrm VR128:$src1, addr:$src2)>;
1239 def : Pat<(store (v2f64 (X86Movlpd (load addr:$src1), VR128:$src2)),
1241 (MOVLPDmr addr:$src1, VR128:$src2)>;
1242 def : Pat<(store (v2i64 (X86Movlpd (load addr:$src1), VR128:$src2)),
1244 (MOVLPDmr addr:$src1, VR128:$src2)>;
1260 def VMOVHPSmr : VPSI<0x17, MRMDestMem, (outs), (ins f64mem:$dst, VR128:$src),
1263 (X86Unpckh (bc_v2f64 (v4f32 VR128:$src)),
1264 (bc_v2f64 (v4f32 VR128:$src))),
1266 def VMOVHPDmr : VPDI<0x17, MRMDestMem, (outs), (ins f64mem:$dst, VR128:$src),
1269 (v2f64 (X86Unpckh VR128:$src, VR128:$src)),
1272 def MOVHPSmr : PSI<0x17, MRMDestMem, (outs), (ins f64mem:$dst, VR128:$src),
1275 (X86Unpckh (bc_v2f64 (v4f32 VR128:$src)),
1276 (bc_v2f64 (v4f32 VR128:$src))),
1278 def MOVHPDmr : PDI<0x17, MRMDestMem, (outs), (ins f64mem:$dst, VR128:$src),
1281 (v2f64 (X86Unpckh VR128:$src, VR128:$src)),
1287 def : Pat<(X86Movlhps VR128:$src1,
1289 (VMOVHPSrm VR128:$src1, addr:$src2)>;
1290 def : Pat<(X86Movlhps VR128:$src1,
1292 (VMOVHPSrm VR128:$src1, addr:$src2)>;
1300 def : Pat<(v2f64 (X86Unpckl VR128:$src1,
1302 (VMOVHPDrm VR128:$src1, addr:$src2)>;
1305 def : Pat<(v2f64 (X86Unpckl VR128:$src1,
1307 (VMOVHPDrm VR128:$src1, addr:$src2)>;
1310 (v2f64 (X86VPermilpi VR128:$src, (i8 1))),
1312 (VMOVHPDmr addr:$dst, VR128:$src)>;
1317 def : Pat<(X86Movlhps VR128:$src1,
1319 (MOVHPSrm VR128:$src1, addr:$src2)>;
1320 def : Pat<(X86Movlhps VR128:$src1,
1322 (MOVHPSrm VR128:$src1, addr:$src2)>;
1332 def : Pat<(v2f64 (X86Unpckl VR128:$src1,
1334 (MOVHPDrm VR128:$src1, addr:$src2)>;
1337 def : Pat<(v2f64 (X86Unpckl VR128:$src1,
1339 (MOVHPDrm VR128:$src1, addr:$src2)>;
1342 (v2f64 (X86Shufp VR128:$src, VR128:$src, (i8 1))),
1344 (MOVHPDmr addr:$dst, VR128:$src)>;
1352 def VMOVLHPSrr : VPSI<0x16, MRMSrcReg, (outs VR128:$dst),
1353 (ins VR128:$src1, VR128:$src2),
1355 [(set VR128:$dst,
1356 (v4f32 (X86Movlhps VR128:$src1, VR128:$src2)))],
1359 def VMOVHLPSrr : VPSI<0x12, MRMSrcReg, (outs VR128:$dst),
1360 (ins VR128:$src1, VR128:$src2),
1362 [(set VR128:$dst,
1363 (v4f32 (X86Movhlps VR128:$src1, VR128:$src2)))],
1368 def MOVLHPSrr : PSI<0x16, MRMSrcReg, (outs VR128:$dst),
1369 (ins VR128:$src1, VR128:$src2),
1371 [(set VR128:$dst,
1372 (v4f32 (X86Movlhps VR128:$src1, VR128:$src2)))],
1374 def MOVHLPSrr : PSI<0x12, MRMSrcReg, (outs VR128:$dst),
1375 (ins VR128:$src1, VR128:$src2),
1377 [(set VR128:$dst,
1378 (v4f32 (X86Movhlps VR128:$src1, VR128:$src2)))],
1384 def : Pat<(v4i32 (X86Movlhps VR128:$src1, VR128:$src2)),
1385 (VMOVLHPSrr VR128:$src1, VR128:$src2)>;
1386 def : Pat<(v2i64 (X86Movlhps VR128:$src1, VR128:$src2)),
1387 (VMOVLHPSrr (v2i64 VR128:$src1), VR128:$src2)>;
1390 def : Pat<(v4i32 (X86Movhlps VR128:$src1, VR128:$src2)),
1391 (VMOVHLPSrr VR128:$src1, VR128:$src2)>;
1396 def : Pat<(v4i32 (X86Movlhps VR128:$src1, VR128:$src2)),
1397 (MOVLHPSrr VR128:$src1, VR128:$src2)>;
1398 def : Pat<(v2i64 (X86Movlhps VR128:$src1, VR128:$src2)),
1399 (MOVLHPSrr (v2i64 VR128:$src1), VR128:$src2)>;
1402 def : Pat<(v4i32 (X86Movhlps VR128:$src1, VR128:$src2)),
1403 (MOVHLPSrr VR128:$src1, VR128:$src2)>;
1638 defm VCVTSD2SI : sse12_cvt_sint<0x2D, VR128, GR32,
1641 defm VCVTSD2SI64 : sse12_cvt_sint<0x2D, VR128, GR64,
1645 defm CVTSD2SI : sse12_cvt_sint<0x2D, VR128, GR32, int_x86_sse2_cvtsd2si,
1647 defm CVTSD2SI64 : sse12_cvt_sint<0x2D, VR128, GR64, int_x86_sse2_cvtsd2si64,
1653 defm Int_VCVTSI2SS : sse12_cvt_sint_3addr<0x2A, GR32, VR128,
1656 defm Int_VCVTSI2SS64 : sse12_cvt_sint_3addr<0x2A, GR64, VR128,
1660 defm Int_VCVTSI2SD : sse12_cvt_sint_3addr<0x2A, GR32, VR128,
1663 defm Int_VCVTSI2SD64 : sse12_cvt_sint_3addr<0x2A, GR64, VR128,
1669 defm Int_CVTSI2SS : sse12_cvt_sint_3addr<0x2A, GR32, VR128,
1672 defm Int_CVTSI2SS64 : sse12_cvt_sint_3addr<0x2A, GR64, VR128,
1675 defm Int_CVTSI2SD : sse12_cvt_sint_3addr<0x2A, GR32, VR128,
1678 defm Int_CVTSI2SD64 : sse12_cvt_sint_3addr<0x2A, GR64, VR128,
1689 defm Int_VCVTTSS2SI : sse12_cvt_sint<0x2C, VR128, GR32, int_x86_sse_cvttss2si,
1692 defm Int_VCVTTSS2SI64 : sse12_cvt_sint<0x2C, VR128, GR64,
1696 defm Int_VCVTTSD2SI : sse12_cvt_sint<0x2C, VR128, GR32, int_x86_sse2_cvttsd2si,
1699 defm Int_VCVTTSD2SI64 : sse12_cvt_sint<0x2C, VR128, GR64,
1704 defm Int_CVTTSS2SI : sse12_cvt_sint<0x2C, VR128, GR32, int_x86_sse_cvttss2si,
1707 defm Int_CVTTSS2SI64 : sse12_cvt_sint<0x2C, VR128, GR64,
1710 defm Int_CVTTSD2SI : sse12_cvt_sint<0x2C, VR128, GR32, int_x86_sse2_cvttsd2si,
1713 defm Int_CVTTSD2SI64 : sse12_cvt_sint<0x2C, VR128, GR64,
1719 defm VCVTSS2SI : sse12_cvt_sint<0x2D, VR128, GR32, int_x86_sse_cvtss2si,
1722 defm VCVTSS2SI64 : sse12_cvt_sint<0x2D, VR128, GR64, int_x86_sse_cvtss2si64,
1726 defm CVTSS2SI : sse12_cvt_sint<0x2D, VR128, GR32, int_x86_sse_cvtss2si,
1729 defm CVTSS2SI64 : sse12_cvt_sint<0x2D, VR128, GR64, int_x86_sse_cvtss2si64,
1733 defm VCVTDQ2PS : sse12_cvt_p<0x5B, VR128, VR128, i128mem,
1742 defm CVTDQ2PS : sse12_cvt_p<0x5B, VR128, VR128, i128mem,
1749 VR128:$src), 0>;
1753 (VCVTSD2SIrr GR32:$dst, VR128:$src), 0>;
1757 (VCVTSS2SI64rr GR64:$dst, VR128:$src), 0>;
1761 (VCVTSD2SI64rr GR64:$dst, VR128:$src), 0>;
1767 (CVTSS2SIrr GR32:$dst, VR128:$src), 0>;
1771 (CVTSD2SIrr GR32:$dst, VR128:$src), 0>;
1775 (CVTSS2SI64rr GR64:$dst, VR128:$src), 0>;
1779 (CVTSD2SI64rr GR64:$dst, VR128:$src), 0>;
1817 (outs VR128:$dst), (ins VR128:$src1, VR128:$src2),
1819 [(set VR128:$dst,
1820 (int_x86_sse2_cvtsd2ss VR128:$src1, VR128:$src2))],
1824 (outs VR128:$dst), (ins VR128:$src1, sdmem:$src2),
1826 [(set VR128:$dst, (int_x86_sse2_cvtsd2ss
1827 VR128:$src1, sse_load_f64:$src2))],
1833 (outs VR128:$dst), (ins VR128:$src1, VR128:$src2),
1835 [(set VR128:$dst,
1836 (int_x86_sse2_cvtsd2ss VR128:$src1, VR128:$src2))],
1840 (outs VR128:$dst), (ins VR128:$src1, sdmem:$src2),
1842 [(set VR128:$dst, (int_x86_sse2_cvtsd2ss
1843 VR128:$src1, sse_load_f64:$src2))],
1902 (outs VR128:$dst), (ins VR128:$src1, VR128:$src2),
1904 [(set VR128:$dst,
1905 (int_x86_sse2_cvtss2sd VR128:$src1, VR128:$src2))],
1909 (outs VR128:$dst), (ins VR128:$src1, ssmem:$src2),
1911 [(set VR128:$dst,
1912 (int_x86_sse2_cvtss2sd VR128:$src1, sse_load_f32:$src2))],
1917 (outs VR128:$dst), (ins VR128:$src1, VR128:$src2),
1919 [(set VR128:$dst,
1920 (int_x86_sse2_cvtss2sd VR128:$src1, VR128:$src2))],
1924 (outs VR128:$dst), (ins VR128:$src1, ssmem:$src2),
1926 [(set VR128:$dst,
1927 (int_x86_sse2_cvtss2sd VR128:$src1, sse_load_f32:$src2))],
1934 def VCVTPS2DQrr : VPDI<0x5B, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
1936 [(set VR128:$dst, (int_x86_sse2_cvtps2dq VR128:$src))],
1938 def VCVTPS2DQrm : VPDI<0x5B, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
1940 [(set VR128:$dst,
1953 def CVTPS2DQrr : PDI<0x5B, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
1955 [(set VR128:$dst, (int_x86_sse2_cvtps2dq VR128:$src))],
1957 def CVTPS2DQrm : PDI<0x5B, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
1959 [(set VR128:$dst,
1969 def VCVTPD2DQrr : SDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
1971 [(set VR128:$dst, (int_x86_sse2_cvtpd2dq VR128:$src))]>,
1976 (VCVTPD2DQrr VR128:$dst, VR128:$src), 0>;
1977 def VCVTPD2DQXrm : SDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
1979 [(set VR128:$dst,
1984 def VCVTPD2DQYrr : SDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR256:$src),
1986 [(set VR128:$dst,
1989 def VCVTPD2DQYrm : SDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f256mem:$src),
1991 [(set VR128:$dst,
1995 (VCVTPD2DQYrr VR128:$dst, VR256:$src), 0>;
1998 def CVTPD2DQrm : SDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
2000 [(set VR128:$dst,
2003 def CVTPD2DQrr : SDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
2005 [(set VR128:$dst, (int_x86_sse2_cvtpd2dq VR128:$src))],
2010 def VCVTTPS2DQrr : VS2SI<0x5B, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
2013 def VCVTTPS2DQrm : VS2SI<0x5B, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
2024 def CVTTPS2DQrr : S2SI<0x5B, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
2027 def CVTTPS2DQrm : S2SI<0x5B, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
2032 def : Pat<(int_x86_sse2_cvtdq2ps VR128:$src),
2033 (VCVTDQ2PSrr VR128:$src)>;
2039 def : Pat<(v4f32 (sint_to_fp (v4i32 VR128:$src))),
2040 (VCVTDQ2PSrr VR128:$src)>;
2044 def : Pat<(v4i32 (fp_to_sint (v4f32 VR128:$src))),
2045 (VCVTTPS2DQrr VR128:$src)>;
2061 def : Pat<(v4f32 (sint_to_fp (v4i32 VR128:$src))),
2062 (CVTDQ2PSrr VR128:$src)>;
2066 def : Pat<(int_x86_sse2_cvtdq2ps VR128:$src),
2067 (CVTDQ2PSrr VR128:$src)>;
2071 def : Pat<(v4i32 (fp_to_sint (v4f32 VR128:$src))),
2072 (CVTTPS2DQrr VR128:$src)>;
2077 def VCVTTPD2DQrr : VPDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
2079 [(set VR128:$dst,
2080 (int_x86_sse2_cvttpd2dq VR128:$src))],
2089 (VCVTTPD2DQrr VR128:$dst, VR128:$src), 0>;
2090 def VCVTTPD2DQXrm : VPDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
2092 [(set VR128:$dst, (int_x86_sse2_cvttpd2dq
2097 def VCVTTPD2DQYrr : VPDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR256:$src),
2100 def VCVTTPD2DQYrm : VPDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f256mem:$src),
2104 (VCVTTPD2DQYrr VR128:$dst, VR256:$src), 0>;
2113 def CVTTPD2DQrr : PDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
2115 [(set VR128:$dst, (int_x86_sse2_cvttpd2dq VR128:$src))],
2117 def CVTTPD2DQrm : PDI<0xE6, MRMSrcMem, (outs VR128:$dst),(ins f128mem:$src),
2119 [(set VR128:$dst, (int_x86_sse2_cvttpd2dq
2127 def VCVTPS2PDrr : I<0x5A, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
2130 def VCVTPS2PDrm : I<0x5A, MRMSrcMem, (outs VR128:$dst), (ins f64mem:$src),
2132 [(set VR128:$dst, (v2f64 (extloadv2f32 addr:$src)))],
2134 def VCVTPS2PDYrr : I<0x5A, MRMSrcReg, (outs VR256:$dst), (ins VR128:$src),
2143 def CVTPS2PDrr : I<0x5A, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
2146 def CVTPS2PDrm : I<0x5A, MRMSrcMem, (outs VR128:$dst), (ins f64mem:$src),
2148 [(set VR128:$dst, (v2f64 (extloadv2f32 addr:$src)))],
2155 def VCVTDQ2PDrm : S2SI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
2158 def VCVTDQ2PDrr : S2SI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
2164 def VCVTDQ2PDYrr : S2SI<0xE6, MRMSrcReg, (outs VR256:$dst), (ins VR128:$src),
2170 def CVTDQ2PDrm : S2SI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
2173 def CVTDQ2PDrr : S2SI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
2179 def : Pat<(v2f64 (X86cvtdq2pd (v4i32 VR128:$src))),
2180 (VCVTDQ2PDrr VR128:$src)>;
2186 def : Pat<(v4f64 (sint_to_fp (v4i32 VR128:$src))),
2187 (VCVTDQ2PDYrr VR128:$src)>;
2194 def : Pat<(v2f64 (X86cvtdq2pd (v4i32 VR128:$src))),
2195 (CVTDQ2PDrr VR128:$src)>;
2206 def VCVTPD2PSrr : VPDI<0x5A, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
2208 [(set VR128:$dst, (int_x86_sse2_cvtpd2ps VR128:$src))],
2213 (VCVTPD2PSrr VR128:$dst, VR128:$src), 0>;
2214 def VCVTPD2PSXrm : VPDI<0x5A, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
2216 [(set VR128:$dst,
2221 def VCVTPD2PSYrr : VPDI<0x5A, MRMSrcReg, (outs VR128:$dst), (ins VR256:$src),
2223 [(set VR128:$dst,
2226 def VCVTPD2PSYrm : VPDI<0x5A, MRMSrcMem, (outs VR128:$dst), (ins f256mem:$src),
2228 [(set VR128:$dst,
2232 (VCVTPD2PSYrr VR128:$dst, VR256:$src), 0>;
2234 def CVTPD2PSrr : PDI<0x5A, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
2236 [(set VR128:$dst, (int_x86_sse2_cvtpd2ps VR128:$src))],
2238 def CVTPD2PSrm : PDI<0x5A, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
2240 [(set VR128:$dst,
2257 def : Pat<(v4f32 (X86vfpround (v2f64 VR128:$src))),
2258 (VCVTPD2PSrr VR128:$src)>;
2266 def : Pat<(v2f64 (X86vfpext (v4f32 VR128:$src))),
2267 (VCVTPS2PDrr VR128:$src)>;
2268 def : Pat<(v4f64 (fextend (v4f32 VR128:$src))),
2269 (VCVTPS2PDYrr VR128:$src)>;
2276 def : Pat<(v4f32 (X86vfpround (v2f64 VR128:$src))),
2277 (CVTPD2PSrr VR128:$src)>;
2281 def : Pat<(v2f64 (X86vfpext (v4f32 VR128:$src))),
2282 (CVTPS2PDrr VR128:$src)>;
2342 def rr : SIi8<0xC2, MRMSrcReg, (outs VR128:$dst),
2343 (ins VR128:$src1, VR128:$src, CC:$cc), asm,
2344 [(set VR128:$dst, (Int VR128:$src1,
2345 VR128:$src, immLeaf:$cc))],
2348 def rm : SIi8<0xC2, MRMSrcMem, (outs VR128:$dst),
2349 (ins VR128:$src1, x86memop:$src, CC:$cc), asm,
2350 [(set VR128:$dst, (Int VR128:$src1,
2408 defm Int_VUCOMISS : sse12_ord_cmp<0x2E, VR128, X86ucomi, v4f32, f128mem,
2410 defm Int_VUCOMISD : sse12_ord_cmp<0x2E, VR128, X86ucomi, v2f64, f128mem,
2413 defm Int_VCOMISS : sse12_ord_cmp<0x2F, VR128, X86comi, v4f32, f128mem,
2415 defm Int_VCOMISD : sse12_ord_cmp<0x2F, VR128, X86comi, v2f64, f128mem,
2431 defm Int_UCOMISS : sse12_ord_cmp<0x2E, VR128, X86ucomi, v4f32, f128mem,
2433 defm Int_UCOMISD : sse12_ord_cmp<0x2E, VR128, X86ucomi, v2f64, f128mem,
2436 defm Int_COMISS : sse12_ord_cmp<0x2F, VR128, X86comi, v4f32, f128mem, load,
2438 defm Int_COMISD : sse12_ord_cmp<0x2F, VR128, X86comi, v2f64, f128mem, load,
2473 defm VCMPPS : sse12_cmp_packed<VR128, f128mem, AVXCC, int_x86_sse_cmp_ps,
2477 defm VCMPPD : sse12_cmp_packed<VR128, f128mem, AVXCC, int_x86_sse2_cmp_pd,
2490 defm CMPPS : sse12_cmp_packed<VR128, f128mem, SSECC, int_x86_sse_cmp_ps,
2494 defm CMPPD : sse12_cmp_packed<VR128, f128mem, SSECC, int_x86_sse2_cmp_pd,
2501 def : Pat<(v4f32 (X86cmpp (v4f32 VR128:$src1), VR128:$src2, imm:$cc)),
2502 (VCMPPSrri (v4f32 VR128:$src1), (v4f32 VR128:$src2), imm:$cc)>;
2503 def : Pat<(v4f32 (X86cmpp (v4f32 VR128:$src1), (loadv4f32 addr:$src2), imm:$cc)),
2504 (VCMPPSrmi (v4f32 VR128:$src1), addr:$src2, imm:$cc)>;
2505 def : Pat<(v2f64 (X86cmpp (v2f64 VR128:$src1), VR128:$src2, imm:$cc)),
2506 (VCMPPDrri VR128:$src1, VR128:$src2, imm:$cc)>;
2507 def : Pat<(v2f64 (X86cmpp (v2f64 VR128:$src1), (loadv2f64 addr:$src2), imm:$cc)),
2508 (VCMPPDrmi VR128:$src1, addr:$src2, imm:$cc)>;
2521 def : Pat<(v4f32 (X86cmpp (v4f32 VR128:$src1), VR128:$src2, imm:$cc)),
2522 (CMPPSrri (v4f32 VR128:$src1), (v4f32 VR128:$src2), imm:$cc)>;
2523 def : Pat<(v4f32 (X86cmpp (v4f32 VR128:$src1), (memopv4f32 addr:$src2), imm:$cc)),
2524 (CMPPSrmi (v4f32 VR128:$src1), addr:$src2, imm:$cc)>;
2528 def : Pat<(v2f64 (X86cmpp (v2f64 VR128:$src1), VR128:$src2, imm:$cc)),
2529 (CMPPDrri VR128:$src1, VR128:$src2, imm:$cc)>;
2530 def : Pat<(v2f64 (X86cmpp (v2f64 VR128:$src1), (memopv2f64 addr:$src2), imm:$cc)),
2531 (CMPPDrmi VR128:$src1, addr:$src2, imm:$cc)>;
2555 defm VSHUFPS : sse12_shuffle<VR128, f128mem, v4f32,
2561 defm VSHUFPD : sse12_shuffle<VR128, f128mem, v2f64,
2569 defm SHUFPS : sse12_shuffle<VR128, f128mem, v4f32,
2572 defm SHUFPD : sse12_shuffle<VR128, f128mem, v2f64,
2578 def : Pat<(v4i32 (X86Shufp VR128:$src1,
2580 (VSHUFPSrmi VR128:$src1, addr:$src2, imm:$imm)>;
2581 def : Pat<(v4i32 (X86Shufp VR128:$src1, VR128:$src2, (i8 imm:$imm))),
2582 (VSHUFPSrri VR128:$src1, VR128:$src2, imm:$imm)>;
2584 def : Pat<(v2i64 (X86Shufp VR128:$src1,
2586 (VSHUFPDrmi VR128:$src1, addr:$src2, imm:$imm)>;
2587 def : Pat<(v2i64 (X86Shufp VR128:$src1, VR128:$src2, (i8 imm:$imm))),
2588 (VSHUFPDrri VR128:$src1, VR128:$src2, imm:$imm)>;
2605 def : Pat<(v4i32 (X86Shufp VR128:$src1,
2607 (SHUFPSrmi VR128:$src1, addr:$src2, imm:$imm)>;
2608 def : Pat<(v4i32 (X86Shufp VR128:$src1, VR128:$src2, (i8 imm:$imm))),
2609 (SHUFPSrri VR128:$src1, VR128:$src2, imm:$imm)>;
2614 def : Pat<(v2i64 (X86Shufp VR128:$src1,
2616 (SHUFPDrmi VR128:$src1, addr:$src2, imm:$imm)>;
2617 def : Pat<(v2i64 (X86Shufp VR128:$src1, VR128:$src2, (i8 imm:$imm))),
2618 (SHUFPDrri VR128:$src1, VR128:$src2, imm:$imm)>;
2646 VR128, f128mem, "unpckhps\t{$src2, $src1, $dst|$dst, $src1, $src2}",
2649 VR128, f128mem, "unpckhpd\t{$src2, $src1, $dst|$dst, $src1, $src2}",
2652 VR128, f128mem, "unpcklps\t{$src2, $src1, $dst|$dst, $src1, $src2}",
2655 VR128, f128mem, "unpcklpd\t{$src2, $src1, $dst|$dst, $src1, $src2}",
2673 VR128, f128mem, "unpckhps\t{$src2, $dst|$dst, $src2}",
2676 VR128, f128mem, "unpckhpd\t{$src2, $dst|$dst, $src2}",
2679 VR128, f128mem, "unpcklps\t{$src2, $dst|$dst, $src2}",
2682 VR128, f128mem, "unpcklpd\t{$src2, $dst|$dst, $src2}",
2720 defm VMOVMSKPS : sse12_extr_sign_mask<VR128, v4f32, "movmskps",
2722 defm VMOVMSKPD : sse12_extr_sign_mask<VR128, v2f64, "movmskpd",
2730 defm MOVMSKPS : sse12_extr_sign_mask<VR128, v4f32, "movmskps",
2732 defm MOVMSKPD : sse12_extr_sign_mask<VR128, v2f64, "movmskpd",
2771 VR128, loadv2i64, i128mem, itins, IsCommutable, 0>, VEX_4V;
2774 defm NAME : PDI_binop_rm<opc, OpcodeStr, Opcode, OpVT128, VR128,
2836 VR128, v4f32, f128mem, loadv4f32, SSEPackedSingle, itins, 0>,
2840 VR128, v2f64, f128mem, loadv2f64, SSEPackedDouble, itins, 0>,
2853 defm PS : sse12_fp_packed<opc, !strconcat(OpcodeStr, "ps"), OpNode, VR128,
2857 defm PD : sse12_fp_packed<opc, !strconcat(OpcodeStr, "pd"), OpNode, VR128,
2899 defm V#NAME#PS : sse12_fp_packed_logical_rm<opc, VR128, SSEPackedSingle,
2901 [(set VR128:$dst, (OpNode (bc_v2i64 (v4f32 VR128:$src1)),
2904 defm V#NAME#PD : sse12_fp_packed_logical_rm<opc, VR128, SSEPackedDouble,
2906 [(set VR128:$dst, (OpNode (bc_v2i64 (v2f64 VR128:$src1)),
2907 (bc_v2i64 (v2f64 VR128:$src2))))],
2908 [(set VR128:$dst, (OpNode (bc_v2i64 (v2f64 VR128:$src1)),
2914 defm PS : sse12_fp_packed_logical_rm<opc, VR128, SSEPackedSingle,
2916 [(set VR128:$dst, (v2i64 (OpNode VR128:$src1, VR128:$src2)))],
2917 [(set VR128:$dst, (OpNode (bc_v2i64 (v4f32 VR128:$src1)),
2920 defm PD : sse12_fp_packed_logical_rm<opc, VR128, SSEPackedDouble,
2922 [(set VR128:$dst, (OpNode (bc_v2i64 (v2f64 VR128:$src1)),
2923 (bc_v2i64 (v2f64 VR128:$src2))))],
2924 [(set VR128:$dst, (OpNode (bc_v2i64 (v2f64 VR128:$src1)),
2969 VR128, v4f32, f128mem, loadv4f32,
2972 VR128, v2f64, f128mem, loadv2f64,
2984 defm PS : sse12_fp_packed<opc, !strconcat(OpcodeStr, "ps"), OpNode, VR128,
2987 defm PD : sse12_fp_packed<opc, !strconcat(OpcodeStr, "pd"), OpNode, VR128,
3014 defm V#NAME#SS : sse12_fp_scalar_int<opc, OpcodeStr, VR128,
3017 defm V#NAME#SD : sse12_fp_scalar_int<opc, OpcodeStr, VR128,
3022 defm SS : sse12_fp_scalar_int<opc, OpcodeStr, VR128,
3025 defm SD : sse12_fp_scalar_int<opc, OpcodeStr, VR128,
3105 def : Pat<(v4f32 (X86Movss (v4f32 VR128:$dst), (v4f32 (scalar_to_vector
3106 (Op (f32 (extractelt (v4f32 VR128:$dst), (iPTR 0))),
3109 (COPY_TO_REGCLASS FR32:$src, VR128))>;
3112 def : Pat<(v4f32 (X86Movss (v4f32 VR128:$dst),
3113 (Op (v4f32 VR128:$dst), (v4f32 VR128:$src)))),
3120 def : Pat<(v4f32 (X86Blendi (v4f32 VR128:$dst), (v4f32 (scalar_to_vector
3121 (Op (f32 (extractelt (v4f32 VR128:$dst), (iPTR 0))),
3124 (COPY_TO_REGCLASS FR32:$src, VR128))>;
3127 def : Pat<(v4f32 (X86Blendi (v4f32 VR128:$dst),
3128 (Op (v4f32 VR128:$dst), (v4f32 VR128:$src)), (i8 1))),
3137 def : Pat<(v4f32 (X86Blendi (v4f32 VR128:$dst), (v4f32 (scalar_to_vector
3138 (Op (f32 (extractelt (v4f32 VR128:$dst), (iPTR 0))),
3141 (COPY_TO_REGCLASS FR32:$src, VR128))>;
3144 def : Pat<(v4f32 (X86Movss (v4f32 VR128:$dst),
3145 (Op (v4f32 VR128:$dst), (v4f32 VR128:$src)))),
3149 def : Pat<(v4f32 (X86Blendi (v4f32 VR128:$dst),
3150 (Op (v4f32 VR128:$dst), (v4f32 VR128:$src)), (i8 1))),
3163 def : Pat<(v2f64 (X86Movsd (v2f64 VR128:$dst), (v2f64 (scalar_to_vector
3164 (Op (f64 (extractelt (v2f64 VR128:$dst), (iPTR 0))),
3167 (COPY_TO_REGCLASS FR64:$src, VR128))>;
3170 def : Pat<(v2f64 (X86Movsd (v2f64 VR128:$dst),
3171 (Op (v2f64 VR128:$dst), (v2f64 VR128:$src)))),
3178 def : Pat<(v2f64 (X86Blendi (v2f64 VR128:$dst), (v2f64 (scalar_to_vector
3179 (Op (f64 (extractelt (v2f64 VR128:$dst), (iPTR 0))),
3182 (COPY_TO_REGCLASS FR64:$src, VR128))>;
3185 def : Pat<(v2f64 (X86Blendi (v2f64 VR128:$dst),
3186 (Op (v2f64 VR128:$dst), (v2f64 VR128:$src)), (i8 1))),
3193 def : Pat<(v2f64 (X86Movsd (v2f64 VR128:$dst), (v2f64 (scalar_to_vector
3194 (Op (f64 (extractelt (v2f64 VR128:$dst), (iPTR 0))),
3197 (COPY_TO_REGCLASS FR64:$src, VR128))>;
3200 def : Pat<(v2f64 (X86Blendi (v2f64 VR128:$dst), (v2f64 (scalar_to_vector
3201 (Op (f64 (extractelt (v2f64 VR128:$dst), (iPTR 0))),
3204 (COPY_TO_REGCLASS FR64:$src, VR128))>;
3207 def : Pat<(v2f64 (X86Movsd (v2f64 VR128:$dst),
3208 (Op (v2f64 VR128:$dst), (v2f64 VR128:$src)))),
3212 def : Pat<(v2f64 (X86Blendi (v2f64 VR128:$dst),
3213 (Op (v2f64 VR128:$dst), (v2f64 VR128:$src)), (i8 1))),
3292 def r_Int : I<opc, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src1, VR128:$src2),
3296 def m_Int : I<opc, MRMSrcMem, (outs VR128:$dst), (ins VR128:$src1, vec_memop:$src2),
3308 def : Pat<(Intr VR128:$src),
3309 (!cast<Instruction>(NAME#Suffix##r_Int) VR128:$src, VR128:$src)>;
3312 addr:$src), VR128))>;
3343 def r_Int : I<opc, MRMSrcReg, (outs VR128:$dst),
3344 (ins VR128:$src1, VR128:$src2),
3348 def m_Int : I<opc, MRMSrcMem, (outs VR128:$dst),
3349 (ins VR128:$src1, vec_memop:$src2),
3369 def : Pat<(Intr VR128:$src),
3371 VR128:$src)>;
3392 def V#NAME#PSr : PSI<opc, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
3395 [(set VR128:$dst, (v4f32 (OpNode VR128:$src)))],
3397 def V#NAME#PSm : PSI<opc, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
3400 [(set VR128:$dst, (OpNode (loadv4f32 addr:$src)))],
3414 def PSr : PSI<opc, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
3416 [(set VR128:$dst, (v4f32 (OpNode VR128:$src)))], itins.rr>,
3418 def PSm : PSI<opc, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
3420 [(set VR128:$dst, (OpNode (memopv4f32 addr:$src)))], itins.rm>,
3428 def V#NAME#PDr : PDI<opc, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
3431 [(set VR128:$dst, (v2f64 (OpNode VR128:$src)))],
3433 def V#NAME#PDm : PDI<opc, MRMSrcMem, (outs VR128
3436 [(set VR128:$dst, (OpNode (loadv2f64 addr:$src)))],
3450 def PDr : PDI<opc, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
3452 [(set VR128:$dst, (v2f64 (OpNode VR128:$src)))], itins.rr>,
3454 def PDm : PDI<opc, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
3456 [(set VR128:$dst, (OpNode (memopv2f64 addr:$src)))], itins.rm>,
3546 (ins f128mem:$dst, VR128:$src),
3548 [(alignednontemporalstore (v4f32 VR128:$src),
3552 (ins f128mem:$dst, VR128:$src),
3554 [(alignednontemporalstore (v2f64 VR128:$src),
3560 (ins f128mem:$dst, VR128:$src),
3562 [(alignednontemporalstore (v2i64 VR128:$src),
3587 def MOVNTPSmr : PSI<0x2B, MRMDestMem, (outs), (ins f128mem:$dst, VR128:$src),
3589 [(alignednontemporalstore (v4f32 VR128:$src), addr:$dst)],
3591 def MOVNTPDmr : PDI<0x2B, MRMDestMem, (outs), (ins f128mem:$dst, VR128:$src),
3593 [(alignednontemporalstore(v2f64 VR128:$src), addr:$dst)],
3597 def MOVNTDQmr : PDI<0xE7, MRMDestMem, (outs), (ins f128mem:$dst, VR128:$src),
3599 [(alignednontemporalstore (v2i64 VR128:$src), addr:$dst)],
3623 def : Pat<(alignednontemporalstore (v4i32 VR128:$src), addr:$dst),
3624 (VMOVNTDQmr addr:$dst, VR128:$src)>;
3625 def : Pat<(alignednontemporalstore (v8i16 VR128:$src), addr:$dst),
3626 (VMOVNTDQmr addr:$dst, VR128:$src)>;
3627 def : Pat<(alignednontemporalstore (v16i8 VR128:$src), addr:$dst),
3628 (VMOVNTDQmr addr:$dst, VR128:$src)>;
3632 def : Pat<(alignednontemporalstore (v4i32 VR128:$src), addr:$dst),
3633 (MOVNTDQmr addr:$dst, VR128:$src)>;
3634 def : Pat<(alignednontemporalstore (v8i16 VR128:$src), addr:$dst),
3635 (MOVNTDQmr addr:$dst, VR128:$src)>;
3636 def : Pat<(alignednontemporalstore (v16i8 VR128:$src), addr:$dst),
3637 (MOVNTDQmr addr:$dst, VR128:$src)>;
3722 def VMOVDQArr : VPDI<0x6F, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
3728 def VMOVDQUrr : VSSI<0x6F, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
3739 def VMOVDQArr_REV : VPDI<0x7F, MRMDestReg, (outs VR128:$dst), (ins VR128:$src),
3746 def VMOVDQUrr_REV : VSSI<0x7F, MRMDestReg, (outs VR128:$dst), (ins VR128:$src),
3757 def VMOVDQArm : VPDI<0x6F, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
3764 def VMOVDQUrm : I<0x6F, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
3775 (ins i128mem:$dst, VR128:$src),
3783 def VMOVDQUmr : I<0x7F, MRMDestMem, (outs), (ins i128mem:$dst, VR128:$src),
3794 def MOVDQArr : PDI<0x6F, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
3797 def MOVDQUrr : I<0x6F, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
3803 def MOVDQArr_REV : PDI<0x7F, MRMDestReg, (outs VR128:$dst), (ins VR128:$src),
3807 def MOVDQUrr_REV : I<0x7F, MRMDestReg, (outs VR128:$dst), (ins VR128:$src),
3815 def MOVDQArm : PDI<0x6F, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
3817 [/*(set VR128:$dst, (alignedloadv2i64 addr:$src))*/],
3819 def MOVDQUrm : I<0x6F, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
3821 [/*(set VR128:$dst, (loadv2i64 addr:$src))*/],
3827 def MOVDQAmr : PDI<0x7F, MRMDestMem, (outs), (ins i128mem:$dst, VR128:$src),
3829 [/*(alignedstore (v2i64 VR128:$src), addr:$dst)*/],
3831 def MOVDQUmr : I<0x7F, MRMDestMem, (outs), (ins i128mem:$dst, VR128:$src),
3833 [/*(store (v2i64 VR128:$src), addr:$dst)*/],
3890 VR128, loadv2i64, i128mem, itins,
3894 defm NAME : PDI_binop_rm_int<opc, OpcodeStr, IntId128, VR128, memopv2i64,
3911 (ins RC:$src1, VR128:$src2),
3915 [(set RC:$dst, (DstVT (OpNode RC:$src1, (SrcVT VR128:$src2))))],
4015 defm VPSADBW : PDI_binop_rm2<0xF6, "vpsadbw", X86psadbw, v2i64, v16i8, VR128,
4023 defm PSADBW : PDI_binop_rm2<0xF6, "psadbw", X86psadbw, v2i64, v16i8, VR128,
4027 defm VPMULUDQ : PDI_binop_rm2<0xF4, "vpmuludq", X86pmuludq, v2i64, v4i32, VR128,
4035 defm PMULUDQ : PDI_binop_rm2<0xF4, "pmuludq", X86pmuludq, v2i64, v4i32, VR128,
4044 VR128, v4i32, v4i32, loadv2i64,
4047 VR128, v2i64, v2i64, loadv2i64,
4051 VR128, v4i32, v4i32, loadv2i64,
4054 VR128, v2i64, v2i64, loadv2i64,
4058 VR128, v4i32, v4i32, loadv2i64,
4064 VR128, v8i16, v8i16, loadv2i64,
4067 VR128, v8i16, v8i16, loadv2i64,
4070 VR128, v8i16, v8i16, loadv2i64,
4079 (outs VR128:$dst), (ins VR128:$src1, u8imm:$src2),
4081 [(set VR128:$dst,
4082 (v16i8 (X86vshldq VR128:$src1, (i8 imm:$src2))))]>,
4085 (outs VR128:$dst), (ins VR128:$src1, u8imm:$src2),
4087 [(set VR128:$dst,
4088 VR128:$src1, (i8 imm:$src2))))]>,
4145 VR128, v8i16, v8i16, memopv2i64,
4148 VR128, v4i32, v4i32, memopv2i64,
4151 VR128, v2i64, v2i64, memopv2i64,
4155 VR128, v8i16, v8i16, memopv2i64,
4158 VR128, v4i32, v4i32, memopv2i64,
4161 VR128, v2i64, v2i64, memopv2i64,
4165 VR128, v8i16, v8i16, memopv2i64,
4168 VR128, v4i32, v4i32, memopv2i64,
4174 (outs VR128:$dst), (ins VR128:$src1, u8imm:$src2),
4176 [(set VR128:$dst,
4177 (v16i8 (X86vshldq VR128:$src1, (i8 imm:$src2))))],
4180 (outs VR128:$dst), (ins VR128:$src1, u8imm:$src2),
4182 [(set VR128:$dst,
4183 (v16i8 (X86vshrdq VR128:$src1, (i8 imm:$src2))))],
4214 def V#NAME#ri : Ii8<0x70, MRMSrcReg, (outs VR128:$dst),
4215 (ins VR128:$src1, u8imm:$src2),
4218 [(set VR128:$dst,
4219 (vt128 (OpNode VR128:$src1, (i8 imm:$src2))))],
4221 def V#NAME#mi : Ii8<0x70, MRMSrcMem, (outs VR128:$dst),
4225 [(set VR128:$dst,
4251 (outs VR128:$dst), (ins VR128:$src1, u8imm:$src2),
4254 [(set VR128:$dst,
4255 (vt128 (OpNode VR128:$src1, (i8 imm:$src2))))],
4258 (outs VR128:$dst), (ins i128mem:$src1, u8imm:$src2),
4261 [(set VR128:$dst,
4278 def : Pat<(v4f32 (X86PShufd VR128:$src1, (i8 imm:$imm))),
4279 (VPSHUFDri VR128:$src1, imm:$imm)>;
4285 def : Pat<(v4f32 (X86PShufd VR128:$src1, (i8 imm:$imm))),
4286 (PSHUFDri VR128:$src1, imm:$imm)>;
4298 (outs VR128:$dst), (ins VR128:$src1, VR128:$src2),
4303 [(set VR128:$dst,
4304 (OutVT (OpNode (ArgVT VR128:$src1), VR128:$src2)))]>,
4307 (outs VR128:$dst), (ins VR128:$src1, i128mem:$src2),
4312 [(set VR128:$dst,
4313 (OutVT (OpNode (ArgVT VR128:$src1),
4341 (outs VR128:$dst), (ins VR128:$src1, VR128:$src2),
4346 [(set VR128:$dst,
4347 (OutVT (OpNode (ArgVT VR128:$src1), VR128:$src2)))]>,
4350 (outs VR128:$dst), (ins VR128:$src1, i128mem:$src2),
4355 [(set VR128:$dst,
4356 (OutVT (OpNode (ArgVT VR128:$src1),
4426 (outs VR128:$dst), (ins VR128:$src1, VR128:$src2),
4430 [(set VR128:$dst, (vt (OpNode VR128:$src1, VR128:$src2)))],
4433 (outs VR128:$dst), (ins VR128:$src1, i128mem:$src2),
4437 [(set VR128:$dst, (vt (OpNode VR128:$src1,
4529 (outs VR128:$dst), (ins VR128:$src1,
4534 [(set VR128:$dst,
4535 (X86pinsrw VR128:$src1, GR32orGR64:$src2, imm:$src3))],
4538 (outs VR128:$dst), (ins VR128:$src1,
4543 [(set VR128:$dst,
4544 (X86pinsrw VR128:$src1, (extloadi16 addr:$src2),
4552 (outs GR32orGR64:$dst), (ins VR128:$src1, u8imm:$src2),
4554 [(set GR32orGR64:$dst, (X86pextrw (v8i16 VR128:$src1),
4558 (outs GR32orGR64:$dst), (ins VR128:$src1, u8imm:$src2),
4560 [(set GR32orGR64:$dst, (X86pextrw (v8i16 VR128:$src1),
4580 (ins VR128:$src),
4582 [(set GR32orGR64:$dst, (X86movmsk (v16i8 VR128:$src)))],
4593 def PMOVMSKBrr : PDI<0xD7, MRMSrcReg, (outs GR32orGR64:$dst), (ins VR128:$src),
4595 [(set GR32orGR64:$dst, (X86movmsk (v16i8 VR128:$src)))],
4608 (ins VR128:$src, VR128:$mask),
4610 [(int_x86_sse2_maskmov_dqu VR128:$src, VR128:$mask, EDI)],
4614 (ins VR128:$src, VR128:$mask),
4616 [(int_x86_sse2_maskmov_dqu VR128:$src, VR128:$mask, RDI)],
4620 def MASKMOVDQU : PDI<0xF7, MRMSrcReg, (outs), (ins VR128:$src, VR128:$mask),
4622 [(int_x86_sse2_maskmov_dqu VR128:$src, VR128:$mask, EDI)],
4625 def MASKMOVDQU64 : PDI<0xF7, MRMSrcReg, (outs), (ins VR128:$src, VR128:$mask),
4627 [(int_x86_sse2_maskmov_dqu VR128:$src, VR128:$mask, RDI)],
4639 def VMOVDI2PDIrr : VS2I<0x6E, MRMSrcReg, (outs VR128:$dst), (ins GR32:$src),
4641 [(set VR128:$dst,
4644 def VMOVDI2PDIrm : VS2I<0x6E, MRMSrcMem, (outs VR128:$dst), (ins i32mem:$src),
4646 [(set VR128:$dst,
4650 def VMOV64toPQIrr : VRS2I<0x6E, MRMSrcReg, (outs VR128:$dst), (ins GR64:$src),
4652 [(set VR128:$dst,
4656 def VMOV64toPQIrm : VRS2I<0x6E, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
4665 def MOVDI2PDIrr : S2I<0x6E, MRMSrcReg, (outs VR128:$dst), (ins GR32:$src),
4667 [(set VR128:$dst,
4670 def MOVDI2PDIrm : S2I<0x6E, MRMSrcMem, (outs VR128:$dst), (ins i32mem:$src),
4672 [(set VR128:$dst,
4675 def MOV64toPQIrr : RS2I<0x6E, MRMSrcReg, (outs VR128:$dst), (ins GR64:$src),
4677 [(set VR128:$dst,
4681 def MOV64toPQIrm : RS2I<0x6E, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
4718 def VMOVPDI2DIrr : VS2I<0x7E, MRMDestReg, (outs GR32:$dst), (ins VR128:$src),
4720 [(set GR32:$dst, (extractelt (v4i32 VR128:$src),
4724 (ins i32mem:$dst, VR128:$src),
4726 [(store (i32 (extractelt (v4i32 VR128:$src),
4729 def MOVPDI2DIrr : S2I<0x7E, MRMDestReg, (outs GR32:$dst), (ins VR128:$src),
4731 [(set GR32:$dst, (extractelt (v4i32 VR128:$src),
4734 def MOVPDI2DImr : S2I<0x7E, MRMDestMem, (outs), (ins i32mem:$dst, VR128:$src),
4736 [(store (i32 (extractelt (v4i32 VR128:$src),
4756 def VMOVPQIto64rr : VRS2I<0x7E, MRMDestReg, (outs GR64:$dst), (ins VR128:$src),
4758 [(set GR64:$dst, (extractelt (v2i64 VR128:$src),
4763 def MOVPQIto64rr : RS2I<0x7E, MRMDestReg, (outs GR64:$dst), (ins VR128:$src),
4765 [(set GR64:$dst, (extractelt (v2i64 VR128:$src),
4772 (ins i64mem:$dst, VR128:$src),
4776 def MOVPQIto64rm : RS2I<0x7E, MRMDestMem, (outs), (ins i64mem:$dst, VR128:$src),
4887 (MOV64toPQIrr VR128:$dst, GR64:$src), 0>;
4889 (MOVPQIto64rr GR64:$dst, VR128:$src), 0>;
4892 (VMOV64toPQIrr VR128:$dst, GR64:$src), 0>;
4894 (VMOVPQIto64rr GR64:$dst, VR128:$src), 0>;
4905 def VMOVQI2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
4907 [(set VR128:$dst,
4910 def MOVQI2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
4912 [(set VR128:$dst,
4922 def VMOVPQI2QImr : VS2I<0xD6, MRMDestMem, (outs), (ins i64mem:$dst, VR128:$src),
4924 [(store (i64 (extractelt (v2i64 VR128:$src),
4927 def MOVPQI2QImr : S2I<0xD6, MRMDestMem, (outs), (ins i64mem:$dst, VR128:$src),
4929 [(store (i64 (extractelt (v2i64 VR128:$src),
4937 def VMOVPQI2QIrr : VS2I<0xD6, MRMDestReg, (outs VR128:$dst), (ins VR128:$src),
4939 def MOVPQI2QIrr : S2I<0xD6, MRMDestReg, (outs VR128:$dst), (ins VR128:$src),
4952 def VMOVZQI2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
4954 [(set VR128:$dst,
4960 def MOVZQI2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i64mem:$src),
4962 [(set VR128:$dst,
4993 def VMOVZPQILo2PQIrr : I<0x7E, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
4995 [(set VR128:$dst, (v2i64 (X86vzmovl (v2i64 VR128:$src))))],
4999 def MOVZPQILo2PQIrr : I<0x7E, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
5001 [(set VR128:$dst, (v2i64 (X86vzmovl (v2i64 VR128:$src))))],
5008 def VMOVZPQILo2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
5010 [(set VR128:$dst, (v2i64 (X86vzmovl
5015 def MOVZPQILo2PQIrm : I<0x7E, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
5017 [(set VR128:$dst, (v2i64 (X86vzmovl
5026 def : Pat<(v2f64 (X86vzmovl (v2f64 VR128:$src))),
5027 (VMOVZPQILo2PQIrr VR128:$src)>;
5030 def : Pat<(v2f64 (X86vzmovl (v2f64 VR128:$src))),
5031 (MOVZPQILo2PQIrr VR128:$src)>;
5053 v4f32, VR128, loadv4f32, f128mem>, VEX;
5055 v4f32, VR128, loadv4f32, f128mem>, VEX;
5061 defm MOVSHDUP : sse3_replicate_sfp<0x16, X86Movshdup, "movshdup", v4f32, VR128,
5063 defm MOVSLDUP : sse3_replicate_sfp<0x12, X86Movsldup, "movsldup", v4f32, VR128,
5067 def : Pat<(v4i32 (X86Movshdup VR128:$src)),
5068 (VMOVSHDUPrr VR128:$src)>;
5071 def : Pat<(v4i32 (X86Movsldup VR128:$src)),
5072 (VMOVSLDUPrr VR128:$src)>;
5086 def : Pat<(v4i32 (X86Movshdup VR128:$src)),
5087 (MOVSHDUPrr VR128:$src)>;
5090 def : Pat<(v4i32 (X86Movsldup VR128:$src)),
5091 (MOVSLDUPrr VR128:$src)>;
5101 def rr : S3DI<0x12, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
5103 [(set VR128:$dst, (v2f64 (X86Movddup VR128:$src)))],
5105 def rm : S3DI<0x12, MRMSrcMem, (outs VR128:$dst), (ins f64mem:$src),
5107 [(set VR128:$dst,
5180 def VLDDQUrm : S3DI<0xF0, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
5182 [(set VR128:$dst, (int_x86_sse3_ldu_dq addr:$src))]>, VEX;
5188 def LDDQUrm : S3DI<0xF0, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
5190 [(set VR128:$dst, (int_x86_sse3_ldu_dq addr:$src))],
5219 defm VADDSUBPS : sse3_addsub<int_x86_sse3_addsub_ps, "vaddsubps", VR128,
5225 defm VADDSUBPD : sse3_addsub<int_x86_sse3_addsub_pd, "vaddsubpd", VR128,
5233 defm ADDSUBPS : sse3_addsub<int_x86_sse3_addsub_ps, "addsubps", VR128,
5236 defm ADDSUBPD : sse3_addsub<int_x86_sse3_addsub_pd, "addsubpd", VR128,
5242 def : Pat<(v4f32 (X86Addsub (v4f32 VR128:$lhs), (v4f32 VR128:$rhs))),
5243 (VADDSUBPSrr VR128:$lhs, VR128:$rhs)>;
5244 def : Pat<(v4f32 (X86Addsub (v4f32 VR128:$lhs), (loadv4f32 addr:$rhs))),
5245 (VADDSUBPSrm VR128:$lhs, f128mem:$rhs)>;
5246 def : Pat<(v2f64 (X86Addsub (v2f64 VR128:$lhs), (v2f64 VR128:$rhs))),
5247 (VADDSUBPDrr VR128:$lhs, VR128:$rhs)>;
5248 def : Pat<(v2f64 (X86Addsub (v2f64 VR128:$lhs), (loadv2f64 addr:$rhs))),
5249 (VADDSUBPDrm VR128:$lhs, f128mem:$rhs)>;
5262 def : Pat<(v4f32 (X86Addsub (v4f32 VR128:$lhs), (v4f32 VR128:$rhs))),
5263 (ADDSUBPSrr VR128:$lhs, VR128:$rhs)>;
5264 def : Pat<(v4f32 (X86Addsub (v4f32 VR128:$lhs), (memopv4f32 addr:$rhs))),
5265 (ADDSUBPSrm VR128:$lhs, f128mem:$rhs)>;
5266 def : Pat<(v2f64 (X86Addsub (v2f64 VR128:$lhs), (v2f64 VR128:$rhs))),
5267 (ADDSUBPDrr VR128:$lhs, VR128:$rhs)>;
5268 def : Pat<(v2f64 (X86Addsub (v2f64 VR128:$lhs), (memopv2f64 addr:$rhs))),
5269 (ADDSUBPDrm VR128:$lhs, f128mem:$rhs)>;
5314 defm VHADDPS : S3D_Int<0x7C, "vhaddps", v4f32, VR128, f128mem,
5316 defm VHSUBPS : S3D_Int<0x7D, "vhsubps", v4f32, VR128, f128mem,
5324 defm VHADDPD : S3_Int <0x7C, "vhaddpd", v2f64, VR128, f128mem,
5326 defm VHSUBPD : S3_Int <0x7D, "vhsubpd", v2f64, VR128, f128mem,
5337 defm HADDPS : S3D_Int<0x7C, "haddps", v4f32, VR128, f128mem, X86fhadd,
5339 defm HSUBPS : S3D_Int<0x7D, "hsubps", v4f32, VR128, f128mem, X86fhsub,
5343 defm HADDPD : S3_Int<0x7C, "haddpd", v2f64, VR128, f128mem, X86fhadd,
5345 defm HSUBPD : S3_Int<0x7D, "hsubpd", v2f64, VR128, f128mem, X86fhsub,
5358 def rr128 : SS38I<opc, MRMSrcReg, (outs VR128:$dst),
5359 (ins VR128:$src),
5361 [(set VR128:$dst, (vt (OpNode VR128:$src)))],
5364 def rm128 : SS38I<opc, MRMSrcMem, (outs VR128:$dst),
5367 [(set VR128:$dst,
5391 VR128:$src))>;
5392 def v8i1sextv8i16 : PatLeaf<(v8i16 (X86vsrai VR128:$src, (i8 15)))>;
5393 def v4i1sextv4i32 : PatLeaf<(v4i32 (X86vsrai VR128:$src, (i8 31)))>;
5410 (bc_v2i64 (add (v16i8 VR128:$src), (v16i1sextv16i8)))),
5411 (VPABSBrr128 VR128:$src)>;
5414 (bc_v2i64 (add (v8i16 VR128:$src), (v8i1sextv8i16)))),
5415 (VPABSWrr128 VR128:$src)>;
5418 (bc_v2i64 (add (v4i32 VR128:$src), (v4i1sextv4i32)))),
5419 (VPABSDrr128 VR128:$src)>;
5452 (bc_v2i64 (add (v16i8 VR128:$src), (v16i1sextv16i8)))),
5453 (PABSBrr128 VR128:$src)>;
5456 (bc_v2i64 (add (v8i16 VR128:$src), (v8i1sextv8i16)))),
5457 (PABSWrr128 VR128:$src)>;
5460 (bc_v2i64 (add (v4i32 VR128:$src), (v4i1sextv4i32)))),
5461 (PABSDrr128 VR128:$src)>;
5521 def rr128 : SS38I<opc, MRMSrcReg, (outs VR128:$dst),
5522 (ins VR128:$src1, VR128:$src2),
5526 [(set VR128:$dst, (IntId128 VR128:$src1, VR128:$src2))]>,
5528 def rm128 : SS38I<opc, MRMSrcMem, (outs VR128:$dst),
5529 (ins VR128:$src1, i128mem:$src2),
5533 [(set VR128:$dst,
5534 (IntId128 VR128:$src1,
5558 defm VPHADDW : SS3I_binop_rm<0x01, "vphaddw", X86hadd, v8i16, VR128,
5561 defm VPHADDD : SS3I_binop_rm<0x02, "vphaddd", X86hadd, v4i32, VR128,
5564 defm VPHSUBW : SS3I_binop_rm<0x05, "vphsubw", X86hsub, v8i16, VR128,
5567 defm VPHSUBD : SS3I_binop_rm<0x06, "vphsubd", X86hsub, v4i32, VR128,
5579 defm VPSHUFB : SS3I_binop_rm<0x00, "vpshufb", X86pshufb, v16i8, VR128,
5638 defm PHADDW : SS3I_binop_rm<0x01, "phaddw", X86hadd, v8i16, VR128,
5640 defm PHADDD : SS3I_binop_rm<0x02, "phaddd", X86hadd, v4i32, VR128,
5642 defm PHSUBW : SS3I_binop_rm<0x05, "phsubw", X86hsub, v8i16, VR128,
5644 defm PHSUBD : SS3I_binop_rm<0x06, "phsubd", X86hsub, v4i32, VR128,
5652 defm PSHUFB : SS3I_binop_rm<0x00, "pshufb", X86pshufb, v16i8, VR128,
5675 def rri : SS3AI<0x0F, MRMSrcReg, (outs VR128:$dst),
5676 (ins VR128:$src1, VR128:$src2, u8imm:$src3),
5683 def rmi : SS3AI<0x0F, MRMSrcMem, (outs VR128:$dst),
5684 (ins VR128:$src1, i128mem:$src2, u8imm:$src3),
5728 def : Pat<(v4i32 (X86PAlignr VR128:$src1, VR128:$src2, (i8 imm:$imm))),
5729 (VPALIGNRrri VR128:$src1, VR128:$src2, imm:$imm)>;
5730 def : Pat<(v4f32 (X86PAlignr VR128:$src1, VR128:$src2, (i8 imm:$imm))),
5731 (VPALIGNRrri VR128:$src1, VR128:$src2, imm:$imm)>;
5732 def : Pat<(v8i16 (X86PAlignr VR128:$src1, VR128:$src2, (i8 imm:$imm))),
5733 (VPALIGNRrri VR128:$src1, VR128:$src2, imm:$imm)>;
5734 def : Pat<(v16i8 (X86PAlignr VR128:$src1, VR128:$src2, (i8 imm:$imm))),
5735 (VPALIGNRrri VR128:$src1, VR128:$src2, imm:$imm)>;
5739 def : Pat<(v4i32 (X86PAlignr VR128:$src1, VR128:$src2, (i8 imm:$imm))),
5740 (PALIGNRrri VR128:$src1, VR128:$src2, imm:$imm)>;
5741 def : Pat<(v4f32 (X86PAlignr VR128:$src1, VR128:$src2, (i8 imm:$imm))),
5742 (PALIGNRrri VR128:$src1, VR128:$src2, imm:$imm)>;
5743 def : Pat<(v8i16 (X86PAlignr VR128:$src1, VR128:$src2, (i8 imm:$imm))),
5744 (PALIGNRrri VR128:$src1, VR128:$src2, imm:$imm)>;
5745 def : Pat<(v16i8 (X86PAlignr VR128:$src1, VR128:$src2, (i8 imm:$imm))),
5746 (PALIGNRrri VR128:$src1, VR128:$src2, imm:$imm)>;
5800 defm NAME : SS41I_pmovx_rrrm<opc, OpcodeStr, MemOp, VR128, VR128, SSEItins>;
5803 VR128, VR128, AVXItins>, VEX;
5806 VR256, VR128, AVX2Itins>, VEX, VEX_L;
5837 def : Pat<(v16i16 (ExtOp (v16i8 VR128:$src))),
5838 (!cast<I>(OpcPrefix#BWYrr) VR128:$src)>;
5841 def : Pat<(v8i32 (ExtOp (v16i8 VR128:$src))),
5842 (!cast<I>(OpcPrefix#BDYrr) VR128:$src)>;
5843 def : Pat<(v4i64 (ExtOp (v16i8 VR128:$src))),
5844 (!cast<I>(OpcPrefix#BQYrr) VR128:$src)>;
5846 def : Pat<(v8i32 (ExtOp (v8i16 VR128:$src))),
5847 (!cast<I>(OpcPrefix#WDYrr) VR128:$src)>;
5848 def : Pat<(v4i64 (ExtOp (v8i16 VR128:$src))),
5849 (!cast<I>(OpcPrefix#WQYrr) VR128:$src)>;
5851 def : Pat<(v4i64 (ExtOp (v4i32 VR128:$src))),
5852 (!cast<I>(OpcPrefix#DQYrr) VR128:$src)>;
5941 def : Pat<(v8i16 (ExtOp (v16i8 VR128:$src))),
5942 (!cast<I>(OpcPrefix#BWrr) VR128:$src)>;
5945 def : Pat<(v4i32 (ExtOp (v16i8 VR128:$src))),
5946 (!cast<I>(OpcPrefix#BDrr) VR128:$src)>;
5947 def : Pat<(v2i64 (ExtOp (v16i8 VR128:$src))),
5948 (!cast<I>(OpcPrefix#BQrr) VR128:$src)>;
5950 def : Pat<(v4i32 (ExtOp (v8i16 VR128:$src))),
5951 (!cast<I>(OpcPrefix#WDrr) VR128:$src)>;
5952 def : Pat<(v2i64 (ExtOp (v8i16 VR128:$src))),
5953 (!cast<I>(OpcPrefix#WQrr) VR128:$src)>;
5955 def : Pat<(v2i64 (ExtOp (v4i32 VR128:$src))),
5956 (!cast<I>(OpcPrefix#DQrr) VR128:$src)>;
6055 (ins VR128:$src1, u8imm:$src2),
6058 [(set GR32orGR64:$dst, (X86pextrb (v16i8 VR128:$src1),
6064 (ins i8mem:$dst, VR128:$src1, u8imm:$src2),
6067 [(store (i8 (trunc (assertzext (X86pextrb (v16i8 VR128:$src1),
6081 (ins VR128:$src1, u8imm:$src2),
6089 (ins i16mem:$dst, VR128:$src1, u8imm:$src2),
6092 [(store (i16 (trunc (assertzext (X86pextrw (v8i16 VR128:$src1),
6105 (ins VR128:$src1, u8imm:$src2),
6109 (extractelt (v4i32 VR128:$src1), imm:$src2))]>,
6113 (ins i32mem:$dst, VR128:$src1, u8imm:$src2),
6116 VR128:$src1), imm:$src2),
6128 (ins VR128:$src1, u8imm:$src2),
6132 (extractelt (v2i64 VR128:$src1), imm:$src2))]>,
6136 (ins i64mem:$dst, VR128:$src1, u8imm:$src2),
6139 [(store (extractelt (v2i64 VR128:$src1), imm:$src2),
6153 (ins VR128:$src1, u8imm:$src2),
6157 (extractelt (bc_v4i32 (v4f32 VR128:$src1)), imm:$src2))],
6161 (ins f32mem:$dst, VR128:$src1, u8imm:$src2),
6164 [(store (extractelt (bc_v4i32 (v4f32 VR128:$src1)), imm:$src2),
6175 def : Pat<(store (f32 (bitconvert (extractelt (bc_v4i32 (v4f32 VR128:$src1)),
6178 (VEXTRACTPSmr addr:$dst, VR128:$src1, imm:$src2)>,
6180 def : Pat<(store (f32 (bitconvert (extractelt (bc_v4i32 (v4f32 VR128:$src1)),
6183 (EXTRACTPSmr addr:$dst, VR128:$src1, imm:$src2)>,
6191 def rr : SS4AIi8<opc, MRMSrcReg, (outs VR128:$dst),
6192 (ins VR128:$src1, GR32orGR64:$src2, u8imm:$src3),
6197 [(set VR128:$dst,
6198 (X86pinsrb VR128:$src1, GR32orGR64:$src2, imm:$src3))]>,
6200 def rm : SS4AIi8<opc, MRMSrcMem, (outs VR128:$dst),
6201 (ins VR128:$src1, i8mem:$src2, u8imm:$src3),
6206 [(set VR128:$dst,
6207 (X86pinsrb VR128:$src1, (extloadi8 addr:$src2),
6217 def rr : SS4AIi8<opc, MRMSrcReg, (outs VR128:$dst),
6218 (ins VR128:$src1, GR32:$src2, u8imm:$src3),
6223 [(set VR128:$dst,
6224 (v4i32 (insertelt VR128:$src1, GR32:$src2, imm:$src3)))]>,
6226 def rm : SS4AIi8<opc, MRMSrcMem, (outs VR128:$dst),
6227 (ins VR128:$src1, i32mem:$src2, u8imm:$src3),
6232 [(set VR128:$dst,
6233 (v4i32 (insertelt VR128:$src1, (loadi32 addr:$src2),
6243 def rr : SS4AIi8<opc, MRMSrcReg, (outs VR128:$dst),
6244 (ins VR128:$src1, GR64:$src2, u8imm:$src3),
6249 [(set VR128:$dst,
6250 (v2i64 (insertelt VR128:$src1, GR64:$src2, imm:$src3)))]>,
6252 def rm : SS4AIi8<opc, MRMSrcMem, (outs VR128:$dst),
6253 (ins VR128:$src1, i64mem:$src2, u8imm:$src3),
6258 [(set VR128:$dst,
6259 (v2i64 (insertelt VR128:$src1, (loadi64 addr:$src2),
6274 def rr : SS4AIi8<opc, MRMSrcReg, (outs VR128:$dst),
6275 (ins VR128:$src1, VR128:$src2, u8imm:$src3),
6280 [(set VR128:$dst,
6281 (X86insertps VR128:$src1, VR128:$src2, imm:$src3))], itins.rr>,
6283 def rm : SS4AIi8<opc, MRMSrcMem, (outs VR128:$dst),
6284 (ins VR128:$src1, f32mem:$src2, u8imm:$src3),
6289 [(set VR128:$dst,
6290 (X86insertps VR128:$src1,
6306 def : Pat<(v4f32 (X86insertps (v4f32 VR128:$src1), (X86PShufd (v4f32
6309 (INSERTPSrm VR128:$src1, addr:$src2, imm:$src3)>;
6310 def : Pat<(v4f32 (X86insertps (v4f32 VR128:$src1), (X86PShufd
6312 (INSERTPSrm VR128:$src1, addr:$src2, imm:$src3)>;
6318 def : Pat<(v4f32 (X86insertps (v4f32 VR128:$src1),
6320 (VINSERTPSrm VR128:$src1, addr:$src2, imm:$src3)>;
6321 def : Pat<(v4f32 (X86insertps (v4f32 VR128:$src1),
6323 (VINSERTPSrm VR128:$src1, addr:$src2, imm:$src3)>;
6393 (outs VR128:$dst), (ins VR128:$src1, VR128:$src2, i32u8imm:$src3),
6399 [(set VR128:$dst, (F32Int VR128:$src1, VR128:$src2, imm:$src3))]>,
6404 (outs VR128:$dst), (ins VR128:$src1, ssmem:$src2, i32u8imm:$src3),
6410 [(set VR128:$dst,
6411 (F32Int VR128:$src1, sse_load_f32:$src2, imm:$src3))]>,
6428 (outs VR128:$dst), (ins VR128:$src1, VR128:$src2, i32u8imm:$src3),
6434 [(set VR128:$dst, (F64Int VR128:$src1, VR128:$src2, imm:$src3))]>,
6439 (outs VR128:$dst), (ins VR128:$src1, sdmem:$src2, i32u8imm:$src3),
6445 [(set VR128:$dst,
6446 (F64Int VR128:$src1, sse_load_f64:$src2, imm:$src3))]>,
6454 defm VROUND : sse41_fp_unop_rm<0x08, 0x09, "vround", f128mem, VR128,
6491 def : Pat<(v4f32 (ffloor VR128:$src)),
6492 (VROUNDPSr VR128:$src, (i32 0x9))>;
6493 def : Pat<(v4f32 (fnearbyint VR128:$src)),
6494 (VROUNDPSr VR128:$src, (i32 0xC))>;
6495 def : Pat<(v4f32 (fceil VR128:$src)),
6496 (VROUNDPSr VR128:$src, (i32 0xA))>;
6497 def : Pat<(v4f32 (frint VR128:$src)),
6498 (VROUNDPSr VR128:$src, (i32 0x4))>;
6499 def : Pat<(v4f32 (ftrunc VR128:$src)),
6500 (VROUNDPSr VR128:$src, (i32 0xB))>;
6502 def : Pat<(v2f64 (ffloor VR128:$src)),
6503 (VROUNDPDr VR128:$src, (i32 0x9))>;
6504 def : Pat<(v2f64 (fnearbyint VR128:$src)),
6505 (VROUNDPDr VR128:$src, (i32 0xC))>;
6506 def : Pat<(v2f64 (fceil VR128:$src)),
6507 (VROUNDPDr VR128:$src, (i32 0xA))>;
6508 def : Pat<(v2f64 (frint VR128:$src)),
6509 (VROUNDPDr VR128:$src, (i32 0x4))>;
6510 def : Pat<(v2f64 (ftrunc VR128:$src)),
6511 (VROUNDPDr VR128:$src, (i32 0xB))>;
6536 defm ROUND : sse41_fp_unop_rm<0x08, 0x09, "round", f128mem, VR128,
6565 def : Pat<(v4f32 (ffloor VR128:$src)),
6566 (ROUNDPSr VR128:$src, (i32 0x9))>;
6567 def : Pat<(v4f32 (fnearbyint VR128:$src)),
6568 (ROUNDPSr VR128:$src, (i32 0xC))>;
6569 def : Pat<(v4f32 (fceil VR128:$src)),
6570 (ROUNDPSr VR128:$src, (i32 0xA))>;
6571 def : Pat<(v4f32 (frint VR128:$src)),
6572 (ROUNDPSr VR128:$src, (i32 0x4))>;
6573 def : Pat<(v4f32 (ftrunc VR128:$src)),
6574 (ROUNDPSr VR128:$src, (i32 0xB))>;
6576 def : Pat<(v2f64 (ffloor VR128:$src)),
6577 (ROUNDPDr VR128:$src, (i32 0x9))>;
6578 def : Pat<(v2f64 (fnearbyint VR128:$src)),
6579 (ROUNDPDr VR128:$src, (i32 0xC))>;
6580 def : Pat<(v2f64 (fceil VR128:$src)),
6581 (ROUNDPDr VR128:$src, (i32 0xA))>;
6582 def : Pat<(v2f64 (frint VR128:$src)),
6583 (ROUNDPDr VR128:$src, (i32 0x4))>;
6584 def : Pat<(v2f64 (ftrunc VR128:$src)),
6585 (ROUNDPDr VR128:$src, (i32 0xB))>;
6595 def VPTESTrr : SS48I<0x17, MRMSrcReg, (outs), (ins VR128:$src1, VR128:$src2),
6597 [(set EFLAGS, (X86ptest VR128:$src1, (v2i64 VR128:$src2)))]>,
6599 def VPTESTrm : SS48I<0x17, MRMSrcMem, (outs), (ins VR128:$src1, f128mem:$src2),
6601 [(set EFLAGS,(X86ptest VR128:$src1, (loadv2i64 addr:$src2)))]>,
6615 def PTESTrr : SS48I<0x17, MRMSrcReg, (outs), (ins VR128:$src1, VR128:$src2),
6617 [(set EFLAGS, (X86ptest VR128:$src1, (v2i64 VR128:$src2)))]>,
6619 def PTESTrm : SS48I<0x17, MRMSrcMem, (outs), (ins VR128:$src1, f128mem:$src2),
6621 [(set EFLAGS, (X86ptest VR128:$src1, (memopv2i64 addr:$src2)))]>,
6640 defm VTESTPS : avx_bittest<0x0E, "vtestps", VR128, f128mem, loadv4f32, v4f32>;
6645 defm VTESTPD : avx_bittest<0x0F, "vtestpd", VR128, f128mem, loadv2f64, v2f64>;
6696 def rr128 : SS48I<opc, MRMSrcReg, (outs VR128:$dst),
6697 (ins VR128:$src),
6699 [(set VR128:$dst, (IntId128 VR128:$src))]>,
6701 def rm128 : SS48I<opc, MRMSrcMem, (outs VR128:$dst),
6704 [(set VR128:$dst,
6768 defm VPMINSD : SS48I_binop_rm<0x39, "vpminsd", smin, v4i32, VR128,
6771 defm VPMINUD : SS48I_binop_rm<0x3B, "vpminud", umin, v4i32, VR128,
6774 defm VPMAXSD : SS48I_binop_rm<0x3D, "vpmaxsd", smax, v4i32, VR128,
6777 defm VPMAXUD : SS48I_binop_rm<0x3F, "vpmaxud", umax, v4i32, VR128,
6781 VR128, loadv2i64, i128mem,
6785 defm VPMINSB : SS48I_binop_rm<0x38, "vpminsb", smin, v16i8, VR128,
6788 defm VPMINUW : SS48I_binop_rm<0x3A, "vpminuw", umin, v8i16, VR128,
6791 defm VPMAXSB : SS48I_binop_rm<0x3C, "vpmaxsb", smax, v16i8, VR128,
6794 defm VPMAXUW : SS48I_binop_rm<0x3E, "vpmaxuw", umax, v8i16, VR128,
6832 defm PMINSB : SS48I_binop_rm<0x38, "pminsb", smin, v16i8, VR128,
6834 defm PMINSD : SS48I_binop_rm<0x39, "pminsd", smin, v4i32, VR128,
6836 defm PMINUD : SS48I_binop_rm<0x3B, "pminud", umin, v4i32, VR128,
6838 defm PMINUW : SS48I_binop_rm<0x3A, "pminuw", umin, v8i16, VR128,
6840 defm PMAXSB : SS48I_binop_rm<0x3C, "pmaxsb", smax, v16i8, VR128,
6842 defm PMAXSD : SS48I_binop_rm<0x3D, "pmaxsd", smax, v4i32, VR128,
6844 defm PMAXUD : SS48I_binop_rm<0x3F, "pmaxud", umax, v4i32, VR128,
6846 defm PMAXUW : SS48I_binop_rm<0x3E, "pmaxuw", umax, v8i16, VR128,
6849 VR128, memopv2i64, i128mem,
6854 defm VPMULLD : SS48I_binop_rm<0x40, "vpmulld", mul, v4i32, VR128,
6857 defm VPCMPEQQ : SS48I_binop_rm<0x29, "vpcmpeqq", X86pcmpeq, v2i64, VR128,
6871 defm PMULLD : SS48I_binop_rm<0x40, "pmulld", mul, v4i32, VR128,
6873 defm PCMPEQQ : SS48I_binop_rm<0x29, "pcmpeqq", X86pcmpeq, v2i64, VR128,
6936 VR128, loadv2i64, i128mem, 0,
6942 VR128, loadv4f32, f128mem, 0,
6950 VR128, loadv2f64, f128mem, 0,
6957 VR128, loadv2i64, i128mem, 0,
6962 VR128, loadv4f32, f128mem, 0,
6966 VR128, loadv2f64, f128mem, 0,
6988 VR128, memopv2i64, i128mem,
6993 VR128, memopv4f32, f128mem,
6997 VR128, memopv2f64, f128mem,
7000 VR128, memopv2i64, i128mem,
7004 VR128, memopv4f32, f128mem, 1,
7008 VR128, memopv2f64, f128mem, 1,
7038 defm VBLENDVPD : SS41I_quaternary_int_avx<0x4B, "vblendvpd", VR128, f128mem,
7046 defm VBLENDVPS : SS41I_quaternary_int_avx<0x4A, "vblendvps", VR128, f128mem,
7053 defm VPBLENDVB : SS41I_quaternary_int_avx<0x4C, "vpblendvb", VR128, i128mem,
7065 def : Pat<(v16i8 (vselect (v16i8 VR128:$mask), (v16i8 VR128:$src1),
7066 (v16i8 VR128:$src2))),
7067 (VPBLENDVBrr VR128:$src2, VR128:$src1, VR128:$mask)>;
7068 def : Pat<(v4i32 (vselect (v4i32 VR128:$mask), (v4i32 VR128:$src1),
7069 (v4i32 VR128:$src2))),
7070 (VBLENDVPSrr VR128:$src2, VR128:$src1, VR128:$mask)>;
7071 def : Pat<(v4f32 (vselect (v4i32 VR128:$mask), (v4f32 VR128:$src1),
7072 (v4f32 VR128:$src2))),
7073 (VBLENDVPSrr VR128:$src2, VR128:$src1, VR128:$mask)>;
7074 def : Pat<(v2i64 (vselect (v2i64 VR128:$mask), (v2i64 VR128:$src1),
7075 (v2i64 VR128:$src2))),
7076 (VBLENDVPDrr VR128:$src2, VR128:$src1, VR128:$mask)>;
7077 def : Pat<(v2f64 (vselect (v2i64 VR128:$mask), (v2f64 VR128:$src1),
7078 (v2f64 VR128:$src2))),
7079 (VBLENDVPDrr VR128:$src2, VR128:$src1, VR128:$mask)>;
7107 // Move scalar to XMM zero-extended, zeroing a VR128 then do a
7111 def : Pat<(v4f32 (X86vzmovl (v4f32 VR128:$src))),
7112 (VBLENDPSrri (v4f32 (V_SET0)), VR128:$src, (i8 1))>;
7113 def : Pat<(v4i32 (X86vzmovl (v4i32 VR128:$src))),
7114 (VPBLENDWrri (v4i32 (V_SET0)), VR128:$src, (i8 3))>;
7153 def : Pat<(v4f32 (X86vzmovl (v4f32 VR128:$src))),
7154 (BLENDPSrri (v4f32 (V_SET0)), VR128:$src, (i8 1))>;
7155 def : Pat<(v4i32 (X86vzmovl (v4i32 VR128:$src))),
7156 (PBLENDWrri (v4i32 (V_SET0)), VR128:$src, (i8 3))>;
7165 def rr0 : SS48I<opc, MRMSrcReg, (outs VR128:$dst),
7166 (ins VR128:$src1, VR128:$src2),
7169 [(set VR128:$dst, (IntId VR128:$src1, VR128:$src2, XMM0))],
7172 def rm0 : SS48I<opc, MRMSrcMem, (outs VR128:$dst),
7173 (ins VR128:$src1, x86memop:$src2),
7176 [(set VR128:$dst,
7177 (IntId VR128:$src1,
7197 (BLENDVPDrr0 VR128:$dst, VR128:$src2)>;
7199 (BLENDVPDrm0 VR128:$dst, f128mem:$src2)>;
7201 (BLENDVPSrr0 VR128:$dst, VR128:$src2)>;
7203 (BLENDVPSrm0 VR128:$dst, f128mem:$src2)>;
7205 (PBLENDVBrr0 VR128:$dst, VR128:$src2)>;
7207 (PBLENDVBrm0 VR128:$dst, i128mem:$src2)>;
7210 def : Pat<(v16i8 (vselect (v16i8 XMM0), (v16i8 VR128:$src1),
7211 (v16i8 VR128:$src2))),
7212 (PBLENDVBrr0 VR128:$src2, VR128:$src1)>;
7213 def : Pat<(v4i32 (vselect (v4i32 XMM0), (v4i32 VR128:$src1),
7214 (v4i32 VR128:$src2))),
7215 (BLENDVPSrr0 VR128:$src2, VR128:$src1)>;
7216 def : Pat<(v4f32 (vselect (v4i32 XMM0), (v4f32 VR128:$src1),
7217 (v4f32 VR128:$src2))),
7218 (BLENDVPSrr0 VR128:$src2, VR128:$src1)>;
7219 def : Pat<(v2i64 (vselect (v2i64 XMM0), (v2i64 VR128:$src1),
7220 (v2i64 VR128:$src2))),
7221 (BLENDVPDrr0 VR128:$src2, VR128:$src1)>;
7222 def : Pat<(v2f64 (vselect (v2i64 XMM0), (v2f64 VR128:$src1),
7223 (v2f64 VR128:$src2))),
7224 (BLENDVPDrr0 VR128:$src2, VR128:$src1)>;
7230 def VMOVNTDQArm : SS48I<0x2A, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
7232 [(set VR128:$dst, (int_x86_sse41_movntdqa addr:$src))]>,
7239 def MOVNTDQArm : SS48I<0x2A, MRMSrcMem, (outs VR128:$dst), (ins i128mem:$src),
7241 [(set VR128:$dst, (int_x86_sse41_movntdqa addr:$src))]>;
7297 defm VPCMPGTQ : SS42I_binop_rm<0x37, "vpcmpgtq", X86pcmpgt, v2i64, VR128,
7305 defm PCMPGTQ : SS42I_binop_rm<0x37, "pcmpgtq", X86pcmpgt, v2i64, VR128,
7314 def REG : PseudoI<(outs VR128:$dst),
7315 (ins VR128:$src1, VR128:$src2, u8imm:$src3),
7316 [(set VR128:$dst, (int_x86_sse42_pcmpistrm128 VR128:$src1, VR128:$src2,
7318 def MEM : PseudoI<(outs VR128:$dst),
7319 (ins VR128:$src1, i128mem:$src2, u8imm:$src3),
7320 [(set VR128:$dst, (int_x86_sse42_pcmpistrm128 VR128:$src1,
7333 (ins VR128:$src1, VR128:$src2, u8imm:$src3),
7338 (ins VR128:$src1, i128mem:$src2, u8imm:$src3),
7351 def REG : PseudoI<(outs VR128:$dst),
7352 (ins VR128:$src1, VR128:$src3, u8imm:$src5),
7353 [(set VR128:$dst, (int_x86_sse42_pcmpestrm128
7354 VR128:$src1, EAX, VR128:$src3, EDX, imm:$src5))]>;
7355 def MEM : PseudoI<(outs VR128:$dst),
7356 (ins VR128:$src1, i128mem:$src3, u8imm:$src5),
7357 [(set VR128:$dst, (int_x86_sse42_pcmpestrm128 VR128:$src1, EAX,
7370 (ins VR128:$src1, VR128:$src3, u8imm:$src5),
7375 (ins VR128:$src1, i128mem:$src3, u8imm:$src5),
7389 (ins VR128:$src1, VR128:$src2, u8imm:$src3),
7391 (X86pcmpistri VR128:$src1, VR128:$src2, imm:$src3))]>;
7393 (ins VR128:$src1, i128mem:$src2, u8imm:$src3),
7394 [(set GR32:$dst, EFLAGS, (X86pcmpistri VR128:$src1,
7407 (ins VR128:$src1, VR128:$src2, u8imm:$src3),
7412 (ins VR128:$src1, i128mem:$src2, u8imm:$src3),
7426 (ins VR128:$src1, VR128:$src3, u8imm:$src5),
7428 (X86pcmpestri VR128:$src1, EAX, VR128:$src3, EDX, imm:$src5))]>;
7430 (ins VR128:$src1, i128mem:$src3, u8imm:$src5),
7432 (X86pcmpestri VR128:$src1, EAX, (bc_v16i8 (ld_frag addr:$src3)), EDX,
7445 (ins VR128:$src1, VR128:$src3, u8imm:$src5),
7450 (ins VR128:$src1, i128mem:$src3, u8imm:$src5),
7516 def rr : I<Opc, MRMSrcReg, (outs VR128:$dst),
7517 (ins VR128:$src1, VR128:$src2),
7520 (set VR128:$dst, (IntId VR128:$src1, VR128:$src2, XMM0)),
7521 (set VR128:$dst, (IntId VR128:$src1, VR128:$src2)))]>, T8;
7523 def rm : I<Opc, MRMSrcMem, (outs VR128:$dst),
7524 (ins VR128:$src1, i128mem:$src2),
7527 (set VR128:$dst, (IntId VR128:$src1,
7529 (set VR128:$dst, (IntId VR128:$src1,
7534 def SHA1RNDS4rri : Ii8<0xCC, MRMSrcReg, (outs VR128:$dst),
7535 (ins VR128:$src1, VR128:$src2, u8imm:$src3),
7537 [(set VR128:$dst,
7538 (int_x86_sha1rnds4 VR128:$src1, VR128:$src2,
7540 def SHA1RNDS4rmi : Ii8<0xCC, MRMSrcMem, (outs VR128:$dst),
7541 (ins VR128:$src1, i128mem:$src2, u8imm:$src3),
7543 [(set VR128:$dst,
7544 (int_x86_sha1rnds4 VR128:$src1,
7561 (SHA256RNDS2rr VR128:$dst, VR128:$src2)>;
7563 (SHA256RNDS2rm VR128:$dst, i128mem:$src2)>;
7571 def rr : AES8I<opc, MRMSrcReg, (outs VR128:$dst),
7572 (ins VR128:$src1, VR128:$src2),
7576 [(set VR128:$dst, (IntId128 VR128:$src1, VR128:$src2))]>,
7578 def rm : AES8I<opc, MRMSrcMem, (outs VR128:$dst),
7579 (ins VR128:$src1, i128mem:$src2),
7583 [(set VR128:$dst,
7584 (IntId128 VR128:$src1, (ld_frag addr:$src2)))]>,
7613 def VAESIMCrr : AES8I<0xDB, MRMSrcReg, (outs VR128:$dst),
7614 (ins VR128:$src1),
7616 [(set VR128:$dst,
7617 (int_x86_aesni_aesimc VR128:$src1))]>, Sched<[WriteAESIMC]>,
7619 def VAESIMCrm : AES8I<0xDB, MRMSrcMem, (outs VR128:$dst),
7622 [(set VR128:$dst, (int_x86_aesni_aesimc (loadv2i64 addr:$src1)))]>,
7625 def AESIMCrr : AES8I<0xDB, MRMSrcReg, (outs VR128:$dst),
7626 (ins VR128:$src1),
7628 [(set VR128:$dst,
7629 (int_x86_aesni_aesimc VR128:$src1))]>, Sched<[WriteAESIMC]>;
7630 def AESIMCrm : AES8I<0xDB, MRMSrcMem, (outs VR128:$dst),
7633 [(set VR128:$dst, (int_x86_aesni_aesimc (memopv2i64 addr:$src1)))]>,
7638 def VAESKEYGENASSIST128rr : AESAI<0xDF, MRMSrcReg, (outs VR128:$dst),
7639 (ins VR128:$src1, u8imm:$src2),
7641 [(set VR128:$dst,
7642 (int_x86_aesni_aeskeygenassist VR128:$src1, imm:$src2))]>,
7644 def VAESKEYGENASSIST128rm : AESAI<0xDF, MRMSrcMem, (outs VR128:$dst),
7647 [(set VR128:$dst,
7651 def AESKEYGENASSIST128rr : AESAI<0xDF, MRMSrcReg, (outs VR128:$dst),
7652 (ins VR128:$src1, u8imm:$src2),
7654 [(set VR128:$dst,
7655 (int_x86_aesni_aeskeygenassist VR128:$src1, imm:$src2))]>,
7657 def AESKEYGENASSIST128rm : AESAI<0xDF, MRMSrcMem, (outs VR128:$dst),
7660 [(set VR128:$dst,
7670 def VPCLMULQDQrr : AVXPCLMULIi8<0x44, MRMSrcReg, (outs VR128:$dst),
7671 (ins VR128:$src1, VR128:$src2, u8imm:$src3),
7673 [(set VR128:$dst,
7674 (int_x86_pclmulqdq VR128:$src1, VR128:$src2, imm:$src3))]>,
7677 def VPCLMULQDQrm : AVXPCLMULIi8<0x44, MRMSrcMem, (outs VR128:$dst),
7678 (ins VR128:$src1, i128mem:$src2, u8imm:$src3),
7680 [(set VR128:$dst, (int_x86_pclmulqdq VR128:$src1,
7687 def PCLMULQDQrr : PCLMULIi8<0x44, MRMSrcReg, (outs VR128:$dst),
7688 (ins VR128:$src1, VR128:$src2, u8imm:$src3),
7690 [(set VR128:$dst,
7691 (int_x86_pclmulqdq VR128:$src1, VR128:$src2, imm:$src3))],
7694 def PCLMULQDQrm : PCLMULIi8<0x44, MRMSrcMem, (outs VR128:$dst),
7695 (ins VR128:$src1, i128mem:$src2, u8imm:$src3),
7697 [(set VR128:$dst, (int_x86_pclmulqdq VR128:$src1,
7706 (PCLMULQDQrr VR128:$dst, VR128:$src, immop), 0>;
7709 (PCLMULQDQrm VR128:$dst, i128mem:$src, immop), 0>;
7713 (VPCLMULQDQrr VR128:$dst, VR128:$src1, VR128:$src2, immop),
7718 (VPCLMULQDQrm VR128:$dst, VR128:$src1, i128mem:$src2, immop),
7733 def EXTRQI : Ii8<0x78, MRMXr, (outs VR128:$dst),
7734 (ins VR128:$src, u8imm:$len, u8imm:$idx),
7736 [(set VR128:$dst, (X86extrqi VR128:$src, imm:$len,
7738 def EXTRQ : I<0x79, MRMSrcReg, (outs VR128:$dst),
7739 (ins VR128:$src, VR128:$mask),
7741 [(set VR128:$dst, (int_x86_sse4a_extrq VR128:$src,
7742 VR128:$mask))]>, PD;
7744 def INSERTQI : Ii8<0x78, MRMSrcReg, (outs VR128:$dst),
7745 (ins VR128:$src, VR128:$src2, u8imm:$len, u8imm:$idx),
7747 [(set VR128:$dst, (X86insertqi VR128:$src, VR128:$src2,
7749 def INSERTQ : I<0x79, MRMSrcReg, (outs VR128:$dst),
7750 (ins VR128:$src, VR128:$mask),
7752 [(set VR128:$dst, (int_x86_sse4a_insertq VR128:$src,
7753 VR128:$mask))]>, XD;
7759 def MOVNTSS : I<0x2B, MRMDestMem, (outs), (ins f32mem:$dst, VR128:$src),
7762 def MOVNTSD : I<0x2B, MRMDestMem, (outs), (ins f64mem:$dst, VR128:$src),
7767 (MOVNTSS addr:$dst, (COPY_TO_REGCLASS FR32:$src, VR128))>;
7770 (MOVNTSD addr:$dst, (COPY_TO_REGCLASS FR64:$src, VR128))>;
7794 AVX28I<opc, MRMSrcReg, (outs RC:$dst), (ins VR128:$src),
7796 [(set RC:$dst, (ResVT (X86VBroadcast (OpVT VR128:$src))))]>,
7800 def VBROADCASTSSrm : avx_broadcast_rm<0x18, "vbroadcastss", VR128,
7811 def VBROADCASTSSrr : avx2_broadcast_rr<0x18, "vbroadcastss", VR128,
7843 (ins VR256:$src1, VR128:$src2, u8imm:$src3),
7854 def : Pat<(vinsert128_insert:$ins (v8f32 VR256:$src1), (v4f32 VR128:$src2),
7856 (VINSERTF128rr VR256:$src1, VR128:$src2,
7858 def : Pat<(vinsert128_insert:$ins (v4f64 VR256:$src1), (v2f64 VR128:$src2),
7860 (VINSERTF128rr VR256:$src1, VR128:$src2,
7874 def : Pat<(vinsert128_insert:$ins (v4i64 VR256:$src1), (v2i64 VR128:$src2),
7876 (VINSERTF128rr VR256:$src1, VR128:$src2,
7878 def : Pat<(vinsert128_insert:$ins (v8i32 VR256:$src1), (v4i32 VR128:$src2),
7880 (VINSERTF128rr VR256:$src1, VR128:$src2,
7882 def : Pat<(vinsert128_insert:$ins (v32i8 VR256:$src1), (v16i8 VR128:$src2),
7884 (VINSERTF128rr VR256:$src1, VR128:$src2,
7886 def : Pat<(vinsert128_insert:$ins (v16i16 VR256:$src1), (v8i16 VR128:$src2),
7888 (VINSERTF128rr VR256:$src1, VR128:$src2,
7916 def VEXTRACTF128rr : AVXAIi8<0x19, MRMDestReg, (outs VR128:$dst),
7932 (EXTRACT_get_vextract128_imm VR128:$ext)))>;
7936 (EXTRACT_get_vextract128_imm VR128:$ext)))>;
7941 (EXTRACT_get_vextract128_imm VR128:$ext))>;
7945 (EXTRACT_get_vextract128_imm VR128:$ext))>;
7952 (EXTRACT_get_vextract128_imm VR128:$ext)))>;
7956 (EXTRACT_get_vextract128_imm VR128:$ext)))>;
7960 (EXTRACT_get_vextract128_imm VR128:$ext)))>;
7964 (EXTRACT_get_vextract128_imm VR128:$ext)))>;
7969 (EXTRACT_get_vextract128_imm VR128:$ext))>;
7973 (EXTRACT_get_vextract128_imm VR128:$ext))>;
7977 (EXTRACT_get_vextract128_imm VR128:$ext))>;
7981 (EXTRACT_get_vextract128_imm VR128:$ext))>;
7990 def rm : AVX8I<opc_rm, MRMSrcMem, (outs VR128:$dst),
7991 (ins VR128:$src1, f128mem:$src2),
7993 [(set VR128:$dst, (IntLd addr:$src2, VR128:$src1))]>,
8001 (ins f128mem:$dst, VR128:$src1, VR128:$src2),
8003 [(IntSt addr:$dst, VR128:$src1, VR128:$src2)]>, VEX_4V;
8058 defm VPERMILPS : avx_permil<0x0C, 0x04, "vpermilps", VR128, f128mem, i128mem,
8064 defm VPERMILPD : avx_permil<0x0D, 0x05, "vpermilpd", VR128, f128mem, i128mem,
8090 def : Pat<(v4f32 (X86VPermilpv VR128:$src1, (v4i32 VR128:$src2))),
8091 (VPERMILPSrr VR128:$src1, VR128:$src2)>;
8092 def : Pat<(v4f32 (X86VPermilpv VR128:$src1, (bc_v4i32 (loadv2i64 addr:$src2)))),
8093 (VPERMILPSrm VR128:$src1, addr:$src2)>;
8094 def : Pat<(v2f64 (X86VPermilpv VR128:$src1, (v2i64 VR128:$src2))),
8095 (VPERMILPDrr VR128:$src1, VR128:$src2)>;
8096 def : Pat<(v2f64 (X86VPermilpv VR128:$src1, (loadv2i64 addr:$src2))),
8097 (VPERMILPDrm VR128:$src1, addr:$src2)>;
8099 def : Pat<(v2i64 (X86VPermilpi VR128:$src1, (i8 imm:$imm))),
8100 (VPERMILPDri VR128:$src1, imm:$imm)>;
8174 def rr : I<0x13, MRMSrcReg, (outs RC:$dst), (ins VR128:$src),
8176 [(set RC:$dst, (Int VR128:$src))]>,
8185 def rr : Ii8<0x1D, MRMDestReg, (outs VR128:$dst),
8188 [(set VR128:$dst, (Int RC:$src1, imm:$src2))]>,
8199 defm VCVTPH2PS : f16c_ph2ps<VR128, f64mem, int_x86_vcvtph2ps_128>;
8201 defm VCVTPS2PH : f16c_ps2ph<VR128, f64mem, int_x86_vcvtps2ph_128>;
8214 (int_x86_vcvtps2ph_128 VR128:$src1, i32:$src2))), (iPTR 0))),
8216 (VCVTPS2PHmr addr:$dst, VR128:$src1, imm:$src2)>;
8218 (int_x86_vcvtps2ph_128 VR128:$src1, i32:$src2))), (iPTR 0))),
8220 (VCVTPS2PHmr addr:$dst, VR128:$src1, imm:$src2)>;
8235 (COPY_TO_REGCLASS FR32:$src, VR128), 4)), sub_16bit))>;
8239 (COPY_TO_REGCLASS (MOVSX32rr16 GR16:$src), VR128)), FR32)) >;
8243 (VCVTPS2PHrr (COPY_TO_REGCLASS FR32:$src, VR128), 4)), FR32)) >;
8272 VR128, loadv2i64, i128mem>;
8284 def rr : AVX28I<opc, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
8286 [(set VR128:$dst,
8287 (OpVT128 (X86VBroadcast (OpVT128 VR128:$src))))]>,
8289 def rm : AVX28I<opc, MRMSrcMem, (outs VR128:$dst), (ins x86memop:$src),
8291 [(set VR128:$dst,
8294 def Yrr : AVX28I<opc, MRMSrcReg, (outs VR256:$dst), (ins VR128:$src),
8297 (OpVT256 (X86VBroadcast (OpVT128 VR128:$src))))]>,
8351 (VBROADCASTSSrr (COPY_TO_REGCLASS FR32:$src, VR128))>;
8353 (VBROADCASTSSYrr (COPY_TO_REGCLASS FR32:$src, VR128))>;
8355 (VBROADCASTSDYrr (COPY_TO_REGCLASS FR64:$src, VR128))>;
8363 VR128))>;
8367 VR128))>;
8372 VR128))>;
8376 VR128))>;
8380 (VBROADCASTSSrr (COPY_TO_REGCLASS GR32:$src, VR128))>;
8382 (VBROADCASTSSYrr (COPY_TO_REGCLASS GR32:$src, VR128))>;
8384 (VBROADCASTSDYrr (COPY_TO_REGCLASS GR64:$src, VR128))>;
8390 (VPBROADCASTQrr (COPY_TO_REGCLASS GR64:$src, VR128))>;
8409 (VMOVDDUPrr (COPY_TO_REGCLASS FR64:$src, VR128))>;
8414 (VPSHUFDri (COPY_TO_REGCLASS FR32:$src, VR128), 0)>;
8417 (VPSHUFDri (COPY_TO_REGCLASS FR32:$src, VR128), 0), sub_xmm),
8418 (VPSHUFDri (COPY_TO_REGCLASS FR32:$src, VR128), 0), 1)>;
8421 (VPSHUFDri (COPY_TO_REGCLASS FR64:$src, VR128), 0x44), sub_xmm),
8422 (VPSHUFDri (COPY_TO_REGCLASS FR64:$src, VR128), 0x44), 1)>;
8425 (VPSHUFDri (COPY_TO_REGCLASS GR32:$src, VR128), 0)>;
8428 (VPSHUFDri (COPY_TO_REGCLASS GR32:$src, VR128), 0), sub_xmm),
8429 (VPSHUFDri (COPY_TO_REGCLASS GR32:$src, VR128), 0), 1)>;
8432 (VPSHUFDri (COPY_TO_REGCLASS GR64:$src, VR128), 0x44), sub_xmm),
8433 (VPSHUFDri (COPY_TO_REGCLASS GR64:$src, VR128), 0x44), 1)>;
8436 (VMOVDDUPrr (COPY_TO_REGCLASS GR64:$src, VR128))>;
8537 (ins VR256:$src1, VR128:$src2, u8imm:$src3),
8548 def : Pat<(vinsert128_insert:$ins (v4i64 VR256:$src1), (v2i64 VR128:$src2),
8550 (VINSERTI128rr VR256:$src1, VR128:$src2,
8552 def : Pat<(vinsert128_insert:$ins (v8i32 VR256:$src1), (v4i32 VR128:$src2),
8554 (VINSERTI128rr VR256:$src1, VR128:$src2,
8556 def : Pat<(vinsert128_insert:$ins (v32i8 VR256:$src1), (v16i8 VR128:$src2),
8558 (VINSERTI128rr VR256:$src1, VR128:$src2,
8560 def : Pat<(vinsert128_insert:$ins (v16i16 VR256:$src1), (v8i16 VR128:$src2),
8562 (VINSERTI128rr VR256:$src1, VR128:$src2,
8589 def VEXTRACTI128rr : AVX2AIi8<0x39, MRMDestReg, (outs VR128:$dst),
8603 (EXTRACT_get_vextract128_imm VR128:$ext)))>;
8607 (EXTRACT_get_vextract128_imm VR128:$ext)))>;
8611 (EXTRACT_get_vextract128_imm VR128:$ext)))>;
8615 (EXTRACT_get_vextract128_imm VR128:$ext)))>;
8620 (EXTRACT_get_vextract128_imm VR128:$ext))>;
8624 (EXTRACT_get_vextract128_imm VR128:$ext))>;
8628 (EXTRACT_get_vextract128_imm VR128:$ext))>;
8632 (EXTRACT_get_vextract128_imm VR128:$ext))>;
8641 def rm : AVX28I<0x8c, MRMSrcMem, (outs VR128:$dst),
8642 (ins VR128:$src1, i128mem:$src2),
8644 [(set VR128:$dst, (IntLd128 addr:$src2, VR128:$src1))]>, VEX_4V;
8651 (ins i128mem:$dst, VR128:$src1, VR128:$src2),
8653 [(IntSt128 addr:$dst, VR128:$src1, VR128:$src2)]>, VEX_4V;
8689 defm : maskmov_lowering<"VMASKMOVPS", VR128, v4f32, v4i32, "VBLENDVPS", v4i32>;
8690 defm : maskmov_lowering<"VMASKMOVPD", VR128, v2f64, v2i64, "VBLENDVPD", v4i32>;
8698 defm : maskmov_lowering<"VMASKMOVPS", VR128, v4i32, v4i32, "VBLENDVPS", v4i32>;
8699 defm : maskmov_lowering<"VMASKMOVPD", VR128, v2i64, v2i64, "VBLENDVPD", v4i32>;
8704 defm : maskmov_lowering<"VPMASKMOVD", VR128, v4i32, v4i32, "VBLENDVPS", v4i32>;
8705 defm : maskmov_lowering<"VPMASKMOVQ", VR128, v2i64, v2i64, "VBLENDVPD", v4i32>;
8712 def rr : AVX28I<opc, MRMSrcReg, (outs VR128:$dst),
8713 (ins VR128:$src1, VR128:$src2),
8715 [(set VR128:$dst,
8716 (vt128 (OpNode VR128:$src1, (vt128 VR128:$src2))))]>,
8718 def rm : AVX28I<opc, MRMSrcMem, (outs VR128:$dst),
8719 (ins VR128:$src1, i128mem:$src2),
8721 [(set VR128:$dst,
8722 (vt128 (OpNode VR128:$src1,
8753 def rm : AVX28I<opc, MRMSrcMem, (outs VR128:$dst, VR128:$mask_wb),
8754 (ins VR128:$src1, memop128:$src2, VR128:$mask),
8771 defm VPGATHERQD : avx2_gather<0x91, "vpgatherqd", VR128, vx64mem, vy128mem>;
8780 defm VGATHERQPS : avx2_gather<0x93, "vgatherqps", VR128, vx64mem, vy128mem>;
8789 (MOVAPSmr addr:$dst, (COPY_TO_REGCLASS (f128 FR128:$src), VR128))>;
8797 (ANDPSrm (COPY_TO_REGCLASS FR128:$src1, VR128), f128mem:$src2),
8802 (ANDPSrr (COPY_TO_REGCLASS FR128:$src1, VR128),
8803 (COPY_TO_REGCLASS FR128:$src2, VR128)), FR128)>;
8807 (ANDPSrr (COPY_TO_REGCLASS FR128:$src1, VR128),
8808 (COPY_TO_REGCLASS FR128:$src2, VR128)), FR128)>;
8812 (ORPSrm (COPY_TO_REGCLASS FR128:$src1, VR128), f128mem:$src2),
8817 (ORPSrr (COPY_TO_REGCLASS FR128:$src1, VR128),
8818 (COPY_TO_REGCLASS FR128:$src2, VR128)), FR128)>;
8822 (ORPSrr (COPY_TO_REGCLASS FR128:$src1, VR128),
8823 (COPY_TO_REGCLASS FR128:$src2, VR128)), FR128)>;
8827 (XORPSrm (COPY_TO_REGCLASS FR128:$src1, VR128), f128mem:$src2),
8832 (XORPSrr (COPY_TO_REGCLASS FR128:$src1, VR128),
8833 (COPY_TO_REGCLASS FR128:$src2, VR128)), FR128)>;
8837 (XORPSrr (COPY_TO_REGCLASS FR128:$src1, VR128),
8838 (COPY_TO_REGCLASS FR128:$src2, VR128)), FR128)>;