blob: fb16fa82d8b32230d594320dd2fdc5c6a6942462 [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 Pilgrim86e3c2692018-04-17 07:22:44 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
156defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000157defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
158defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
159defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000160defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4>; // Floating point reciprocal estimate.
161defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4>; // Floating point reciprocal square root estimate.
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4, [1], 1, 6>; // Fused Multiply Add.
163defm : SKLWriteResPair<WriteFMAS, [SKLPort01], 4, [1], 1, 5>; // Fused Multiply Add (Scalar).
164defm : SKLWriteResPair<WriteFMAY, [SKLPort01], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000165defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
166defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000167defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000168defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000169defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000170defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000171
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000172def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
173 let Latency = 6;
174 let NumMicroOps = 4;
175 let ResourceCycles = [1,1,1,1];
176}
177
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000178// FMA Scheduling helper class.
179// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
180
181// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000182def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
183def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
184def : WriteRes<WriteVecMove, [SKLPort015]>;
185
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000186defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000187defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000188defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
189defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000190defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000191defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000192defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000193defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000194defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000195defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000196defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000197defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000198
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000199// Vector insert/extract operations.
200def : WriteRes<WriteVecInsert, [SKLPort5]> {
201 let Latency = 2;
202 let NumMicroOps = 2;
203 let ResourceCycles = [2];
204}
205def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
206 let Latency = 6;
207 let NumMicroOps = 2;
208}
209
210def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
211 let Latency = 3;
212 let NumMicroOps = 2;
213}
214def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
215 let Latency = 2;
216 let NumMicroOps = 3;
217}
218
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000219// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000220defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
221defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
222defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000223
224// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000225
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000226// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000227def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
228 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000230 let ResourceCycles = [3];
231}
232def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000233 let Latency = 16;
234 let NumMicroOps = 4;
235 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000236}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000237
238// Packed Compare Explicit Length Strings, Return Mask
239def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
240 let Latency = 19;
241 let NumMicroOps = 9;
242 let ResourceCycles = [4,3,1,1];
243}
244def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
245 let Latency = 25;
246 let NumMicroOps = 10;
247 let ResourceCycles = [4,3,1,1,1];
248}
249
250// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000251def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000252 let Latency = 10;
253 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000254 let ResourceCycles = [3];
255}
256def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000257 let Latency = 16;
258 let NumMicroOps = 4;
259 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000260}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000261
262// Packed Compare Explicit Length Strings, Return Index
263def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
264 let Latency = 18;
265 let NumMicroOps = 8;
266 let ResourceCycles = [4,3,1];
267}
268def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
269 let Latency = 24;
270 let NumMicroOps = 9;
271 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000272}
273
Simon Pilgrima2f26782018-03-27 20:38:54 +0000274// MOVMSK Instructions.
275def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
276def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
277def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
278
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000279// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000280def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
281 let Latency = 4;
282 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000283 let ResourceCycles = [1];
284}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000285def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
286 let Latency = 10;
287 let NumMicroOps = 2;
288 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000289}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000290
291def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
292 let Latency = 8;
293 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000294 let ResourceCycles = [2];
295}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000296def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000297 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000298 let NumMicroOps = 3;
299 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000300}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000301
302def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
303 let Latency = 20;
304 let NumMicroOps = 11;
305 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000306}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000307def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
308 let Latency = 25;
309 let NumMicroOps = 11;
310 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000311}
312
313// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000314def : WriteRes<WriteCLMul, [SKLPort5]> {
315 let Latency = 6;
316 let NumMicroOps = 1;
317 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000318}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000319def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
320 let Latency = 12;
321 let NumMicroOps = 2;
322 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000323}
324
325// Catch-all for expensive system instructions.
326def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
327
328// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000329defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000330defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000331defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000332defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000333defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000334
335// Old microcoded instructions that nobody use.
336def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
337
338// Fence instructions.
339def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
340
Craig Topper05242bf2018-04-21 18:07:36 +0000341// Load/store MXCSR.
342def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
343def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
344
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000345// Nop, not very useful expect it provides a model for nops!
346def : WriteRes<WriteNop, []>;
347
348////////////////////////////////////////////////////////////////////////////////
349// Horizontal add/sub instructions.
350////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000351
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000352defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000353defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000354
355// Remaining instrs.
356
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000357def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000358 let Latency = 1;
359 let NumMicroOps = 1;
360 let ResourceCycles = [1];
361}
Craig Topperfc179c62018-03-22 04:23:41 +0000362def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
363 "MMX_PADDSWirr",
364 "MMX_PADDUSBirr",
365 "MMX_PADDUSWirr",
366 "MMX_PAVGBirr",
367 "MMX_PAVGWirr",
368 "MMX_PCMPEQBirr",
369 "MMX_PCMPEQDirr",
370 "MMX_PCMPEQWirr",
371 "MMX_PCMPGTBirr",
372 "MMX_PCMPGTDirr",
373 "MMX_PCMPGTWirr",
374 "MMX_PMAXSWirr",
375 "MMX_PMAXUBirr",
376 "MMX_PMINSWirr",
377 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000378 "MMX_PSUBSBirr",
379 "MMX_PSUBSWirr",
380 "MMX_PSUBUSBirr",
381 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000382
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000383def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000384 let Latency = 1;
385 let NumMicroOps = 1;
386 let ResourceCycles = [1];
387}
Craig Topperfc179c62018-03-22 04:23:41 +0000388def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
389 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000390 "MMX_MOVD64rr",
391 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000392 "UCOM_FPr",
393 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000394 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000395 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000396 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000397 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000398
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000399def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000400 let Latency = 1;
401 let NumMicroOps = 1;
402 let ResourceCycles = [1];
403}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000404def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000405
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000406def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000407 let Latency = 1;
408 let NumMicroOps = 1;
409 let ResourceCycles = [1];
410}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000411def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
412 "(V?)PABSD(Y?)rr",
413 "(V?)PABSW(Y?)rr",
414 "(V?)PADDSB(Y?)rr",
415 "(V?)PADDSW(Y?)rr",
416 "(V?)PADDUSB(Y?)rr",
417 "(V?)PADDUSW(Y?)rr",
418 "(V?)PAVGB(Y?)rr",
419 "(V?)PAVGW(Y?)rr",
420 "(V?)PCMPEQB(Y?)rr",
421 "(V?)PCMPEQD(Y?)rr",
422 "(V?)PCMPEQQ(Y?)rr",
423 "(V?)PCMPEQW(Y?)rr",
424 "(V?)PCMPGTB(Y?)rr",
425 "(V?)PCMPGTD(Y?)rr",
426 "(V?)PCMPGTW(Y?)rr",
427 "(V?)PMAXSB(Y?)rr",
428 "(V?)PMAXSD(Y?)rr",
429 "(V?)PMAXSW(Y?)rr",
430 "(V?)PMAXUB(Y?)rr",
431 "(V?)PMAXUD(Y?)rr",
432 "(V?)PMAXUW(Y?)rr",
433 "(V?)PMINSB(Y?)rr",
434 "(V?)PMINSD(Y?)rr",
435 "(V?)PMINSW(Y?)rr",
436 "(V?)PMINUB(Y?)rr",
437 "(V?)PMINUD(Y?)rr",
438 "(V?)PMINUW(Y?)rr",
439 "(V?)PSIGNB(Y?)rr",
440 "(V?)PSIGND(Y?)rr",
441 "(V?)PSIGNW(Y?)rr",
442 "(V?)PSLLD(Y?)ri",
443 "(V?)PSLLQ(Y?)ri",
444 "VPSLLVD(Y?)rr",
445 "VPSLLVQ(Y?)rr",
446 "(V?)PSLLW(Y?)ri",
447 "(V?)PSRAD(Y?)ri",
448 "VPSRAVD(Y?)rr",
449 "(V?)PSRAW(Y?)ri",
450 "(V?)PSRLD(Y?)ri",
451 "(V?)PSRLQ(Y?)ri",
452 "VPSRLVD(Y?)rr",
453 "VPSRLVQ(Y?)rr",
454 "(V?)PSRLW(Y?)ri",
455 "(V?)PSUBSB(Y?)rr",
456 "(V?)PSUBSW(Y?)rr",
457 "(V?)PSUBUSB(Y?)rr",
458 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000459
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000460def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000461 let Latency = 1;
462 let NumMicroOps = 1;
463 let ResourceCycles = [1];
464}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000465def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
466def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000467 "MMX_PABS(B|D|W)rr",
468 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000469 "MMX_PANDNirr",
470 "MMX_PANDirr",
471 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000472 "MMX_PSIGN(B|D|W)rr",
473 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000474 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000475
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000476def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000477 let Latency = 1;
478 let NumMicroOps = 1;
479 let ResourceCycles = [1];
480}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000481def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000482def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
483 "ADC(16|32|64)i",
484 "ADC(8|16|32|64)rr",
485 "ADCX(32|64)rr",
486 "ADOX(32|64)rr",
487 "BT(16|32|64)ri8",
488 "BT(16|32|64)rr",
489 "BTC(16|32|64)ri8",
490 "BTC(16|32|64)rr",
491 "BTR(16|32|64)ri8",
492 "BTR(16|32|64)rr",
493 "BTS(16|32|64)ri8",
494 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000495 "SAR(8|16|32|64)r1",
496 "SAR(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000497 "SBB(16|32|64)ri",
498 "SBB(16|32|64)i",
499 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000500 "SHL(8|16|32|64)r1",
501 "SHL(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000502 "SHR(8|16|32|64)r1",
Simon Pilgrimeb609092018-04-23 22:19:55 +0000503 "SHR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000504
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000505def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
506 let Latency = 1;
507 let NumMicroOps = 1;
508 let ResourceCycles = [1];
509}
Craig Topperfc179c62018-03-22 04:23:41 +0000510def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
511 "BLSI(32|64)rr",
512 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000513 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000514
515def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
516 let Latency = 1;
517 let NumMicroOps = 1;
518 let ResourceCycles = [1];
519}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000520def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000521 "(V?)PADDD(Y?)rr",
522 "(V?)PADDQ(Y?)rr",
523 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000524 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000525 "(V?)PSUBB(Y?)rr",
526 "(V?)PSUBD(Y?)rr",
527 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000528 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000529
530def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
531 let Latency = 1;
532 let NumMicroOps = 1;
533 let ResourceCycles = [1];
534}
Craig Topperfbe31322018-04-05 21:56:19 +0000535def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000536def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000537 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000538 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000539 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000540 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000541 "SGDT64m",
542 "SIDT64m",
543 "SLDT64m",
544 "SMSW16m",
545 "STC",
546 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000547 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000548
549def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000550 let Latency = 1;
551 let NumMicroOps = 2;
552 let ResourceCycles = [1,1];
553}
Craig Topperfc179c62018-03-22 04:23:41 +0000554def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
555 "MMX_MOVD64from64rm",
556 "MMX_MOVD64mr",
557 "MMX_MOVNTQmr",
558 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000559 "MOVNTI_64mr",
560 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000561 "ST_FP32m",
562 "ST_FP64m",
563 "ST_FP80m",
564 "VEXTRACTF128mr",
565 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000566 "(V?)MOVAPDYmr",
567 "(V?)MOVAPS(Y?)mr",
568 "(V?)MOVDQA(Y?)mr",
569 "(V?)MOVDQU(Y?)mr",
570 "(V?)MOVHPDmr",
571 "(V?)MOVHPSmr",
572 "(V?)MOVLPDmr",
573 "(V?)MOVLPSmr",
574 "(V?)MOVNTDQ(Y?)mr",
575 "(V?)MOVNTPD(Y?)mr",
576 "(V?)MOVNTPS(Y?)mr",
577 "(V?)MOVPDI2DImr",
578 "(V?)MOVPQI2QImr",
579 "(V?)MOVPQIto64mr",
580 "(V?)MOVSDmr",
581 "(V?)MOVSSmr",
582 "(V?)MOVUPD(Y?)mr",
583 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000584 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000585
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000586def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000587 let Latency = 2;
588 let NumMicroOps = 1;
589 let ResourceCycles = [1];
590}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000591def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000592 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000593 "(V?)MOVPDI2DIrr",
594 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000595 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000596 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000597
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000598def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000599 let Latency = 2;
600 let NumMicroOps = 2;
601 let ResourceCycles = [2];
602}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000603def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000604
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000605def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000606 let Latency = 2;
607 let NumMicroOps = 2;
608 let ResourceCycles = [2];
609}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000610def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
611def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000612
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000613def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000614 let Latency = 2;
615 let NumMicroOps = 2;
616 let ResourceCycles = [2];
617}
Craig Topperfc179c62018-03-22 04:23:41 +0000618def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
619 "ROL(8|16|32|64)r1",
620 "ROL(8|16|32|64)ri",
621 "ROR(8|16|32|64)r1",
622 "ROR(8|16|32|64)ri",
623 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000624
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000625def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000626 let Latency = 2;
627 let NumMicroOps = 2;
628 let ResourceCycles = [2];
629}
Craig Topperfc179c62018-03-22 04:23:41 +0000630def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
631 "WAIT",
632 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000633
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000634def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000635 let Latency = 2;
636 let NumMicroOps = 2;
637 let ResourceCycles = [1,1];
638}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000639def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
640 "VMASKMOVPS(Y?)mr",
641 "VPMASKMOVD(Y?)mr",
642 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000643
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000644def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000645 let Latency = 2;
646 let NumMicroOps = 2;
647 let ResourceCycles = [1,1];
648}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000649def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
650 "(V?)PSLLQrr",
651 "(V?)PSLLWrr",
652 "(V?)PSRADrr",
653 "(V?)PSRAWrr",
654 "(V?)PSRLDrr",
655 "(V?)PSRLQrr",
656 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000657
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000658def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000659 let Latency = 2;
660 let NumMicroOps = 2;
661 let ResourceCycles = [1,1];
662}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000663def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000664
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000665def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,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<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000671
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000672def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000673 let Latency = 2;
674 let NumMicroOps = 2;
675 let ResourceCycles = [1,1];
676}
Craig Topper498875f2018-04-04 17:54:19 +0000677def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
678
679def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
680 let Latency = 1;
681 let NumMicroOps = 1;
682 let ResourceCycles = [1];
683}
684def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000685
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000686def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000687 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000688 let NumMicroOps = 2;
689 let ResourceCycles = [1,1];
690}
Craig Topper2d451e72018-03-18 08:38:06 +0000691def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000692def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000693def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
694 "ADC8ri",
695 "SBB8i8",
696 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000697
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000698def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
699 let Latency = 2;
700 let NumMicroOps = 3;
701 let ResourceCycles = [1,1,1];
702}
703def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
704
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000705def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
706 let Latency = 2;
707 let NumMicroOps = 3;
708 let ResourceCycles = [1,1,1];
709}
710def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
711
712def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
713 let Latency = 2;
714 let NumMicroOps = 3;
715 let ResourceCycles = [1,1,1];
716}
Craig Topper2d451e72018-03-18 08:38:06 +0000717def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000718def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
719 "PUSH64i8",
720 "STOSB",
721 "STOSL",
722 "STOSQ",
723 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000724
725def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
726 let Latency = 3;
727 let NumMicroOps = 1;
728 let ResourceCycles = [1];
729}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000730def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000731 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000732 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000733 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000734
Clement Courbet327fac42018-03-07 08:14:02 +0000735def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000736 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000737 let NumMicroOps = 2;
738 let ResourceCycles = [1,1];
739}
Clement Courbet327fac42018-03-07 08:14:02 +0000740def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000741
742def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
743 let Latency = 3;
744 let NumMicroOps = 1;
745 let ResourceCycles = [1];
746}
Craig Topperfc179c62018-03-22 04:23:41 +0000747def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
748 "ADD_FST0r",
749 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000750 "SUBR_FPrST0",
751 "SUBR_FST0r",
752 "SUBR_FrST0",
753 "SUB_FPrST0",
754 "SUB_FST0r",
755 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000756 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000757 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000758 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000759 "VPMOVSXBDYrr",
760 "VPMOVSXBQYrr",
761 "VPMOVSXBWYrr",
762 "VPMOVSXDQYrr",
763 "VPMOVSXWDYrr",
764 "VPMOVSXWQYrr",
765 "VPMOVZXBDYrr",
766 "VPMOVZXBQYrr",
767 "VPMOVZXBWYrr",
768 "VPMOVZXDQYrr",
769 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000770 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000771
772def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
773 let Latency = 3;
774 let NumMicroOps = 2;
775 let ResourceCycles = [1,1];
776}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000777def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000778
779def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
780 let Latency = 3;
781 let NumMicroOps = 2;
782 let ResourceCycles = [1,1];
783}
784def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
785
786def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
787 let Latency = 3;
788 let NumMicroOps = 3;
789 let ResourceCycles = [3];
790}
Craig Topperfc179c62018-03-22 04:23:41 +0000791def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
792 "ROR(8|16|32|64)rCL",
793 "SAR(8|16|32|64)rCL",
794 "SHL(8|16|32|64)rCL",
795 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000796
797def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000798 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000799 let NumMicroOps = 3;
800 let ResourceCycles = [3];
801}
Craig Topperb5f26592018-04-19 18:00:17 +0000802def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
803 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
804 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000805
806def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
807 let Latency = 3;
808 let NumMicroOps = 3;
809 let ResourceCycles = [1,2];
810}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000811def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000812
813def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
814 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000815 let NumMicroOps = 3;
816 let ResourceCycles = [2,1];
817}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000818def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
819 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000820
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000821def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
822 let Latency = 3;
823 let NumMicroOps = 3;
824 let ResourceCycles = [2,1];
825}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000826def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000827
828def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
829 let Latency = 3;
830 let NumMicroOps = 3;
831 let ResourceCycles = [2,1];
832}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000833def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
834 "(V?)PHADDW(Y?)rr",
835 "(V?)PHSUBD(Y?)rr",
836 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000837
838def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
839 let Latency = 3;
840 let NumMicroOps = 3;
841 let ResourceCycles = [2,1];
842}
Craig Topperfc179c62018-03-22 04:23:41 +0000843def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
844 "MMX_PACKSSWBirr",
845 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000846
847def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
848 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000849 let NumMicroOps = 3;
850 let ResourceCycles = [1,2];
851}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000852def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000853
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000854def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
855 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000856 let NumMicroOps = 3;
857 let ResourceCycles = [1,2];
858}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000859def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000860
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000861def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
862 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000863 let NumMicroOps = 3;
864 let ResourceCycles = [1,2];
865}
Craig Topperfc179c62018-03-22 04:23:41 +0000866def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
867 "RCL(8|16|32|64)ri",
868 "RCR(8|16|32|64)r1",
869 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000870
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000871def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
872 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000873 let NumMicroOps = 3;
874 let ResourceCycles = [1,1,1];
875}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000876def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000877
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000878def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
879 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000880 let NumMicroOps = 4;
881 let ResourceCycles = [1,1,2];
882}
Craig Topperf4cd9082018-01-19 05:47:32 +0000883def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000884
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000885def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
886 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000887 let NumMicroOps = 4;
888 let ResourceCycles = [1,1,1,1];
889}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000890def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000891
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000892def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
893 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000894 let NumMicroOps = 4;
895 let ResourceCycles = [1,1,1,1];
896}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000897def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000898
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000899def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000900 let Latency = 4;
901 let NumMicroOps = 1;
902 let ResourceCycles = [1];
903}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000904def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000905 "MMX_PMADDWDirr",
906 "MMX_PMULHRSWrr",
907 "MMX_PMULHUWirr",
908 "MMX_PMULHWirr",
909 "MMX_PMULLWirr",
910 "MMX_PMULUDQirr",
911 "MUL_FPrST0",
912 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000913 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000914
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000915def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000916 let Latency = 4;
917 let NumMicroOps = 1;
918 let ResourceCycles = [1];
919}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000920def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
921 "(V?)ADDPS(Y?)rr",
922 "(V?)ADDSDrr",
923 "(V?)ADDSSrr",
924 "(V?)ADDSUBPD(Y?)rr",
925 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000926 "(V?)CVTDQ2PS(Y?)rr",
927 "(V?)CVTPS2DQ(Y?)rr",
928 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000929 "(V?)MULPD(Y?)rr",
930 "(V?)MULPS(Y?)rr",
931 "(V?)MULSDrr",
932 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000933 "(V?)PMADDUBSW(Y?)rr",
934 "(V?)PMADDWD(Y?)rr",
935 "(V?)PMULDQ(Y?)rr",
936 "(V?)PMULHRSW(Y?)rr",
937 "(V?)PMULHUW(Y?)rr",
938 "(V?)PMULHW(Y?)rr",
939 "(V?)PMULLW(Y?)rr",
940 "(V?)PMULUDQ(Y?)rr",
941 "(V?)SUBPD(Y?)rr",
942 "(V?)SUBPS(Y?)rr",
943 "(V?)SUBSDrr",
944 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000945
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000946def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000947 let Latency = 4;
948 let NumMicroOps = 2;
949 let ResourceCycles = [1,1];
950}
Craig Topperf846e2d2018-04-19 05:34:05 +0000951def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000952
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000953def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
954 let Latency = 4;
955 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000956 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000957}
Craig Topperfc179c62018-03-22 04:23:41 +0000958def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000959
960def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000961 let Latency = 4;
962 let NumMicroOps = 2;
963 let ResourceCycles = [1,1];
964}
Craig Topperfc179c62018-03-22 04:23:41 +0000965def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
966 "VPSLLQYrr",
967 "VPSLLWYrr",
968 "VPSRADYrr",
969 "VPSRAWYrr",
970 "VPSRLDYrr",
971 "VPSRLQYrr",
972 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000973
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000974def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000975 let Latency = 4;
976 let NumMicroOps = 3;
977 let ResourceCycles = [1,1,1];
978}
Craig Topperfc179c62018-03-22 04:23:41 +0000979def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
980 "ISTT_FP32m",
981 "ISTT_FP64m",
982 "IST_F16m",
983 "IST_F32m",
984 "IST_FP16m",
985 "IST_FP32m",
986 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000987
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000988def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000989 let Latency = 4;
990 let NumMicroOps = 4;
991 let ResourceCycles = [4];
992}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000993def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000994
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000995def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000996 let Latency = 4;
997 let NumMicroOps = 4;
998 let ResourceCycles = [1,3];
999}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001000def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001001
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001002def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001003 let Latency = 4;
1004 let NumMicroOps = 4;
1005 let ResourceCycles = [1,3];
1006}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001007def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001009def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001010 let Latency = 4;
1011 let NumMicroOps = 4;
1012 let ResourceCycles = [1,1,2];
1013}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001014def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001015
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001016def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1017 let Latency = 5;
1018 let NumMicroOps = 1;
1019 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001020}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001021def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001022 "MOVSX(16|32|64)rm32",
1023 "MOVSX(16|32|64)rm8",
1024 "MOVZX(16|32|64)rm16",
1025 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001026 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001027
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001028def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001029 let Latency = 5;
1030 let NumMicroOps = 2;
1031 let ResourceCycles = [1,1];
1032}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001033def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1034 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001035
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001036def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001037 let Latency = 5;
1038 let NumMicroOps = 2;
1039 let ResourceCycles = [1,1];
1040}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001041def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001042 "MMX_CVTPS2PIirr",
1043 "MMX_CVTTPD2PIirr",
1044 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001045 "(V?)CVTPD2DQrr",
1046 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001047 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001048 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001049 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001050 "(V?)CVTSD2SSrr",
1051 "(V?)CVTSI642SDrr",
1052 "(V?)CVTSI2SDrr",
1053 "(V?)CVTSI2SSrr",
1054 "(V?)CVTSS2SDrr",
1055 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001056
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001057def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001058 let Latency = 5;
1059 let NumMicroOps = 3;
1060 let ResourceCycles = [1,1,1];
1061}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001062def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001063
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001064def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001065 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001066 let NumMicroOps = 3;
1067 let ResourceCycles = [1,1,1];
1068}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001069def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001070
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001071def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001072 let Latency = 5;
1073 let NumMicroOps = 5;
1074 let ResourceCycles = [1,4];
1075}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001076def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001077
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001078def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001079 let Latency = 5;
1080 let NumMicroOps = 5;
1081 let ResourceCycles = [2,3];
1082}
Craig Topper13a16502018-03-19 00:56:09 +00001083def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001084
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001085def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001086 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001087 let NumMicroOps = 6;
1088 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001089}
Craig Topperfc179c62018-03-22 04:23:41 +00001090def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1091 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001092
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001093def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1094 let Latency = 6;
1095 let NumMicroOps = 1;
1096 let ResourceCycles = [1];
1097}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001098def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001099 "(V?)MOVSHDUPrm",
1100 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001101 "VPBROADCASTDrm",
1102 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001103
1104def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001105 let Latency = 6;
1106 let NumMicroOps = 2;
1107 let ResourceCycles = [2];
1108}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001109def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001110
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001111def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001112 let Latency = 6;
1113 let NumMicroOps = 2;
1114 let ResourceCycles = [1,1];
1115}
Craig Topperfc179c62018-03-22 04:23:41 +00001116def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1117 "MMX_PADDSWirm",
1118 "MMX_PADDUSBirm",
1119 "MMX_PADDUSWirm",
1120 "MMX_PAVGBirm",
1121 "MMX_PAVGWirm",
1122 "MMX_PCMPEQBirm",
1123 "MMX_PCMPEQDirm",
1124 "MMX_PCMPEQWirm",
1125 "MMX_PCMPGTBirm",
1126 "MMX_PCMPGTDirm",
1127 "MMX_PCMPGTWirm",
1128 "MMX_PMAXSWirm",
1129 "MMX_PMAXUBirm",
1130 "MMX_PMINSWirm",
1131 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001132 "MMX_PSUBSBirm",
1133 "MMX_PSUBSWirm",
1134 "MMX_PSUBUSBirm",
1135 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001136
Craig Topper58afb4e2018-03-22 21:10:07 +00001137def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001138 let Latency = 6;
1139 let NumMicroOps = 2;
1140 let ResourceCycles = [1,1];
1141}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001142def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1143 "(V?)CVTSD2SIrr",
1144 "(V?)CVTSS2SI64rr",
1145 "(V?)CVTSS2SIrr",
1146 "(V?)CVTTSD2SI64rr",
1147 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001148
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001149def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1150 let Latency = 6;
1151 let NumMicroOps = 2;
1152 let ResourceCycles = [1,1];
1153}
Craig Topperfc179c62018-03-22 04:23:41 +00001154def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1155 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001156
1157def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1158 let Latency = 6;
1159 let NumMicroOps = 2;
1160 let ResourceCycles = [1,1];
1161}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001162def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1163 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001164 "MMX_PANDNirm",
1165 "MMX_PANDirm",
1166 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001167 "MMX_PSIGN(B|D|W)rm",
1168 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001169 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001170
1171def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1172 let Latency = 6;
1173 let NumMicroOps = 2;
1174 let ResourceCycles = [1,1];
1175}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001176def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001177def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1178 ADCX32rm, ADCX64rm,
1179 ADOX32rm, ADOX64rm,
1180 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001181
1182def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1183 let Latency = 6;
1184 let NumMicroOps = 2;
1185 let ResourceCycles = [1,1];
1186}
Craig Topperfc179c62018-03-22 04:23:41 +00001187def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1188 "BLSI(32|64)rm",
1189 "BLSMSK(32|64)rm",
1190 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001191 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001192
1193def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1194 let Latency = 6;
1195 let NumMicroOps = 2;
1196 let ResourceCycles = [1,1];
1197}
Craig Topper2d451e72018-03-18 08:38:06 +00001198def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001199def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001200
Craig Topper58afb4e2018-03-22 21:10:07 +00001201def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001202 let Latency = 6;
1203 let NumMicroOps = 3;
1204 let ResourceCycles = [2,1];
1205}
Craig Topperfc179c62018-03-22 04:23:41 +00001206def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001207
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001208def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001209 let Latency = 6;
1210 let NumMicroOps = 4;
1211 let ResourceCycles = [1,2,1];
1212}
Craig Topperfc179c62018-03-22 04:23:41 +00001213def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1214 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001215
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001216def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001217 let Latency = 6;
1218 let NumMicroOps = 4;
1219 let ResourceCycles = [1,1,1,1];
1220}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001221def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001222
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001223def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1224 let Latency = 6;
1225 let NumMicroOps = 4;
1226 let ResourceCycles = [1,1,1,1];
1227}
Craig Topperfc179c62018-03-22 04:23:41 +00001228def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1229 "BTR(16|32|64)mi8",
1230 "BTS(16|32|64)mi8",
1231 "SAR(8|16|32|64)m1",
1232 "SAR(8|16|32|64)mi",
1233 "SHL(8|16|32|64)m1",
1234 "SHL(8|16|32|64)mi",
1235 "SHR(8|16|32|64)m1",
1236 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001237
1238def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1239 let Latency = 6;
1240 let NumMicroOps = 4;
1241 let ResourceCycles = [1,1,1,1];
1242}
Craig Topperf0d04262018-04-06 16:16:48 +00001243def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1244 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001245
1246def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001247 let Latency = 6;
1248 let NumMicroOps = 6;
1249 let ResourceCycles = [1,5];
1250}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001251def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001252
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001253def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1254 let Latency = 7;
1255 let NumMicroOps = 1;
1256 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001257}
Craig Topperfc179c62018-03-22 04:23:41 +00001258def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1259 "LD_F64m",
1260 "LD_F80m",
1261 "VBROADCASTF128",
1262 "VBROADCASTI128",
1263 "VBROADCASTSDYrm",
1264 "VBROADCASTSSYrm",
1265 "VLDDQUYrm",
1266 "VMOVAPDYrm",
1267 "VMOVAPSYrm",
1268 "VMOVDDUPYrm",
1269 "VMOVDQAYrm",
1270 "VMOVDQUYrm",
1271 "VMOVNTDQAYrm",
1272 "VMOVSHDUPYrm",
1273 "VMOVSLDUPYrm",
1274 "VMOVUPDYrm",
1275 "VMOVUPSYrm",
1276 "VPBROADCASTDYrm",
1277 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001278
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001279def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001280 let Latency = 7;
1281 let NumMicroOps = 2;
1282 let ResourceCycles = [1,1];
1283}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001284def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001285
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001286def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1287 let Latency = 7;
1288 let NumMicroOps = 2;
1289 let ResourceCycles = [1,1];
1290}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001291def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1292 "(V?)PACKSSDWrm",
1293 "(V?)PACKSSWBrm",
1294 "(V?)PACKUSDWrm",
1295 "(V?)PACKUSWBrm",
1296 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001297 "VPBROADCASTBrm",
1298 "VPBROADCASTWrm",
1299 "VPERMILPDmi",
1300 "VPERMILPDrm",
1301 "VPERMILPSmi",
1302 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001303 "(V?)PSHUFBrm",
1304 "(V?)PSHUFDmi",
1305 "(V?)PSHUFHWmi",
1306 "(V?)PSHUFLWmi",
1307 "(V?)PUNPCKHBWrm",
1308 "(V?)PUNPCKHDQrm",
1309 "(V?)PUNPCKHQDQrm",
1310 "(V?)PUNPCKHWDrm",
1311 "(V?)PUNPCKLBWrm",
1312 "(V?)PUNPCKLDQrm",
1313 "(V?)PUNPCKLQDQrm",
1314 "(V?)PUNPCKLWDrm",
1315 "(V?)SHUFPDrmi",
1316 "(V?)SHUFPSrmi",
1317 "(V?)UNPCKHPDrm",
1318 "(V?)UNPCKHPSrm",
1319 "(V?)UNPCKLPDrm",
1320 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001321
Craig Topper58afb4e2018-03-22 21:10:07 +00001322def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001323 let Latency = 7;
1324 let NumMicroOps = 2;
1325 let ResourceCycles = [1,1];
1326}
Craig Topperfc179c62018-03-22 04:23:41 +00001327def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1328 "VCVTPD2PSYrr",
1329 "VCVTPH2PSYrr",
1330 "VCVTPS2PDYrr",
1331 "VCVTPS2PHYrr",
1332 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001333
1334def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1335 let Latency = 7;
1336 let NumMicroOps = 2;
1337 let ResourceCycles = [1,1];
1338}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001339def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1340 "(V?)PABSDrm",
1341 "(V?)PABSWrm",
1342 "(V?)PADDSBrm",
1343 "(V?)PADDSWrm",
1344 "(V?)PADDUSBrm",
1345 "(V?)PADDUSWrm",
1346 "(V?)PAVGBrm",
1347 "(V?)PAVGWrm",
1348 "(V?)PCMPEQBrm",
1349 "(V?)PCMPEQDrm",
1350 "(V?)PCMPEQQrm",
1351 "(V?)PCMPEQWrm",
1352 "(V?)PCMPGTBrm",
1353 "(V?)PCMPGTDrm",
1354 "(V?)PCMPGTWrm",
1355 "(V?)PMAXSBrm",
1356 "(V?)PMAXSDrm",
1357 "(V?)PMAXSWrm",
1358 "(V?)PMAXUBrm",
1359 "(V?)PMAXUDrm",
1360 "(V?)PMAXUWrm",
1361 "(V?)PMINSBrm",
1362 "(V?)PMINSDrm",
1363 "(V?)PMINSWrm",
1364 "(V?)PMINUBrm",
1365 "(V?)PMINUDrm",
1366 "(V?)PMINUWrm",
1367 "(V?)PSIGNBrm",
1368 "(V?)PSIGNDrm",
1369 "(V?)PSIGNWrm",
1370 "(V?)PSLLDrm",
1371 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001372 "VPSLLVDrm",
1373 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001374 "(V?)PSLLWrm",
1375 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001376 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001377 "(V?)PSRAWrm",
1378 "(V?)PSRLDrm",
1379 "(V?)PSRLQrm",
1380 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001381 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001382 "(V?)PSRLWrm",
1383 "(V?)PSUBSBrm",
1384 "(V?)PSUBSWrm",
1385 "(V?)PSUBUSBrm",
1386 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001387
1388def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1389 let Latency = 7;
1390 let NumMicroOps = 2;
1391 let ResourceCycles = [1,1];
1392}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001393def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001394 "(V?)INSERTI128rm",
1395 "(V?)MASKMOVPDrm",
1396 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001397 "(V?)PADDBrm",
1398 "(V?)PADDDrm",
1399 "(V?)PADDQrm",
1400 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001401 "(V?)PBLENDDrmi",
1402 "(V?)PMASKMOVDrm",
1403 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001404 "(V?)PSUBBrm",
1405 "(V?)PSUBDrm",
1406 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001407 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001408
1409def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1410 let Latency = 7;
1411 let NumMicroOps = 3;
1412 let ResourceCycles = [2,1];
1413}
Craig Topperfc179c62018-03-22 04:23:41 +00001414def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1415 "MMX_PACKSSWBirm",
1416 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001417
1418def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1419 let Latency = 7;
1420 let NumMicroOps = 3;
1421 let ResourceCycles = [1,2];
1422}
Craig Topperf4cd9082018-01-19 05:47:32 +00001423def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001424
1425def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1426 let Latency = 7;
1427 let NumMicroOps = 3;
1428 let ResourceCycles = [1,2];
1429}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001430def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1431 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001432
Craig Topper58afb4e2018-03-22 21:10:07 +00001433def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001434 let Latency = 7;
1435 let NumMicroOps = 3;
1436 let ResourceCycles = [1,1,1];
1437}
Craig Topperfc179c62018-03-22 04:23:41 +00001438def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1439 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001440
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001441def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001442 let Latency = 7;
1443 let NumMicroOps = 3;
1444 let ResourceCycles = [1,1,1];
1445}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001446def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001447
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001448def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001449 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001450 let NumMicroOps = 3;
1451 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001452}
Craig Topperfc179c62018-03-22 04:23:41 +00001453def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1454 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001455
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001456def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1457 let Latency = 7;
1458 let NumMicroOps = 5;
1459 let ResourceCycles = [1,1,1,2];
1460}
Craig Topperfc179c62018-03-22 04:23:41 +00001461def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1462 "ROL(8|16|32|64)mi",
1463 "ROR(8|16|32|64)m1",
1464 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001465
1466def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1467 let Latency = 7;
1468 let NumMicroOps = 5;
1469 let ResourceCycles = [1,1,1,2];
1470}
Craig Topper13a16502018-03-19 00:56:09 +00001471def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001472
1473def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1474 let Latency = 7;
1475 let NumMicroOps = 5;
1476 let ResourceCycles = [1,1,1,1,1];
1477}
Craig Topperfc179c62018-03-22 04:23:41 +00001478def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1479 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001480
1481def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001482 let Latency = 7;
1483 let NumMicroOps = 7;
1484 let ResourceCycles = [1,3,1,2];
1485}
Craig Topper2d451e72018-03-18 08:38:06 +00001486def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001487
Craig Topper58afb4e2018-03-22 21:10:07 +00001488def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001489 let Latency = 8;
1490 let NumMicroOps = 2;
1491 let ResourceCycles = [2];
1492}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001493def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1494 "(V?)ROUNDPS(Y?)r",
1495 "(V?)ROUNDSDr",
1496 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001497
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001498def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001499 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001500 let NumMicroOps = 2;
1501 let ResourceCycles = [1,1];
1502}
Craig Topperfc179c62018-03-22 04:23:41 +00001503def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1504 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001505
1506def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1507 let Latency = 8;
1508 let NumMicroOps = 2;
1509 let ResourceCycles = [1,1];
1510}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001511def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1512 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001513
1514def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001515 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001516 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001517 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001518}
Craig Topperf846e2d2018-04-19 05:34:05 +00001519def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001520
Craig Topperf846e2d2018-04-19 05:34:05 +00001521def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1522 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001523 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001524 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001525}
Craig Topperfc179c62018-03-22 04:23:41 +00001526def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001527
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001528def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1529 let Latency = 8;
1530 let NumMicroOps = 2;
1531 let ResourceCycles = [1,1];
1532}
Craig Topperfc179c62018-03-22 04:23:41 +00001533def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1534 "FCOM64m",
1535 "FCOMP32m",
1536 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001537 "VPACKSSDWYrm",
1538 "VPACKSSWBYrm",
1539 "VPACKUSDWYrm",
1540 "VPACKUSWBYrm",
1541 "VPALIGNRYrmi",
1542 "VPBLENDWYrmi",
1543 "VPBROADCASTBYrm",
1544 "VPBROADCASTWYrm",
1545 "VPERMILPDYmi",
1546 "VPERMILPDYrm",
1547 "VPERMILPSYmi",
1548 "VPERMILPSYrm",
1549 "VPMOVSXBDYrm",
1550 "VPMOVSXBQYrm",
1551 "VPMOVSXWQYrm",
1552 "VPSHUFBYrm",
1553 "VPSHUFDYmi",
1554 "VPSHUFHWYmi",
1555 "VPSHUFLWYmi",
1556 "VPUNPCKHBWYrm",
1557 "VPUNPCKHDQYrm",
1558 "VPUNPCKHQDQYrm",
1559 "VPUNPCKHWDYrm",
1560 "VPUNPCKLBWYrm",
1561 "VPUNPCKLDQYrm",
1562 "VPUNPCKLQDQYrm",
1563 "VPUNPCKLWDYrm",
1564 "VSHUFPDYrmi",
1565 "VSHUFPSYrmi",
1566 "VUNPCKHPDYrm",
1567 "VUNPCKHPSYrm",
1568 "VUNPCKLPDYrm",
1569 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001570
1571def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1572 let Latency = 8;
1573 let NumMicroOps = 2;
1574 let ResourceCycles = [1,1];
1575}
Craig Topperfc179c62018-03-22 04:23:41 +00001576def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1577 "VPABSDYrm",
1578 "VPABSWYrm",
1579 "VPADDSBYrm",
1580 "VPADDSWYrm",
1581 "VPADDUSBYrm",
1582 "VPADDUSWYrm",
1583 "VPAVGBYrm",
1584 "VPAVGWYrm",
1585 "VPCMPEQBYrm",
1586 "VPCMPEQDYrm",
1587 "VPCMPEQQYrm",
1588 "VPCMPEQWYrm",
1589 "VPCMPGTBYrm",
1590 "VPCMPGTDYrm",
1591 "VPCMPGTWYrm",
1592 "VPMAXSBYrm",
1593 "VPMAXSDYrm",
1594 "VPMAXSWYrm",
1595 "VPMAXUBYrm",
1596 "VPMAXUDYrm",
1597 "VPMAXUWYrm",
1598 "VPMINSBYrm",
1599 "VPMINSDYrm",
1600 "VPMINSWYrm",
1601 "VPMINUBYrm",
1602 "VPMINUDYrm",
1603 "VPMINUWYrm",
1604 "VPSIGNBYrm",
1605 "VPSIGNDYrm",
1606 "VPSIGNWYrm",
1607 "VPSLLDYrm",
1608 "VPSLLQYrm",
1609 "VPSLLVDYrm",
1610 "VPSLLVQYrm",
1611 "VPSLLWYrm",
1612 "VPSRADYrm",
1613 "VPSRAVDYrm",
1614 "VPSRAWYrm",
1615 "VPSRLDYrm",
1616 "VPSRLQYrm",
1617 "VPSRLVDYrm",
1618 "VPSRLVQYrm",
1619 "VPSRLWYrm",
1620 "VPSUBSBYrm",
1621 "VPSUBSWYrm",
1622 "VPSUBUSBYrm",
1623 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001624
1625def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1626 let Latency = 8;
1627 let NumMicroOps = 2;
1628 let ResourceCycles = [1,1];
1629}
Craig Topperfc179c62018-03-22 04:23:41 +00001630def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1631 "VANDNPSYrm",
1632 "VANDPDYrm",
1633 "VANDPSYrm",
1634 "VBLENDPDYrmi",
1635 "VBLENDPSYrmi",
1636 "VMASKMOVPDYrm",
1637 "VMASKMOVPSYrm",
1638 "VORPDYrm",
1639 "VORPSYrm",
1640 "VPADDBYrm",
1641 "VPADDDYrm",
1642 "VPADDQYrm",
1643 "VPADDWYrm",
1644 "VPANDNYrm",
1645 "VPANDYrm",
1646 "VPBLENDDYrmi",
1647 "VPMASKMOVDYrm",
1648 "VPMASKMOVQYrm",
1649 "VPORYrm",
1650 "VPSUBBYrm",
1651 "VPSUBDYrm",
1652 "VPSUBQYrm",
1653 "VPSUBWYrm",
1654 "VPXORYrm",
1655 "VXORPDYrm",
1656 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001657
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001658def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1659 let Latency = 8;
1660 let NumMicroOps = 4;
1661 let ResourceCycles = [1,2,1];
1662}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001663def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001664
1665def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1666 let Latency = 8;
1667 let NumMicroOps = 4;
1668 let ResourceCycles = [2,1,1];
1669}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001670def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001671
Craig Topper58afb4e2018-03-22 21:10:07 +00001672def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001673 let Latency = 8;
1674 let NumMicroOps = 4;
1675 let ResourceCycles = [1,1,1,1];
1676}
1677def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1678
1679def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1680 let Latency = 8;
1681 let NumMicroOps = 5;
1682 let ResourceCycles = [1,1,3];
1683}
Craig Topper13a16502018-03-19 00:56:09 +00001684def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001685
1686def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1687 let Latency = 8;
1688 let NumMicroOps = 5;
1689 let ResourceCycles = [1,1,1,2];
1690}
Craig Topperfc179c62018-03-22 04:23:41 +00001691def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1692 "RCL(8|16|32|64)mi",
1693 "RCR(8|16|32|64)m1",
1694 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001695
1696def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1697 let Latency = 8;
1698 let NumMicroOps = 6;
1699 let ResourceCycles = [1,1,1,3];
1700}
Craig Topperfc179c62018-03-22 04:23:41 +00001701def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1702 "SAR(8|16|32|64)mCL",
1703 "SHL(8|16|32|64)mCL",
1704 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001705
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001706def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1707 let Latency = 8;
1708 let NumMicroOps = 6;
1709 let ResourceCycles = [1,1,1,2,1];
1710}
Craig Topper9f834812018-04-01 21:54:24 +00001711def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001712 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001713 "SBB(8|16|32|64)mi")>;
1714def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1715 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001716
1717def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1718 let Latency = 9;
1719 let NumMicroOps = 2;
1720 let ResourceCycles = [1,1];
1721}
Craig Topperfc179c62018-03-22 04:23:41 +00001722def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1723 "MMX_PMADDUBSWrm",
1724 "MMX_PMADDWDirm",
1725 "MMX_PMULHRSWrm",
1726 "MMX_PMULHUWirm",
1727 "MMX_PMULHWirm",
1728 "MMX_PMULLWirm",
1729 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001730 "VTESTPDYrm",
1731 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001732
1733def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1734 let Latency = 9;
1735 let NumMicroOps = 2;
1736 let ResourceCycles = [1,1];
1737}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001738def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001739 "VPMOVSXBWYrm",
1740 "VPMOVSXDQYrm",
1741 "VPMOVSXWDYrm",
1742 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001743 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001744
1745def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1746 let Latency = 9;
1747 let NumMicroOps = 2;
1748 let ResourceCycles = [1,1];
1749}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001750def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1751 "(V?)ADDSSrm",
1752 "(V?)CMPSDrm",
1753 "(V?)CMPSSrm",
1754 "(V?)MAX(C?)SDrm",
1755 "(V?)MAX(C?)SSrm",
1756 "(V?)MIN(C?)SDrm",
1757 "(V?)MIN(C?)SSrm",
1758 "(V?)MULSDrm",
1759 "(V?)MULSSrm",
1760 "(V?)SUBSDrm",
1761 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001762
Craig Topper58afb4e2018-03-22 21:10:07 +00001763def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001764 let Latency = 9;
1765 let NumMicroOps = 2;
1766 let ResourceCycles = [1,1];
1767}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001768def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001769 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001770 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001771 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001772
Craig Topper58afb4e2018-03-22 21:10:07 +00001773def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001774 let Latency = 9;
1775 let NumMicroOps = 3;
1776 let ResourceCycles = [1,2];
1777}
Craig Topperfc179c62018-03-22 04:23:41 +00001778def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001779
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001780def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1781 let Latency = 9;
1782 let NumMicroOps = 3;
1783 let ResourceCycles = [1,2];
1784}
Craig Topperfc179c62018-03-22 04:23:41 +00001785def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1786 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001787
1788def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1789 let Latency = 9;
1790 let NumMicroOps = 3;
1791 let ResourceCycles = [1,1,1];
1792}
Craig Topperfc179c62018-03-22 04:23:41 +00001793def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001794
1795def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1796 let Latency = 9;
1797 let NumMicroOps = 3;
1798 let ResourceCycles = [1,1,1];
1799}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001800def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001801
1802def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001803 let Latency = 9;
1804 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001805 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001806}
Craig Topperfc179c62018-03-22 04:23:41 +00001807def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1808 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001809
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001810def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1811 let Latency = 9;
1812 let NumMicroOps = 4;
1813 let ResourceCycles = [2,1,1];
1814}
Craig Topperfc179c62018-03-22 04:23:41 +00001815def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1816 "(V?)PHADDWrm",
1817 "(V?)PHSUBDrm",
1818 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001819
1820def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1821 let Latency = 9;
1822 let NumMicroOps = 4;
1823 let ResourceCycles = [1,1,1,1];
1824}
Craig Topperfc179c62018-03-22 04:23:41 +00001825def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1826 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001827
1828def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1829 let Latency = 9;
1830 let NumMicroOps = 5;
1831 let ResourceCycles = [1,2,1,1];
1832}
Craig Topperfc179c62018-03-22 04:23:41 +00001833def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1834 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001835
1836def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1837 let Latency = 10;
1838 let NumMicroOps = 2;
1839 let ResourceCycles = [1,1];
1840}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001841def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001842 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001843
1844def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1845 let Latency = 10;
1846 let NumMicroOps = 2;
1847 let ResourceCycles = [1,1];
1848}
Craig Topperfc179c62018-03-22 04:23:41 +00001849def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1850 "ADD_F64m",
1851 "ILD_F16m",
1852 "ILD_F32m",
1853 "ILD_F64m",
1854 "SUBR_F32m",
1855 "SUBR_F64m",
1856 "SUB_F32m",
1857 "SUB_F64m",
1858 "VPCMPGTQYrm",
1859 "VPERM2F128rm",
1860 "VPERM2I128rm",
1861 "VPERMDYrm",
1862 "VPERMPDYmi",
1863 "VPERMPSYrm",
1864 "VPERMQYmi",
1865 "VPMOVZXBDYrm",
1866 "VPMOVZXBQYrm",
1867 "VPMOVZXBWYrm",
1868 "VPMOVZXDQYrm",
1869 "VPMOVZXWQYrm",
1870 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001871
1872def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1873 let Latency = 10;
1874 let NumMicroOps = 2;
1875 let ResourceCycles = [1,1];
1876}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001877def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1878 "(V?)ADDPSrm",
1879 "(V?)ADDSUBPDrm",
1880 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001881 "(V?)CVTDQ2PSrm",
1882 "(V?)CVTPH2PSYrm",
1883 "(V?)CVTPS2DQrm",
1884 "(V?)CVTSS2SDrm",
1885 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001886 "(V?)MULPDrm",
1887 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001888 "(V?)PMADDUBSWrm",
1889 "(V?)PMADDWDrm",
1890 "(V?)PMULDQrm",
1891 "(V?)PMULHRSWrm",
1892 "(V?)PMULHUWrm",
1893 "(V?)PMULHWrm",
1894 "(V?)PMULLWrm",
1895 "(V?)PMULUDQrm",
1896 "(V?)SUBPDrm",
1897 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001898
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001899def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1900 let Latency = 10;
1901 let NumMicroOps = 3;
1902 let ResourceCycles = [1,1,1];
1903}
Craig Topperfc179c62018-03-22 04:23:41 +00001904def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1905 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001906
Craig Topper58afb4e2018-03-22 21:10:07 +00001907def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001908 let Latency = 10;
1909 let NumMicroOps = 3;
1910 let ResourceCycles = [1,1,1];
1911}
Craig Topperfc179c62018-03-22 04:23:41 +00001912def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001913
1914def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001915 let Latency = 10;
1916 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001917 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001918}
Craig Topperfc179c62018-03-22 04:23:41 +00001919def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1920 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001921
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001922def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1923 let Latency = 10;
1924 let NumMicroOps = 4;
1925 let ResourceCycles = [2,1,1];
1926}
Craig Topperfc179c62018-03-22 04:23:41 +00001927def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1928 "VPHADDWYrm",
1929 "VPHSUBDYrm",
1930 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001931
1932def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001933 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001934 let NumMicroOps = 4;
1935 let ResourceCycles = [1,1,1,1];
1936}
Craig Topperf846e2d2018-04-19 05:34:05 +00001937def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001938
1939def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1940 let Latency = 10;
1941 let NumMicroOps = 8;
1942 let ResourceCycles = [1,1,1,1,1,3];
1943}
Craig Topper13a16502018-03-19 00:56:09 +00001944def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001945
1946def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001947 let Latency = 10;
1948 let NumMicroOps = 10;
1949 let ResourceCycles = [9,1];
1950}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001951def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001952
Craig Topper8104f262018-04-02 05:33:28 +00001953def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001954 let Latency = 11;
1955 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001956 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001957}
Craig Topper8104f262018-04-02 05:33:28 +00001958def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001959 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001960
Craig Topper8104f262018-04-02 05:33:28 +00001961def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1962 let Latency = 11;
1963 let NumMicroOps = 1;
1964 let ResourceCycles = [1,5];
1965}
1966def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1967
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001968def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001969 let Latency = 11;
1970 let NumMicroOps = 2;
1971 let ResourceCycles = [1,1];
1972}
Craig Topperfc179c62018-03-22 04:23:41 +00001973def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
1974 "MUL_F64m",
1975 "VRCPPSYm",
1976 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001977
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001978def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1979 let Latency = 11;
1980 let NumMicroOps = 2;
1981 let ResourceCycles = [1,1];
1982}
Craig Topperfc179c62018-03-22 04:23:41 +00001983def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1984 "VADDPSYrm",
1985 "VADDSUBPDYrm",
1986 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001987 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001988 "VCMPPSYrmi",
1989 "VCVTDQ2PSYrm",
1990 "VCVTPS2DQYrm",
1991 "VCVTPS2PDYrm",
1992 "VCVTTPS2DQYrm",
1993 "VMAX(C?)PDYrm",
1994 "VMAX(C?)PSYrm",
1995 "VMIN(C?)PDYrm",
1996 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001997 "VMULPDYrm",
1998 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001999 "VPMADDUBSWYrm",
2000 "VPMADDWDYrm",
2001 "VPMULDQYrm",
2002 "VPMULHRSWYrm",
2003 "VPMULHUWYrm",
2004 "VPMULHWYrm",
2005 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002006 "VPMULUDQYrm",
2007 "VSUBPDYrm",
2008 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002009
2010def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2011 let Latency = 11;
2012 let NumMicroOps = 3;
2013 let ResourceCycles = [2,1];
2014}
Craig Topperfc179c62018-03-22 04:23:41 +00002015def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2016 "FICOM32m",
2017 "FICOMP16m",
2018 "FICOMP32m",
2019 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002020
2021def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2022 let Latency = 11;
2023 let NumMicroOps = 3;
2024 let ResourceCycles = [1,1,1];
2025}
Craig Topperfc179c62018-03-22 04:23:41 +00002026def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002027
Craig Topper58afb4e2018-03-22 21:10:07 +00002028def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002029 let Latency = 11;
2030 let NumMicroOps = 3;
2031 let ResourceCycles = [1,1,1];
2032}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002033def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2034 "(V?)CVTSD2SIrm",
2035 "(V?)CVTSS2SI64rm",
2036 "(V?)CVTSS2SIrm",
2037 "(V?)CVTTSD2SI64rm",
2038 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002039 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002040 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002041
Craig Topper58afb4e2018-03-22 21:10:07 +00002042def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002043 let Latency = 11;
2044 let NumMicroOps = 3;
2045 let ResourceCycles = [1,1,1];
2046}
Craig Topperfc179c62018-03-22 04:23:41 +00002047def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2048 "CVTPD2PSrm",
2049 "CVTTPD2DQrm",
2050 "MMX_CVTPD2PIirm",
2051 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002052
2053def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2054 let Latency = 11;
2055 let NumMicroOps = 6;
2056 let ResourceCycles = [1,1,1,2,1];
2057}
Craig Topperfc179c62018-03-22 04:23:41 +00002058def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2059 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002060
2061def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002062 let Latency = 11;
2063 let NumMicroOps = 7;
2064 let ResourceCycles = [2,3,2];
2065}
Craig Topperfc179c62018-03-22 04:23:41 +00002066def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2067 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002068
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002069def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002070 let Latency = 11;
2071 let NumMicroOps = 9;
2072 let ResourceCycles = [1,5,1,2];
2073}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002074def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002075
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002076def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002077 let Latency = 11;
2078 let NumMicroOps = 11;
2079 let ResourceCycles = [2,9];
2080}
Craig Topperfc179c62018-03-22 04:23:41 +00002081def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002082
Craig Topper8104f262018-04-02 05:33:28 +00002083def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002084 let Latency = 12;
2085 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002086 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002087}
Craig Topper8104f262018-04-02 05:33:28 +00002088def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002089 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002090
Craig Topper8104f262018-04-02 05:33:28 +00002091def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2092 let Latency = 12;
2093 let NumMicroOps = 1;
2094 let ResourceCycles = [1,6];
2095}
2096def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2097
Craig Topper58afb4e2018-03-22 21:10:07 +00002098def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002099 let Latency = 12;
2100 let NumMicroOps = 4;
2101 let ResourceCycles = [1,1,1,1];
2102}
2103def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2104
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002105def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002106 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002107 let NumMicroOps = 3;
2108 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002109}
Craig Topperfc179c62018-03-22 04:23:41 +00002110def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2111 "ADD_FI32m",
2112 "SUBR_FI16m",
2113 "SUBR_FI32m",
2114 "SUB_FI16m",
2115 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002116
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002117def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2118 let Latency = 13;
2119 let NumMicroOps = 3;
2120 let ResourceCycles = [1,1,1];
2121}
2122def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2123
Craig Topper58afb4e2018-03-22 21:10:07 +00002124def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002125 let Latency = 13;
2126 let NumMicroOps = 4;
2127 let ResourceCycles = [1,3];
2128}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002129def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002130
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002131def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002132 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002133 let NumMicroOps = 4;
2134 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002135}
Craig Topperfc179c62018-03-22 04:23:41 +00002136def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2137 "VHADDPSYrm",
2138 "VHSUBPDYrm",
2139 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002140
Craig Topper8104f262018-04-02 05:33:28 +00002141def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002142 let Latency = 14;
2143 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002144 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002145}
Craig Topper8104f262018-04-02 05:33:28 +00002146def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002147 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002148
Craig Topper8104f262018-04-02 05:33:28 +00002149def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2150 let Latency = 14;
2151 let NumMicroOps = 1;
2152 let ResourceCycles = [1,5];
2153}
2154def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2155
Craig Topper58afb4e2018-03-22 21:10:07 +00002156def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002157 let Latency = 14;
2158 let NumMicroOps = 3;
2159 let ResourceCycles = [1,2];
2160}
Craig Topperfc179c62018-03-22 04:23:41 +00002161def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2162def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2163def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2164def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002165
2166def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2167 let Latency = 14;
2168 let NumMicroOps = 3;
2169 let ResourceCycles = [1,1,1];
2170}
Craig Topperfc179c62018-03-22 04:23:41 +00002171def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2172 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002173
2174def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002175 let Latency = 14;
2176 let NumMicroOps = 10;
2177 let ResourceCycles = [2,4,1,3];
2178}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002179def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002180
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002181def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002182 let Latency = 15;
2183 let NumMicroOps = 1;
2184 let ResourceCycles = [1];
2185}
Craig Topperfc179c62018-03-22 04:23:41 +00002186def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2187 "DIVR_FST0r",
2188 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002189
Craig Topper58afb4e2018-03-22 21:10:07 +00002190def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002191 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002192 let NumMicroOps = 3;
2193 let ResourceCycles = [1,2];
2194}
Craig Topper40d3b322018-03-22 21:55:20 +00002195def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2196 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002197
Craig Topperd25f1ac2018-03-20 23:39:48 +00002198def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2199 let Latency = 17;
2200 let NumMicroOps = 3;
2201 let ResourceCycles = [1,2];
2202}
2203def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2204
Craig Topper58afb4e2018-03-22 21:10:07 +00002205def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002206 let Latency = 15;
2207 let NumMicroOps = 4;
2208 let ResourceCycles = [1,1,2];
2209}
Craig Topperfc179c62018-03-22 04:23:41 +00002210def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002211
2212def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2213 let Latency = 15;
2214 let NumMicroOps = 10;
2215 let ResourceCycles = [1,1,1,5,1,1];
2216}
Craig Topper13a16502018-03-19 00:56:09 +00002217def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002218
Craig Topper8104f262018-04-02 05:33:28 +00002219def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002220 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002221 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002222 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002223}
Craig Topperfc179c62018-03-22 04:23:41 +00002224def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002225
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002226def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2227 let Latency = 16;
2228 let NumMicroOps = 14;
2229 let ResourceCycles = [1,1,1,4,2,5];
2230}
2231def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2232
2233def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002234 let Latency = 16;
2235 let NumMicroOps = 16;
2236 let ResourceCycles = [16];
2237}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002238def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002239
Craig Topper8104f262018-04-02 05:33:28 +00002240def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002241 let Latency = 17;
2242 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002243 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002244}
Craig Topper8104f262018-04-02 05:33:28 +00002245def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2246
2247def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2248 let Latency = 17;
2249 let NumMicroOps = 2;
2250 let ResourceCycles = [1,1,3];
2251}
2252def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002253
2254def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002255 let Latency = 17;
2256 let NumMicroOps = 15;
2257 let ResourceCycles = [2,1,2,4,2,4];
2258}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002259def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002260
Craig Topper8104f262018-04-02 05:33:28 +00002261def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002262 let Latency = 18;
2263 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002264 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002265}
Craig Topper8104f262018-04-02 05:33:28 +00002266def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002267 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002268
Craig Topper8104f262018-04-02 05:33:28 +00002269def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2270 let Latency = 18;
2271 let NumMicroOps = 1;
2272 let ResourceCycles = [1,12];
2273}
2274def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2275
2276def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002277 let Latency = 18;
2278 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002279 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002280}
Craig Topper8104f262018-04-02 05:33:28 +00002281def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2282
2283def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2284 let Latency = 18;
2285 let NumMicroOps = 2;
2286 let ResourceCycles = [1,1,3];
2287}
2288def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002289
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002290def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002291 let Latency = 18;
2292 let NumMicroOps = 8;
2293 let ResourceCycles = [1,1,1,5];
2294}
Craig Topperfc179c62018-03-22 04:23:41 +00002295def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002296
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002297def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002298 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002299 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002300 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002301}
Craig Topper13a16502018-03-19 00:56:09 +00002302def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002303
Craig Topper8104f262018-04-02 05:33:28 +00002304def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002305 let Latency = 19;
2306 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002307 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002308}
Craig Topper8104f262018-04-02 05:33:28 +00002309def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2310
2311def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2312 let Latency = 19;
2313 let NumMicroOps = 2;
2314 let ResourceCycles = [1,1,6];
2315}
2316def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002317
Craig Topper58afb4e2018-03-22 21:10:07 +00002318def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002319 let Latency = 19;
2320 let NumMicroOps = 5;
2321 let ResourceCycles = [1,1,3];
2322}
Craig Topperfc179c62018-03-22 04:23:41 +00002323def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002324
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002325def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002326 let Latency = 20;
2327 let NumMicroOps = 1;
2328 let ResourceCycles = [1];
2329}
Craig Topperfc179c62018-03-22 04:23:41 +00002330def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2331 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002332 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002333
Craig Topper8104f262018-04-02 05:33:28 +00002334def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002335 let Latency = 20;
2336 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002337 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002338}
Craig Topperfc179c62018-03-22 04:23:41 +00002339def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002340
Craig Topper58afb4e2018-03-22 21:10:07 +00002341def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002342 let Latency = 20;
2343 let NumMicroOps = 5;
2344 let ResourceCycles = [1,1,3];
2345}
2346def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2347
2348def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2349 let Latency = 20;
2350 let NumMicroOps = 8;
2351 let ResourceCycles = [1,1,1,1,1,1,2];
2352}
Craig Topperfc179c62018-03-22 04:23:41 +00002353def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2354 "INSL",
2355 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002356
2357def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002358 let Latency = 20;
2359 let NumMicroOps = 10;
2360 let ResourceCycles = [1,2,7];
2361}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002362def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002363
Craig Topper8104f262018-04-02 05:33:28 +00002364def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002365 let Latency = 21;
2366 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002367 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002368}
2369def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2370
2371def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2372 let Latency = 22;
2373 let NumMicroOps = 2;
2374 let ResourceCycles = [1,1];
2375}
Craig Topperfc179c62018-03-22 04:23:41 +00002376def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2377 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002378
2379def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2380 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002381 let NumMicroOps = 5;
2382 let ResourceCycles = [1,2,1,1];
2383}
Craig Topper17a31182017-12-16 18:35:29 +00002384def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2385 VGATHERDPDrm,
2386 VGATHERQPDrm,
2387 VGATHERQPSrm,
2388 VPGATHERDDrm,
2389 VPGATHERDQrm,
2390 VPGATHERQDrm,
2391 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002392
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002393def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2394 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002395 let NumMicroOps = 5;
2396 let ResourceCycles = [1,2,1,1];
2397}
Craig Topper17a31182017-12-16 18:35:29 +00002398def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2399 VGATHERQPDYrm,
2400 VGATHERQPSYrm,
2401 VPGATHERDDYrm,
2402 VPGATHERDQYrm,
2403 VPGATHERQDYrm,
2404 VPGATHERQQYrm,
2405 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002406
Craig Topper8104f262018-04-02 05:33:28 +00002407def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002408 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002409 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002410 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002411}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002412def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002413
2414def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2415 let Latency = 23;
2416 let NumMicroOps = 19;
2417 let ResourceCycles = [2,1,4,1,1,4,6];
2418}
2419def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2420
Craig Topper8104f262018-04-02 05:33:28 +00002421def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002422 let Latency = 24;
2423 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002424 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002425}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002426def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002427
Craig Topper8104f262018-04-02 05:33:28 +00002428def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002429 let Latency = 25;
2430 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002431 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002432}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002433def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002434
2435def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2436 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002437 let NumMicroOps = 3;
2438 let ResourceCycles = [1,1,1];
2439}
Craig Topperfc179c62018-03-22 04:23:41 +00002440def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2441 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002442
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002443def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2444 let Latency = 27;
2445 let NumMicroOps = 2;
2446 let ResourceCycles = [1,1];
2447}
Craig Topperfc179c62018-03-22 04:23:41 +00002448def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2449 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002450
2451def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2452 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002453 let NumMicroOps = 8;
2454 let ResourceCycles = [2,4,1,1];
2455}
Craig Topper13a16502018-03-19 00:56:09 +00002456def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002457
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002458def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002459 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002460 let NumMicroOps = 3;
2461 let ResourceCycles = [1,1,1];
2462}
Craig Topperfc179c62018-03-22 04:23:41 +00002463def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2464 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002465
2466def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2467 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002468 let NumMicroOps = 23;
2469 let ResourceCycles = [1,5,3,4,10];
2470}
Craig Topperfc179c62018-03-22 04:23:41 +00002471def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2472 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002473
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002474def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2475 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476 let NumMicroOps = 23;
2477 let ResourceCycles = [1,5,2,1,4,10];
2478}
Craig Topperfc179c62018-03-22 04:23:41 +00002479def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2480 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002481
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002482def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2483 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002484 let NumMicroOps = 31;
2485 let ResourceCycles = [1,8,1,21];
2486}
Craig Topper391c6f92017-12-10 01:24:08 +00002487def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002488
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002489def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2490 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002491 let NumMicroOps = 18;
2492 let ResourceCycles = [1,1,2,3,1,1,1,8];
2493}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002494def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002495
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002496def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2497 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002498 let NumMicroOps = 39;
2499 let ResourceCycles = [1,10,1,1,26];
2500}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002501def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002502
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002503def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002504 let Latency = 42;
2505 let NumMicroOps = 22;
2506 let ResourceCycles = [2,20];
2507}
Craig Topper2d451e72018-03-18 08:38:06 +00002508def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002509
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002510def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2511 let Latency = 42;
2512 let NumMicroOps = 40;
2513 let ResourceCycles = [1,11,1,1,26];
2514}
Craig Topper391c6f92017-12-10 01:24:08 +00002515def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002516
2517def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2518 let Latency = 46;
2519 let NumMicroOps = 44;
2520 let ResourceCycles = [1,11,1,1,30];
2521}
2522def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2523
2524def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2525 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002526 let NumMicroOps = 64;
2527 let ResourceCycles = [2,8,5,10,39];
2528}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002529def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002530
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002531def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2532 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002533 let NumMicroOps = 88;
2534 let ResourceCycles = [4,4,31,1,2,1,45];
2535}
Craig Topper2d451e72018-03-18 08:38:06 +00002536def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002537
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002538def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2539 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002540 let NumMicroOps = 90;
2541 let ResourceCycles = [4,2,33,1,2,1,47];
2542}
Craig Topper2d451e72018-03-18 08:38:06 +00002543def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002544
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002545def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002546 let Latency = 75;
2547 let NumMicroOps = 15;
2548 let ResourceCycles = [6,3,6];
2549}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002550def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002551
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002552def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002553 let Latency = 76;
2554 let NumMicroOps = 32;
2555 let ResourceCycles = [7,2,8,3,1,11];
2556}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002557def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002558
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002559def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002560 let Latency = 102;
2561 let NumMicroOps = 66;
2562 let ResourceCycles = [4,2,4,8,14,34];
2563}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002564def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002565
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002566def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2567 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002568 let NumMicroOps = 100;
2569 let ResourceCycles = [9,1,11,16,1,11,21,30];
2570}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002571def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002572
2573} // SchedModel