blob: bd7c37da8de6140942a614c165cb59e379438045 [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}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000630def: InstRW<[SKLWriteResGroup17], (instrs 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}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000717def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
718 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000719def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000720 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000721
722def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
723 let Latency = 3;
724 let NumMicroOps = 1;
725 let ResourceCycles = [1];
726}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000727def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000728 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000729 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000730 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000731
Clement Courbet327fac42018-03-07 08:14:02 +0000732def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000733 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000734 let NumMicroOps = 2;
735 let ResourceCycles = [1,1];
736}
Clement Courbet327fac42018-03-07 08:14:02 +0000737def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000738
739def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
740 let Latency = 3;
741 let NumMicroOps = 1;
742 let ResourceCycles = [1];
743}
Craig Topperfc179c62018-03-22 04:23:41 +0000744def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
745 "ADD_FST0r",
746 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000747 "SUBR_FPrST0",
748 "SUBR_FST0r",
749 "SUBR_FrST0",
750 "SUB_FPrST0",
751 "SUB_FST0r",
752 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000753 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000754 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000755 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000756 "VPMOVSXBDYrr",
757 "VPMOVSXBQYrr",
758 "VPMOVSXBWYrr",
759 "VPMOVSXDQYrr",
760 "VPMOVSXWDYrr",
761 "VPMOVSXWQYrr",
762 "VPMOVZXBDYrr",
763 "VPMOVZXBQYrr",
764 "VPMOVZXBWYrr",
765 "VPMOVZXDQYrr",
766 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000767 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000768
769def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
770 let Latency = 3;
771 let NumMicroOps = 2;
772 let ResourceCycles = [1,1];
773}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000774def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000775
776def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
777 let Latency = 3;
778 let NumMicroOps = 2;
779 let ResourceCycles = [1,1];
780}
781def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
782
783def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
784 let Latency = 3;
785 let NumMicroOps = 3;
786 let ResourceCycles = [3];
787}
Craig Topperfc179c62018-03-22 04:23:41 +0000788def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
789 "ROR(8|16|32|64)rCL",
790 "SAR(8|16|32|64)rCL",
791 "SHL(8|16|32|64)rCL",
792 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000793
794def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000795 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000796 let NumMicroOps = 3;
797 let ResourceCycles = [3];
798}
Craig Topperb5f26592018-04-19 18:00:17 +0000799def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
800 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
801 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000802
803def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
804 let Latency = 3;
805 let NumMicroOps = 3;
806 let ResourceCycles = [1,2];
807}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000808def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000809
810def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
811 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000812 let NumMicroOps = 3;
813 let ResourceCycles = [2,1];
814}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000815def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
816 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000817
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000818def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
819 let Latency = 3;
820 let NumMicroOps = 3;
821 let ResourceCycles = [2,1];
822}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000823def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000824
825def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
826 let Latency = 3;
827 let NumMicroOps = 3;
828 let ResourceCycles = [2,1];
829}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000830def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
831 "(V?)PHADDW(Y?)rr",
832 "(V?)PHSUBD(Y?)rr",
833 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000834
835def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
836 let Latency = 3;
837 let NumMicroOps = 3;
838 let ResourceCycles = [2,1];
839}
Craig Topperfc179c62018-03-22 04:23:41 +0000840def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
841 "MMX_PACKSSWBirr",
842 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000843
844def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
845 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000846 let NumMicroOps = 3;
847 let ResourceCycles = [1,2];
848}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000849def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000850
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000851def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
852 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000853 let NumMicroOps = 3;
854 let ResourceCycles = [1,2];
855}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000856def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000857
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000858def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
859 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000860 let NumMicroOps = 3;
861 let ResourceCycles = [1,2];
862}
Craig Topperfc179c62018-03-22 04:23:41 +0000863def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
864 "RCL(8|16|32|64)ri",
865 "RCR(8|16|32|64)r1",
866 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000867
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000868def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
869 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000870 let NumMicroOps = 3;
871 let ResourceCycles = [1,1,1];
872}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000873def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000874
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000875def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
876 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000877 let NumMicroOps = 4;
878 let ResourceCycles = [1,1,2];
879}
Craig Topperf4cd9082018-01-19 05:47:32 +0000880def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000881
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000882def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
883 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000884 let NumMicroOps = 4;
885 let ResourceCycles = [1,1,1,1];
886}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000887def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000888
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000889def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
890 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000891 let NumMicroOps = 4;
892 let ResourceCycles = [1,1,1,1];
893}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000894def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000895
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000896def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000897 let Latency = 4;
898 let NumMicroOps = 1;
899 let ResourceCycles = [1];
900}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000901def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000902 "MMX_PMADDWDirr",
903 "MMX_PMULHRSWrr",
904 "MMX_PMULHUWirr",
905 "MMX_PMULHWirr",
906 "MMX_PMULLWirr",
907 "MMX_PMULUDQirr",
908 "MUL_FPrST0",
909 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000910 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000911
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000912def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000913 let Latency = 4;
914 let NumMicroOps = 1;
915 let ResourceCycles = [1];
916}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000917def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
918 "(V?)ADDPS(Y?)rr",
919 "(V?)ADDSDrr",
920 "(V?)ADDSSrr",
921 "(V?)ADDSUBPD(Y?)rr",
922 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000923 "(V?)CVTDQ2PS(Y?)rr",
924 "(V?)CVTPS2DQ(Y?)rr",
925 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000926 "(V?)MULPD(Y?)rr",
927 "(V?)MULPS(Y?)rr",
928 "(V?)MULSDrr",
929 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000930 "(V?)PMADDUBSW(Y?)rr",
931 "(V?)PMADDWD(Y?)rr",
932 "(V?)PMULDQ(Y?)rr",
933 "(V?)PMULHRSW(Y?)rr",
934 "(V?)PMULHUW(Y?)rr",
935 "(V?)PMULHW(Y?)rr",
936 "(V?)PMULLW(Y?)rr",
937 "(V?)PMULUDQ(Y?)rr",
938 "(V?)SUBPD(Y?)rr",
939 "(V?)SUBPS(Y?)rr",
940 "(V?)SUBSDrr",
941 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000942
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000943def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000944 let Latency = 4;
945 let NumMicroOps = 2;
946 let ResourceCycles = [1,1];
947}
Craig Topperf846e2d2018-04-19 05:34:05 +0000948def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000949
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000950def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
951 let Latency = 4;
952 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000953 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000954}
Craig Topperfc179c62018-03-22 04:23:41 +0000955def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000956
957def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000958 let Latency = 4;
959 let NumMicroOps = 2;
960 let ResourceCycles = [1,1];
961}
Craig Topperfc179c62018-03-22 04:23:41 +0000962def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
963 "VPSLLQYrr",
964 "VPSLLWYrr",
965 "VPSRADYrr",
966 "VPSRAWYrr",
967 "VPSRLDYrr",
968 "VPSRLQYrr",
969 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000970
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000971def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000972 let Latency = 4;
973 let NumMicroOps = 3;
974 let ResourceCycles = [1,1,1];
975}
Craig Topperfc179c62018-03-22 04:23:41 +0000976def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
977 "ISTT_FP32m",
978 "ISTT_FP64m",
979 "IST_F16m",
980 "IST_F32m",
981 "IST_FP16m",
982 "IST_FP32m",
983 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000984
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000985def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000986 let Latency = 4;
987 let NumMicroOps = 4;
988 let ResourceCycles = [4];
989}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000990def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000991
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000992def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000993 let Latency = 4;
994 let NumMicroOps = 4;
995 let ResourceCycles = [1,3];
996}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000997def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000998
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000999def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001000 let Latency = 4;
1001 let NumMicroOps = 4;
1002 let ResourceCycles = [1,3];
1003}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001004def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001005
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001006def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001007 let Latency = 4;
1008 let NumMicroOps = 4;
1009 let ResourceCycles = [1,1,2];
1010}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001011def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001012
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001013def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1014 let Latency = 5;
1015 let NumMicroOps = 1;
1016 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001017}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001018def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001019 "MOVSX(16|32|64)rm32",
1020 "MOVSX(16|32|64)rm8",
1021 "MOVZX(16|32|64)rm16",
1022 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001023 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001024
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001025def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001026 let Latency = 5;
1027 let NumMicroOps = 2;
1028 let ResourceCycles = [1,1];
1029}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001030def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1031 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001032
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001033def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001034 let Latency = 5;
1035 let NumMicroOps = 2;
1036 let ResourceCycles = [1,1];
1037}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001038def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001039 "MMX_CVTPS2PIirr",
1040 "MMX_CVTTPD2PIirr",
1041 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001042 "(V?)CVTPD2DQrr",
1043 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001044 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001045 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001046 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001047 "(V?)CVTSD2SSrr",
1048 "(V?)CVTSI642SDrr",
1049 "(V?)CVTSI2SDrr",
1050 "(V?)CVTSI2SSrr",
1051 "(V?)CVTSS2SDrr",
1052 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001053
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001054def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001055 let Latency = 5;
1056 let NumMicroOps = 3;
1057 let ResourceCycles = [1,1,1];
1058}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001059def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001060
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001061def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001062 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001063 let NumMicroOps = 3;
1064 let ResourceCycles = [1,1,1];
1065}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001066def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001067
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001068def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001069 let Latency = 5;
1070 let NumMicroOps = 5;
1071 let ResourceCycles = [1,4];
1072}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001073def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001074
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001075def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001076 let Latency = 5;
1077 let NumMicroOps = 5;
1078 let ResourceCycles = [2,3];
1079}
Craig Topper13a16502018-03-19 00:56:09 +00001080def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001081
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001082def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001083 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001084 let NumMicroOps = 6;
1085 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001086}
Craig Topperfc179c62018-03-22 04:23:41 +00001087def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1088 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001089
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001090def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1091 let Latency = 6;
1092 let NumMicroOps = 1;
1093 let ResourceCycles = [1];
1094}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001095def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001096 "(V?)MOVSHDUPrm",
1097 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001098 "VPBROADCASTDrm",
1099 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001100
1101def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001102 let Latency = 6;
1103 let NumMicroOps = 2;
1104 let ResourceCycles = [2];
1105}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001106def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001107
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001108def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001109 let Latency = 6;
1110 let NumMicroOps = 2;
1111 let ResourceCycles = [1,1];
1112}
Craig Topperfc179c62018-03-22 04:23:41 +00001113def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1114 "MMX_PADDSWirm",
1115 "MMX_PADDUSBirm",
1116 "MMX_PADDUSWirm",
1117 "MMX_PAVGBirm",
1118 "MMX_PAVGWirm",
1119 "MMX_PCMPEQBirm",
1120 "MMX_PCMPEQDirm",
1121 "MMX_PCMPEQWirm",
1122 "MMX_PCMPGTBirm",
1123 "MMX_PCMPGTDirm",
1124 "MMX_PCMPGTWirm",
1125 "MMX_PMAXSWirm",
1126 "MMX_PMAXUBirm",
1127 "MMX_PMINSWirm",
1128 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001129 "MMX_PSUBSBirm",
1130 "MMX_PSUBSWirm",
1131 "MMX_PSUBUSBirm",
1132 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001133
Craig Topper58afb4e2018-03-22 21:10:07 +00001134def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001135 let Latency = 6;
1136 let NumMicroOps = 2;
1137 let ResourceCycles = [1,1];
1138}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001139def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1140 "(V?)CVTSD2SIrr",
1141 "(V?)CVTSS2SI64rr",
1142 "(V?)CVTSS2SIrr",
1143 "(V?)CVTTSD2SI64rr",
1144 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001145
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001146def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1147 let Latency = 6;
1148 let NumMicroOps = 2;
1149 let ResourceCycles = [1,1];
1150}
Craig Topperfc179c62018-03-22 04:23:41 +00001151def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1152 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001153
1154def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1155 let Latency = 6;
1156 let NumMicroOps = 2;
1157 let ResourceCycles = [1,1];
1158}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001159def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1160 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001161 "MMX_PANDNirm",
1162 "MMX_PANDirm",
1163 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001164 "MMX_PSIGN(B|D|W)rm",
1165 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001166 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001167
1168def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1169 let Latency = 6;
1170 let NumMicroOps = 2;
1171 let ResourceCycles = [1,1];
1172}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001173def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001174def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1175 ADCX32rm, ADCX64rm,
1176 ADOX32rm, ADOX64rm,
1177 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001178
1179def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1180 let Latency = 6;
1181 let NumMicroOps = 2;
1182 let ResourceCycles = [1,1];
1183}
Craig Topperfc179c62018-03-22 04:23:41 +00001184def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1185 "BLSI(32|64)rm",
1186 "BLSMSK(32|64)rm",
1187 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001188 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001189
1190def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1191 let Latency = 6;
1192 let NumMicroOps = 2;
1193 let ResourceCycles = [1,1];
1194}
Craig Topper2d451e72018-03-18 08:38:06 +00001195def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001196def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001197
Craig Topper58afb4e2018-03-22 21:10:07 +00001198def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001199 let Latency = 6;
1200 let NumMicroOps = 3;
1201 let ResourceCycles = [2,1];
1202}
Craig Topperfc179c62018-03-22 04:23:41 +00001203def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001204
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001205def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001206 let Latency = 6;
1207 let NumMicroOps = 4;
1208 let ResourceCycles = [1,2,1];
1209}
Craig Topperfc179c62018-03-22 04:23:41 +00001210def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1211 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001212
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001213def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001214 let Latency = 6;
1215 let NumMicroOps = 4;
1216 let ResourceCycles = [1,1,1,1];
1217}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001218def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001219
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001220def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1221 let Latency = 6;
1222 let NumMicroOps = 4;
1223 let ResourceCycles = [1,1,1,1];
1224}
Craig Topperfc179c62018-03-22 04:23:41 +00001225def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1226 "BTR(16|32|64)mi8",
1227 "BTS(16|32|64)mi8",
1228 "SAR(8|16|32|64)m1",
1229 "SAR(8|16|32|64)mi",
1230 "SHL(8|16|32|64)m1",
1231 "SHL(8|16|32|64)mi",
1232 "SHR(8|16|32|64)m1",
1233 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001234
1235def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1236 let Latency = 6;
1237 let NumMicroOps = 4;
1238 let ResourceCycles = [1,1,1,1];
1239}
Craig Topperf0d04262018-04-06 16:16:48 +00001240def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1241 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001242
1243def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001244 let Latency = 6;
1245 let NumMicroOps = 6;
1246 let ResourceCycles = [1,5];
1247}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001248def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001249
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001250def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1251 let Latency = 7;
1252 let NumMicroOps = 1;
1253 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001254}
Craig Topperfc179c62018-03-22 04:23:41 +00001255def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1256 "LD_F64m",
1257 "LD_F80m",
1258 "VBROADCASTF128",
1259 "VBROADCASTI128",
1260 "VBROADCASTSDYrm",
1261 "VBROADCASTSSYrm",
1262 "VLDDQUYrm",
1263 "VMOVAPDYrm",
1264 "VMOVAPSYrm",
1265 "VMOVDDUPYrm",
1266 "VMOVDQAYrm",
1267 "VMOVDQUYrm",
1268 "VMOVNTDQAYrm",
1269 "VMOVSHDUPYrm",
1270 "VMOVSLDUPYrm",
1271 "VMOVUPDYrm",
1272 "VMOVUPSYrm",
1273 "VPBROADCASTDYrm",
1274 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001275
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001276def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001277 let Latency = 7;
1278 let NumMicroOps = 2;
1279 let ResourceCycles = [1,1];
1280}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001281def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001282
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001283def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1284 let Latency = 7;
1285 let NumMicroOps = 2;
1286 let ResourceCycles = [1,1];
1287}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001288def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1289 "(V?)PACKSSDWrm",
1290 "(V?)PACKSSWBrm",
1291 "(V?)PACKUSDWrm",
1292 "(V?)PACKUSWBrm",
1293 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001294 "VPBROADCASTBrm",
1295 "VPBROADCASTWrm",
1296 "VPERMILPDmi",
1297 "VPERMILPDrm",
1298 "VPERMILPSmi",
1299 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001300 "(V?)PSHUFBrm",
1301 "(V?)PSHUFDmi",
1302 "(V?)PSHUFHWmi",
1303 "(V?)PSHUFLWmi",
1304 "(V?)PUNPCKHBWrm",
1305 "(V?)PUNPCKHDQrm",
1306 "(V?)PUNPCKHQDQrm",
1307 "(V?)PUNPCKHWDrm",
1308 "(V?)PUNPCKLBWrm",
1309 "(V?)PUNPCKLDQrm",
1310 "(V?)PUNPCKLQDQrm",
1311 "(V?)PUNPCKLWDrm",
1312 "(V?)SHUFPDrmi",
1313 "(V?)SHUFPSrmi",
1314 "(V?)UNPCKHPDrm",
1315 "(V?)UNPCKHPSrm",
1316 "(V?)UNPCKLPDrm",
1317 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001318
Craig Topper58afb4e2018-03-22 21:10:07 +00001319def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001320 let Latency = 7;
1321 let NumMicroOps = 2;
1322 let ResourceCycles = [1,1];
1323}
Craig Topperfc179c62018-03-22 04:23:41 +00001324def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1325 "VCVTPD2PSYrr",
1326 "VCVTPH2PSYrr",
1327 "VCVTPS2PDYrr",
1328 "VCVTPS2PHYrr",
1329 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001330
1331def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1332 let Latency = 7;
1333 let NumMicroOps = 2;
1334 let ResourceCycles = [1,1];
1335}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001336def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1337 "(V?)PABSDrm",
1338 "(V?)PABSWrm",
1339 "(V?)PADDSBrm",
1340 "(V?)PADDSWrm",
1341 "(V?)PADDUSBrm",
1342 "(V?)PADDUSWrm",
1343 "(V?)PAVGBrm",
1344 "(V?)PAVGWrm",
1345 "(V?)PCMPEQBrm",
1346 "(V?)PCMPEQDrm",
1347 "(V?)PCMPEQQrm",
1348 "(V?)PCMPEQWrm",
1349 "(V?)PCMPGTBrm",
1350 "(V?)PCMPGTDrm",
1351 "(V?)PCMPGTWrm",
1352 "(V?)PMAXSBrm",
1353 "(V?)PMAXSDrm",
1354 "(V?)PMAXSWrm",
1355 "(V?)PMAXUBrm",
1356 "(V?)PMAXUDrm",
1357 "(V?)PMAXUWrm",
1358 "(V?)PMINSBrm",
1359 "(V?)PMINSDrm",
1360 "(V?)PMINSWrm",
1361 "(V?)PMINUBrm",
1362 "(V?)PMINUDrm",
1363 "(V?)PMINUWrm",
1364 "(V?)PSIGNBrm",
1365 "(V?)PSIGNDrm",
1366 "(V?)PSIGNWrm",
1367 "(V?)PSLLDrm",
1368 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001369 "VPSLLVDrm",
1370 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001371 "(V?)PSLLWrm",
1372 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001373 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001374 "(V?)PSRAWrm",
1375 "(V?)PSRLDrm",
1376 "(V?)PSRLQrm",
1377 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001378 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001379 "(V?)PSRLWrm",
1380 "(V?)PSUBSBrm",
1381 "(V?)PSUBSWrm",
1382 "(V?)PSUBUSBrm",
1383 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001384
1385def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1386 let Latency = 7;
1387 let NumMicroOps = 2;
1388 let ResourceCycles = [1,1];
1389}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001390def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001391 "(V?)INSERTI128rm",
1392 "(V?)MASKMOVPDrm",
1393 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001394 "(V?)PADDBrm",
1395 "(V?)PADDDrm",
1396 "(V?)PADDQrm",
1397 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001398 "(V?)PBLENDDrmi",
1399 "(V?)PMASKMOVDrm",
1400 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001401 "(V?)PSUBBrm",
1402 "(V?)PSUBDrm",
1403 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001404 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001405
1406def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1407 let Latency = 7;
1408 let NumMicroOps = 3;
1409 let ResourceCycles = [2,1];
1410}
Craig Topperfc179c62018-03-22 04:23:41 +00001411def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1412 "MMX_PACKSSWBirm",
1413 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001414
1415def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1416 let Latency = 7;
1417 let NumMicroOps = 3;
1418 let ResourceCycles = [1,2];
1419}
Craig Topperf4cd9082018-01-19 05:47:32 +00001420def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001421
1422def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1423 let Latency = 7;
1424 let NumMicroOps = 3;
1425 let ResourceCycles = [1,2];
1426}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001427def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1428 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001429
Craig Topper58afb4e2018-03-22 21:10:07 +00001430def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001431 let Latency = 7;
1432 let NumMicroOps = 3;
1433 let ResourceCycles = [1,1,1];
1434}
Craig Topperfc179c62018-03-22 04:23:41 +00001435def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1436 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001437
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001438def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001439 let Latency = 7;
1440 let NumMicroOps = 3;
1441 let ResourceCycles = [1,1,1];
1442}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001443def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001444
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001445def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001446 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001447 let NumMicroOps = 3;
1448 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001449}
Craig Topperfc179c62018-03-22 04:23:41 +00001450def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1451 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001452
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001453def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1454 let Latency = 7;
1455 let NumMicroOps = 5;
1456 let ResourceCycles = [1,1,1,2];
1457}
Craig Topperfc179c62018-03-22 04:23:41 +00001458def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1459 "ROL(8|16|32|64)mi",
1460 "ROR(8|16|32|64)m1",
1461 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001462
1463def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1464 let Latency = 7;
1465 let NumMicroOps = 5;
1466 let ResourceCycles = [1,1,1,2];
1467}
Craig Topper13a16502018-03-19 00:56:09 +00001468def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001469
1470def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1471 let Latency = 7;
1472 let NumMicroOps = 5;
1473 let ResourceCycles = [1,1,1,1,1];
1474}
Craig Topperfc179c62018-03-22 04:23:41 +00001475def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1476 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001477
1478def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001479 let Latency = 7;
1480 let NumMicroOps = 7;
1481 let ResourceCycles = [1,3,1,2];
1482}
Craig Topper2d451e72018-03-18 08:38:06 +00001483def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001484
Craig Topper58afb4e2018-03-22 21:10:07 +00001485def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001486 let Latency = 8;
1487 let NumMicroOps = 2;
1488 let ResourceCycles = [2];
1489}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001490def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1491 "(V?)ROUNDPS(Y?)r",
1492 "(V?)ROUNDSDr",
1493 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001494
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001495def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001496 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001497 let NumMicroOps = 2;
1498 let ResourceCycles = [1,1];
1499}
Craig Topperfc179c62018-03-22 04:23:41 +00001500def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1501 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001502
1503def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1504 let Latency = 8;
1505 let NumMicroOps = 2;
1506 let ResourceCycles = [1,1];
1507}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001508def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1509 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001510
1511def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001512 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001513 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001514 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001515}
Craig Topperf846e2d2018-04-19 05:34:05 +00001516def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001517
Craig Topperf846e2d2018-04-19 05:34:05 +00001518def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1519 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001520 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001521 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001522}
Craig Topperfc179c62018-03-22 04:23:41 +00001523def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001524
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001525def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1526 let Latency = 8;
1527 let NumMicroOps = 2;
1528 let ResourceCycles = [1,1];
1529}
Craig Topperfc179c62018-03-22 04:23:41 +00001530def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1531 "FCOM64m",
1532 "FCOMP32m",
1533 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001534 "VPACKSSDWYrm",
1535 "VPACKSSWBYrm",
1536 "VPACKUSDWYrm",
1537 "VPACKUSWBYrm",
1538 "VPALIGNRYrmi",
1539 "VPBLENDWYrmi",
1540 "VPBROADCASTBYrm",
1541 "VPBROADCASTWYrm",
1542 "VPERMILPDYmi",
1543 "VPERMILPDYrm",
1544 "VPERMILPSYmi",
1545 "VPERMILPSYrm",
1546 "VPMOVSXBDYrm",
1547 "VPMOVSXBQYrm",
1548 "VPMOVSXWQYrm",
1549 "VPSHUFBYrm",
1550 "VPSHUFDYmi",
1551 "VPSHUFHWYmi",
1552 "VPSHUFLWYmi",
1553 "VPUNPCKHBWYrm",
1554 "VPUNPCKHDQYrm",
1555 "VPUNPCKHQDQYrm",
1556 "VPUNPCKHWDYrm",
1557 "VPUNPCKLBWYrm",
1558 "VPUNPCKLDQYrm",
1559 "VPUNPCKLQDQYrm",
1560 "VPUNPCKLWDYrm",
1561 "VSHUFPDYrmi",
1562 "VSHUFPSYrmi",
1563 "VUNPCKHPDYrm",
1564 "VUNPCKHPSYrm",
1565 "VUNPCKLPDYrm",
1566 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001567
1568def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1569 let Latency = 8;
1570 let NumMicroOps = 2;
1571 let ResourceCycles = [1,1];
1572}
Craig Topperfc179c62018-03-22 04:23:41 +00001573def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1574 "VPABSDYrm",
1575 "VPABSWYrm",
1576 "VPADDSBYrm",
1577 "VPADDSWYrm",
1578 "VPADDUSBYrm",
1579 "VPADDUSWYrm",
1580 "VPAVGBYrm",
1581 "VPAVGWYrm",
1582 "VPCMPEQBYrm",
1583 "VPCMPEQDYrm",
1584 "VPCMPEQQYrm",
1585 "VPCMPEQWYrm",
1586 "VPCMPGTBYrm",
1587 "VPCMPGTDYrm",
1588 "VPCMPGTWYrm",
1589 "VPMAXSBYrm",
1590 "VPMAXSDYrm",
1591 "VPMAXSWYrm",
1592 "VPMAXUBYrm",
1593 "VPMAXUDYrm",
1594 "VPMAXUWYrm",
1595 "VPMINSBYrm",
1596 "VPMINSDYrm",
1597 "VPMINSWYrm",
1598 "VPMINUBYrm",
1599 "VPMINUDYrm",
1600 "VPMINUWYrm",
1601 "VPSIGNBYrm",
1602 "VPSIGNDYrm",
1603 "VPSIGNWYrm",
1604 "VPSLLDYrm",
1605 "VPSLLQYrm",
1606 "VPSLLVDYrm",
1607 "VPSLLVQYrm",
1608 "VPSLLWYrm",
1609 "VPSRADYrm",
1610 "VPSRAVDYrm",
1611 "VPSRAWYrm",
1612 "VPSRLDYrm",
1613 "VPSRLQYrm",
1614 "VPSRLVDYrm",
1615 "VPSRLVQYrm",
1616 "VPSRLWYrm",
1617 "VPSUBSBYrm",
1618 "VPSUBSWYrm",
1619 "VPSUBUSBYrm",
1620 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001621
1622def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1623 let Latency = 8;
1624 let NumMicroOps = 2;
1625 let ResourceCycles = [1,1];
1626}
Craig Topperfc179c62018-03-22 04:23:41 +00001627def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1628 "VANDNPSYrm",
1629 "VANDPDYrm",
1630 "VANDPSYrm",
1631 "VBLENDPDYrmi",
1632 "VBLENDPSYrmi",
1633 "VMASKMOVPDYrm",
1634 "VMASKMOVPSYrm",
1635 "VORPDYrm",
1636 "VORPSYrm",
1637 "VPADDBYrm",
1638 "VPADDDYrm",
1639 "VPADDQYrm",
1640 "VPADDWYrm",
1641 "VPANDNYrm",
1642 "VPANDYrm",
1643 "VPBLENDDYrmi",
1644 "VPMASKMOVDYrm",
1645 "VPMASKMOVQYrm",
1646 "VPORYrm",
1647 "VPSUBBYrm",
1648 "VPSUBDYrm",
1649 "VPSUBQYrm",
1650 "VPSUBWYrm",
1651 "VPXORYrm",
1652 "VXORPDYrm",
1653 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001654
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001655def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1656 let Latency = 8;
1657 let NumMicroOps = 4;
1658 let ResourceCycles = [1,2,1];
1659}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001660def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001661
1662def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1663 let Latency = 8;
1664 let NumMicroOps = 4;
1665 let ResourceCycles = [2,1,1];
1666}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001667def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001668
Craig Topper58afb4e2018-03-22 21:10:07 +00001669def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001670 let Latency = 8;
1671 let NumMicroOps = 4;
1672 let ResourceCycles = [1,1,1,1];
1673}
1674def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1675
1676def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1677 let Latency = 8;
1678 let NumMicroOps = 5;
1679 let ResourceCycles = [1,1,3];
1680}
Craig Topper13a16502018-03-19 00:56:09 +00001681def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001682
1683def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1684 let Latency = 8;
1685 let NumMicroOps = 5;
1686 let ResourceCycles = [1,1,1,2];
1687}
Craig Topperfc179c62018-03-22 04:23:41 +00001688def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1689 "RCL(8|16|32|64)mi",
1690 "RCR(8|16|32|64)m1",
1691 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001692
1693def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1694 let Latency = 8;
1695 let NumMicroOps = 6;
1696 let ResourceCycles = [1,1,1,3];
1697}
Craig Topperfc179c62018-03-22 04:23:41 +00001698def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1699 "SAR(8|16|32|64)mCL",
1700 "SHL(8|16|32|64)mCL",
1701 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001702
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001703def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1704 let Latency = 8;
1705 let NumMicroOps = 6;
1706 let ResourceCycles = [1,1,1,2,1];
1707}
Craig Topper9f834812018-04-01 21:54:24 +00001708def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001709 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001710 "SBB(8|16|32|64)mi")>;
1711def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1712 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001713
1714def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1715 let Latency = 9;
1716 let NumMicroOps = 2;
1717 let ResourceCycles = [1,1];
1718}
Craig Topperfc179c62018-03-22 04:23:41 +00001719def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1720 "MMX_PMADDUBSWrm",
1721 "MMX_PMADDWDirm",
1722 "MMX_PMULHRSWrm",
1723 "MMX_PMULHUWirm",
1724 "MMX_PMULHWirm",
1725 "MMX_PMULLWirm",
1726 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001727 "VTESTPDYrm",
1728 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001729
1730def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1731 let Latency = 9;
1732 let NumMicroOps = 2;
1733 let ResourceCycles = [1,1];
1734}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001735def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001736 "VPMOVSXBWYrm",
1737 "VPMOVSXDQYrm",
1738 "VPMOVSXWDYrm",
1739 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001740 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001741
1742def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1743 let Latency = 9;
1744 let NumMicroOps = 2;
1745 let ResourceCycles = [1,1];
1746}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001747def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1748 "(V?)ADDSSrm",
1749 "(V?)CMPSDrm",
1750 "(V?)CMPSSrm",
1751 "(V?)MAX(C?)SDrm",
1752 "(V?)MAX(C?)SSrm",
1753 "(V?)MIN(C?)SDrm",
1754 "(V?)MIN(C?)SSrm",
1755 "(V?)MULSDrm",
1756 "(V?)MULSSrm",
1757 "(V?)SUBSDrm",
1758 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001759
Craig Topper58afb4e2018-03-22 21:10:07 +00001760def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001761 let Latency = 9;
1762 let NumMicroOps = 2;
1763 let ResourceCycles = [1,1];
1764}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001765def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001766 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001767 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001768 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001769
Craig Topper58afb4e2018-03-22 21:10:07 +00001770def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001771 let Latency = 9;
1772 let NumMicroOps = 3;
1773 let ResourceCycles = [1,2];
1774}
Craig Topperfc179c62018-03-22 04:23:41 +00001775def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001776
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001777def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1778 let Latency = 9;
1779 let NumMicroOps = 3;
1780 let ResourceCycles = [1,2];
1781}
Craig Topperfc179c62018-03-22 04:23:41 +00001782def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1783 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001784
1785def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1786 let Latency = 9;
1787 let NumMicroOps = 3;
1788 let ResourceCycles = [1,1,1];
1789}
Craig Topperfc179c62018-03-22 04:23:41 +00001790def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001791
1792def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1793 let Latency = 9;
1794 let NumMicroOps = 3;
1795 let ResourceCycles = [1,1,1];
1796}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001797def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001798
1799def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001800 let Latency = 9;
1801 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001802 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001803}
Craig Topperfc179c62018-03-22 04:23:41 +00001804def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1805 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001806
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001807def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1808 let Latency = 9;
1809 let NumMicroOps = 4;
1810 let ResourceCycles = [2,1,1];
1811}
Craig Topperfc179c62018-03-22 04:23:41 +00001812def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1813 "(V?)PHADDWrm",
1814 "(V?)PHSUBDrm",
1815 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001816
1817def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1818 let Latency = 9;
1819 let NumMicroOps = 4;
1820 let ResourceCycles = [1,1,1,1];
1821}
Craig Topperfc179c62018-03-22 04:23:41 +00001822def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1823 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001824
1825def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1826 let Latency = 9;
1827 let NumMicroOps = 5;
1828 let ResourceCycles = [1,2,1,1];
1829}
Craig Topperfc179c62018-03-22 04:23:41 +00001830def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1831 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001832
1833def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1834 let Latency = 10;
1835 let NumMicroOps = 2;
1836 let ResourceCycles = [1,1];
1837}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001838def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001839 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001840
1841def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1842 let Latency = 10;
1843 let NumMicroOps = 2;
1844 let ResourceCycles = [1,1];
1845}
Craig Topperfc179c62018-03-22 04:23:41 +00001846def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1847 "ADD_F64m",
1848 "ILD_F16m",
1849 "ILD_F32m",
1850 "ILD_F64m",
1851 "SUBR_F32m",
1852 "SUBR_F64m",
1853 "SUB_F32m",
1854 "SUB_F64m",
1855 "VPCMPGTQYrm",
1856 "VPERM2F128rm",
1857 "VPERM2I128rm",
1858 "VPERMDYrm",
1859 "VPERMPDYmi",
1860 "VPERMPSYrm",
1861 "VPERMQYmi",
1862 "VPMOVZXBDYrm",
1863 "VPMOVZXBQYrm",
1864 "VPMOVZXBWYrm",
1865 "VPMOVZXDQYrm",
1866 "VPMOVZXWQYrm",
1867 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001868
1869def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1870 let Latency = 10;
1871 let NumMicroOps = 2;
1872 let ResourceCycles = [1,1];
1873}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001874def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1875 "(V?)ADDPSrm",
1876 "(V?)ADDSUBPDrm",
1877 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001878 "(V?)CVTDQ2PSrm",
1879 "(V?)CVTPH2PSYrm",
1880 "(V?)CVTPS2DQrm",
1881 "(V?)CVTSS2SDrm",
1882 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001883 "(V?)MULPDrm",
1884 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001885 "(V?)PMADDUBSWrm",
1886 "(V?)PMADDWDrm",
1887 "(V?)PMULDQrm",
1888 "(V?)PMULHRSWrm",
1889 "(V?)PMULHUWrm",
1890 "(V?)PMULHWrm",
1891 "(V?)PMULLWrm",
1892 "(V?)PMULUDQrm",
1893 "(V?)SUBPDrm",
1894 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001895
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001896def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1897 let Latency = 10;
1898 let NumMicroOps = 3;
1899 let ResourceCycles = [1,1,1];
1900}
Craig Topperfc179c62018-03-22 04:23:41 +00001901def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1902 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001903
Craig Topper58afb4e2018-03-22 21:10:07 +00001904def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001905 let Latency = 10;
1906 let NumMicroOps = 3;
1907 let ResourceCycles = [1,1,1];
1908}
Craig Topperfc179c62018-03-22 04:23:41 +00001909def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001910
1911def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001912 let Latency = 10;
1913 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001914 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001915}
Craig Topperfc179c62018-03-22 04:23:41 +00001916def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1917 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001918
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001919def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1920 let Latency = 10;
1921 let NumMicroOps = 4;
1922 let ResourceCycles = [2,1,1];
1923}
Craig Topperfc179c62018-03-22 04:23:41 +00001924def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1925 "VPHADDWYrm",
1926 "VPHSUBDYrm",
1927 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001928
1929def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001930 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001931 let NumMicroOps = 4;
1932 let ResourceCycles = [1,1,1,1];
1933}
Craig Topperf846e2d2018-04-19 05:34:05 +00001934def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001935
1936def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1937 let Latency = 10;
1938 let NumMicroOps = 8;
1939 let ResourceCycles = [1,1,1,1,1,3];
1940}
Craig Topper13a16502018-03-19 00:56:09 +00001941def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001942
1943def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001944 let Latency = 10;
1945 let NumMicroOps = 10;
1946 let ResourceCycles = [9,1];
1947}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001948def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001949
Craig Topper8104f262018-04-02 05:33:28 +00001950def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001951 let Latency = 11;
1952 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001953 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001954}
Craig Topper8104f262018-04-02 05:33:28 +00001955def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001956 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001957
Craig Topper8104f262018-04-02 05:33:28 +00001958def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1959 let Latency = 11;
1960 let NumMicroOps = 1;
1961 let ResourceCycles = [1,5];
1962}
1963def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1964
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001965def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001966 let Latency = 11;
1967 let NumMicroOps = 2;
1968 let ResourceCycles = [1,1];
1969}
Craig Topperfc179c62018-03-22 04:23:41 +00001970def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
1971 "MUL_F64m",
1972 "VRCPPSYm",
1973 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001974
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001975def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1976 let Latency = 11;
1977 let NumMicroOps = 2;
1978 let ResourceCycles = [1,1];
1979}
Craig Topperfc179c62018-03-22 04:23:41 +00001980def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1981 "VADDPSYrm",
1982 "VADDSUBPDYrm",
1983 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001984 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001985 "VCMPPSYrmi",
1986 "VCVTDQ2PSYrm",
1987 "VCVTPS2DQYrm",
1988 "VCVTPS2PDYrm",
1989 "VCVTTPS2DQYrm",
1990 "VMAX(C?)PDYrm",
1991 "VMAX(C?)PSYrm",
1992 "VMIN(C?)PDYrm",
1993 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001994 "VMULPDYrm",
1995 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001996 "VPMADDUBSWYrm",
1997 "VPMADDWDYrm",
1998 "VPMULDQYrm",
1999 "VPMULHRSWYrm",
2000 "VPMULHUWYrm",
2001 "VPMULHWYrm",
2002 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002003 "VPMULUDQYrm",
2004 "VSUBPDYrm",
2005 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002006
2007def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2008 let Latency = 11;
2009 let NumMicroOps = 3;
2010 let ResourceCycles = [2,1];
2011}
Craig Topperfc179c62018-03-22 04:23:41 +00002012def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2013 "FICOM32m",
2014 "FICOMP16m",
2015 "FICOMP32m",
2016 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002017
2018def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2019 let Latency = 11;
2020 let NumMicroOps = 3;
2021 let ResourceCycles = [1,1,1];
2022}
Craig Topperfc179c62018-03-22 04:23:41 +00002023def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002024
Craig Topper58afb4e2018-03-22 21:10:07 +00002025def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002026 let Latency = 11;
2027 let NumMicroOps = 3;
2028 let ResourceCycles = [1,1,1];
2029}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002030def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2031 "(V?)CVTSD2SIrm",
2032 "(V?)CVTSS2SI64rm",
2033 "(V?)CVTSS2SIrm",
2034 "(V?)CVTTSD2SI64rm",
2035 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002036 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002037 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002038
Craig Topper58afb4e2018-03-22 21:10:07 +00002039def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002040 let Latency = 11;
2041 let NumMicroOps = 3;
2042 let ResourceCycles = [1,1,1];
2043}
Craig Topperfc179c62018-03-22 04:23:41 +00002044def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2045 "CVTPD2PSrm",
2046 "CVTTPD2DQrm",
2047 "MMX_CVTPD2PIirm",
2048 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002049
2050def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2051 let Latency = 11;
2052 let NumMicroOps = 6;
2053 let ResourceCycles = [1,1,1,2,1];
2054}
Craig Topperfc179c62018-03-22 04:23:41 +00002055def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2056 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002057
2058def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002059 let Latency = 11;
2060 let NumMicroOps = 7;
2061 let ResourceCycles = [2,3,2];
2062}
Craig Topperfc179c62018-03-22 04:23:41 +00002063def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2064 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002065
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002066def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002067 let Latency = 11;
2068 let NumMicroOps = 9;
2069 let ResourceCycles = [1,5,1,2];
2070}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002071def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002072
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002073def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002074 let Latency = 11;
2075 let NumMicroOps = 11;
2076 let ResourceCycles = [2,9];
2077}
Craig Topperfc179c62018-03-22 04:23:41 +00002078def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002079
Craig Topper8104f262018-04-02 05:33:28 +00002080def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002081 let Latency = 12;
2082 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002083 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002084}
Craig Topper8104f262018-04-02 05:33:28 +00002085def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002086 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002087
Craig Topper8104f262018-04-02 05:33:28 +00002088def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2089 let Latency = 12;
2090 let NumMicroOps = 1;
2091 let ResourceCycles = [1,6];
2092}
2093def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2094
Craig Topper58afb4e2018-03-22 21:10:07 +00002095def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002096 let Latency = 12;
2097 let NumMicroOps = 4;
2098 let ResourceCycles = [1,1,1,1];
2099}
2100def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2101
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002102def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002103 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002104 let NumMicroOps = 3;
2105 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002106}
Craig Topperfc179c62018-03-22 04:23:41 +00002107def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2108 "ADD_FI32m",
2109 "SUBR_FI16m",
2110 "SUBR_FI32m",
2111 "SUB_FI16m",
2112 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002113
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002114def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2115 let Latency = 13;
2116 let NumMicroOps = 3;
2117 let ResourceCycles = [1,1,1];
2118}
2119def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2120
Craig Topper58afb4e2018-03-22 21:10:07 +00002121def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002122 let Latency = 13;
2123 let NumMicroOps = 4;
2124 let ResourceCycles = [1,3];
2125}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002126def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002127
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002128def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002129 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002130 let NumMicroOps = 4;
2131 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002132}
Craig Topperfc179c62018-03-22 04:23:41 +00002133def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2134 "VHADDPSYrm",
2135 "VHSUBPDYrm",
2136 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002137
Craig Topper8104f262018-04-02 05:33:28 +00002138def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002139 let Latency = 14;
2140 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002141 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002142}
Craig Topper8104f262018-04-02 05:33:28 +00002143def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002144 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002145
Craig Topper8104f262018-04-02 05:33:28 +00002146def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2147 let Latency = 14;
2148 let NumMicroOps = 1;
2149 let ResourceCycles = [1,5];
2150}
2151def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2152
Craig Topper58afb4e2018-03-22 21:10:07 +00002153def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002154 let Latency = 14;
2155 let NumMicroOps = 3;
2156 let ResourceCycles = [1,2];
2157}
Craig Topperfc179c62018-03-22 04:23:41 +00002158def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2159def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2160def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2161def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002162
2163def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2164 let Latency = 14;
2165 let NumMicroOps = 3;
2166 let ResourceCycles = [1,1,1];
2167}
Craig Topperfc179c62018-03-22 04:23:41 +00002168def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2169 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002170
2171def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002172 let Latency = 14;
2173 let NumMicroOps = 10;
2174 let ResourceCycles = [2,4,1,3];
2175}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002176def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002177
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002178def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002179 let Latency = 15;
2180 let NumMicroOps = 1;
2181 let ResourceCycles = [1];
2182}
Craig Topperfc179c62018-03-22 04:23:41 +00002183def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2184 "DIVR_FST0r",
2185 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002186
Craig Topper58afb4e2018-03-22 21:10:07 +00002187def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002188 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002189 let NumMicroOps = 3;
2190 let ResourceCycles = [1,2];
2191}
Craig Topper40d3b322018-03-22 21:55:20 +00002192def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2193 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002194
Craig Topperd25f1ac2018-03-20 23:39:48 +00002195def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2196 let Latency = 17;
2197 let NumMicroOps = 3;
2198 let ResourceCycles = [1,2];
2199}
2200def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2201
Craig Topper58afb4e2018-03-22 21:10:07 +00002202def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002203 let Latency = 15;
2204 let NumMicroOps = 4;
2205 let ResourceCycles = [1,1,2];
2206}
Craig Topperfc179c62018-03-22 04:23:41 +00002207def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002208
2209def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2210 let Latency = 15;
2211 let NumMicroOps = 10;
2212 let ResourceCycles = [1,1,1,5,1,1];
2213}
Craig Topper13a16502018-03-19 00:56:09 +00002214def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002215
Craig Topper8104f262018-04-02 05:33:28 +00002216def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002217 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002218 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002219 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002220}
Craig Topperfc179c62018-03-22 04:23:41 +00002221def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002222
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002223def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2224 let Latency = 16;
2225 let NumMicroOps = 14;
2226 let ResourceCycles = [1,1,1,4,2,5];
2227}
2228def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2229
2230def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002231 let Latency = 16;
2232 let NumMicroOps = 16;
2233 let ResourceCycles = [16];
2234}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002235def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002236
Craig Topper8104f262018-04-02 05:33:28 +00002237def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002238 let Latency = 17;
2239 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002240 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002241}
Craig Topper8104f262018-04-02 05:33:28 +00002242def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2243
2244def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2245 let Latency = 17;
2246 let NumMicroOps = 2;
2247 let ResourceCycles = [1,1,3];
2248}
2249def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002250
2251def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002252 let Latency = 17;
2253 let NumMicroOps = 15;
2254 let ResourceCycles = [2,1,2,4,2,4];
2255}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002256def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002257
Craig Topper8104f262018-04-02 05:33:28 +00002258def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002259 let Latency = 18;
2260 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002261 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002262}
Craig Topper8104f262018-04-02 05:33:28 +00002263def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002264 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002265
Craig Topper8104f262018-04-02 05:33:28 +00002266def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2267 let Latency = 18;
2268 let NumMicroOps = 1;
2269 let ResourceCycles = [1,12];
2270}
2271def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2272
2273def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002274 let Latency = 18;
2275 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002276 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002277}
Craig Topper8104f262018-04-02 05:33:28 +00002278def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2279
2280def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2281 let Latency = 18;
2282 let NumMicroOps = 2;
2283 let ResourceCycles = [1,1,3];
2284}
2285def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002286
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002287def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002288 let Latency = 18;
2289 let NumMicroOps = 8;
2290 let ResourceCycles = [1,1,1,5];
2291}
Craig Topperfc179c62018-03-22 04:23:41 +00002292def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002293
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002294def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002295 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002296 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002297 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002298}
Craig Topper13a16502018-03-19 00:56:09 +00002299def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002300
Craig Topper8104f262018-04-02 05:33:28 +00002301def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002302 let Latency = 19;
2303 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002304 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002305}
Craig Topper8104f262018-04-02 05:33:28 +00002306def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2307
2308def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2309 let Latency = 19;
2310 let NumMicroOps = 2;
2311 let ResourceCycles = [1,1,6];
2312}
2313def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002314
Craig Topper58afb4e2018-03-22 21:10:07 +00002315def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002316 let Latency = 19;
2317 let NumMicroOps = 5;
2318 let ResourceCycles = [1,1,3];
2319}
Craig Topperfc179c62018-03-22 04:23:41 +00002320def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002321
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002322def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002323 let Latency = 20;
2324 let NumMicroOps = 1;
2325 let ResourceCycles = [1];
2326}
Craig Topperfc179c62018-03-22 04:23:41 +00002327def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2328 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002329 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002330
Craig Topper8104f262018-04-02 05:33:28 +00002331def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002332 let Latency = 20;
2333 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002334 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002335}
Craig Topperfc179c62018-03-22 04:23:41 +00002336def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002337
Craig Topper58afb4e2018-03-22 21:10:07 +00002338def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002339 let Latency = 20;
2340 let NumMicroOps = 5;
2341 let ResourceCycles = [1,1,3];
2342}
2343def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2344
2345def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2346 let Latency = 20;
2347 let NumMicroOps = 8;
2348 let ResourceCycles = [1,1,1,1,1,1,2];
2349}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002350def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002351
2352def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002353 let Latency = 20;
2354 let NumMicroOps = 10;
2355 let ResourceCycles = [1,2,7];
2356}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002357def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002358
Craig Topper8104f262018-04-02 05:33:28 +00002359def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002360 let Latency = 21;
2361 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002362 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002363}
2364def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2365
2366def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2367 let Latency = 22;
2368 let NumMicroOps = 2;
2369 let ResourceCycles = [1,1];
2370}
Craig Topperfc179c62018-03-22 04:23:41 +00002371def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2372 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002373
2374def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2375 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002376 let NumMicroOps = 5;
2377 let ResourceCycles = [1,2,1,1];
2378}
Craig Topper17a31182017-12-16 18:35:29 +00002379def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2380 VGATHERDPDrm,
2381 VGATHERQPDrm,
2382 VGATHERQPSrm,
2383 VPGATHERDDrm,
2384 VPGATHERDQrm,
2385 VPGATHERQDrm,
2386 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002387
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002388def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2389 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002390 let NumMicroOps = 5;
2391 let ResourceCycles = [1,2,1,1];
2392}
Craig Topper17a31182017-12-16 18:35:29 +00002393def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2394 VGATHERQPDYrm,
2395 VGATHERQPSYrm,
2396 VPGATHERDDYrm,
2397 VPGATHERDQYrm,
2398 VPGATHERQDYrm,
2399 VPGATHERQQYrm,
2400 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002401
Craig Topper8104f262018-04-02 05:33:28 +00002402def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002403 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002404 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002405 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002406}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002407def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002408
2409def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2410 let Latency = 23;
2411 let NumMicroOps = 19;
2412 let ResourceCycles = [2,1,4,1,1,4,6];
2413}
2414def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2415
Craig Topper8104f262018-04-02 05:33:28 +00002416def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002417 let Latency = 24;
2418 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002419 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002420}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002421def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002422
Craig Topper8104f262018-04-02 05:33:28 +00002423def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002424 let Latency = 25;
2425 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002426 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002427}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002428def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002429
2430def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2431 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002432 let NumMicroOps = 3;
2433 let ResourceCycles = [1,1,1];
2434}
Craig Topperfc179c62018-03-22 04:23:41 +00002435def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2436 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002437
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002438def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2439 let Latency = 27;
2440 let NumMicroOps = 2;
2441 let ResourceCycles = [1,1];
2442}
Craig Topperfc179c62018-03-22 04:23:41 +00002443def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2444 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002445
2446def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2447 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002448 let NumMicroOps = 8;
2449 let ResourceCycles = [2,4,1,1];
2450}
Craig Topper13a16502018-03-19 00:56:09 +00002451def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002452
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002453def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002454 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002455 let NumMicroOps = 3;
2456 let ResourceCycles = [1,1,1];
2457}
Craig Topperfc179c62018-03-22 04:23:41 +00002458def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2459 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002460
2461def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2462 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002463 let NumMicroOps = 23;
2464 let ResourceCycles = [1,5,3,4,10];
2465}
Craig Topperfc179c62018-03-22 04:23:41 +00002466def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2467 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002468
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002469def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2470 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002471 let NumMicroOps = 23;
2472 let ResourceCycles = [1,5,2,1,4,10];
2473}
Craig Topperfc179c62018-03-22 04:23:41 +00002474def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2475 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002477def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2478 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002479 let NumMicroOps = 31;
2480 let ResourceCycles = [1,8,1,21];
2481}
Craig Topper391c6f92017-12-10 01:24:08 +00002482def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002483
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002484def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2485 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002486 let NumMicroOps = 18;
2487 let ResourceCycles = [1,1,2,3,1,1,1,8];
2488}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002489def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002490
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002491def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2492 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002493 let NumMicroOps = 39;
2494 let ResourceCycles = [1,10,1,1,26];
2495}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002496def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002497
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002498def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002499 let Latency = 42;
2500 let NumMicroOps = 22;
2501 let ResourceCycles = [2,20];
2502}
Craig Topper2d451e72018-03-18 08:38:06 +00002503def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002504
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002505def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2506 let Latency = 42;
2507 let NumMicroOps = 40;
2508 let ResourceCycles = [1,11,1,1,26];
2509}
Craig Topper391c6f92017-12-10 01:24:08 +00002510def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002511
2512def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2513 let Latency = 46;
2514 let NumMicroOps = 44;
2515 let ResourceCycles = [1,11,1,1,30];
2516}
2517def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2518
2519def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2520 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002521 let NumMicroOps = 64;
2522 let ResourceCycles = [2,8,5,10,39];
2523}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002524def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002525
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002526def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2527 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002528 let NumMicroOps = 88;
2529 let ResourceCycles = [4,4,31,1,2,1,45];
2530}
Craig Topper2d451e72018-03-18 08:38:06 +00002531def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002532
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002533def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2534 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002535 let NumMicroOps = 90;
2536 let ResourceCycles = [4,2,33,1,2,1,47];
2537}
Craig Topper2d451e72018-03-18 08:38:06 +00002538def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002539
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002540def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002541 let Latency = 75;
2542 let NumMicroOps = 15;
2543 let ResourceCycles = [6,3,6];
2544}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002545def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002546
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002547def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002548 let Latency = 76;
2549 let NumMicroOps = 32;
2550 let ResourceCycles = [7,2,8,3,1,11];
2551}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002552def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002553
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002554def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002555 let Latency = 102;
2556 let NumMicroOps = 66;
2557 let ResourceCycles = [4,2,4,8,14,34];
2558}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002559def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002560
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002561def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2562 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002563 let NumMicroOps = 100;
2564 let ResourceCycles = [9,1,11,16,1,11,21,30];
2565}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002566def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002567
2568} // SchedModel