mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-18 13:34:04 +00:00
[X86] Convert all the i8imm used by AVX512 and MMX instructions to u8imm.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226646 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
951d088ae7
commit
51da87a580
@ -394,7 +394,7 @@ multiclass vinsert_for_size_no_alt<int Opcode,
|
||||
SDNodeXForm INSERT_get_vinsert_imm> {
|
||||
let hasSideEffects = 0, ExeDomain = To.ExeDomain in {
|
||||
def rr : AVX512AIi8<Opcode, MRMSrcReg, (outs VR512:$dst),
|
||||
(ins VR512:$src1, From.RC:$src2, i8imm:$src3),
|
||||
(ins VR512:$src1, From.RC:$src2, u8imm:$src3),
|
||||
"vinsert" # From.EltTypeName # "x" # From.NumElts #
|
||||
"\t{$src3, $src2, $src1, $dst|"
|
||||
"$dst, $src1, $src2, $src3}",
|
||||
@ -405,7 +405,7 @@ multiclass vinsert_for_size_no_alt<int Opcode,
|
||||
|
||||
let mayLoad = 1 in
|
||||
def rm : AVX512AIi8<Opcode, MRMSrcMem, (outs VR512:$dst),
|
||||
(ins VR512:$src1, From.MemOp:$src2, i8imm:$src3),
|
||||
(ins VR512:$src1, From.MemOp:$src2, u8imm:$src3),
|
||||
"vinsert" # From.EltTypeName # "x" # From.NumElts #
|
||||
"\t{$src3, $src2, $src1, $dst|"
|
||||
"$dst, $src1, $src2, $src3}",
|
||||
@ -467,12 +467,12 @@ defm VINSERTI : vinsert_for_type<i32, 0x38, i64, 0x3a>;
|
||||
|
||||
// vinsertps - insert f32 to XMM
|
||||
def VINSERTPSzrr : AVX512AIi8<0x21, MRMSrcReg, (outs VR128X:$dst),
|
||||
(ins VR128X:$src1, VR128X:$src2, i8imm:$src3),
|
||||
(ins VR128X:$src1, VR128X:$src2, u8imm:$src3),
|
||||
"vinsertps\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
|
||||
[(set VR128X:$dst, (X86insertps VR128X:$src1, VR128X:$src2, imm:$src3))]>,
|
||||
EVEX_4V;
|
||||
def VINSERTPSzrm: AVX512AIi8<0x21, MRMSrcMem, (outs VR128X:$dst),
|
||||
(ins VR128X:$src1, f32mem:$src2, i8imm:$src3),
|
||||
(ins VR128X:$src1, f32mem:$src2, u8imm:$src3),
|
||||
"vinsertps\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
|
||||
[(set VR128X:$dst, (X86insertps VR128X:$src1,
|
||||
(v4f32 (scalar_to_vector (loadf32 addr:$src2))),
|
||||
@ -489,7 +489,7 @@ multiclass vextract_for_size<int Opcode,
|
||||
SDNodeXForm EXTRACT_get_vextract_imm> {
|
||||
let hasSideEffects = 0, ExeDomain = To.ExeDomain in {
|
||||
defm rr : AVX512_maskable_in_asm<Opcode, MRMDestReg, To, (outs To.RC:$dst),
|
||||
(ins VR512:$src1, i8imm:$idx),
|
||||
(ins VR512:$src1, u8imm:$idx),
|
||||
"vextract" # To.EltTypeName # "x4",
|
||||
"$idx, $src1", "$src1, $idx",
|
||||
[(set To.RC:$dst, (vextract_extract:$idx (From.VT VR512:$src1),
|
||||
@ -497,7 +497,7 @@ multiclass vextract_for_size<int Opcode,
|
||||
AVX512AIi8Base, EVEX, EVEX_V512;
|
||||
let mayStore = 1 in
|
||||
def rm : AVX512AIi8<Opcode, MRMDestMem, (outs),
|
||||
(ins To.MemOp:$dst, VR512:$src1, i8imm:$src2),
|
||||
(ins To.MemOp:$dst, VR512:$src1, u8imm:$src2),
|
||||
"vextract" # To.EltTypeName # "x4\t{$src2, $src1, $dst|"
|
||||
"$dst, $src1, $src2}",
|
||||
[]>, EVEX, EVEX_V512, EVEX_CD8<To.EltSize, CD8VT4>;
|
||||
@ -882,14 +882,14 @@ multiclass avx512_perm_imm<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
||||
X86VectorVTInfo _> {
|
||||
let ExeDomain = _.ExeDomain in {
|
||||
def ri : AVX512AIi8<opc, MRMSrcReg, (outs _.RC:$dst),
|
||||
(ins _.RC:$src1, i8imm:$src2),
|
||||
(ins _.RC:$src1, u8imm:$src2),
|
||||
!strconcat(OpcodeStr,
|
||||
"\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
|
||||
[(set _.RC:$dst,
|
||||
(_.VT (OpNode _.RC:$src1, (i8 imm:$src2))))]>,
|
||||
EVEX;
|
||||
def mi : AVX512AIi8<opc, MRMSrcMem, (outs _.RC:$dst),
|
||||
(ins _.MemOp:$src1, i8imm:$src2),
|
||||
(ins _.MemOp:$src1, u8imm:$src2),
|
||||
!strconcat(OpcodeStr,
|
||||
"\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
|
||||
[(set _.RC:$dst,
|
||||
@ -1403,19 +1403,19 @@ multiclass avx512_icmp_cc<bits<8> opc, string Suffix, SDNode OpNode,
|
||||
// Accept explicit immediate argument form instead of comparison code.
|
||||
let isAsmParserOnly = 1, hasSideEffects = 0 in {
|
||||
def rri_alt : AVX512AIi8<opc, MRMSrcReg,
|
||||
(outs _.KRC:$dst), (ins _.RC:$src1, _.RC:$src2, i8imm:$cc),
|
||||
(outs _.KRC:$dst), (ins _.RC:$src1, _.RC:$src2, u8imm:$cc),
|
||||
!strconcat("vpcmp", Suffix, "\t{$cc, $src2, $src1, $dst|",
|
||||
"$dst, $src1, $src2, $cc}"),
|
||||
[], IIC_SSE_ALU_F32P_RR>, EVEX_4V;
|
||||
let mayLoad = 1 in
|
||||
def rmi_alt : AVX512AIi8<opc, MRMSrcMem,
|
||||
(outs _.KRC:$dst), (ins _.RC:$src1, _.MemOp:$src2, i8imm:$cc),
|
||||
(outs _.KRC:$dst), (ins _.RC:$src1, _.MemOp:$src2, u8imm:$cc),
|
||||
!strconcat("vpcmp", Suffix, "\t{$cc, $src2, $src1, $dst|",
|
||||
"$dst, $src1, $src2, $cc}"),
|
||||
[], IIC_SSE_ALU_F32P_RM>, EVEX_4V;
|
||||
def rrik_alt : AVX512AIi8<opc, MRMSrcReg,
|
||||
(outs _.KRC:$dst), (ins _.KRCWM:$mask, _.RC:$src1, _.RC:$src2,
|
||||
i8imm:$cc),
|
||||
u8imm:$cc),
|
||||
!strconcat("vpcmp", Suffix,
|
||||
"\t{$cc, $src2, $src1, $dst {${mask}}|",
|
||||
"$dst {${mask}}, $src1, $src2, $cc}"),
|
||||
@ -1423,7 +1423,7 @@ multiclass avx512_icmp_cc<bits<8> opc, string Suffix, SDNode OpNode,
|
||||
let mayLoad = 1 in
|
||||
def rmik_alt : AVX512AIi8<opc, MRMSrcMem,
|
||||
(outs _.KRC:$dst), (ins _.KRCWM:$mask, _.RC:$src1, _.MemOp:$src2,
|
||||
i8imm:$cc),
|
||||
u8imm:$cc),
|
||||
!strconcat("vpcmp", Suffix,
|
||||
"\t{$cc, $src2, $src1, $dst {${mask}}|",
|
||||
"$dst {${mask}}, $src1, $src2, $cc}"),
|
||||
@ -1460,14 +1460,14 @@ multiclass avx512_icmp_cc_rmb<bits<8> opc, string Suffix, SDNode OpNode,
|
||||
let isAsmParserOnly = 1, hasSideEffects = 0, mayLoad = 1 in {
|
||||
def rmib_alt : AVX512AIi8<opc, MRMSrcMem,
|
||||
(outs _.KRC:$dst), (ins _.RC:$src1, _.ScalarMemOp:$src2,
|
||||
i8imm:$cc),
|
||||
u8imm:$cc),
|
||||
!strconcat("vpcmp", Suffix,
|
||||
"\t{$cc, ${src2}", _.BroadcastStr, ", $src1, $dst|",
|
||||
"$dst, $src1, ${src2}", _.BroadcastStr, ", $cc}"),
|
||||
[], IIC_SSE_ALU_F32P_RM>, EVEX_4V, EVEX_B;
|
||||
def rmibk_alt : AVX512AIi8<opc, MRMSrcMem,
|
||||
(outs _.KRC:$dst), (ins _.KRCWM:$mask, _.RC:$src1,
|
||||
_.ScalarMemOp:$src2, i8imm:$cc),
|
||||
_.ScalarMemOp:$src2, u8imm:$cc),
|
||||
!strconcat("vpcmp", Suffix,
|
||||
"\t{$cc, ${src2}", _.BroadcastStr, ", $src1, $dst {${mask}}|",
|
||||
"$dst {${mask}}, $src1, ${src2}", _.BroadcastStr, ", $cc}"),
|
||||
@ -1959,7 +1959,7 @@ def : Pat<(X86cmp VK1:$src1, (i1 0)),
|
||||
multiclass avx512_mask_shiftop<bits<8> opc, string OpcodeStr, RegisterClass KRC,
|
||||
SDNode OpNode> {
|
||||
let Predicates = [HasAVX512] in
|
||||
def ri : Ii8<opc, MRMSrcReg, (outs KRC:$dst), (ins KRC:$src, i8imm:$imm),
|
||||
def ri : Ii8<opc, MRMSrcReg, (outs KRC:$dst), (ins KRC:$src, u8imm:$imm),
|
||||
!strconcat(OpcodeStr,
|
||||
"\t{$imm, $src, $dst|$dst, $src, $imm}"),
|
||||
[(set KRC:$dst, (OpNode KRC:$src, (i8 imm:$imm)))]>;
|
||||
@ -3170,14 +3170,14 @@ multiclass avx512_pshuf_imm<bits<8> opc, string OpcodeStr, RegisterClass RC,
|
||||
SDNode OpNode, PatFrag mem_frag,
|
||||
X86MemOperand x86memop, ValueType OpVT> {
|
||||
def ri : AVX512Ii8<opc, MRMSrcReg, (outs RC:$dst),
|
||||
(ins RC:$src1, i8imm:$src2),
|
||||
(ins RC:$src1, u8imm:$src2),
|
||||
!strconcat(OpcodeStr,
|
||||
"\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
|
||||
[(set RC:$dst,
|
||||
(OpVT (OpNode RC:$src1, (i8 imm:$src2))))]>,
|
||||
EVEX;
|
||||
def mi : AVX512Ii8<opc, MRMSrcMem, (outs RC:$dst),
|
||||
(ins x86memop:$src1, i8imm:$src2),
|
||||
(ins x86memop:$src1, u8imm:$src2),
|
||||
!strconcat(OpcodeStr,
|
||||
"\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
|
||||
[(set RC:$dst,
|
||||
@ -3348,12 +3348,12 @@ def : Pat <(i8 (int_x86_avx512_mask_ptestm_q_512 (v8i64 VR512:$src1),
|
||||
multiclass avx512_shift_rmi<bits<8> opc, Format ImmFormR, Format ImmFormM,
|
||||
string OpcodeStr, SDNode OpNode, X86VectorVTInfo _> {
|
||||
defm ri : AVX512_maskable<opc, ImmFormR, _, (outs _.RC:$dst),
|
||||
(ins _.RC:$src1, i8imm:$src2), OpcodeStr,
|
||||
(ins _.RC:$src1, u8imm:$src2), OpcodeStr,
|
||||
"$src2, $src1", "$src1, $src2",
|
||||
(_.VT (OpNode _.RC:$src1, (i8 imm:$src2))),
|
||||
" ", SSE_INTSHIFT_ITINS_P.rr>, AVX512BIi8Base, EVEX_4V;
|
||||
defm mi : AVX512_maskable<opc, ImmFormM, _, (outs _.RC:$dst),
|
||||
(ins _.MemOp:$src1, i8imm:$src2), OpcodeStr,
|
||||
(ins _.MemOp:$src1, u8imm:$src2), OpcodeStr,
|
||||
"$src2, $src1", "$src1, $src2",
|
||||
(_.VT (OpNode (_.MemOpFrag addr:$src1), (i8 imm:$src2))),
|
||||
" ", SSE_INTSHIFT_ITINS_P.rm>, AVX512BIi8Base, EVEX_4V;
|
||||
@ -5049,14 +5049,14 @@ multiclass avx512_shufp<RegisterClass RC, X86MemOperand x86memop,
|
||||
ValueType vt, string OpcodeStr, PatFrag mem_frag,
|
||||
Domain d> {
|
||||
def rmi : AVX512PIi8<0xC6, MRMSrcMem, (outs RC:$dst),
|
||||
(ins RC:$src1, x86memop:$src2, i8imm:$src3),
|
||||
(ins RC:$src1, x86memop:$src2, u8imm:$src3),
|
||||
!strconcat(OpcodeStr,
|
||||
"\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}"),
|
||||
[(set RC:$dst, (vt (X86Shufp RC:$src1, (mem_frag addr:$src2),
|
||||
(i8 imm:$src3))))], d, IIC_SSE_SHUFP>,
|
||||
EVEX_4V, Sched<[WriteShuffleLd, ReadAfterLd]>;
|
||||
def rri : AVX512PIi8<0xC6, MRMSrcReg, (outs RC:$dst),
|
||||
(ins RC:$src1, RC:$src2, i8imm:$src3),
|
||||
(ins RC:$src1, RC:$src2, u8imm:$src3),
|
||||
!strconcat(OpcodeStr,
|
||||
"\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}"),
|
||||
[(set RC:$dst, (vt (X86Shufp RC:$src1, RC:$src2,
|
||||
@ -5083,7 +5083,7 @@ def : Pat<(v8i64 (X86Shufp VR512:$src1,
|
||||
|
||||
multiclass avx512_valign<X86VectorVTInfo _> {
|
||||
defm rri : AVX512_maskable<0x03, MRMSrcReg, _, (outs _.RC:$dst),
|
||||
(ins _.RC:$src1, _.RC:$src2, i8imm:$src3),
|
||||
(ins _.RC:$src1, _.RC:$src2, u8imm:$src3),
|
||||
"valign"##_.Suffix,
|
||||
"$src3, $src2, $src1", "$src1, $src2, $src3",
|
||||
(_.VT (X86VAlign _.RC:$src2, _.RC:$src1,
|
||||
@ -5096,7 +5096,7 @@ multiclass avx512_valign<X86VectorVTInfo _> {
|
||||
|
||||
let mayLoad = 1 in
|
||||
def rmi : AVX512AIi8<0x03, MRMSrcMem, (outs _.RC:$dst),
|
||||
(ins _.RC:$src1, _.MemOp:$src2, i8imm:$src3),
|
||||
(ins _.RC:$src1, _.MemOp:$src2, u8imm:$src3),
|
||||
!strconcat("valign"##_.Suffix,
|
||||
"\t{$src3, $src2, $src1, $dst|"
|
||||
"$dst, $src1, $src2, $src3}"),
|
||||
|
@ -170,12 +170,12 @@ multiclass SS3I_binop_rm_int_mm<bits<8> opc, string OpcodeStr,
|
||||
/// PALIGN MMX instructions (require SSSE3).
|
||||
multiclass ssse3_palign_mm<string asm, Intrinsic IntId> {
|
||||
def R64irr : MMXSS3AI<0x0F, MRMSrcReg, (outs VR64:$dst),
|
||||
(ins VR64:$src1, VR64:$src2, i8imm:$src3),
|
||||
(ins VR64:$src1, VR64:$src2, u8imm:$src3),
|
||||
!strconcat(asm, "\t{$src3, $src2, $dst|$dst, $src2, $src3}"),
|
||||
[(set VR64:$dst, (IntId VR64:$src1, VR64:$src2, (i8 imm:$src3)))]>,
|
||||
Sched<[WriteShuffle]>;
|
||||
def R64irm : MMXSS3AI<0x0F, MRMSrcMem, (outs VR64:$dst),
|
||||
(ins VR64:$src1, i64mem:$src2, i8imm:$src3),
|
||||
(ins VR64:$src1, i64mem:$src2, u8imm:$src3),
|
||||
!strconcat(asm, "\t{$src3, $src2, $dst|$dst, $src2, $src3}"),
|
||||
[(set VR64:$dst, (IntId VR64:$src1,
|
||||
(bitconvert (load_mmx addr:$src2)), (i8 imm:$src3)))]>,
|
||||
@ -518,13 +518,13 @@ defm MMX_PSHUFB : SS3I_binop_rm_int_mm<0x00, "pshufb", int_x86_ssse3_pshuf_b,
|
||||
MMX_PSHUF_ITINS>;
|
||||
|
||||
def MMX_PSHUFWri : MMXIi8<0x70, MRMSrcReg,
|
||||
(outs VR64:$dst), (ins VR64:$src1, i8imm:$src2),
|
||||
(outs VR64:$dst), (ins VR64:$src1, u8imm:$src2),
|
||||
"pshufw\t{$src2, $src1, $dst|$dst, $src1, $src2}",
|
||||
[(set VR64:$dst,
|
||||
(int_x86_sse_pshuf_w VR64:$src1, imm:$src2))],
|
||||
IIC_MMX_PSHUF>, Sched<[WriteShuffle]>;
|
||||
def MMX_PSHUFWmi : MMXIi8<0x70, MRMSrcMem,
|
||||
(outs VR64:$dst), (ins i64mem:$src1, i8imm:$src2),
|
||||
(outs VR64:$dst), (ins i64mem:$src1, u8imm:$src2),
|
||||
"pshufw\t{$src2, $src1, $dst|$dst, $src1, $src2}",
|
||||
[(set VR64:$dst,
|
||||
(int_x86_sse_pshuf_w (load_mmx addr:$src1),
|
||||
|
Loading…
x
Reference in New Issue
Block a user