mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[X86] Restrict many of the InstAliases to either to only att or intel syntax. NFCI
Many of these aliases exist to give one syntax or the other a slightly different mnemonic and the other variant gets a duplicate of its normal mnemonic This patch restricts a lot of these to only one variant so we don't get the duplication. This removes a lot of duplicate entries from the matcher table. It also reduces the number of warnings printed when you enable the ambiguous match warning in tablegen. llvm-svn: 331117
This commit is contained in:
parent
ecfbc53693
commit
1a57227400
@ -1308,7 +1308,7 @@ class MnemonicAlias<string From, string To, string VariantName = ""> {
|
||||
/// InstAlias - This defines an alternate assembly syntax that is allowed to
|
||||
/// match an instruction that has a different (more canonical) assembly
|
||||
/// representation.
|
||||
class InstAlias<string Asm, dag Result, int Emit = 1> {
|
||||
class InstAlias<string Asm, dag Result, int Emit = 1, string VariantName = ""> {
|
||||
string AsmString = Asm; // The .s format to match the instruction with.
|
||||
dag ResultInst = Result; // The MCInst to generate.
|
||||
|
||||
@ -1332,7 +1332,7 @@ class InstAlias<string Asm, dag Result, int Emit = 1> {
|
||||
|
||||
// Assembler variant name to use for this alias. If not specified then
|
||||
// assembler variants will be determined based on AsmString
|
||||
string AsmVariantName = "";
|
||||
string AsmVariantName = VariantName;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -6602,9 +6602,9 @@ defm VCVTSI642SDZ: avx512_vcvtsi_common<0x2A, X86SintToFpRnd, WriteCvtI2F, GR64,
|
||||
XD, VEX_W, EVEX_CD8<64, CD8VT1>;
|
||||
|
||||
def : InstAlias<"vcvtsi2ss\t{$src, $src1, $dst|$dst, $src1, $src}",
|
||||
(VCVTSI2SSZrm FR64X:$dst, FR64X:$src1, i32mem:$src), 0>;
|
||||
(VCVTSI2SSZrm FR64X:$dst, FR64X:$src1, i32mem:$src), 0, "att">;
|
||||
def : InstAlias<"vcvtsi2sd\t{$src, $src1, $dst|$dst, $src1, $src}",
|
||||
(VCVTSI2SDZrm FR64X:$dst, FR64X:$src1, i32mem:$src), 0>;
|
||||
(VCVTSI2SDZrm FR64X:$dst, FR64X:$src1, i32mem:$src), 0, "att">;
|
||||
|
||||
def : Pat<(f32 (sint_to_fp (loadi32 addr:$src))),
|
||||
(VCVTSI2SSZrm (f32 (IMPLICIT_DEF)), addr:$src)>;
|
||||
@ -6638,9 +6638,9 @@ defm VCVTUSI642SDZ : avx512_vcvtsi_common<0x7B, X86UintToFpRnd, WriteCvtI2F, GR6
|
||||
XD, VEX_W, EVEX_CD8<64, CD8VT1>;
|
||||
|
||||
def : InstAlias<"vcvtusi2ss\t{$src, $src1, $dst|$dst, $src1, $src}",
|
||||
(VCVTUSI2SSZrm FR64X:$dst, FR64X:$src1, i32mem:$src), 0>;
|
||||
(VCVTUSI2SSZrm FR64X:$dst, FR64X:$src1, i32mem:$src), 0, "att">;
|
||||
def : InstAlias<"vcvtusi2sd\t{$src, $src1, $dst|$dst, $src1, $src}",
|
||||
(VCVTUSI2SDZrm FR64X:$dst, FR64X:$src1, i32mem:$src), 0>;
|
||||
(VCVTUSI2SDZrm FR64X:$dst, FR64X:$src1, i32mem:$src), 0, "att">;
|
||||
|
||||
def : Pat<(f32 (uint_to_fp (loadi32 addr:$src))),
|
||||
(VCVTUSI2SSZrm (f32 (IMPLICIT_DEF)), addr:$src)>;
|
||||
@ -6689,9 +6689,9 @@ multiclass avx512_cvt_s_int_round<bits<8> opc, X86VectorVTInfo SrcVT,
|
||||
EVEX, VEX_LIG, Sched<[sched.Folded, ReadAfterLd]>;
|
||||
|
||||
def : InstAlias<"v" # asm # aliasStr # "\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "rr_Int") DstVT.RC:$dst, SrcVT.RC:$src), 0>;
|
||||
(!cast<Instruction>(NAME # "rr_Int") DstVT.RC:$dst, SrcVT.RC:$src), 0, "att">;
|
||||
def : InstAlias<"v" # asm # aliasStr # "\t{$rc, $src, $dst|$dst, $src, $rc}",
|
||||
(!cast<Instruction>(NAME # "rrb_Int") DstVT.RC:$dst, SrcVT.RC:$src, AVX512RC:$rc), 0>;
|
||||
(!cast<Instruction>(NAME # "rrb_Int") DstVT.RC:$dst, SrcVT.RC:$src, AVX512RC:$rc), 0, "att">;
|
||||
} // Predicates = [HasAVX512]
|
||||
}
|
||||
|
||||
@ -6703,7 +6703,7 @@ multiclass avx512_cvt_s_int_round_aliases<bits<8> opc, X86VectorVTInfo SrcVT,
|
||||
let Predicates = [HasAVX512] in {
|
||||
def : InstAlias<"v" # asm # aliasStr # "\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "rm_Int") DstVT.RC:$dst,
|
||||
SrcVT.IntScalarMemOp:$src), 0>;
|
||||
SrcVT.IntScalarMemOp:$src), 0, "att">;
|
||||
} // Predicates = [HasAVX512]
|
||||
}
|
||||
|
||||
@ -6838,9 +6838,9 @@ let Predicates = [HasAVX512] in {
|
||||
EVEX, VEX_LIG, Sched<[sched.Folded, ReadAfterLd]>;
|
||||
|
||||
def : InstAlias<asm # aliasStr # "\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "rr_Int") _DstRC.RC:$dst, _SrcRC.RC:$src), 0>;
|
||||
(!cast<Instruction>(NAME # "rr_Int") _DstRC.RC:$dst, _SrcRC.RC:$src), 0, "att">;
|
||||
def : InstAlias<asm # aliasStr # "\t{{sae}, $src, $dst|$dst, $src, {sae}}",
|
||||
(!cast<Instruction>(NAME # "rrb_Int") _DstRC.RC:$dst, _SrcRC.RC:$src), 0>;
|
||||
(!cast<Instruction>(NAME # "rrb_Int") _DstRC.RC:$dst, _SrcRC.RC:$src), 0, "att">;
|
||||
} //HasAVX512
|
||||
}
|
||||
|
||||
@ -6854,7 +6854,7 @@ multiclass avx512_cvt_s_all_unsigned<bits<8> opc, string asm,
|
||||
let Predicates = [HasAVX512] in {
|
||||
def : InstAlias<asm # aliasStr # "\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "rm_Int") _DstRC.RC:$dst,
|
||||
_SrcRC.IntScalarMemOp:$src), 0>;
|
||||
_SrcRC.IntScalarMemOp:$src), 0, "att">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7109,11 +7109,11 @@ multiclass avx512_cvtpd2ps<bits<8> opc, string OpcodeStr, X86FoldableSchedWrite
|
||||
def : InstAlias<OpcodeStr##"x\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>;
|
||||
def : InstAlias<OpcodeStr##"x\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z128rm") VR128X:$dst, f128mem:$src), 0>;
|
||||
(!cast<Instruction>(NAME # "Z128rm") VR128X:$dst, f128mem:$src), 0, "intel">;
|
||||
def : InstAlias<OpcodeStr##"y\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>;
|
||||
def : InstAlias<OpcodeStr##"y\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z256rm") VR128X:$dst, f256mem:$src), 0>;
|
||||
(!cast<Instruction>(NAME # "Z256rm") VR128X:$dst, f256mem:$src), 0, "intel">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7230,11 +7230,11 @@ multiclass avx512_cvttpd2dq<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
||||
def : InstAlias<OpcodeStr##"x\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>;
|
||||
def : InstAlias<OpcodeStr##"x\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z128rm") VR128X:$dst, i128mem:$src), 0>;
|
||||
(!cast<Instruction>(NAME # "Z128rm") VR128X:$dst, i128mem:$src), 0, "intel">;
|
||||
def : InstAlias<OpcodeStr##"y\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>;
|
||||
def : InstAlias<OpcodeStr##"y\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z256rm") VR128X:$dst, i256mem:$src), 0>;
|
||||
(!cast<Instruction>(NAME # "Z256rm") VR128X:$dst, i256mem:$src), 0, "intel">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7260,11 +7260,11 @@ multiclass avx512_cvtpd2dq<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
||||
def : InstAlias<OpcodeStr##"x\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>;
|
||||
def : InstAlias<OpcodeStr##"x\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z128rm") VR128X:$dst, f128mem:$src), 0>;
|
||||
(!cast<Instruction>(NAME # "Z128rm") VR128X:$dst, f128mem:$src), 0, "intel">;
|
||||
def : InstAlias<OpcodeStr##"y\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>;
|
||||
def : InstAlias<OpcodeStr##"y\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z256rm") VR128X:$dst, f256mem:$src), 0>;
|
||||
(!cast<Instruction>(NAME # "Z256rm") VR128X:$dst, f256mem:$src), 0, "intel">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7380,11 +7380,11 @@ multiclass avx512_cvtqq2ps<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
||||
def : InstAlias<OpcodeStr##"x\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z128rr") VR128X:$dst, VR128X:$src), 0>;
|
||||
def : InstAlias<OpcodeStr##"x\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z128rm") VR128X:$dst, i128mem:$src), 0>;
|
||||
(!cast<Instruction>(NAME # "Z128rm") VR128X:$dst, i128mem:$src), 0, "intel">;
|
||||
def : InstAlias<OpcodeStr##"y\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z256rr") VR128X:$dst, VR256X:$src), 0>;
|
||||
def : InstAlias<OpcodeStr##"y\t{$src, $dst|$dst, $src}",
|
||||
(!cast<Instruction>(NAME # "Z256rm") VR128X:$dst, i256mem:$src), 0>;
|
||||
(!cast<Instruction>(NAME # "Z256rm") VR128X:$dst, i256mem:$src), 0, "intel">;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2994,13 +2994,13 @@ def : InstAlias<"aam", (AAM8i8 10)>, Requires<[Not64BitMode]>;
|
||||
// Disambiguate the mem/imm form of bt-without-a-suffix as btl.
|
||||
// Likewise for btc/btr/bts.
|
||||
def : InstAlias<"bt\t{$imm, $mem|$mem, $imm}",
|
||||
(BT32mi8 i32mem:$mem, i32i8imm:$imm), 0>;
|
||||
(BT32mi8 i32mem:$mem, i32i8imm:$imm), 0, "att">;
|
||||
def : InstAlias<"btc\t{$imm, $mem|$mem, $imm}",
|
||||
(BTC32mi8 i32mem:$mem, i32i8imm:$imm), 0>;
|
||||
(BTC32mi8 i32mem:$mem, i32i8imm:$imm), 0, "att">;
|
||||
def : InstAlias<"btr\t{$imm, $mem|$mem, $imm}",
|
||||
(BTR32mi8 i32mem:$mem, i32i8imm:$imm), 0>;
|
||||
(BTR32mi8 i32mem:$mem, i32i8imm:$imm), 0, "att">;
|
||||
def : InstAlias<"bts\t{$imm, $mem|$mem, $imm}",
|
||||
(BTS32mi8 i32mem:$mem, i32i8imm:$imm), 0>;
|
||||
(BTS32mi8 i32mem:$mem, i32i8imm:$imm), 0, "att">;
|
||||
|
||||
// clr aliases.
|
||||
def : InstAlias<"clr{b}\t$reg", (XOR8rr GR8 :$reg, GR8 :$reg), 0>;
|
||||
@ -3019,10 +3019,10 @@ def : InstAlias<"lods\t{$src, %al|al, $src}", (LODSB srcidx8:$src), 0>;
|
||||
def : InstAlias<"lods\t{$src, %ax|ax, $src}", (LODSW srcidx16:$src), 0>;
|
||||
def : InstAlias<"lods\t{$src, %eax|eax, $src}", (LODSL srcidx32:$src), 0>;
|
||||
def : InstAlias<"lods\t{$src, %rax|rax, $src}", (LODSQ srcidx64:$src), 0>, Requires<[In64BitMode]>;
|
||||
def : InstAlias<"lods{b}\t$src", (LODSB srcidx8:$src), 0>;
|
||||
def : InstAlias<"lods{w}\t$src", (LODSW srcidx16:$src), 0>;
|
||||
def : InstAlias<"lods{l}\t$src", (LODSL srcidx32:$src), 0>;
|
||||
def : InstAlias<"lods{q}\t$src", (LODSQ srcidx64:$src), 0>, Requires<[In64BitMode]>;
|
||||
def : InstAlias<"lods\t$src", (LODSB srcidx8:$src), 0, "intel">;
|
||||
def : InstAlias<"lods\t$src", (LODSW srcidx16:$src), 0, "intel">;
|
||||
def : InstAlias<"lods\t$src", (LODSL srcidx32:$src), 0, "intel">;
|
||||
def : InstAlias<"lods\t$src", (LODSQ srcidx64:$src), 0, "intel">, Requires<[In64BitMode]>;
|
||||
|
||||
|
||||
// stos aliases. Accept the source being omitted because it's implicit in
|
||||
@ -3036,10 +3036,10 @@ def : InstAlias<"stos\t{%al, $dst|$dst, al}", (STOSB dstidx8:$dst), 0>;
|
||||
def : InstAlias<"stos\t{%ax, $dst|$dst, ax}", (STOSW dstidx16:$dst), 0>;
|
||||
def : InstAlias<"stos\t{%eax, $dst|$dst, eax}", (STOSL dstidx32:$dst), 0>;
|
||||
def : InstAlias<"stos\t{%rax, $dst|$dst, rax}", (STOSQ dstidx64:$dst), 0>, Requires<[In64BitMode]>;
|
||||
def : InstAlias<"stos{b}\t$dst", (STOSB dstidx8:$dst), 0>;
|
||||
def : InstAlias<"stos{w}\t$dst", (STOSW dstidx16:$dst), 0>;
|
||||
def : InstAlias<"stos{l}\t$dst", (STOSL dstidx32:$dst), 0>;
|
||||
def : InstAlias<"stos{q}\t$dst", (STOSQ dstidx64:$dst), 0>, Requires<[In64BitMode]>;
|
||||
def : InstAlias<"stos\t$dst", (STOSB dstidx8:$dst), 0, "intel">;
|
||||
def : InstAlias<"stos\t$dst", (STOSW dstidx16:$dst), 0, "intel">;
|
||||
def : InstAlias<"stos\t$dst", (STOSL dstidx32:$dst), 0, "intel">;
|
||||
def : InstAlias<"stos\t$dst", (STOSQ dstidx64:$dst), 0, "intel">, Requires<[In64BitMode]>;
|
||||
|
||||
|
||||
// scas aliases. Accept the destination being omitted because it's implicit
|
||||
@ -3053,24 +3053,24 @@ def : InstAlias<"scas\t{$dst, %al|al, $dst}", (SCASB dstidx8:$dst), 0>;
|
||||
def : InstAlias<"scas\t{$dst, %ax|ax, $dst}", (SCASW dstidx16:$dst), 0>;
|
||||
def : InstAlias<"scas\t{$dst, %eax|eax, $dst}", (SCASL dstidx32:$dst), 0>;
|
||||
def : InstAlias<"scas\t{$dst, %rax|rax, $dst}", (SCASQ dstidx64:$dst), 0>, Requires<[In64BitMode]>;
|
||||
def : InstAlias<"scas{b}\t$dst", (SCASB dstidx8:$dst), 0>;
|
||||
def : InstAlias<"scas{w}\t$dst", (SCASW dstidx16:$dst), 0>;
|
||||
def : InstAlias<"scas{l}\t$dst", (SCASL dstidx32:$dst), 0>;
|
||||
def : InstAlias<"scas{q}\t$dst", (SCASQ dstidx64:$dst), 0>, Requires<[In64BitMode]>;
|
||||
def : InstAlias<"scas\t$dst", (SCASB dstidx8:$dst), 0, "intel">;
|
||||
def : InstAlias<"scas\t$dst", (SCASW dstidx16:$dst), 0, "intel">;
|
||||
def : InstAlias<"scas\t$dst", (SCASL dstidx32:$dst), 0, "intel">;
|
||||
def : InstAlias<"scas\t$dst", (SCASQ dstidx64:$dst), 0, "intel">, Requires<[In64BitMode]>;
|
||||
|
||||
// cmps aliases. Mnemonic suffix being omitted because it's implicit
|
||||
// in the destination.
|
||||
def : InstAlias<"cmps{b}\t{$dst, $src|$src, $dst}", (CMPSB dstidx8:$dst, srcidx8:$src), 0>;
|
||||
def : InstAlias<"cmps{w}\t{$dst, $src|$src, $dst}", (CMPSW dstidx16:$dst, srcidx16:$src), 0>;
|
||||
def : InstAlias<"cmps{l}\t{$dst, $src|$src, $dst}", (CMPSL dstidx32:$dst, srcidx32:$src), 0>;
|
||||
def : InstAlias<"cmps{q}\t{$dst, $src|$src, $dst}", (CMPSQ dstidx64:$dst, srcidx64:$src), 0>, Requires<[In64BitMode]>;
|
||||
def : InstAlias<"cmps\t{$dst, $src|$src, $dst}", (CMPSB dstidx8:$dst, srcidx8:$src), 0, "intel">;
|
||||
def : InstAlias<"cmps\t{$dst, $src|$src, $dst}", (CMPSW dstidx16:$dst, srcidx16:$src), 0, "intel">;
|
||||
def : InstAlias<"cmps\t{$dst, $src|$src, $dst}", (CMPSL dstidx32:$dst, srcidx32:$src), 0, "intel">;
|
||||
def : InstAlias<"cmps\t{$dst, $src|$src, $dst}", (CMPSQ dstidx64:$dst, srcidx64:$src), 0, "intel">, Requires<[In64BitMode]>;
|
||||
|
||||
// movs aliases. Mnemonic suffix being omitted because it's implicit
|
||||
// in the destination.
|
||||
def : InstAlias<"movs{b}\t{$src, $dst|$dst, $src}", (MOVSB dstidx8:$dst, srcidx8:$src), 0>;
|
||||
def : InstAlias<"movs{w}\t{$src, $dst|$dst, $src}", (MOVSW dstidx16:$dst, srcidx16:$src), 0>;
|
||||
def : InstAlias<"movs{l}\t{$src, $dst|$dst, $src}", (MOVSL dstidx32:$dst, srcidx32:$src), 0>;
|
||||
def : InstAlias<"movs{q}\t{$src, $dst|$dst, $src}", (MOVSQ dstidx64:$dst, srcidx64:$src), 0>, Requires<[In64BitMode]>;
|
||||
def : InstAlias<"movs\t{$src, $dst|$dst, $src}", (MOVSB dstidx8:$dst, srcidx8:$src), 0, "intel">;
|
||||
def : InstAlias<"movs\t{$src, $dst|$dst, $src}", (MOVSW dstidx16:$dst, srcidx16:$src), 0, "intel">;
|
||||
def : InstAlias<"movs\t{$src, $dst|$dst, $src}", (MOVSL dstidx32:$dst, srcidx32:$src), 0, "intel">;
|
||||
def : InstAlias<"movs\t{$src, $dst|$dst, $src}", (MOVSQ dstidx64:$dst, srcidx64:$src), 0, "intel">, Requires<[In64BitMode]>;
|
||||
|
||||
// div and idiv aliases for explicit A register.
|
||||
def : InstAlias<"div{b}\t{$src, %al|al, $src}", (DIV8r GR8 :$src)>;
|
||||
@ -3185,15 +3185,15 @@ def : InstAlias<"imul{q}\t{$imm, $r|$r, $imm}", (IMUL64rri8 GR64:$r, GR64:$r, i6
|
||||
|
||||
// ins aliases. Accept the mnemonic suffix being omitted because it's implicit
|
||||
// in the destination.
|
||||
def : InstAlias<"ins{b}\t{%dx, $dst|$dst, dx}", (INSB dstidx8:$dst), 0>;
|
||||
def : InstAlias<"ins{w}\t{%dx, $dst|$dst, dx}", (INSW dstidx16:$dst), 0>;
|
||||
def : InstAlias<"ins{l}\t{%dx, $dst|$dst, dx}", (INSL dstidx32:$dst), 0>;
|
||||
def : InstAlias<"ins\t{%dx, $dst|$dst, dx}", (INSB dstidx8:$dst), 0, "intel">;
|
||||
def : InstAlias<"ins\t{%dx, $dst|$dst, dx}", (INSW dstidx16:$dst), 0, "intel">;
|
||||
def : InstAlias<"ins\t{%dx, $dst|$dst, dx}", (INSL dstidx32:$dst), 0, "intel">;
|
||||
|
||||
// outs aliases. Accept the mnemonic suffix being omitted because it's implicit
|
||||
// in the source.
|
||||
def : InstAlias<"outs{b}\t{$src, %dx|dx, $src}", (OUTSB srcidx8:$src), 0>;
|
||||
def : InstAlias<"outs{w}\t{$src, %dx|dx, $src}", (OUTSW srcidx16:$src), 0>;
|
||||
def : InstAlias<"outs{l}\t{$src, %dx|dx, $src}", (OUTSL srcidx32:$src), 0>;
|
||||
def : InstAlias<"outs\t{$src, %dx|dx, $src}", (OUTSB srcidx8:$src), 0, "intel">;
|
||||
def : InstAlias<"outs\t{$src, %dx|dx, $src}", (OUTSW srcidx16:$src), 0, "intel">;
|
||||
def : InstAlias<"outs\t{$src, %dx|dx, $src}", (OUTSL srcidx32:$src), 0, "intel">;
|
||||
|
||||
// inb %dx -> inb %al, %dx
|
||||
def : InstAlias<"inb\t{%dx|dx}", (IN8rr), 0>;
|
||||
@ -3232,21 +3232,21 @@ def : InstAlias<"movd\t{$src, $dst|$dst, $src}",
|
||||
(MMX_MOVD64from64rr GR64:$dst, VR64:$src), 0>;
|
||||
|
||||
// movsx aliases
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX16rr8 GR16:$dst, GR8:$src), 0>;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX16rm8 GR16:$dst, i8mem:$src), 0>;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX32rr8 GR32:$dst, GR8:$src), 0>;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX32rr16 GR32:$dst, GR16:$src), 0>;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX64rr8 GR64:$dst, GR8:$src), 0>;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX64rr16 GR64:$dst, GR16:$src), 0>;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX64rr32 GR64:$dst, GR32:$src), 0>;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX16rr8 GR16:$dst, GR8:$src), 0, "att">;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX16rm8 GR16:$dst, i8mem:$src), 0, "att">;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX32rr8 GR32:$dst, GR8:$src), 0, "att">;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX32rr16 GR32:$dst, GR16:$src), 0, "att">;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX64rr8 GR64:$dst, GR8:$src), 0, "att">;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX64rr16 GR64:$dst, GR16:$src), 0, "att">;
|
||||
def : InstAlias<"movsx\t{$src, $dst|$dst, $src}", (MOVSX64rr32 GR64:$dst, GR32:$src), 0, "att">;
|
||||
|
||||
// movzx aliases
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX16rr8 GR16:$dst, GR8:$src), 0>;
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX16rm8 GR16:$dst, i8mem:$src), 0>;
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX32rr8 GR32:$dst, GR8:$src), 0>;
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX32rr16 GR32:$dst, GR16:$src), 0>;
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX64rr8 GR64:$dst, GR8:$src), 0>;
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX64rr16 GR64:$dst, GR16:$src), 0>;
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX16rr8 GR16:$dst, GR8:$src), 0, "att">;
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX16rm8 GR16:$dst, i8mem:$src), 0, "att">;
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX32rr8 GR32:$dst, GR8:$src), 0, "att">;
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX32rr16 GR32:$dst, GR16:$src), 0, "att">;
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX64rr8 GR64:$dst, GR8:$src), 0, "att">;
|
||||
def : InstAlias<"movzx\t{$src, $dst|$dst, $src}", (MOVZX64rr16 GR64:$dst, GR16:$src), 0, "att">;
|
||||
// Note: No GR32->GR64 movzx form.
|
||||
|
||||
// outb %dx -> outb %al, %dx
|
||||
|
@ -952,21 +952,21 @@ defm VCVTTSD2SI64 : sse12_cvt_s<0x2C, FR64, GR64, fp_to_sint, f64mem, loadf64,
|
||||
XD, VEX, VEX_W, VEX_LIG;
|
||||
|
||||
def : InstAlias<"vcvttss2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTTSS2SIrr GR32:$dst, FR32:$src), 0>;
|
||||
(VCVTTSS2SIrr GR32:$dst, FR32:$src), 0, "att">;
|
||||
def : InstAlias<"vcvttss2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTTSS2SIrm GR32:$dst, f32mem:$src), 0>;
|
||||
(VCVTTSS2SIrm GR32:$dst, f32mem:$src), 0, "att">;
|
||||
def : InstAlias<"vcvttsd2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTTSD2SIrr GR32:$dst, FR64:$src), 0>;
|
||||
(VCVTTSD2SIrr GR32:$dst, FR64:$src), 0, "att">;
|
||||
def : InstAlias<"vcvttsd2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTTSD2SIrm GR32:$dst, f64mem:$src), 0>;
|
||||
(VCVTTSD2SIrm GR32:$dst, f64mem:$src), 0, "att">;
|
||||
def : InstAlias<"vcvttss2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTTSS2SI64rr GR64:$dst, FR32:$src), 0>;
|
||||
(VCVTTSS2SI64rr GR64:$dst, FR32:$src), 0, "att">;
|
||||
def : InstAlias<"vcvttss2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTTSS2SI64rm GR64:$dst, f32mem:$src), 0>;
|
||||
(VCVTTSS2SI64rm GR64:$dst, f32mem:$src), 0, "att">;
|
||||
def : InstAlias<"vcvttsd2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTTSD2SI64rr GR64:$dst, FR64:$src), 0>;
|
||||
(VCVTTSD2SI64rr GR64:$dst, FR64:$src), 0, "att">;
|
||||
def : InstAlias<"vcvttsd2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTTSD2SI64rm GR64:$dst, f64mem:$src), 0>;
|
||||
(VCVTTSD2SI64rm GR64:$dst, f64mem:$src), 0, "att">;
|
||||
}
|
||||
// The assembler can recognize rr 64-bit instructions by seeing a rxx
|
||||
// register, but the same isn't true when only using memory operands,
|
||||
@ -983,9 +983,9 @@ defm VCVTSI642SD : sse12_vcvt_avx<0x2A, GR64, FR64, i64mem, "cvtsi2sd{q}",
|
||||
|
||||
let Predicates = [UseAVX] in {
|
||||
def : InstAlias<"vcvtsi2ss\t{$src, $src1, $dst|$dst, $src1, $src}",
|
||||
(VCVTSI2SSrm FR64:$dst, FR64:$src1, i32mem:$src), 0>;
|
||||
(VCVTSI2SSrm FR64:$dst, FR64:$src1, i32mem:$src), 0, "att">;
|
||||
def : InstAlias<"vcvtsi2sd\t{$src, $src1, $dst|$dst, $src1, $src}",
|
||||
(VCVTSI2SDrm FR64:$dst, FR64:$src1, i32mem:$src), 0>;
|
||||
(VCVTSI2SDrm FR64:$dst, FR64:$src1, i32mem:$src), 0, "att">;
|
||||
|
||||
def : Pat<(f32 (sint_to_fp (loadi32 addr:$src))),
|
||||
(VCVTSI2SSrm (f32 (IMPLICIT_DEF)), addr:$src)>;
|
||||
@ -1032,26 +1032,26 @@ defm CVTSI642SD : sse12_cvt_s<0x2A, GR64, FR64, sint_to_fp, i64mem, loadi64,
|
||||
WriteCvtI2F>, XD, REX_W;
|
||||
|
||||
def : InstAlias<"cvttss2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(CVTTSS2SIrr GR32:$dst, FR32:$src), 0>;
|
||||
(CVTTSS2SIrr GR32:$dst, FR32:$src), 0, "att">;
|
||||
def : InstAlias<"cvttss2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(CVTTSS2SIrm GR32:$dst, f32mem:$src), 0>;
|
||||
(CVTTSS2SIrm GR32:$dst, f32mem:$src), 0, "att">;
|
||||
def : InstAlias<"cvttsd2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(CVTTSD2SIrr GR32:$dst, FR64:$src), 0>;
|
||||
(CVTTSD2SIrr GR32:$dst, FR64:$src), 0, "att">;
|
||||
def : InstAlias<"cvttsd2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(CVTTSD2SIrm GR32:$dst, f64mem:$src), 0>;
|
||||
(CVTTSD2SIrm GR32:$dst, f64mem:$src), 0, "att">;
|
||||
def : InstAlias<"cvttss2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(CVTTSS2SI64rr GR64:$dst, FR32:$src), 0>;
|
||||
(CVTTSS2SI64rr GR64:$dst, FR32:$src), 0, "att">;
|
||||
def : InstAlias<"cvttss2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(CVTTSS2SI64rm GR64:$dst, f32mem:$src), 0>;
|
||||
(CVTTSS2SI64rm GR64:$dst, f32mem:$src), 0, "att">;
|
||||
def : InstAlias<"cvttsd2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(CVTTSD2SI64rr GR64:$dst, FR64:$src), 0>;
|
||||
(CVTTSD2SI64rr GR64:$dst, FR64:$src), 0, "att">;
|
||||
def : InstAlias<"cvttsd2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(CVTTSD2SI64rm GR64:$dst, f64mem:$src), 0>;
|
||||
(CVTTSD2SI64rm GR64:$dst, f64mem:$src), 0, "att">;
|
||||
|
||||
def : InstAlias<"cvtsi2ss\t{$src, $dst|$dst, $src}",
|
||||
(CVTSI2SSrm FR64:$dst, i32mem:$src), 0>;
|
||||
(CVTSI2SSrm FR64:$dst, i32mem:$src), 0, "att">;
|
||||
def : InstAlias<"cvtsi2sd\t{$src, $dst|$dst, $src}",
|
||||
(CVTSI2SDrm FR64:$dst, i32mem:$src), 0>;
|
||||
(CVTSI2SDrm FR64:$dst, i32mem:$src), 0, "att">;
|
||||
|
||||
// Conversion Instructions Intrinsics - Match intrinsics which expect MM
|
||||
// and/or XMM operand(s).
|
||||
@ -1202,39 +1202,39 @@ defm CVTDQ2PS : sse12_cvt_p<0x5B, VR128, i128mem, v4f32, v4i32, memopv2i64,
|
||||
|
||||
let Predicates = [UseAVX] in {
|
||||
def : InstAlias<"vcvtss2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTSS2SIrr_Int GR32:$dst, VR128:$src), 0>;
|
||||
(VCVTSS2SIrr_Int GR32:$dst, VR128:$src), 0, "att">;
|
||||
def : InstAlias<"vcvtss2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTSS2SIrm_Int GR32:$dst, ssmem:$src), 0>;
|
||||
(VCVTSS2SIrm_Int GR32:$dst, ssmem:$src), 0, "att">;
|
||||
def : InstAlias<"vcvtsd2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTSD2SIrr_Int GR32:$dst, VR128:$src), 0>;
|
||||
(VCVTSD2SIrr_Int GR32:$dst, VR128:$src), 0, "att">;
|
||||
def : InstAlias<"vcvtsd2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTSD2SIrm_Int GR32:$dst, sdmem:$src), 0>;
|
||||
(VCVTSD2SIrm_Int GR32:$dst, sdmem:$src), 0, "att">;
|
||||
def : InstAlias<"vcvtss2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTSS2SI64rr_Int GR64:$dst, VR128:$src), 0>;
|
||||
(VCVTSS2SI64rr_Int GR64:$dst, VR128:$src), 0, "att">;
|
||||
def : InstAlias<"vcvtss2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTSS2SI64rm_Int GR64:$dst, ssmem:$src), 0>;
|
||||
(VCVTSS2SI64rm_Int GR64:$dst, ssmem:$src), 0, "att">;
|
||||
def : InstAlias<"vcvtsd2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTSD2SI64rr_Int GR64:$dst, VR128:$src), 0>;
|
||||
(VCVTSD2SI64rr_Int GR64:$dst, VR128:$src), 0, "att">;
|
||||
def : InstAlias<"vcvtsd2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(VCVTSD2SI64rm_Int GR64:$dst, sdmem:$src), 0>;
|
||||
(VCVTSD2SI64rm_Int GR64:$dst, sdmem:$src), 0, "att">;
|
||||
}
|
||||
|
||||
def : InstAlias<"cvtss2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(CVTSS2SIrr_Int GR32:$dst, VR128:$src), 0>;
|
||||
(CVTSS2SIrr_Int GR32:$dst, VR128:$src), 0, "att">;
|
||||
def : InstAlias<"cvtss2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(CVTSS2SIrm_Int GR32:$dst, ssmem:$src), 0>;
|
||||
(CVTSS2SIrm_Int GR32:$dst, ssmem:$src), 0, "att">;
|
||||
def : InstAlias<"cvtsd2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(CVTSD2SIrr_Int GR32:$dst, VR128:$src), 0>;
|
||||
(CVTSD2SIrr_Int GR32:$dst, VR128:$src), 0, "att">;
|
||||
def : InstAlias<"cvtsd2si{l}\t{$src, $dst|$dst, $src}",
|
||||
(CVTSD2SIrm_Int GR32:$dst, sdmem:$src), 0>;
|
||||
(CVTSD2SIrm_Int GR32:$dst, sdmem:$src), 0, "att">;
|
||||
def : InstAlias<"cvtss2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(CVTSS2SI64rr_Int GR64:$dst, VR128:$src), 0>;
|
||||
(CVTSS2SI64rr_Int GR64:$dst, VR128:$src), 0, "att">;
|
||||
def : InstAlias<"cvtss2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(CVTSS2SI64rm_Int GR64:$dst, ssmem:$src), 0>;
|
||||
(CVTSS2SI64rm_Int GR64:$dst, ssmem:$src), 0, "att">;
|
||||
def : InstAlias<"cvtsd2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(CVTSD2SI64rr_Int GR64:$dst, VR128:$src), 0>;
|
||||
(CVTSD2SI64rr_Int GR64:$dst, VR128:$src), 0, "att">;
|
||||
def : InstAlias<"cvtsd2si{q}\t{$src, $dst|$dst, $src}",
|
||||
(CVTSD2SI64rm_Int GR64:$dst, sdmem:$src), 0>;
|
||||
(CVTSD2SI64rm_Int GR64:$dst, sdmem:$src), 0, "att">;
|
||||
|
||||
/// SSE 2 Only
|
||||
|
||||
@ -1506,7 +1506,7 @@ def VCVTPD2DQrm : SDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
|
||||
(v4i32 (X86cvtp2Int (loadv2f64 addr:$src))))]>, VEX,
|
||||
Sched<[WriteCvtF2ILd]>, VEX_WIG;
|
||||
def : InstAlias<"vcvtpd2dqx\t{$src, $dst|$dst, $src}",
|
||||
(VCVTPD2DQrm VR128:$dst, f128mem:$src), 0>;
|
||||
(VCVTPD2DQrm VR128:$dst, f128mem:$src), 0, "intel">;
|
||||
|
||||
// YMM only
|
||||
def VCVTPD2DQYrr : SDI<0xE6, MRMSrcReg, (outs VR128:$dst), (ins VR256:$src),
|
||||
@ -1522,7 +1522,7 @@ def VCVTPD2DQYrm : SDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f256mem:$src),
|
||||
def : InstAlias<"vcvtpd2dqy\t{$src, $dst|$dst, $src}",
|
||||
(VCVTPD2DQYrr VR128:$dst, VR256:$src), 0>;
|
||||
def : InstAlias<"vcvtpd2dqy\t{$src, $dst|$dst, $src}",
|
||||
(VCVTPD2DQYrm VR128:$dst, f256mem:$src), 0>;
|
||||
(VCVTPD2DQYrm VR128:$dst, f256mem:$src), 0, "intel">;
|
||||
}
|
||||
|
||||
def CVTPD2DQrm : SDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
|
||||
@ -1594,7 +1594,7 @@ def VCVTTPD2DQrm : VPDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
|
||||
(v4i32 (X86cvttp2si (loadv2f64 addr:$src))))]>,
|
||||
VEX, Sched<[WriteCvtF2ILd]>, VEX_WIG;
|
||||
def : InstAlias<"vcvttpd2dqx\t{$src, $dst|$dst, $src}",
|
||||
(VCVTTPD2DQrm VR128:$dst, f128mem:$src), 0>;
|
||||
(VCVTTPD2DQrm VR128:$dst, f128mem:$src), 0, "intel">;
|
||||
|
||||
// YMM only
|
||||
let Predicates = [HasAVX, NoVLX] in {
|
||||
@ -1612,7 +1612,7 @@ def VCVTTPD2DQYrm : VPDI<0xE6, MRMSrcMem, (outs VR128:$dst), (ins f256mem:$src),
|
||||
def : InstAlias<"vcvttpd2dqy\t{$src, $dst|$dst, $src}",
|
||||
(VCVTTPD2DQYrr VR128:$dst, VR256:$src), 0>;
|
||||
def : InstAlias<"vcvttpd2dqy\t{$src, $dst|$dst, $src}",
|
||||
(VCVTTPD2DQYrm VR128:$dst, f256mem:$src), 0>;
|
||||
(VCVTTPD2DQYrm VR128:$dst, f256mem:$src), 0, "intel">;
|
||||
|
||||
let Predicates = [HasAVX, NoVLX] in {
|
||||
let AddedComplexity = 15 in {
|
||||
@ -1764,7 +1764,7 @@ def VCVTPD2PSrm : VPDI<0x5A, MRMSrcMem, (outs VR128:$dst), (ins f128mem:$src),
|
||||
[(set VR128:$dst, (X86vfpround (loadv2f64 addr:$src)))]>,
|
||||
VEX, Sched<[WriteCvtF2FLd]>, VEX_WIG;
|
||||
def : InstAlias<"vcvtpd2psx\t{$src, $dst|$dst, $src}",
|
||||
(VCVTPD2PSrm VR128:$dst, f128mem:$src), 0>;
|
||||
(VCVTPD2PSrm VR128:$dst, f128mem:$src), 0, "intel">;
|
||||
|
||||
// YMM only
|
||||
let Predicates = [HasAVX, NoVLX] in {
|
||||
@ -1780,7 +1780,7 @@ def VCVTPD2PSYrm : VPDI<0x5A, MRMSrcMem, (outs VR128:$dst), (ins f256mem:$src),
|
||||
def : InstAlias<"vcvtpd2psy\t{$src, $dst|$dst, $src}",
|
||||
(VCVTPD2PSYrr VR128:$dst, VR256:$src), 0>;
|
||||
def : InstAlias<"vcvtpd2psy\t{$src, $dst|$dst, $src}",
|
||||
(VCVTPD2PSYrm VR128:$dst, f256mem:$src), 0>;
|
||||
(VCVTPD2PSYrm VR128:$dst, f256mem:$src), 0, "intel">;
|
||||
|
||||
def CVTPD2PSrr : PDI<0x5A, MRMSrcReg, (outs VR128:$dst), (ins VR128:$src),
|
||||
"cvtpd2ps\t{$src, $dst|$dst, $src}",
|
||||
|
Loading…
Reference in New Issue
Block a user