|
|
|
@@ -209,47 +209,47 @@ class PseudoI<dag oops, dag iops, list<dag> pattern>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class I<bits<8> o, Format f, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary,
|
|
|
|
|
Domain d = GenericDomain>
|
|
|
|
|
: X86Inst<o, f, NoImm, outs, ins, asm, itin, d> {
|
|
|
|
|
let Pattern = pattern;
|
|
|
|
|
let CodeSize = 3;
|
|
|
|
|
}
|
|
|
|
|
class Ii8 <bits<8> o, Format f, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary,
|
|
|
|
|
Domain d = GenericDomain>
|
|
|
|
|
: X86Inst<o, f, Imm8, outs, ins, asm, itin, d> {
|
|
|
|
|
let Pattern = pattern;
|
|
|
|
|
let CodeSize = 3;
|
|
|
|
|
}
|
|
|
|
|
class Ii8PCRel<bits<8> o, Format f, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: X86Inst<o, f, Imm8PCRel, outs, ins, asm, itin> {
|
|
|
|
|
let Pattern = pattern;
|
|
|
|
|
let CodeSize = 3;
|
|
|
|
|
}
|
|
|
|
|
class Ii16<bits<8> o, Format f, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: X86Inst<o, f, Imm16, outs, ins, asm, itin> {
|
|
|
|
|
let Pattern = pattern;
|
|
|
|
|
let CodeSize = 3;
|
|
|
|
|
}
|
|
|
|
|
class Ii32<bits<8> o, Format f, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: X86Inst<o, f, Imm32, outs, ins, asm, itin> {
|
|
|
|
|
let Pattern = pattern;
|
|
|
|
|
let CodeSize = 3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class Ii16PCRel<bits<8> o, Format f, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: X86Inst<o, f, Imm16PCRel, outs, ins, asm, itin> {
|
|
|
|
|
let Pattern = pattern;
|
|
|
|
|
let CodeSize = 3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class Ii32PCRel<bits<8> o, Format f, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: X86Inst<o, f, Imm32PCRel, outs, ins, asm, itin> {
|
|
|
|
|
let Pattern = pattern;
|
|
|
|
|
let CodeSize = 3;
|
|
|
|
@@ -258,12 +258,12 @@ class Ii32PCRel<bits<8> o, Format f, dag outs, dag ins, string asm,
|
|
|
|
|
// FPStack Instruction Templates:
|
|
|
|
|
// FPI - Floating Point Instruction template.
|
|
|
|
|
class FPI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, [], itin> {}
|
|
|
|
|
|
|
|
|
|
// FpI_ - Floating Point Pseudo Instruction template. Not Predicated.
|
|
|
|
|
class FpI_<dag outs, dag ins, FPFormat fp, list<dag> pattern,
|
|
|
|
|
InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
InstrItinClass itin = NoItinerary>
|
|
|
|
|
: X86Inst<0, Pseudo, NoImm, outs, ins, "", itin> {
|
|
|
|
|
let FPForm = fp;
|
|
|
|
|
let Pattern = pattern;
|
|
|
|
@@ -276,14 +276,14 @@ class FpI_<dag outs, dag ins, FPFormat fp, list<dag> pattern,
|
|
|
|
|
// Iseg32 - 16-bit segment selector, 32-bit offset
|
|
|
|
|
|
|
|
|
|
class Iseg16 <bits<8> o, Format f, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: X86Inst<o, f, Imm16, outs, ins, asm, itin> {
|
|
|
|
|
let Pattern = pattern;
|
|
|
|
|
let CodeSize = 3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class Iseg32 <bits<8> o, Format f, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: X86Inst<o, f, Imm32, outs, ins, asm, itin> {
|
|
|
|
|
let Pattern = pattern;
|
|
|
|
|
let CodeSize = 3;
|
|
|
|
@@ -293,7 +293,7 @@ def __xs : XS;
|
|
|
|
|
|
|
|
|
|
// SI - SSE 1 & 2 scalar instructions
|
|
|
|
|
class SI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin> {
|
|
|
|
|
let Predicates = !if(hasVEXPrefix /* VEX */, [HasAVX],
|
|
|
|
|
!if(!eq(Prefix, __xs.Prefix), [UseSSE1], [UseSSE2]));
|
|
|
|
@@ -304,7 +304,7 @@ class SI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
|
|
|
|
|
// SIi8 - SSE 1 & 2 scalar instructions
|
|
|
|
|
class SIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin> {
|
|
|
|
|
let Predicates = !if(hasVEXPrefix /* VEX */, [HasAVX],
|
|
|
|
|
!if(!eq(Prefix, __xs.Prefix), [UseSSE1], [UseSSE2]));
|
|
|
|
@@ -351,25 +351,25 @@ class PIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
// VPSI - SSE1 instructions with TB prefix in AVX form.
|
|
|
|
|
|
|
|
|
|
class SSI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin>, XS, Requires<[UseSSE1]>;
|
|
|
|
|
class SSIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin>, XS, Requires<[UseSSE1]>;
|
|
|
|
|
class PSI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedSingle>, TB,
|
|
|
|
|
Requires<[UseSSE1]>;
|
|
|
|
|
class PSIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedSingle>, TB,
|
|
|
|
|
Requires<[UseSSE1]>;
|
|
|
|
|
class VSSI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, !strconcat("v", asm), pattern, itin>, XS,
|
|
|
|
|
Requires<[HasAVX]>;
|
|
|
|
|
class VPSI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, !strconcat("v", asm), pattern, itin, SSEPackedSingle>, TB,
|
|
|
|
|
Requires<[HasAVX]>;
|
|
|
|
|
|
|
|
|
@@ -389,42 +389,42 @@ class VPSI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
// MMX operands.
|
|
|
|
|
|
|
|
|
|
class SDI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin>, XD, Requires<[UseSSE2]>;
|
|
|
|
|
class SDIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin>, XD, Requires<[UseSSE2]>;
|
|
|
|
|
class S2SI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin>, XS, Requires<[UseSSE2]>;
|
|
|
|
|
class S2SIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern>, XS, Requires<[UseSSE2]>;
|
|
|
|
|
class PDI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedDouble>, TB, OpSize,
|
|
|
|
|
Requires<[UseSSE2]>;
|
|
|
|
|
class PDIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedDouble>, TB, OpSize,
|
|
|
|
|
Requires<[UseSSE2]>;
|
|
|
|
|
class VSDI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, !strconcat("v", asm), pattern, itin>, XD,
|
|
|
|
|
Requires<[HasAVX]>;
|
|
|
|
|
class VS2SI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, !strconcat("v", asm), pattern, itin>, XS,
|
|
|
|
|
Requires<[HasAVX]>;
|
|
|
|
|
class VPDI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, !strconcat("v", asm), pattern, itin, SSEPackedDouble>, TB,
|
|
|
|
|
OpSize, Requires<[HasAVX]>;
|
|
|
|
|
class MMXSDIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin>, XD, Requires<[HasSSE2]>;
|
|
|
|
|
class MMXS2SIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern>, XS, Requires<[HasSSE2]>;
|
|
|
|
|
|
|
|
|
|
// SSE3 Instruction Templates:
|
|
|
|
@@ -434,15 +434,15 @@ class MMXS2SIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
// S3DI - SSE3 instructions with XD prefix.
|
|
|
|
|
|
|
|
|
|
class S3SI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedSingle>, XS,
|
|
|
|
|
Requires<[UseSSE3]>;
|
|
|
|
|
class S3DI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedDouble>, XD,
|
|
|
|
|
Requires<[UseSSE3]>;
|
|
|
|
|
class S3I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedDouble>, TB, OpSize,
|
|
|
|
|
Requires<[UseSSE3]>;
|
|
|
|
|
|
|
|
|
@@ -459,19 +459,19 @@ class S3I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
// classes. They need to be enabled even if AVX is enabled.
|
|
|
|
|
|
|
|
|
|
class SS38I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, T8,
|
|
|
|
|
Requires<[UseSSSE3]>;
|
|
|
|
|
class SS3AI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, TA,
|
|
|
|
|
Requires<[UseSSSE3]>;
|
|
|
|
|
class MMXSS38I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, T8,
|
|
|
|
|
Requires<[HasSSSE3]>;
|
|
|
|
|
class MMXSS3AI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, TA,
|
|
|
|
|
Requires<[HasSSSE3]>;
|
|
|
|
|
|
|
|
|
@@ -481,11 +481,11 @@ class MMXSS3AI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
// SS41AIi8 - SSE 4.1 instructions with TA prefix and ImmT == Imm8.
|
|
|
|
|
//
|
|
|
|
|
class SS48I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, T8,
|
|
|
|
|
Requires<[UseSSE41]>;
|
|
|
|
|
class SS4AIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, TA,
|
|
|
|
|
Requires<[UseSSE41]>;
|
|
|
|
|
|
|
|
|
@@ -493,19 +493,19 @@ class SS4AIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
//
|
|
|
|
|
// SS428I - SSE 4.2 instructions with T8 prefix.
|
|
|
|
|
class SS428I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, T8,
|
|
|
|
|
Requires<[UseSSE42]>;
|
|
|
|
|
|
|
|
|
|
// SS42FI - SSE 4.2 instructions with T8XD prefix.
|
|
|
|
|
// NOTE: 'HasSSE42' is used as SS42FI is only used for CRC32 insns.
|
|
|
|
|
class SS42FI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin>, T8XD, Requires<[HasSSE42]>;
|
|
|
|
|
|
|
|
|
|
// SS42AI = SSE 4.2 instructions with TA prefix
|
|
|
|
|
class SS42AI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, TA,
|
|
|
|
|
Requires<[UseSSE42]>;
|
|
|
|
|
|
|
|
|
@@ -515,11 +515,11 @@ class SS42AI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
// AVX8I - AVX instructions with T8 and OpSize prefix.
|
|
|
|
|
// AVXAIi8 - AVX instructions with TA, OpSize prefix and ImmT = Imm8.
|
|
|
|
|
class AVX8I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, T8, OpSize,
|
|
|
|
|
Requires<[HasAVX]>;
|
|
|
|
|
class AVXAIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, TA, OpSize,
|
|
|
|
|
Requires<[HasAVX]>;
|
|
|
|
|
|
|
|
|
@@ -529,11 +529,11 @@ class AVXAIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
// AVX28I - AVX2 instructions with T8 and OpSize prefix.
|
|
|
|
|
// AVX2AIi8 - AVX2 instructions with TA, OpSize prefix and ImmT = Imm8.
|
|
|
|
|
class AVX28I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, T8, OpSize,
|
|
|
|
|
Requires<[HasAVX2]>;
|
|
|
|
|
class AVX2AIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, TA, OpSize,
|
|
|
|
|
Requires<[HasAVX2]>;
|
|
|
|
|
|
|
|
|
@@ -542,53 +542,53 @@ class AVX2AIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
// AES8I
|
|
|
|
|
// These use the same encoding as the SSE4.2 T8 and TA encodings.
|
|
|
|
|
class AES8I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, T8,
|
|
|
|
|
Requires<[HasAES]>;
|
|
|
|
|
|
|
|
|
|
class AESAI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, TA,
|
|
|
|
|
Requires<[HasAES]>;
|
|
|
|
|
|
|
|
|
|
// PCLMUL Instruction Templates
|
|
|
|
|
class PCLMULIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, TA,
|
|
|
|
|
OpSize, Requires<[HasPCLMUL]>;
|
|
|
|
|
|
|
|
|
|
class AVXPCLMULIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, TA,
|
|
|
|
|
OpSize, VEX_4V, Requires<[HasAVX, HasPCLMUL]>;
|
|
|
|
|
|
|
|
|
|
// FMA3 Instruction Templates
|
|
|
|
|
class FMA3<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin>, T8,
|
|
|
|
|
OpSize, VEX_4V, Requires<[HasFMA]>;
|
|
|
|
|
|
|
|
|
|
// FMA4 Instruction Templates
|
|
|
|
|
class FMA4<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin>, TA,
|
|
|
|
|
OpSize, VEX_4V, VEX_I8IMM, Requires<[HasFMA4]>;
|
|
|
|
|
|
|
|
|
|
// XOP 2, 3 and 4 Operand Instruction Template
|
|
|
|
|
class IXOP<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin, SSEPackedDouble>,
|
|
|
|
|
XOP, XOP9, Requires<[HasXOP]>;
|
|
|
|
|
|
|
|
|
|
// XOP 2, 3 and 4 Operand Instruction Templates with imm byte
|
|
|
|
|
class IXOPi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedDouble>,
|
|
|
|
|
XOP, XOP8, Requires<[HasXOP]>;
|
|
|
|
|
|
|
|
|
|
// XOP 5 operand instruction (VEX encoding!)
|
|
|
|
|
class IXOP5<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag>pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin, SSEPackedInt>, TA,
|
|
|
|
|
OpSize, VEX_4V, VEX_I8IMM, Requires<[HasXOP]>;
|
|
|
|
|
|
|
|
|
@@ -596,33 +596,33 @@ class IXOP5<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
class RI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin>, REX_W;
|
|
|
|
|
class RIi8 <bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin>, REX_W;
|
|
|
|
|
class RIi32 <bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii32<o, F, outs, ins, asm, pattern, itin>, REX_W;
|
|
|
|
|
|
|
|
|
|
class RIi64<bits<8> o, Format f, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: X86Inst<o, f, Imm64, outs, ins, asm, itin>, REX_W {
|
|
|
|
|
let Pattern = pattern;
|
|
|
|
|
let CodeSize = 3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class RSSI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: SSI<o, F, outs, ins, asm, pattern, itin>, REX_W;
|
|
|
|
|
class RSDI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: SDI<o, F, outs, ins, asm, pattern, itin>, REX_W;
|
|
|
|
|
class RPDI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: PDI<o, F, outs, ins, asm, pattern, itin>, REX_W;
|
|
|
|
|
class VRPDI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: VPDI<o, F, outs, ins, asm, pattern, itin>, VEX_W;
|
|
|
|
|
|
|
|
|
|
// MMX Instruction templates
|
|
|
|
@@ -636,23 +636,23 @@ class VRPDI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
// MMXID - MMX instructions with XD prefix.
|
|
|
|
|
// MMXIS - MMX instructions with XS prefix.
|
|
|
|
|
class MMXI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin>, TB, Requires<[HasMMX]>;
|
|
|
|
|
class MMXI64<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin>, TB, Requires<[HasMMX,In64BitMode]>;
|
|
|
|
|
class MMXRI<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin>, TB, REX_W, Requires<[HasMMX]>;
|
|
|
|
|
class MMX2I<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: I<o, F, outs, ins, asm, pattern, itin>, TB, OpSize, Requires<[HasMMX]>;
|
|
|
|
|
class MMXIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin>, TB, Requires<[HasMMX]>;
|
|
|
|
|
class MMXID<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin>, XD, Requires<[HasMMX]>;
|
|
|
|
|
class MMXIS<bits<8> o, Format F, dag outs, dag ins, string asm,
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = IIC_DEFAULT>
|
|
|
|
|
list<dag> pattern, InstrItinClass itin = NoItinerary>
|
|
|
|
|
: Ii8<o, F, outs, ins, asm, pattern, itin>, XS, Requires<[HasMMX]>;
|
|
|
|
|