blob: 37ad1684397457543251c237b376b94e94810617 [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : SKLWriteResPair<WriteCMOV, [SKLPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [SKLPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [SKLPort06,SKLPort4,SKLPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
125defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
126defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
127defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
134defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
135
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteMove, [SKLPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
145// Branches don't produce values, so they have no latency, but they still
146// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000148
149// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000150def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
151def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
152def : WriteRes<WriteFMove, [SKLPort015]>;
153
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort01], 4, [1], 1, 6>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFAddY, [SKLPort01], 4, [1], 1, 7>; // Floating point add/sub (YMM/ZMM).
Simon Pilgrim21caf012018-05-01 18:22:53 +0000156defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
157defm : SKLWriteResPair<WriteFCmpY, [SKLPort01], 4, [1], 1, 7>; // Floating point compare (YMM/ZMM).
158defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim86d9f232018-05-02 14:25:32 +0000159defm : SKLWriteResPair<WriteFMul, [SKLPort01], 4, [1], 1, 6>; // Floating point multiplication.
160defm : SKLWriteResPair<WriteFMulY, [SKLPort01], 4, [1], 1, 7>; // Floating point multiplication (YMM/ZMM).
Simon Pilgrim21caf012018-05-01 18:22:53 +0000161defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12, [1], 1, 5>; // 10-14 cycles. // Floating point division.
162defm : SKLWriteResPair<WriteFDivY, [SKLPort0], 12, [1], 1, 7>; // 10-14 cycles. // Floating point division (YMM/ZMM).
Simon Pilgrimc7088682018-05-01 18:06:07 +0000163defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15, [1], 1, 5>; // Floating point square root.
164defm : SKLWriteResPair<WriteFSqrtY, [SKLPort0], 15, [1], 1, 7>; // Floating point square root (YMM/ZMM).
165defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate.
166defm : SKLWriteResPair<WriteFRcpY, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate (YMM/ZMM).
167defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal square root estimate.
168defm : SKLWriteResPair<WriteFRsqrtY,[SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal square root estimate (YMM/ZMM).
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000169defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4, [1], 1, 6>; // Fused Multiply Add.
170defm : SKLWriteResPair<WriteFMAS, [SKLPort01], 4, [1], 1, 5>; // Fused Multiply Add (Scalar).
171defm : SKLWriteResPair<WriteFMAY, [SKLPort01], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000172defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000173defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
174defm : SKLWriteResPair<WriteFLogicY, [SKLPort015], 1, [1], 1, 7>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000175defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1, [1], 1, 6>; // Floating point vector shuffles.
Simon Pilgrimdd8eae12018-05-01 14:25:01 +0000176defm : SKLWriteResPair<WriteFShuffleY, [SKLPort5], 1, [1], 1, 7>; // Floating point vector shuffles (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000177defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1, [1], 1, 6>; // Floating point vector shuffles.
178defm : SKLWriteResPair<WriteFVarShuffleY, [SKLPort5], 1, [1], 1, 7>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000179defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000180defm : SKLWriteResPair<WriteFBlendY, [SKLPort015], 1, [1], 1, 7>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000181defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000182defm : SKLWriteResPair<WriteFVarBlendY,[SKLPort015], 2, [2], 2, 7>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000183
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000184def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
185 let Latency = 6;
186 let NumMicroOps = 4;
187 let ResourceCycles = [1,1,1,1];
188}
189
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190// FMA Scheduling helper class.
191// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
192
193// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000194def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
195def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
196def : WriteRes<WriteVecMove, [SKLPort015]>;
197
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000198defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000199defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim57f2b182018-05-01 12:39:17 +0000200defm : SKLWriteResPair<WriteVecLogicY,[SKLPort015], 1, [1], 1, 7>; // Vector integer and/or/xor (YMM/ZMM).
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000201defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
202defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000203defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim819f2182018-05-02 17:58:50 +0000204defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1, [1], 1, 5>; // Vector shuffles.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000205defm : SKLWriteResPair<WriteShuffleY, [SKLPort5], 1, [1], 1, 7>; // Vector shuffles (YMM/ZMM).
206defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1, [1], 1, 6>; // Vector shuffles.
207defm : SKLWriteResPair<WriteVarShuffleY, [SKLPort5], 1, [1], 1, 7>; // Vector shuffles (YMM/ZMM).
Simon Pilgrim06e16542018-04-22 18:35:53 +0000208defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000209defm : SKLWriteResPair<WriteBlendY, [SKLPort5], 1, [1], 1, 7>; // Vector blends (YMM/ZMM).
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000210defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000211defm : SKLWriteResPair<WriteVarBlendY, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends (YMM/ZMM).
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000212defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000213defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000214defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000215
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000216// Vector insert/extract operations.
217def : WriteRes<WriteVecInsert, [SKLPort5]> {
218 let Latency = 2;
219 let NumMicroOps = 2;
220 let ResourceCycles = [2];
221}
222def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
223 let Latency = 6;
224 let NumMicroOps = 2;
225}
Simon Pilgrim819f2182018-05-02 17:58:50 +0000226def: InstRW<[WriteVecInsertLd], (instregex "(V?)MOV(H|L)(PD|PS)rm")>;
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000227
228def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
229 let Latency = 3;
230 let NumMicroOps = 2;
231}
232def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
233 let Latency = 2;
234 let NumMicroOps = 3;
235}
236
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000237// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000238defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
239defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
240defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000241
242// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000243
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000244// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000245def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
246 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000247 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000248 let ResourceCycles = [3];
249}
250def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000251 let Latency = 16;
252 let NumMicroOps = 4;
253 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000254}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000255
256// Packed Compare Explicit Length Strings, Return Mask
257def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
258 let Latency = 19;
259 let NumMicroOps = 9;
260 let ResourceCycles = [4,3,1,1];
261}
262def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
263 let Latency = 25;
264 let NumMicroOps = 10;
265 let ResourceCycles = [4,3,1,1,1];
266}
267
268// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000269def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000270 let Latency = 10;
271 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000272 let ResourceCycles = [3];
273}
274def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000275 let Latency = 16;
276 let NumMicroOps = 4;
277 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000278}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000279
280// Packed Compare Explicit Length Strings, Return Index
281def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
282 let Latency = 18;
283 let NumMicroOps = 8;
284 let ResourceCycles = [4,3,1];
285}
286def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
287 let Latency = 24;
288 let NumMicroOps = 9;
289 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000290}
291
Simon Pilgrima2f26782018-03-27 20:38:54 +0000292// MOVMSK Instructions.
293def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
294def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
295def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
296
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000297// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000298def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
299 let Latency = 4;
300 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000301 let ResourceCycles = [1];
302}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000303def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
304 let Latency = 10;
305 let NumMicroOps = 2;
306 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000307}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000308
309def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
310 let Latency = 8;
311 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000312 let ResourceCycles = [2];
313}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000314def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000315 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000316 let NumMicroOps = 3;
317 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000318}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000319
320def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
321 let Latency = 20;
322 let NumMicroOps = 11;
323 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000324}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000325def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
326 let Latency = 25;
327 let NumMicroOps = 11;
328 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000329}
330
331// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000332def : WriteRes<WriteCLMul, [SKLPort5]> {
333 let Latency = 6;
334 let NumMicroOps = 1;
335 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000336}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000337def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
338 let Latency = 12;
339 let NumMicroOps = 2;
340 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000341}
342
343// Catch-all for expensive system instructions.
344def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
345
346// AVX2.
Simon Pilgrim819f2182018-05-02 17:58:50 +0000347defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector shuffles.
348defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector variable shuffles.
349defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector shuffles.
350defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000351defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000352
353// Old microcoded instructions that nobody use.
354def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
355
356// Fence instructions.
357def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
358
Craig Topper05242bf2018-04-21 18:07:36 +0000359// Load/store MXCSR.
360def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
361def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
362
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000363// Nop, not very useful expect it provides a model for nops!
364def : WriteRes<WriteNop, []>;
365
366////////////////////////////////////////////////////////////////////////////////
367// Horizontal add/sub instructions.
368////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000369
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000370defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
371defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000372defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000373
374// Remaining instrs.
375
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000376def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000377 let Latency = 1;
378 let NumMicroOps = 1;
379 let ResourceCycles = [1];
380}
Craig Topperfc179c62018-03-22 04:23:41 +0000381def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
382 "MMX_PADDSWirr",
383 "MMX_PADDUSBirr",
384 "MMX_PADDUSWirr",
385 "MMX_PAVGBirr",
386 "MMX_PAVGWirr",
387 "MMX_PCMPEQBirr",
388 "MMX_PCMPEQDirr",
389 "MMX_PCMPEQWirr",
390 "MMX_PCMPGTBirr",
391 "MMX_PCMPGTDirr",
392 "MMX_PCMPGTWirr",
393 "MMX_PMAXSWirr",
394 "MMX_PMAXUBirr",
395 "MMX_PMINSWirr",
396 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000397 "MMX_PSUBSBirr",
398 "MMX_PSUBSWirr",
399 "MMX_PSUBUSBirr",
400 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000401
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000402def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000403 let Latency = 1;
404 let NumMicroOps = 1;
405 let ResourceCycles = [1];
406}
Craig Topperfc179c62018-03-22 04:23:41 +0000407def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
408 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000409 "MMX_MOVD64rr",
410 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000411 "UCOM_FPr",
412 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000413 "(V?)MOV64toPQIrr",
Simon Pilgrimfc0c26f2018-05-01 11:05:42 +0000414 "(V?)MOVDI2PDIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000415
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000416def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000417 let Latency = 1;
418 let NumMicroOps = 1;
419 let ResourceCycles = [1];
420}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000421def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000422
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000423def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000424 let Latency = 1;
425 let NumMicroOps = 1;
426 let ResourceCycles = [1];
427}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000428def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
429 "(V?)PABSD(Y?)rr",
430 "(V?)PABSW(Y?)rr",
431 "(V?)PADDSB(Y?)rr",
432 "(V?)PADDSW(Y?)rr",
433 "(V?)PADDUSB(Y?)rr",
434 "(V?)PADDUSW(Y?)rr",
435 "(V?)PAVGB(Y?)rr",
436 "(V?)PAVGW(Y?)rr",
437 "(V?)PCMPEQB(Y?)rr",
438 "(V?)PCMPEQD(Y?)rr",
439 "(V?)PCMPEQQ(Y?)rr",
440 "(V?)PCMPEQW(Y?)rr",
441 "(V?)PCMPGTB(Y?)rr",
442 "(V?)PCMPGTD(Y?)rr",
443 "(V?)PCMPGTW(Y?)rr",
444 "(V?)PMAXSB(Y?)rr",
445 "(V?)PMAXSD(Y?)rr",
446 "(V?)PMAXSW(Y?)rr",
447 "(V?)PMAXUB(Y?)rr",
448 "(V?)PMAXUD(Y?)rr",
449 "(V?)PMAXUW(Y?)rr",
450 "(V?)PMINSB(Y?)rr",
451 "(V?)PMINSD(Y?)rr",
452 "(V?)PMINSW(Y?)rr",
453 "(V?)PMINUB(Y?)rr",
454 "(V?)PMINUD(Y?)rr",
455 "(V?)PMINUW(Y?)rr",
456 "(V?)PSIGNB(Y?)rr",
457 "(V?)PSIGND(Y?)rr",
458 "(V?)PSIGNW(Y?)rr",
459 "(V?)PSLLD(Y?)ri",
460 "(V?)PSLLQ(Y?)ri",
461 "VPSLLVD(Y?)rr",
462 "VPSLLVQ(Y?)rr",
463 "(V?)PSLLW(Y?)ri",
464 "(V?)PSRAD(Y?)ri",
465 "VPSRAVD(Y?)rr",
466 "(V?)PSRAW(Y?)ri",
467 "(V?)PSRLD(Y?)ri",
468 "(V?)PSRLQ(Y?)ri",
469 "VPSRLVD(Y?)rr",
470 "VPSRLVQ(Y?)rr",
471 "(V?)PSRLW(Y?)ri",
472 "(V?)PSUBSB(Y?)rr",
473 "(V?)PSUBSW(Y?)rr",
474 "(V?)PSUBUSB(Y?)rr",
475 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000476
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000477def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000478 let Latency = 1;
479 let NumMicroOps = 1;
480 let ResourceCycles = [1];
481}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000482def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
483def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000484 "MMX_PABS(B|D|W)rr",
485 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000486 "MMX_PANDNirr",
487 "MMX_PANDirr",
488 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000489 "MMX_PSIGN(B|D|W)rr",
490 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000491 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000492
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000493def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000494 let Latency = 1;
495 let NumMicroOps = 1;
496 let ResourceCycles = [1];
497}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000498def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000499def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
500 "ADC(16|32|64)i",
501 "ADC(8|16|32|64)rr",
502 "ADCX(32|64)rr",
503 "ADOX(32|64)rr",
504 "BT(16|32|64)ri8",
505 "BT(16|32|64)rr",
506 "BTC(16|32|64)ri8",
507 "BTC(16|32|64)rr",
508 "BTR(16|32|64)ri8",
509 "BTR(16|32|64)rr",
510 "BTS(16|32|64)ri8",
511 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000512 "SBB(16|32|64)ri",
513 "SBB(16|32|64)i",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000514 "SBB(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000515
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000516def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
517 let Latency = 1;
518 let NumMicroOps = 1;
519 let ResourceCycles = [1];
520}
Craig Topperfc179c62018-03-22 04:23:41 +0000521def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
522 "BLSI(32|64)rr",
523 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000524 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000525
526def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
527 let Latency = 1;
528 let NumMicroOps = 1;
529 let ResourceCycles = [1];
530}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000531def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000532 "(V?)PADDD(Y?)rr",
533 "(V?)PADDQ(Y?)rr",
534 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000535 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000536 "(V?)PSUBB(Y?)rr",
537 "(V?)PSUBD(Y?)rr",
538 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000539 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000540
541def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
542 let Latency = 1;
543 let NumMicroOps = 1;
544 let ResourceCycles = [1];
545}
Craig Topperfbe31322018-04-05 21:56:19 +0000546def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000547def: InstRW<[SKLWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000548def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000549 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000550 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000551 "SGDT64m",
552 "SIDT64m",
Craig Topperfc179c62018-03-22 04:23:41 +0000553 "SMSW16m",
554 "STC",
555 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000556 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000557
558def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000559 let Latency = 1;
560 let NumMicroOps = 2;
561 let ResourceCycles = [1,1];
562}
Craig Topperfc179c62018-03-22 04:23:41 +0000563def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
564 "MMX_MOVD64from64rm",
565 "MMX_MOVD64mr",
566 "MMX_MOVNTQmr",
567 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000568 "MOVNTI_64mr",
569 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000570 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000571 "VEXTRACTF128mr",
572 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000573 "(V?)MOVAPDYmr",
574 "(V?)MOVAPS(Y?)mr",
575 "(V?)MOVDQA(Y?)mr",
576 "(V?)MOVDQU(Y?)mr",
577 "(V?)MOVHPDmr",
578 "(V?)MOVHPSmr",
579 "(V?)MOVLPDmr",
580 "(V?)MOVLPSmr",
581 "(V?)MOVNTDQ(Y?)mr",
582 "(V?)MOVNTPD(Y?)mr",
583 "(V?)MOVNTPS(Y?)mr",
584 "(V?)MOVPDI2DImr",
585 "(V?)MOVPQI2QImr",
586 "(V?)MOVPQIto64mr",
587 "(V?)MOVSDmr",
588 "(V?)MOVSSmr",
589 "(V?)MOVUPD(Y?)mr",
590 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000591 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000592
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000593def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000594 let Latency = 2;
595 let NumMicroOps = 1;
596 let ResourceCycles = [1];
597}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000598def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000599 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000600 "(V?)MOVPDI2DIrr",
601 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000602 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000603 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000604
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000605def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000606 let Latency = 2;
607 let NumMicroOps = 2;
608 let ResourceCycles = [2];
609}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000610def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000611
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000612def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000613 let Latency = 2;
614 let NumMicroOps = 2;
615 let ResourceCycles = [2];
616}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000617def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
618def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000619
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000620def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000621 let Latency = 2;
622 let NumMicroOps = 2;
623 let ResourceCycles = [2];
624}
Craig Topperfc179c62018-03-22 04:23:41 +0000625def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
626 "ROL(8|16|32|64)r1",
627 "ROL(8|16|32|64)ri",
628 "ROR(8|16|32|64)r1",
629 "ROR(8|16|32|64)ri",
630 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000631
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000632def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000633 let Latency = 2;
634 let NumMicroOps = 2;
635 let ResourceCycles = [2];
636}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000637def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
638 WAIT,
639 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000640
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000641def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000642 let Latency = 2;
643 let NumMicroOps = 2;
644 let ResourceCycles = [1,1];
645}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000646def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
647 "VMASKMOVPS(Y?)mr",
648 "VPMASKMOVD(Y?)mr",
649 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000650
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000651def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000652 let Latency = 2;
653 let NumMicroOps = 2;
654 let ResourceCycles = [1,1];
655}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000656def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
657 "(V?)PSLLQrr",
658 "(V?)PSLLWrr",
659 "(V?)PSRADrr",
660 "(V?)PSRAWrr",
661 "(V?)PSRLDrr",
662 "(V?)PSRLQrr",
663 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000664
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000665def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000666 let Latency = 2;
667 let NumMicroOps = 2;
668 let ResourceCycles = [1,1];
669}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000670def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000671
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000672def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000673 let Latency = 2;
674 let NumMicroOps = 2;
675 let ResourceCycles = [1,1];
676}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000677def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000678
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000679def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000680 let Latency = 2;
681 let NumMicroOps = 2;
682 let ResourceCycles = [1,1];
683}
Craig Topper498875f2018-04-04 17:54:19 +0000684def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
685
686def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
687 let Latency = 1;
688 let NumMicroOps = 1;
689 let ResourceCycles = [1];
690}
691def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000692
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000693def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000694 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000695 let NumMicroOps = 2;
696 let ResourceCycles = [1,1];
697}
Craig Topper2d451e72018-03-18 08:38:06 +0000698def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000699def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000700def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
701 "ADC8ri",
702 "SBB8i8",
703 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000704
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000705def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
706 let Latency = 2;
707 let NumMicroOps = 3;
708 let ResourceCycles = [1,1,1];
709}
710def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
711
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000712def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
713 let Latency = 2;
714 let NumMicroOps = 3;
715 let ResourceCycles = [1,1,1];
716}
717def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
718
719def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
720 let Latency = 2;
721 let NumMicroOps = 3;
722 let ResourceCycles = [1,1,1];
723}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000724def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
725 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000726def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000727 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000728
729def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
730 let Latency = 3;
731 let NumMicroOps = 1;
732 let ResourceCycles = [1];
733}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000734def: InstRW<[SKLWriteResGroup29], (instregex "CMOV(N?)(B|BE|E|P)_F",
735 "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000736 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000737 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000738 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000739
Clement Courbet327fac42018-03-07 08:14:02 +0000740def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000741 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000742 let NumMicroOps = 2;
743 let ResourceCycles = [1,1];
744}
Clement Courbet327fac42018-03-07 08:14:02 +0000745def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000746
747def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
748 let Latency = 3;
749 let NumMicroOps = 1;
750 let ResourceCycles = [1];
751}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000752def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
753 "(ADD|SUB|SUBR)_FST0r",
754 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000755 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000756 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000757 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000758 "VPMOVSXBDYrr",
759 "VPMOVSXBQYrr",
760 "VPMOVSXBWYrr",
761 "VPMOVSXDQYrr",
762 "VPMOVSXWDYrr",
763 "VPMOVSXWQYrr",
764 "VPMOVZXBDYrr",
765 "VPMOVZXBQYrr",
766 "VPMOVZXBWYrr",
767 "VPMOVZXDQYrr",
768 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000769 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000770
771def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
772 let Latency = 3;
773 let NumMicroOps = 2;
774 let ResourceCycles = [1,1];
775}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000776def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000777
778def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
779 let Latency = 3;
780 let NumMicroOps = 2;
781 let ResourceCycles = [1,1];
782}
783def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
784
785def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
786 let Latency = 3;
787 let NumMicroOps = 3;
788 let ResourceCycles = [3];
789}
Craig Topperfc179c62018-03-22 04:23:41 +0000790def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
791 "ROR(8|16|32|64)rCL",
792 "SAR(8|16|32|64)rCL",
793 "SHL(8|16|32|64)rCL",
794 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000795
796def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000797 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000798 let NumMicroOps = 3;
799 let ResourceCycles = [3];
800}
Craig Topperb5f26592018-04-19 18:00:17 +0000801def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
802 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
803 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000804
805def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
806 let Latency = 3;
807 let NumMicroOps = 3;
808 let ResourceCycles = [1,2];
809}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000810def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000811
812def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
813 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000814 let NumMicroOps = 3;
815 let ResourceCycles = [2,1];
816}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000817def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
818 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000819
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000820def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
821 let Latency = 3;
822 let NumMicroOps = 3;
823 let ResourceCycles = [2,1];
824}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000825def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000826
827def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
828 let Latency = 3;
829 let NumMicroOps = 3;
830 let ResourceCycles = [2,1];
831}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000832def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
833 "(V?)PHADDW(Y?)rr",
834 "(V?)PHSUBD(Y?)rr",
835 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000836
837def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
838 let Latency = 3;
839 let NumMicroOps = 3;
840 let ResourceCycles = [2,1];
841}
Craig Topperfc179c62018-03-22 04:23:41 +0000842def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
843 "MMX_PACKSSWBirr",
844 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000845
846def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
847 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000848 let NumMicroOps = 3;
849 let ResourceCycles = [1,2];
850}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000851def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000852
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000853def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
854 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000855 let NumMicroOps = 3;
856 let ResourceCycles = [1,2];
857}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000858def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000859
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000860def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
861 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000862 let NumMicroOps = 3;
863 let ResourceCycles = [1,2];
864}
Craig Topperfc179c62018-03-22 04:23:41 +0000865def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
866 "RCL(8|16|32|64)ri",
867 "RCR(8|16|32|64)r1",
868 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000869
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000870def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
871 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000872 let NumMicroOps = 3;
873 let ResourceCycles = [1,1,1];
874}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000875def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000876
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000877def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
878 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000879 let NumMicroOps = 4;
880 let ResourceCycles = [1,1,2];
881}
Craig Topperf4cd9082018-01-19 05:47:32 +0000882def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000883
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000884def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
885 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000886 let NumMicroOps = 4;
887 let ResourceCycles = [1,1,1,1];
888}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000889def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000890
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000891def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
892 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000893 let NumMicroOps = 4;
894 let ResourceCycles = [1,1,1,1];
895}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000896def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000897
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000898def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000899 let Latency = 4;
900 let NumMicroOps = 1;
901 let ResourceCycles = [1];
902}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000903def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000904 "MMX_PMADDWDirr",
905 "MMX_PMULHRSWrr",
906 "MMX_PMULHUWirr",
907 "MMX_PMULHWirr",
908 "MMX_PMULLWirr",
909 "MMX_PMULUDQirr",
910 "MUL_FPrST0",
911 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000912 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000913
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000914def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000915 let Latency = 4;
916 let NumMicroOps = 1;
917 let ResourceCycles = [1];
918}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000919def: InstRW<[SKLWriteResGroup48], (instregex "(V?)CVTDQ2PS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000920 "(V?)CVTPS2DQ(Y?)rr",
921 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000922 "(V?)PMADDUBSW(Y?)rr",
923 "(V?)PMADDWD(Y?)rr",
924 "(V?)PMULDQ(Y?)rr",
925 "(V?)PMULHRSW(Y?)rr",
926 "(V?)PMULHUW(Y?)rr",
927 "(V?)PMULHW(Y?)rr",
928 "(V?)PMULLW(Y?)rr",
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000929 "(V?)PMULUDQ(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000930
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000931def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000932 let Latency = 4;
933 let NumMicroOps = 2;
934 let ResourceCycles = [1,1];
935}
Craig Topperf846e2d2018-04-19 05:34:05 +0000936def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000937
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000938def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
939 let Latency = 4;
940 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000941 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000942}
Craig Topperfc179c62018-03-22 04:23:41 +0000943def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000944
945def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000946 let Latency = 4;
947 let NumMicroOps = 2;
948 let ResourceCycles = [1,1];
949}
Craig Topperfc179c62018-03-22 04:23:41 +0000950def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
951 "VPSLLQYrr",
952 "VPSLLWYrr",
953 "VPSRADYrr",
954 "VPSRAWYrr",
955 "VPSRLDYrr",
956 "VPSRLQYrr",
957 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000958
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000959def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000960 let Latency = 4;
961 let NumMicroOps = 3;
962 let ResourceCycles = [1,1,1];
963}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000964def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
965 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000966
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000967def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000968 let Latency = 4;
969 let NumMicroOps = 4;
970 let ResourceCycles = [4];
971}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000972def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000973
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000974def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000975 let Latency = 4;
976 let NumMicroOps = 4;
977 let ResourceCycles = [1,3];
978}
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000979def: InstRW<[SKLWriteResGroup55], (instrs PAUSE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000980
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000981def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000982 let Latency = 4;
983 let NumMicroOps = 4;
984 let ResourceCycles = [1,3];
985}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000986def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000987
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000988def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000989 let Latency = 4;
990 let NumMicroOps = 4;
991 let ResourceCycles = [1,1,2];
992}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000993def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000994
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000995def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
996 let Latency = 5;
997 let NumMicroOps = 1;
998 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000999}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001000def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001001 "MOVSX(16|32|64)rm32",
1002 "MOVSX(16|32|64)rm8",
1003 "MOVZX(16|32|64)rm16",
1004 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001005 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001006
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001007def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008 let Latency = 5;
1009 let NumMicroOps = 2;
1010 let ResourceCycles = [1,1];
1011}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001012def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1013 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001014
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001015def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001016 let Latency = 5;
1017 let NumMicroOps = 2;
1018 let ResourceCycles = [1,1];
1019}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001020def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001021 "MMX_CVTPS2PIirr",
1022 "MMX_CVTTPD2PIirr",
1023 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001024 "(V?)CVTPD2DQrr",
1025 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001026 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001027 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001028 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001029 "(V?)CVTSD2SSrr",
1030 "(V?)CVTSI642SDrr",
1031 "(V?)CVTSI2SDrr",
1032 "(V?)CVTSI2SSrr",
1033 "(V?)CVTSS2SDrr",
1034 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001035
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001036def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001037 let Latency = 5;
1038 let NumMicroOps = 3;
1039 let ResourceCycles = [1,1,1];
1040}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001041def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001042
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001043def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001044 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001045 let NumMicroOps = 3;
1046 let ResourceCycles = [1,1,1];
1047}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001048def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001049
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001050def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001051 let Latency = 5;
1052 let NumMicroOps = 5;
1053 let ResourceCycles = [1,4];
1054}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001055def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001056
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001057def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001058 let Latency = 5;
1059 let NumMicroOps = 5;
1060 let ResourceCycles = [2,3];
1061}
Craig Topper13a16502018-03-19 00:56:09 +00001062def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001063
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001064def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001066 let NumMicroOps = 6;
1067 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001068}
Craig Topperfc179c62018-03-22 04:23:41 +00001069def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1070 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001071
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001072def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1073 let Latency = 6;
1074 let NumMicroOps = 1;
1075 let ResourceCycles = [1];
1076}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001077def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001078 "(V?)MOVSHDUPrm",
1079 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001080 "VPBROADCASTDrm",
1081 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001082
1083def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001084 let Latency = 6;
1085 let NumMicroOps = 2;
1086 let ResourceCycles = [2];
1087}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001088def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001089
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001090def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001091 let Latency = 6;
1092 let NumMicroOps = 2;
1093 let ResourceCycles = [1,1];
1094}
Craig Topperfc179c62018-03-22 04:23:41 +00001095def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1096 "MMX_PADDSWirm",
1097 "MMX_PADDUSBirm",
1098 "MMX_PADDUSWirm",
1099 "MMX_PAVGBirm",
1100 "MMX_PAVGWirm",
1101 "MMX_PCMPEQBirm",
1102 "MMX_PCMPEQDirm",
1103 "MMX_PCMPEQWirm",
1104 "MMX_PCMPGTBirm",
1105 "MMX_PCMPGTDirm",
1106 "MMX_PCMPGTWirm",
1107 "MMX_PMAXSWirm",
1108 "MMX_PMAXUBirm",
1109 "MMX_PMINSWirm",
1110 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001111 "MMX_PSUBSBirm",
1112 "MMX_PSUBSWirm",
1113 "MMX_PSUBUSBirm",
1114 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001115
Craig Topper58afb4e2018-03-22 21:10:07 +00001116def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001117 let Latency = 6;
1118 let NumMicroOps = 2;
1119 let ResourceCycles = [1,1];
1120}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001121def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1122 "(V?)CVTSD2SIrr",
1123 "(V?)CVTSS2SI64rr",
1124 "(V?)CVTSS2SIrr",
1125 "(V?)CVTTSD2SI64rr",
1126 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001127
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001128def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1129 let Latency = 6;
1130 let NumMicroOps = 2;
1131 let ResourceCycles = [1,1];
1132}
Craig Topperfc179c62018-03-22 04:23:41 +00001133def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1134 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001135
1136def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1137 let Latency = 6;
1138 let NumMicroOps = 2;
1139 let ResourceCycles = [1,1];
1140}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001141def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1142 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001143 "MMX_PANDNirm",
1144 "MMX_PANDirm",
1145 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001146 "MMX_PSIGN(B|D|W)rm",
1147 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001148 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001149
1150def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1151 let Latency = 6;
1152 let NumMicroOps = 2;
1153 let ResourceCycles = [1,1];
1154}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001155def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001156def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1157 ADCX32rm, ADCX64rm,
1158 ADOX32rm, ADOX64rm,
1159 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001160
1161def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1162 let Latency = 6;
1163 let NumMicroOps = 2;
1164 let ResourceCycles = [1,1];
1165}
Craig Topperfc179c62018-03-22 04:23:41 +00001166def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1167 "BLSI(32|64)rm",
1168 "BLSMSK(32|64)rm",
1169 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001170 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001171
1172def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1173 let Latency = 6;
1174 let NumMicroOps = 2;
1175 let ResourceCycles = [1,1];
1176}
Craig Topper2d451e72018-03-18 08:38:06 +00001177def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001178def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001179
Craig Topper58afb4e2018-03-22 21:10:07 +00001180def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001181 let Latency = 6;
1182 let NumMicroOps = 3;
1183 let ResourceCycles = [2,1];
1184}
Craig Topperfc179c62018-03-22 04:23:41 +00001185def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001186
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001187def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001188 let Latency = 6;
1189 let NumMicroOps = 4;
1190 let ResourceCycles = [1,2,1];
1191}
Craig Topperfc179c62018-03-22 04:23:41 +00001192def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1193 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001194
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001195def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001196 let Latency = 6;
1197 let NumMicroOps = 4;
1198 let ResourceCycles = [1,1,1,1];
1199}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001200def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001201
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001202def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1203 let Latency = 6;
1204 let NumMicroOps = 4;
1205 let ResourceCycles = [1,1,1,1];
1206}
Craig Topperfc179c62018-03-22 04:23:41 +00001207def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1208 "BTR(16|32|64)mi8",
1209 "BTS(16|32|64)mi8",
1210 "SAR(8|16|32|64)m1",
1211 "SAR(8|16|32|64)mi",
1212 "SHL(8|16|32|64)m1",
1213 "SHL(8|16|32|64)mi",
1214 "SHR(8|16|32|64)m1",
1215 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001216
1217def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1218 let Latency = 6;
1219 let NumMicroOps = 4;
1220 let ResourceCycles = [1,1,1,1];
1221}
Craig Topperf0d04262018-04-06 16:16:48 +00001222def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1223 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001224
1225def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001226 let Latency = 6;
1227 let NumMicroOps = 6;
1228 let ResourceCycles = [1,5];
1229}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001230def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001231
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001232def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1233 let Latency = 7;
1234 let NumMicroOps = 1;
1235 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001236}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001237def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001238 "VBROADCASTF128",
1239 "VBROADCASTI128",
1240 "VBROADCASTSDYrm",
1241 "VBROADCASTSSYrm",
1242 "VLDDQUYrm",
1243 "VMOVAPDYrm",
1244 "VMOVAPSYrm",
1245 "VMOVDDUPYrm",
1246 "VMOVDQAYrm",
1247 "VMOVDQUYrm",
1248 "VMOVNTDQAYrm",
1249 "VMOVSHDUPYrm",
1250 "VMOVSLDUPYrm",
1251 "VMOVUPDYrm",
1252 "VMOVUPSYrm",
1253 "VPBROADCASTDYrm",
1254 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001255
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001256def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001257 let Latency = 7;
1258 let NumMicroOps = 2;
1259 let ResourceCycles = [1,1];
1260}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001261def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001262
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001263def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1264 let Latency = 7;
1265 let NumMicroOps = 2;
1266 let ResourceCycles = [1,1];
1267}
Simon Pilgrim819f2182018-05-02 17:58:50 +00001268def: InstRW<[SKLWriteResGroup88], (instregex "(V?)PACKSSDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001269 "(V?)PACKSSWBrm",
1270 "(V?)PACKUSDWrm",
1271 "(V?)PACKUSWBrm",
1272 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001273 "VPBROADCASTBrm",
1274 "VPBROADCASTWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001275 "(V?)PSHUFDmi",
1276 "(V?)PSHUFHWmi",
1277 "(V?)PSHUFLWmi",
1278 "(V?)PUNPCKHBWrm",
1279 "(V?)PUNPCKHDQrm",
1280 "(V?)PUNPCKHQDQrm",
1281 "(V?)PUNPCKHWDrm",
1282 "(V?)PUNPCKLBWrm",
1283 "(V?)PUNPCKLDQrm",
1284 "(V?)PUNPCKLQDQrm",
Simon Pilgrim819f2182018-05-02 17:58:50 +00001285 "(V?)PUNPCKLWDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001286
Simon Pilgrim6732f6e2018-05-02 18:48:23 +00001287def SKLWriteResGroup88a : SchedWriteRes<[SKLPort5,SKLPort23]> {
1288 let Latency = 6;
1289 let NumMicroOps = 2;
1290 let ResourceCycles = [1,1];
1291}
1292def: InstRW<[SKLWriteResGroup88a], (instregex "MMX_PSHUFBrm")>;
1293
Craig Topper58afb4e2018-03-22 21:10:07 +00001294def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001295 let Latency = 7;
1296 let NumMicroOps = 2;
1297 let ResourceCycles = [1,1];
1298}
Craig Topperfc179c62018-03-22 04:23:41 +00001299def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1300 "VCVTPD2PSYrr",
1301 "VCVTPH2PSYrr",
1302 "VCVTPS2PDYrr",
1303 "VCVTPS2PHYrr",
1304 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001305
1306def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1307 let Latency = 7;
1308 let NumMicroOps = 2;
1309 let ResourceCycles = [1,1];
1310}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001311def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1312 "(V?)PABSDrm",
1313 "(V?)PABSWrm",
1314 "(V?)PADDSBrm",
1315 "(V?)PADDSWrm",
1316 "(V?)PADDUSBrm",
1317 "(V?)PADDUSWrm",
1318 "(V?)PAVGBrm",
1319 "(V?)PAVGWrm",
1320 "(V?)PCMPEQBrm",
1321 "(V?)PCMPEQDrm",
1322 "(V?)PCMPEQQrm",
1323 "(V?)PCMPEQWrm",
1324 "(V?)PCMPGTBrm",
1325 "(V?)PCMPGTDrm",
1326 "(V?)PCMPGTWrm",
1327 "(V?)PMAXSBrm",
1328 "(V?)PMAXSDrm",
1329 "(V?)PMAXSWrm",
1330 "(V?)PMAXUBrm",
1331 "(V?)PMAXUDrm",
1332 "(V?)PMAXUWrm",
1333 "(V?)PMINSBrm",
1334 "(V?)PMINSDrm",
1335 "(V?)PMINSWrm",
1336 "(V?)PMINUBrm",
1337 "(V?)PMINUDrm",
1338 "(V?)PMINUWrm",
1339 "(V?)PSIGNBrm",
1340 "(V?)PSIGNDrm",
1341 "(V?)PSIGNWrm",
1342 "(V?)PSLLDrm",
1343 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001344 "VPSLLVDrm",
1345 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001346 "(V?)PSLLWrm",
1347 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001348 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001349 "(V?)PSRAWrm",
1350 "(V?)PSRLDrm",
1351 "(V?)PSRLQrm",
1352 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001353 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001354 "(V?)PSRLWrm",
1355 "(V?)PSUBSBrm",
1356 "(V?)PSUBSWrm",
1357 "(V?)PSUBUSBrm",
1358 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001359
1360def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1361 let Latency = 7;
1362 let NumMicroOps = 2;
1363 let ResourceCycles = [1,1];
1364}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001365def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001366 "(V?)INSERTI128rm",
1367 "(V?)MASKMOVPDrm",
1368 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001369 "(V?)PADDBrm",
1370 "(V?)PADDDrm",
1371 "(V?)PADDQrm",
1372 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001373 "(V?)PBLENDDrmi",
1374 "(V?)PMASKMOVDrm",
1375 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001376 "(V?)PSUBBrm",
1377 "(V?)PSUBDrm",
1378 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001379 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001380
1381def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1382 let Latency = 7;
1383 let NumMicroOps = 3;
1384 let ResourceCycles = [2,1];
1385}
Craig Topperfc179c62018-03-22 04:23:41 +00001386def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1387 "MMX_PACKSSWBirm",
1388 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001389
1390def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1391 let Latency = 7;
1392 let NumMicroOps = 3;
1393 let ResourceCycles = [1,2];
1394}
Craig Topperf4cd9082018-01-19 05:47:32 +00001395def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001396
1397def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1398 let Latency = 7;
1399 let NumMicroOps = 3;
1400 let ResourceCycles = [1,2];
1401}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001402def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1403 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001404
Craig Topper58afb4e2018-03-22 21:10:07 +00001405def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001406 let Latency = 7;
1407 let NumMicroOps = 3;
1408 let ResourceCycles = [1,1,1];
1409}
Craig Topperfc179c62018-03-22 04:23:41 +00001410def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1411 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001412
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001413def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001414 let Latency = 7;
1415 let NumMicroOps = 3;
1416 let ResourceCycles = [1,1,1];
1417}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001418def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001419
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001420def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001421 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001422 let NumMicroOps = 3;
1423 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001424}
Craig Topperfc179c62018-03-22 04:23:41 +00001425def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1426 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001427
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001428def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1429 let Latency = 7;
1430 let NumMicroOps = 5;
1431 let ResourceCycles = [1,1,1,2];
1432}
Craig Topperfc179c62018-03-22 04:23:41 +00001433def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1434 "ROL(8|16|32|64)mi",
1435 "ROR(8|16|32|64)m1",
1436 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001437
1438def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1439 let Latency = 7;
1440 let NumMicroOps = 5;
1441 let ResourceCycles = [1,1,1,2];
1442}
Craig Topper13a16502018-03-19 00:56:09 +00001443def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001444
1445def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1446 let Latency = 7;
1447 let NumMicroOps = 5;
1448 let ResourceCycles = [1,1,1,1,1];
1449}
Craig Topperfc179c62018-03-22 04:23:41 +00001450def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1451 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001452
1453def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001454 let Latency = 7;
1455 let NumMicroOps = 7;
1456 let ResourceCycles = [1,3,1,2];
1457}
Craig Topper2d451e72018-03-18 08:38:06 +00001458def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001459
Craig Topper58afb4e2018-03-22 21:10:07 +00001460def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001461 let Latency = 8;
1462 let NumMicroOps = 2;
1463 let ResourceCycles = [2];
1464}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001465def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1466 "(V?)ROUNDPS(Y?)r",
1467 "(V?)ROUNDSDr",
1468 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001469
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001470def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001471 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001472 let NumMicroOps = 2;
1473 let ResourceCycles = [1,1];
1474}
Craig Topperfc179c62018-03-22 04:23:41 +00001475def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1476 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001477
1478def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1479 let Latency = 8;
1480 let NumMicroOps = 2;
1481 let ResourceCycles = [1,1];
1482}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001483def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1484 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001485
1486def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001487 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001488 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001489 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001490}
Craig Topperf846e2d2018-04-19 05:34:05 +00001491def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001492
Craig Topperf846e2d2018-04-19 05:34:05 +00001493def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1494 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001495 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001496 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001497}
Craig Topperfc179c62018-03-22 04:23:41 +00001498def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001499
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001500def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1501 let Latency = 8;
1502 let NumMicroOps = 2;
1503 let ResourceCycles = [1,1];
1504}
Craig Topperfc179c62018-03-22 04:23:41 +00001505def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1506 "FCOM64m",
1507 "FCOMP32m",
1508 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001509 "VPBROADCASTBYrm",
1510 "VPBROADCASTWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001511 "VPMOVSXBDYrm",
1512 "VPMOVSXBQYrm",
Simon Pilgrim6732f6e2018-05-02 18:48:23 +00001513 "VPMOVSXWQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001514
1515def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1516 let Latency = 8;
1517 let NumMicroOps = 2;
1518 let ResourceCycles = [1,1];
1519}
Craig Topperfc179c62018-03-22 04:23:41 +00001520def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1521 "VPABSDYrm",
1522 "VPABSWYrm",
1523 "VPADDSBYrm",
1524 "VPADDSWYrm",
1525 "VPADDUSBYrm",
1526 "VPADDUSWYrm",
1527 "VPAVGBYrm",
1528 "VPAVGWYrm",
1529 "VPCMPEQBYrm",
1530 "VPCMPEQDYrm",
1531 "VPCMPEQQYrm",
1532 "VPCMPEQWYrm",
1533 "VPCMPGTBYrm",
1534 "VPCMPGTDYrm",
1535 "VPCMPGTWYrm",
1536 "VPMAXSBYrm",
1537 "VPMAXSDYrm",
1538 "VPMAXSWYrm",
1539 "VPMAXUBYrm",
1540 "VPMAXUDYrm",
1541 "VPMAXUWYrm",
1542 "VPMINSBYrm",
1543 "VPMINSDYrm",
1544 "VPMINSWYrm",
1545 "VPMINUBYrm",
1546 "VPMINUDYrm",
1547 "VPMINUWYrm",
1548 "VPSIGNBYrm",
1549 "VPSIGNDYrm",
1550 "VPSIGNWYrm",
1551 "VPSLLDYrm",
1552 "VPSLLQYrm",
1553 "VPSLLVDYrm",
1554 "VPSLLVQYrm",
1555 "VPSLLWYrm",
1556 "VPSRADYrm",
1557 "VPSRAVDYrm",
1558 "VPSRAWYrm",
1559 "VPSRLDYrm",
1560 "VPSRLQYrm",
1561 "VPSRLVDYrm",
1562 "VPSRLVQYrm",
1563 "VPSRLWYrm",
1564 "VPSUBSBYrm",
1565 "VPSUBSWYrm",
1566 "VPSUBUSBYrm",
1567 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001568
1569def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1570 let Latency = 8;
1571 let NumMicroOps = 2;
1572 let ResourceCycles = [1,1];
1573}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001574def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001575 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001576 "VPADDBYrm",
1577 "VPADDDYrm",
1578 "VPADDQYrm",
1579 "VPADDWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001580 "VPBLENDDYrmi",
1581 "VPMASKMOVDYrm",
1582 "VPMASKMOVQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001583 "VPSUBBYrm",
1584 "VPSUBDYrm",
1585 "VPSUBQYrm",
Simon Pilgrim57f2b182018-05-01 12:39:17 +00001586 "VPSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001587
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001588def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1589 let Latency = 8;
1590 let NumMicroOps = 4;
1591 let ResourceCycles = [1,2,1];
1592}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001593def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001594
1595def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1596 let Latency = 8;
1597 let NumMicroOps = 4;
1598 let ResourceCycles = [2,1,1];
1599}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001600def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001601
Craig Topper58afb4e2018-03-22 21:10:07 +00001602def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001603 let Latency = 8;
1604 let NumMicroOps = 4;
1605 let ResourceCycles = [1,1,1,1];
1606}
1607def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1608
1609def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1610 let Latency = 8;
1611 let NumMicroOps = 5;
1612 let ResourceCycles = [1,1,3];
1613}
Craig Topper13a16502018-03-19 00:56:09 +00001614def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001615
1616def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1617 let Latency = 8;
1618 let NumMicroOps = 5;
1619 let ResourceCycles = [1,1,1,2];
1620}
Craig Topperfc179c62018-03-22 04:23:41 +00001621def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1622 "RCL(8|16|32|64)mi",
1623 "RCR(8|16|32|64)m1",
1624 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001625
1626def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1627 let Latency = 8;
1628 let NumMicroOps = 6;
1629 let ResourceCycles = [1,1,1,3];
1630}
Craig Topperfc179c62018-03-22 04:23:41 +00001631def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1632 "SAR(8|16|32|64)mCL",
1633 "SHL(8|16|32|64)mCL",
1634 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001635
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001636def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1637 let Latency = 8;
1638 let NumMicroOps = 6;
1639 let ResourceCycles = [1,1,1,2,1];
1640}
Craig Topper9f834812018-04-01 21:54:24 +00001641def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001642 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001643 "SBB(8|16|32|64)mi")>;
1644def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1645 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001646
1647def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1648 let Latency = 9;
1649 let NumMicroOps = 2;
1650 let ResourceCycles = [1,1];
1651}
Craig Topperfc179c62018-03-22 04:23:41 +00001652def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1653 "MMX_PMADDUBSWrm",
1654 "MMX_PMADDWDirm",
1655 "MMX_PMULHRSWrm",
1656 "MMX_PMULHUWirm",
1657 "MMX_PMULHWirm",
1658 "MMX_PMULLWirm",
1659 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001660 "VTESTPDYrm",
1661 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001662
1663def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1664 let Latency = 9;
1665 let NumMicroOps = 2;
1666 let ResourceCycles = [1,1];
1667}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001668def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001669 "VPMOVSXBWYrm",
1670 "VPMOVSXDQYrm",
1671 "VPMOVSXWDYrm",
1672 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001673 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001674
1675def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1676 let Latency = 9;
1677 let NumMicroOps = 2;
1678 let ResourceCycles = [1,1];
1679}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001680def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1681 "(V?)ADDSSrm",
1682 "(V?)CMPSDrm",
1683 "(V?)CMPSSrm",
1684 "(V?)MAX(C?)SDrm",
1685 "(V?)MAX(C?)SSrm",
1686 "(V?)MIN(C?)SDrm",
1687 "(V?)MIN(C?)SSrm",
1688 "(V?)MULSDrm",
1689 "(V?)MULSSrm",
1690 "(V?)SUBSDrm",
1691 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001692
Craig Topper58afb4e2018-03-22 21:10:07 +00001693def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001694 let Latency = 9;
1695 let NumMicroOps = 2;
1696 let ResourceCycles = [1,1];
1697}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001698def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001699 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001700 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001701 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001702
Craig Topper58afb4e2018-03-22 21:10:07 +00001703def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001704 let Latency = 9;
1705 let NumMicroOps = 3;
1706 let ResourceCycles = [1,2];
1707}
Craig Topperfc179c62018-03-22 04:23:41 +00001708def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001709
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001710def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1711 let Latency = 9;
1712 let NumMicroOps = 3;
1713 let ResourceCycles = [1,1,1];
1714}
Craig Topperfc179c62018-03-22 04:23:41 +00001715def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001716
1717def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1718 let Latency = 9;
1719 let NumMicroOps = 3;
1720 let ResourceCycles = [1,1,1];
1721}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001722def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001723
1724def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001725 let Latency = 9;
1726 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001727 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001728}
Craig Topperfc179c62018-03-22 04:23:41 +00001729def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1730 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001731
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001732def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1733 let Latency = 9;
1734 let NumMicroOps = 4;
1735 let ResourceCycles = [2,1,1];
1736}
Craig Topperfc179c62018-03-22 04:23:41 +00001737def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1738 "(V?)PHADDWrm",
1739 "(V?)PHSUBDrm",
1740 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001741
1742def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1743 let Latency = 9;
1744 let NumMicroOps = 4;
1745 let ResourceCycles = [1,1,1,1];
1746}
Craig Topperfc179c62018-03-22 04:23:41 +00001747def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1748 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001749
1750def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1751 let Latency = 9;
1752 let NumMicroOps = 5;
1753 let ResourceCycles = [1,2,1,1];
1754}
Craig Topperfc179c62018-03-22 04:23:41 +00001755def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1756 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001757
1758def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1759 let Latency = 10;
1760 let NumMicroOps = 2;
1761 let ResourceCycles = [1,1];
1762}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001763def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001764 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001765
1766def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1767 let Latency = 10;
1768 let NumMicroOps = 2;
1769 let ResourceCycles = [1,1];
1770}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001771def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1772 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001773 "VPCMPGTQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001774 "VPMOVZXBDYrm",
1775 "VPMOVZXBQYrm",
1776 "VPMOVZXBWYrm",
1777 "VPMOVZXDQYrm",
1778 "VPMOVZXWQYrm",
1779 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001780
1781def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1782 let Latency = 10;
1783 let NumMicroOps = 2;
1784 let ResourceCycles = [1,1];
1785}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001786def: InstRW<[SKLWriteResGroup134], (instregex "(V?)CVTDQ2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001787 "(V?)CVTPH2PSYrm",
1788 "(V?)CVTPS2DQrm",
1789 "(V?)CVTSS2SDrm",
1790 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001791 "(V?)PMADDUBSWrm",
1792 "(V?)PMADDWDrm",
1793 "(V?)PMULDQrm",
1794 "(V?)PMULHRSWrm",
1795 "(V?)PMULHUWrm",
1796 "(V?)PMULHWrm",
1797 "(V?)PMULLWrm",
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001798 "(V?)PMULUDQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001799
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001800def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1801 let Latency = 10;
1802 let NumMicroOps = 3;
1803 let ResourceCycles = [1,1,1];
1804}
Craig Topperfc179c62018-03-22 04:23:41 +00001805def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1806 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001807
Craig Topper58afb4e2018-03-22 21:10:07 +00001808def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001809 let Latency = 10;
1810 let NumMicroOps = 3;
1811 let ResourceCycles = [1,1,1];
1812}
Craig Topperfc179c62018-03-22 04:23:41 +00001813def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001814
1815def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001816 let Latency = 10;
1817 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001818 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001819}
Craig Topperfc179c62018-03-22 04:23:41 +00001820def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1821 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001822
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001823def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1824 let Latency = 10;
1825 let NumMicroOps = 4;
1826 let ResourceCycles = [2,1,1];
1827}
Craig Topperfc179c62018-03-22 04:23:41 +00001828def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1829 "VPHADDWYrm",
1830 "VPHSUBDYrm",
1831 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001832
1833def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001834 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001835 let NumMicroOps = 4;
1836 let ResourceCycles = [1,1,1,1];
1837}
Craig Topperf846e2d2018-04-19 05:34:05 +00001838def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001839
1840def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1841 let Latency = 10;
1842 let NumMicroOps = 8;
1843 let ResourceCycles = [1,1,1,1,1,3];
1844}
Craig Topper13a16502018-03-19 00:56:09 +00001845def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001846
1847def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001848 let Latency = 10;
1849 let NumMicroOps = 10;
1850 let ResourceCycles = [9,1];
1851}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001852def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001853
Craig Topper8104f262018-04-02 05:33:28 +00001854def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001855 let Latency = 11;
1856 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001857 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001858}
Craig Topper8104f262018-04-02 05:33:28 +00001859def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001860 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001861
Craig Topper8104f262018-04-02 05:33:28 +00001862def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1863 let Latency = 11;
1864 let NumMicroOps = 1;
1865 let ResourceCycles = [1,5];
1866}
1867def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1868
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001869def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001870 let Latency = 11;
1871 let NumMicroOps = 2;
1872 let ResourceCycles = [1,1];
1873}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001874def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001875 "VRCPPSYm",
1876 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001877
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001878def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1879 let Latency = 11;
1880 let NumMicroOps = 2;
1881 let ResourceCycles = [1,1];
1882}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001883def: InstRW<[SKLWriteResGroup147], (instregex "VCVTDQ2PSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001884 "VCVTPS2DQYrm",
1885 "VCVTPS2PDYrm",
1886 "VCVTTPS2DQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001887 "VPMADDUBSWYrm",
1888 "VPMADDWDYrm",
1889 "VPMULDQYrm",
1890 "VPMULHRSWYrm",
1891 "VPMULHUWYrm",
1892 "VPMULHWYrm",
1893 "VPMULLWYrm",
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001894 "VPMULUDQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001895
1896def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1897 let Latency = 11;
1898 let NumMicroOps = 3;
1899 let ResourceCycles = [2,1];
1900}
Craig Topperfc179c62018-03-22 04:23:41 +00001901def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1902 "FICOM32m",
1903 "FICOMP16m",
1904 "FICOMP32m",
1905 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001906
1907def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1908 let Latency = 11;
1909 let NumMicroOps = 3;
1910 let ResourceCycles = [1,1,1];
1911}
Craig Topperfc179c62018-03-22 04:23:41 +00001912def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001913
Craig Topper58afb4e2018-03-22 21:10:07 +00001914def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001915 let Latency = 11;
1916 let NumMicroOps = 3;
1917 let ResourceCycles = [1,1,1];
1918}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001919def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1920 "(V?)CVTSD2SIrm",
1921 "(V?)CVTSS2SI64rm",
1922 "(V?)CVTSS2SIrm",
1923 "(V?)CVTTSD2SI64rm",
1924 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001925 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001926 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001927
Craig Topper58afb4e2018-03-22 21:10:07 +00001928def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001929 let Latency = 11;
1930 let NumMicroOps = 3;
1931 let ResourceCycles = [1,1,1];
1932}
Craig Topperfc179c62018-03-22 04:23:41 +00001933def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
1934 "CVTPD2PSrm",
1935 "CVTTPD2DQrm",
1936 "MMX_CVTPD2PIirm",
1937 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001938
1939def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1940 let Latency = 11;
1941 let NumMicroOps = 6;
1942 let ResourceCycles = [1,1,1,2,1];
1943}
Craig Topperfc179c62018-03-22 04:23:41 +00001944def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
1945 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001946
1947def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001948 let Latency = 11;
1949 let NumMicroOps = 7;
1950 let ResourceCycles = [2,3,2];
1951}
Craig Topperfc179c62018-03-22 04:23:41 +00001952def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
1953 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001954
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001955def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001956 let Latency = 11;
1957 let NumMicroOps = 9;
1958 let ResourceCycles = [1,5,1,2];
1959}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001960def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001961
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001962def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001963 let Latency = 11;
1964 let NumMicroOps = 11;
1965 let ResourceCycles = [2,9];
1966}
Craig Topperfc179c62018-03-22 04:23:41 +00001967def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001968
Craig Topper8104f262018-04-02 05:33:28 +00001969def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001970 let Latency = 12;
1971 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001972 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001973}
Craig Topper8104f262018-04-02 05:33:28 +00001974def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001975 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001976
Craig Topper8104f262018-04-02 05:33:28 +00001977def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1978 let Latency = 12;
1979 let NumMicroOps = 1;
1980 let ResourceCycles = [1,6];
1981}
1982def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
1983
Craig Topper58afb4e2018-03-22 21:10:07 +00001984def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001985 let Latency = 12;
1986 let NumMicroOps = 4;
1987 let ResourceCycles = [1,1,1,1];
1988}
1989def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
1990
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001991def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001992 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001993 let NumMicroOps = 3;
1994 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001995}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001996def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001997
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001998def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1999 let Latency = 13;
2000 let NumMicroOps = 3;
2001 let ResourceCycles = [1,1,1];
2002}
2003def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2004
Craig Topper58afb4e2018-03-22 21:10:07 +00002005def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002006 let Latency = 13;
2007 let NumMicroOps = 4;
2008 let ResourceCycles = [1,3];
2009}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002010def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002011
Craig Topper8104f262018-04-02 05:33:28 +00002012def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002013 let Latency = 14;
2014 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002015 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002016}
Craig Topper8104f262018-04-02 05:33:28 +00002017def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002018 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002019
Craig Topper8104f262018-04-02 05:33:28 +00002020def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2021 let Latency = 14;
2022 let NumMicroOps = 1;
2023 let ResourceCycles = [1,5];
2024}
2025def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2026
Craig Topper58afb4e2018-03-22 21:10:07 +00002027def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002028 let Latency = 14;
2029 let NumMicroOps = 3;
2030 let ResourceCycles = [1,2];
2031}
Craig Topperfc179c62018-03-22 04:23:41 +00002032def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2033def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2034def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2035def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002036
2037def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2038 let Latency = 14;
2039 let NumMicroOps = 3;
2040 let ResourceCycles = [1,1,1];
2041}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002042def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002043
2044def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002045 let Latency = 14;
2046 let NumMicroOps = 10;
2047 let ResourceCycles = [2,4,1,3];
2048}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002049def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002050
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002051def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002052 let Latency = 15;
2053 let NumMicroOps = 1;
2054 let ResourceCycles = [1];
2055}
Craig Topperfc179c62018-03-22 04:23:41 +00002056def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2057 "DIVR_FST0r",
2058 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002059
Craig Topper58afb4e2018-03-22 21:10:07 +00002060def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002061 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002062 let NumMicroOps = 3;
2063 let ResourceCycles = [1,2];
2064}
Craig Topper40d3b322018-03-22 21:55:20 +00002065def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2066 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002067
Craig Topperd25f1ac2018-03-20 23:39:48 +00002068def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2069 let Latency = 17;
2070 let NumMicroOps = 3;
2071 let ResourceCycles = [1,2];
2072}
2073def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2074
Craig Topper58afb4e2018-03-22 21:10:07 +00002075def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002076 let Latency = 15;
2077 let NumMicroOps = 4;
2078 let ResourceCycles = [1,1,2];
2079}
Craig Topperfc179c62018-03-22 04:23:41 +00002080def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002081
2082def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2083 let Latency = 15;
2084 let NumMicroOps = 10;
2085 let ResourceCycles = [1,1,1,5,1,1];
2086}
Craig Topper13a16502018-03-19 00:56:09 +00002087def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002088
Craig Topper8104f262018-04-02 05:33:28 +00002089def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002090 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002091 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002092 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002093}
Craig Topperfc179c62018-03-22 04:23:41 +00002094def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002095
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002096def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2097 let Latency = 16;
2098 let NumMicroOps = 14;
2099 let ResourceCycles = [1,1,1,4,2,5];
2100}
2101def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2102
2103def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002104 let Latency = 16;
2105 let NumMicroOps = 16;
2106 let ResourceCycles = [16];
2107}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002108def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002109
Craig Topper8104f262018-04-02 05:33:28 +00002110def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002111 let Latency = 17;
2112 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002113 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002114}
Craig Topper8104f262018-04-02 05:33:28 +00002115def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2116
2117def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2118 let Latency = 17;
2119 let NumMicroOps = 2;
2120 let ResourceCycles = [1,1,3];
2121}
2122def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002123
2124def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002125 let Latency = 17;
2126 let NumMicroOps = 15;
2127 let ResourceCycles = [2,1,2,4,2,4];
2128}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002129def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002130
Craig Topper8104f262018-04-02 05:33:28 +00002131def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002132 let Latency = 18;
2133 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002134 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002135}
Craig Topper8104f262018-04-02 05:33:28 +00002136def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002137 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002138
Craig Topper8104f262018-04-02 05:33:28 +00002139def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2140 let Latency = 18;
2141 let NumMicroOps = 1;
2142 let ResourceCycles = [1,12];
2143}
2144def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2145
2146def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002147 let Latency = 18;
2148 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002149 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002150}
Craig Topper8104f262018-04-02 05:33:28 +00002151def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2152
2153def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2154 let Latency = 18;
2155 let NumMicroOps = 2;
2156 let ResourceCycles = [1,1,3];
2157}
2158def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002159
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002160def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002161 let Latency = 18;
2162 let NumMicroOps = 8;
2163 let ResourceCycles = [1,1,1,5];
2164}
Craig Topperfc179c62018-03-22 04:23:41 +00002165def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002166
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002167def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002168 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002169 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002170 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002171}
Craig Topper13a16502018-03-19 00:56:09 +00002172def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002173
Craig Topper8104f262018-04-02 05:33:28 +00002174def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002175 let Latency = 19;
2176 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002177 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002178}
Craig Topper8104f262018-04-02 05:33:28 +00002179def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2180
2181def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2182 let Latency = 19;
2183 let NumMicroOps = 2;
2184 let ResourceCycles = [1,1,6];
2185}
2186def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002187
Craig Topper58afb4e2018-03-22 21:10:07 +00002188def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002189 let Latency = 19;
2190 let NumMicroOps = 5;
2191 let ResourceCycles = [1,1,3];
2192}
Craig Topperfc179c62018-03-22 04:23:41 +00002193def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002194
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002195def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002196 let Latency = 20;
2197 let NumMicroOps = 1;
2198 let ResourceCycles = [1];
2199}
Craig Topperfc179c62018-03-22 04:23:41 +00002200def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2201 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002202 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002203
Craig Topper8104f262018-04-02 05:33:28 +00002204def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002205 let Latency = 20;
2206 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002207 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002208}
Craig Topperfc179c62018-03-22 04:23:41 +00002209def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002210
Craig Topper58afb4e2018-03-22 21:10:07 +00002211def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002212 let Latency = 20;
2213 let NumMicroOps = 5;
2214 let ResourceCycles = [1,1,3];
2215}
2216def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2217
2218def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2219 let Latency = 20;
2220 let NumMicroOps = 8;
2221 let ResourceCycles = [1,1,1,1,1,1,2];
2222}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002223def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002224
2225def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002226 let Latency = 20;
2227 let NumMicroOps = 10;
2228 let ResourceCycles = [1,2,7];
2229}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002230def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002231
Craig Topper8104f262018-04-02 05:33:28 +00002232def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002233 let Latency = 21;
2234 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002235 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002236}
2237def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2238
2239def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2240 let Latency = 22;
2241 let NumMicroOps = 2;
2242 let ResourceCycles = [1,1];
2243}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002244def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002245
2246def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2247 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002248 let NumMicroOps = 5;
2249 let ResourceCycles = [1,2,1,1];
2250}
Craig Topper17a31182017-12-16 18:35:29 +00002251def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2252 VGATHERDPDrm,
2253 VGATHERQPDrm,
2254 VGATHERQPSrm,
2255 VPGATHERDDrm,
2256 VPGATHERDQrm,
2257 VPGATHERQDrm,
2258 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002259
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002260def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2261 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002262 let NumMicroOps = 5;
2263 let ResourceCycles = [1,2,1,1];
2264}
Craig Topper17a31182017-12-16 18:35:29 +00002265def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2266 VGATHERQPDYrm,
2267 VGATHERQPSYrm,
2268 VPGATHERDDYrm,
2269 VPGATHERDQYrm,
2270 VPGATHERQDYrm,
2271 VPGATHERQQYrm,
2272 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002273
Craig Topper8104f262018-04-02 05:33:28 +00002274def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002275 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002276 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002277 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002278}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002279def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002280
2281def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2282 let Latency = 23;
2283 let NumMicroOps = 19;
2284 let ResourceCycles = [2,1,4,1,1,4,6];
2285}
2286def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2287
Craig Topper8104f262018-04-02 05:33:28 +00002288def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002289 let Latency = 24;
2290 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002291 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002292}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002293def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002294
Craig Topper8104f262018-04-02 05:33:28 +00002295def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002296 let Latency = 25;
2297 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002298 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002299}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002300def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002301
2302def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2303 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002304 let NumMicroOps = 3;
2305 let ResourceCycles = [1,1,1];
2306}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002307def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002308
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002309def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2310 let Latency = 27;
2311 let NumMicroOps = 2;
2312 let ResourceCycles = [1,1];
2313}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002314def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002315
2316def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2317 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002318 let NumMicroOps = 8;
2319 let ResourceCycles = [2,4,1,1];
2320}
Craig Topper13a16502018-03-19 00:56:09 +00002321def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002322
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002323def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002324 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002325 let NumMicroOps = 3;
2326 let ResourceCycles = [1,1,1];
2327}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002328def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002329
2330def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2331 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002332 let NumMicroOps = 23;
2333 let ResourceCycles = [1,5,3,4,10];
2334}
Craig Topperfc179c62018-03-22 04:23:41 +00002335def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2336 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002337
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002338def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2339 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002340 let NumMicroOps = 23;
2341 let ResourceCycles = [1,5,2,1,4,10];
2342}
Craig Topperfc179c62018-03-22 04:23:41 +00002343def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2344 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002345
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002346def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2347 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002348 let NumMicroOps = 31;
2349 let ResourceCycles = [1,8,1,21];
2350}
Craig Topper391c6f92017-12-10 01:24:08 +00002351def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002352
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002353def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2354 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002355 let NumMicroOps = 18;
2356 let ResourceCycles = [1,1,2,3,1,1,1,8];
2357}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002358def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002359
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002360def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2361 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002362 let NumMicroOps = 39;
2363 let ResourceCycles = [1,10,1,1,26];
2364}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002365def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002366
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002367def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002368 let Latency = 42;
2369 let NumMicroOps = 22;
2370 let ResourceCycles = [2,20];
2371}
Craig Topper2d451e72018-03-18 08:38:06 +00002372def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002373
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002374def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2375 let Latency = 42;
2376 let NumMicroOps = 40;
2377 let ResourceCycles = [1,11,1,1,26];
2378}
Craig Topper391c6f92017-12-10 01:24:08 +00002379def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002380
2381def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2382 let Latency = 46;
2383 let NumMicroOps = 44;
2384 let ResourceCycles = [1,11,1,1,30];
2385}
2386def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2387
2388def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2389 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002390 let NumMicroOps = 64;
2391 let ResourceCycles = [2,8,5,10,39];
2392}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002393def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002394
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002395def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2396 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002397 let NumMicroOps = 88;
2398 let ResourceCycles = [4,4,31,1,2,1,45];
2399}
Craig Topper2d451e72018-03-18 08:38:06 +00002400def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002401
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002402def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2403 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002404 let NumMicroOps = 90;
2405 let ResourceCycles = [4,2,33,1,2,1,47];
2406}
Craig Topper2d451e72018-03-18 08:38:06 +00002407def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002408
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002409def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002410 let Latency = 75;
2411 let NumMicroOps = 15;
2412 let ResourceCycles = [6,3,6];
2413}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002414def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002415
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002416def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002417 let Latency = 76;
2418 let NumMicroOps = 32;
2419 let ResourceCycles = [7,2,8,3,1,11];
2420}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002421def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002422
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002423def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002424 let Latency = 102;
2425 let NumMicroOps = 66;
2426 let ResourceCycles = [4,2,4,8,14,34];
2427}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002428def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002429
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002430def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2431 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002432 let NumMicroOps = 100;
2433 let ResourceCycles = [9,1,11,16,1,11,21,30];
2434}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002435def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002436
2437} // SchedModel