@@ -822,14 +822,16 @@ let Constraints = "$src1 = $dst" in {
822
822
823
823
multiclass sse12_cvt_s<bits<8> opc, RegisterClass SrcRC, RegisterClass DstRC,
824
824
SDNode OpNode, X86MemOperand x86memop, PatFrag ld_frag,
825
- string asm, X86FoldableSchedWrite sched,
825
+ string asm, string mem, X86FoldableSchedWrite sched,
826
826
SchedRead Int2Fpu = ReadDefault> {
827
- def rr : SI<opc, MRMSrcReg, (outs DstRC:$dst), (ins SrcRC:$src), asm,
828
- [(set DstRC:$dst, (OpNode SrcRC:$src))]>,
829
- Sched<[sched, Int2Fpu]>;
830
- def rm : SI<opc, MRMSrcMem, (outs DstRC:$dst), (ins x86memop:$src), asm,
831
- [(set DstRC:$dst, (OpNode (ld_frag addr:$src)))]>,
832
- Sched<[sched.Folded]>;
827
+ def rr : SI<opc, MRMSrcReg, (outs DstRC:$dst), (ins SrcRC:$src),
828
+ !strconcat(asm,"\t{$src, $dst|$dst, $src}"),
829
+ [(set DstRC:$dst, (OpNode SrcRC:$src))]>,
830
+ Sched<[sched, Int2Fpu]>;
831
+ def rm : SI<opc, MRMSrcMem, (outs DstRC:$dst), (ins x86memop:$src),
832
+ mem#"\t{$src, $dst|$dst, $src}",
833
+ [(set DstRC:$dst, (OpNode (ld_frag addr:$src)))]>,
834
+ Sched<[sched.Folded]>;
833
835
}
834
836
835
837
multiclass sse12_cvt_p<bits<8> opc, RegisterClass RC, X86MemOperand x86memop,
@@ -848,7 +850,7 @@ let hasSideEffects = 0 in {
848
850
}
849
851
850
852
multiclass sse12_vcvt_avx<bits<8> opc, RegisterClass SrcRC, RegisterClass DstRC,
851
- X86MemOperand x86memop, string asm,
853
+ X86MemOperand x86memop, string asm, string mem,
852
854
X86FoldableSchedWrite sched> {
853
855
let hasSideEffects = 0, Predicates = [UseAVX] in {
854
856
def rr : SI<opc, MRMSrcReg, (outs DstRC:$dst), (ins DstRC:$src1, SrcRC:$src),
@@ -857,26 +859,26 @@ let hasSideEffects = 0, Predicates = [UseAVX] in {
857
859
let mayLoad = 1 in
858
860
def rm : SI<opc, MRMSrcMem, (outs DstRC:$dst),
859
861
(ins DstRC:$src1, x86memop:$src),
860
- !strconcat( asm," \t{$src, $src1, $dst|$dst, $src1, $src}") , []>,
862
+ asm#"{"#mem#"} \t{$src, $src1, $dst|$dst, $src1, $src}", []>,
861
863
Sched<[sched.Folded, sched.ReadAfterFold]>;
862
864
} // hasSideEffects = 0
863
865
}
864
866
865
867
let isCodeGenOnly = 1, Predicates = [UseAVX] in {
866
868
defm VCVTTSS2SI : sse12_cvt_s<0x2C, FR32, GR32, fp_to_sint, f32mem, loadf32,
867
- "cvttss2si\t{$src, $dst|$dst, $src} ",
869
+ "cvttss2si", "cvttss2si ",
868
870
WriteCvtSS2I>,
869
871
XS, VEX, VEX_LIG;
870
872
defm VCVTTSS2SI64 : sse12_cvt_s<0x2C, FR32, GR64, fp_to_sint, f32mem, loadf32,
871
- "cvttss2si\t{$src, $dst|$dst, $src} ",
873
+ "cvttss2si", "cvttss2si ",
872
874
WriteCvtSS2I>,
873
875
XS, VEX, VEX_W, VEX_LIG;
874
876
defm VCVTTSD2SI : sse12_cvt_s<0x2C, FR64, GR32, fp_to_sint, f64mem, loadf64,
875
- "cvttsd2si\t{$src, $dst|$dst, $src} ",
877
+ "cvttsd2si", "cvttsd2si ",
876
878
WriteCvtSD2I>,
877
879
XD, VEX, VEX_LIG;
878
880
defm VCVTTSD2SI64 : sse12_cvt_s<0x2C, FR64, GR64, fp_to_sint, f64mem, loadf64,
879
- "cvttsd2si\t{$src, $dst|$dst, $src} ",
881
+ "cvttsd2si", "cvttsd2si ",
880
882
WriteCvtSD2I>,
881
883
XD, VEX, VEX_W, VEX_LIG;
882
884
}
@@ -886,13 +888,13 @@ defm VCVTTSD2SI64 : sse12_cvt_s<0x2C, FR64, GR64, fp_to_sint, f64mem, loadf64,
886
888
// provide other assembly "l" and "q" forms to address this explicitly
887
889
// where appropriate to do so.
888
890
let isCodeGenOnly = 1 in {
889
- defm VCVTSI2SS : sse12_vcvt_avx<0x2A, GR32, FR32, i32mem, "cvtsi2ss{l} ",
891
+ defm VCVTSI2SS : sse12_vcvt_avx<0x2A, GR32, FR32, i32mem, "cvtsi2ss", "l ",
890
892
WriteCvtI2SS>, XS, VEX_4V, VEX_LIG;
891
- defm VCVTSI642SS : sse12_vcvt_avx<0x2A, GR64, FR32, i64mem, "cvtsi2ss{q} ",
893
+ defm VCVTSI642SS : sse12_vcvt_avx<0x2A, GR64, FR32, i64mem, "cvtsi2ss", "q ",
892
894
WriteCvtI2SS>, XS, VEX_4V, VEX_W, VEX_LIG;
893
- defm VCVTSI2SD : sse12_vcvt_avx<0x2A, GR32, FR64, i32mem, "cvtsi2sd{l} ",
895
+ defm VCVTSI2SD : sse12_vcvt_avx<0x2A, GR32, FR64, i32mem, "cvtsi2sd", "l ",
894
896
WriteCvtI2SD>, XD, VEX_4V, VEX_LIG;
895
- defm VCVTSI642SD : sse12_vcvt_avx<0x2A, GR64, FR64, i64mem, "cvtsi2sd{q} ",
897
+ defm VCVTSI642SD : sse12_vcvt_avx<0x2A, GR64, FR64, i64mem, "cvtsi2sd", "q ",
896
898
WriteCvtI2SD>, XD, VEX_4V, VEX_W, VEX_LIG;
897
899
} // isCodeGenOnly = 1
898
900
@@ -918,28 +920,28 @@ let Predicates = [UseAVX] in {
918
920
919
921
let isCodeGenOnly = 1 in {
920
922
defm CVTTSS2SI : sse12_cvt_s<0x2C, FR32, GR32, fp_to_sint, f32mem, loadf32,
921
- "cvttss2si\t{$src, $dst|$dst, $src} ",
923
+ "cvttss2si", "cvttss2si ",
922
924
WriteCvtSS2I>, XS;
923
925
defm CVTTSS2SI64 : sse12_cvt_s<0x2C, FR32, GR64, fp_to_sint, f32mem, loadf32,
924
- "cvttss2si\t{$src, $dst|$dst, $src} ",
926
+ "cvttss2si", "cvttss2si ",
925
927
WriteCvtSS2I>, XS, REX_W;
926
928
defm CVTTSD2SI : sse12_cvt_s<0x2C, FR64, GR32, fp_to_sint, f64mem, loadf64,
927
- "cvttsd2si\t{$src, $dst|$dst, $src} ",
929
+ "cvttsd2si", "cvttsd2si ",
928
930
WriteCvtSD2I>, XD;
929
931
defm CVTTSD2SI64 : sse12_cvt_s<0x2C, FR64, GR64, fp_to_sint, f64mem, loadf64,
930
- "cvttsd2si\t{$src, $dst|$dst, $src} ",
932
+ "cvttsd2si", "cvttsd2si ",
931
933
WriteCvtSD2I>, XD, REX_W;
932
934
defm CVTSI2SS : sse12_cvt_s<0x2A, GR32, FR32, sint_to_fp, i32mem, loadi32,
933
- "cvtsi2ss{l}\t{$src, $dst|$dst, $src }",
935
+ "cvtsi2ss", "cvtsi2ss{l }",
934
936
WriteCvtI2SS, ReadInt2Fpu>, XS;
935
937
defm CVTSI642SS : sse12_cvt_s<0x2A, GR64, FR32, sint_to_fp, i64mem, loadi64,
936
- "cvtsi2ss{q}\t{$src, $dst|$dst, $src }",
938
+ "cvtsi2ss", "cvtsi2ss{q }",
937
939
WriteCvtI2SS, ReadInt2Fpu>, XS, REX_W;
938
940
defm CVTSI2SD : sse12_cvt_s<0x2A, GR32, FR64, sint_to_fp, i32mem, loadi32,
939
- "cvtsi2sd{l}\t{$src, $dst|$dst, $src }",
941
+ "cvtsi2sd", "cvtsi2sd{l }",
940
942
WriteCvtI2SD, ReadInt2Fpu>, XD;
941
943
defm CVTSI642SD : sse12_cvt_s<0x2A, GR64, FR64, sint_to_fp, i64mem, loadi64,
942
- "cvtsi2sd{q}\t{$src, $dst|$dst, $src }",
944
+ "cvtsi2sd", "cvtsi2sd{q }",
943
945
WriteCvtI2SD, ReadInt2Fpu>, XD, REX_W;
944
946
} // isCodeGenOnly = 1
945
947
@@ -962,7 +964,7 @@ multiclass sse12_cvt_sint<bits<8> opc, RegisterClass SrcRC, RegisterClass DstRC,
962
964
963
965
multiclass sse12_cvt_sint_3addr<bits<8> opc, RegisterClass SrcRC,
964
966
RegisterClass DstRC, X86MemOperand x86memop,
965
- string asm, X86FoldableSchedWrite sched,
967
+ string asm, string mem, X86FoldableSchedWrite sched,
966
968
bit Is2Addr = 1> {
967
969
let hasSideEffects = 0 in {
968
970
def rr_Int : SI<opc, MRMSrcReg, (outs DstRC:$dst), (ins DstRC:$src1, SrcRC:$src2),
@@ -974,8 +976,8 @@ let hasSideEffects = 0 in {
974
976
def rm_Int : SI<opc, MRMSrcMem, (outs DstRC:$dst),
975
977
(ins DstRC:$src1, x86memop:$src2),
976
978
!if(Is2Addr,
977
- !strconcat( asm, " \t{$src2, $dst|$dst, $src2}") ,
978
- !strconcat( asm, " \t{$src2, $src1, $dst|$dst, $src1, $src2}") ),
979
+ asm#"{"#mem#"} \t{$src2, $dst|$dst, $src2}",
980
+ asm#"{"#mem#"} \t{$src2, $src1, $dst|$dst, $src1, $src2}"),
979
981
[]>, Sched<[sched.Folded, sched.ReadAfterFold]>;
980
982
}
981
983
}
@@ -996,30 +998,48 @@ defm CVTSD2SI64 : sse12_cvt_sint<0x2D, VR128, GR64, i64, v2f64, X86cvts2si,
996
998
997
999
let Predicates = [UseAVX] in {
998
1000
defm VCVTSI2SS : sse12_cvt_sint_3addr<0x2A, GR32, VR128,
999
- i32mem, "cvtsi2ss{l} ", WriteCvtI2SS, 0>, XS, VEX_4V, VEX_LIG;
1001
+ i32mem, "cvtsi2ss", "l ", WriteCvtI2SS, 0>, XS, VEX_4V, VEX_LIG;
1000
1002
defm VCVTSI642SS : sse12_cvt_sint_3addr<0x2A, GR64, VR128,
1001
- i64mem, "cvtsi2ss{q} ", WriteCvtI2SS, 0>, XS, VEX_4V, VEX_LIG, VEX_W;
1003
+ i64mem, "cvtsi2ss", "q ", WriteCvtI2SS, 0>, XS, VEX_4V, VEX_LIG, VEX_W;
1002
1004
defm VCVTSI2SD : sse12_cvt_sint_3addr<0x2A, GR32, VR128,
1003
- i32mem, "cvtsi2sd{l} ", WriteCvtI2SD, 0>, XD, VEX_4V, VEX_LIG;
1005
+ i32mem, "cvtsi2sd", "l ", WriteCvtI2SD, 0>, XD, VEX_4V, VEX_LIG;
1004
1006
defm VCVTSI642SD : sse12_cvt_sint_3addr<0x2A, GR64, VR128,
1005
- i64mem, "cvtsi2sd{q} ", WriteCvtI2SD, 0>, XD, VEX_4V, VEX_LIG, VEX_W;
1007
+ i64mem, "cvtsi2sd", "q ", WriteCvtI2SD, 0>, XD, VEX_4V, VEX_LIG, VEX_W;
1006
1008
}
1007
1009
let Constraints = "$src1 = $dst" in {
1008
1010
defm CVTSI2SS : sse12_cvt_sint_3addr<0x2A, GR32, VR128,
1009
- i32mem, "cvtsi2ss{l} ", WriteCvtI2SS>, XS;
1011
+ i32mem, "cvtsi2ss", "l ", WriteCvtI2SS>, XS;
1010
1012
defm CVTSI642SS : sse12_cvt_sint_3addr<0x2A, GR64, VR128,
1011
- i64mem, "cvtsi2ss{q} ", WriteCvtI2SS>, XS, REX_W;
1013
+ i64mem, "cvtsi2ss", "q ", WriteCvtI2SS>, XS, REX_W;
1012
1014
defm CVTSI2SD : sse12_cvt_sint_3addr<0x2A, GR32, VR128,
1013
- i32mem, "cvtsi2sd{l} ", WriteCvtI2SD>, XD;
1015
+ i32mem, "cvtsi2sd", "l ", WriteCvtI2SD>, XD;
1014
1016
defm CVTSI642SD : sse12_cvt_sint_3addr<0x2A, GR64, VR128,
1015
- i64mem, "cvtsi2sd{q} ", WriteCvtI2SD>, XD, REX_W;
1017
+ i64mem, "cvtsi2sd", "q ", WriteCvtI2SD>, XD, REX_W;
1016
1018
}
1017
1019
1020
+ def : InstAlias<"vcvtsi2ss{l}\t{$src2, $src1, $dst|$dst, $src1, $src2}",
1021
+ (VCVTSI2SSrr_Int VR128:$dst, VR128:$src1, GR32:$src2), 0, "att">;
1022
+ def : InstAlias<"vcvtsi2ss{q}\t{$src2, $src1, $dst|$dst, $src1, $src2}",
1023
+ (VCVTSI642SSrr_Int VR128:$dst, VR128:$src1, GR64:$src2), 0, "att">;
1024
+ def : InstAlias<"vcvtsi2sd{l}\t{$src2, $src1, $dst|$dst, $src1, $src2}",
1025
+ (VCVTSI2SDrr_Int VR128:$dst, VR128:$src1, GR32:$src2), 0, "att">;
1026
+ def : InstAlias<"vcvtsi2sd{q}\t{$src2, $src1, $dst|$dst, $src1, $src2}",
1027
+ (VCVTSI642SDrr_Int VR128:$dst, VR128:$src1, GR64:$src2), 0, "att">;
1028
+
1018
1029
def : InstAlias<"vcvtsi2ss\t{$src, $src1, $dst|$dst, $src1, $src}",
1019
1030
(VCVTSI2SSrm_Int VR128:$dst, VR128:$src1, i32mem:$src), 0, "att">;
1020
1031
def : InstAlias<"vcvtsi2sd\t{$src, $src1, $dst|$dst, $src1, $src}",
1021
1032
(VCVTSI2SDrm_Int VR128:$dst, VR128:$src1, i32mem:$src), 0, "att">;
1022
1033
1034
+ def : InstAlias<"cvtsi2ss{l}\t{$src, $dst|$dst, $src}",
1035
+ (CVTSI2SSrr_Int VR128:$dst, GR32:$src), 0, "att">;
1036
+ def : InstAlias<"cvtsi2ss{q}\t{$src, $dst|$dst, $src}",
1037
+ (CVTSI642SSrr_Int VR128:$dst, GR64:$src), 0, "att">;
1038
+ def : InstAlias<"cvtsi2sd{l}\t{$src, $dst|$dst, $src}",
1039
+ (CVTSI2SDrr_Int VR128:$dst, GR32:$src), 0, "att">;
1040
+ def : InstAlias<"cvtsi2sd{q}\t{$src, $dst|$dst, $src}",
1041
+ (CVTSI642SDrr_Int VR128:$dst, GR64:$src), 0, "att">;
1042
+
1023
1043
def : InstAlias<"cvtsi2ss\t{$src, $dst|$dst, $src}",
1024
1044
(CVTSI2SSrm_Int VR128:$dst, i32mem:$src), 0, "att">;
1025
1045
def : InstAlias<"cvtsi2sd\t{$src, $dst|$dst, $src}",
0 commit comments