blob: e05f58c6800bd2dee0f8a0f49b5404d96074146c [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 Pilgrim30c38c32018-03-19 14:46:07 +0000162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
164defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000167defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000168defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000169
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000170def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
171 let Latency = 6;
172 let NumMicroOps = 4;
173 let ResourceCycles = [1,1,1,1];
174}
175
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000176// FMA Scheduling helper class.
177// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
178
179// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000180def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
181def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
182def : WriteRes<WriteVecMove, [SKLPort015]>;
183
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000184defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000185defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000186defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
187defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000188defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000189defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000190defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000191defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000192defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000193defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000194defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000195defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000196
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000197// Vector insert/extract operations.
198def : WriteRes<WriteVecInsert, [SKLPort5]> {
199 let Latency = 2;
200 let NumMicroOps = 2;
201 let ResourceCycles = [2];
202}
203def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
204 let Latency = 6;
205 let NumMicroOps = 2;
206}
207
208def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
209 let Latency = 3;
210 let NumMicroOps = 2;
211}
212def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
213 let Latency = 2;
214 let NumMicroOps = 3;
215}
216
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000217// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000218defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
219defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
220defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000221
222// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000223
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000224// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000225def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
226 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000227 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000228 let ResourceCycles = [3];
229}
230def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231 let Latency = 16;
232 let NumMicroOps = 4;
233 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000234}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000235
236// Packed Compare Explicit Length Strings, Return Mask
237def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
238 let Latency = 19;
239 let NumMicroOps = 9;
240 let ResourceCycles = [4,3,1,1];
241}
242def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
243 let Latency = 25;
244 let NumMicroOps = 10;
245 let ResourceCycles = [4,3,1,1,1];
246}
247
248// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000249def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000250 let Latency = 10;
251 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000252 let ResourceCycles = [3];
253}
254def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000255 let Latency = 16;
256 let NumMicroOps = 4;
257 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000258}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000259
260// Packed Compare Explicit Length Strings, Return Index
261def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
262 let Latency = 18;
263 let NumMicroOps = 8;
264 let ResourceCycles = [4,3,1];
265}
266def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
267 let Latency = 24;
268 let NumMicroOps = 9;
269 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000270}
271
Simon Pilgrima2f26782018-03-27 20:38:54 +0000272// MOVMSK Instructions.
273def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
274def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
275def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
276
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000278def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
279 let Latency = 4;
280 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000281 let ResourceCycles = [1];
282}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000283def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
284 let Latency = 10;
285 let NumMicroOps = 2;
286 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000287}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000288
289def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
290 let Latency = 8;
291 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000292 let ResourceCycles = [2];
293}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000294def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000295 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000296 let NumMicroOps = 3;
297 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000298}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000299
300def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
301 let Latency = 20;
302 let NumMicroOps = 11;
303 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000304}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000305def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
306 let Latency = 25;
307 let NumMicroOps = 11;
308 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000309}
310
311// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000312def : WriteRes<WriteCLMul, [SKLPort5]> {
313 let Latency = 6;
314 let NumMicroOps = 1;
315 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000316}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000317def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
318 let Latency = 12;
319 let NumMicroOps = 2;
320 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000321}
322
323// Catch-all for expensive system instructions.
324def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
325
326// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000327defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000328defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000329defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000330defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000331defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000332
333// Old microcoded instructions that nobody use.
334def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
335
336// Fence instructions.
337def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
338
Craig Topper05242bf2018-04-21 18:07:36 +0000339// Load/store MXCSR.
340def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
341def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
342
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000343// Nop, not very useful expect it provides a model for nops!
344def : WriteRes<WriteNop, []>;
345
346////////////////////////////////////////////////////////////////////////////////
347// Horizontal add/sub instructions.
348////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000349
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000350defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000351defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000352
353// Remaining instrs.
354
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000355def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000356 let Latency = 1;
357 let NumMicroOps = 1;
358 let ResourceCycles = [1];
359}
Craig Topperfc179c62018-03-22 04:23:41 +0000360def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
361 "MMX_PADDSWirr",
362 "MMX_PADDUSBirr",
363 "MMX_PADDUSWirr",
364 "MMX_PAVGBirr",
365 "MMX_PAVGWirr",
366 "MMX_PCMPEQBirr",
367 "MMX_PCMPEQDirr",
368 "MMX_PCMPEQWirr",
369 "MMX_PCMPGTBirr",
370 "MMX_PCMPGTDirr",
371 "MMX_PCMPGTWirr",
372 "MMX_PMAXSWirr",
373 "MMX_PMAXUBirr",
374 "MMX_PMINSWirr",
375 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000376 "MMX_PSUBSBirr",
377 "MMX_PSUBSWirr",
378 "MMX_PSUBUSBirr",
379 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000380
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000381def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000382 let Latency = 1;
383 let NumMicroOps = 1;
384 let ResourceCycles = [1];
385}
Craig Topperfc179c62018-03-22 04:23:41 +0000386def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
387 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000388 "MMX_MOVD64rr",
389 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000390 "UCOM_FPr",
391 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000392 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000393 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000394 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000395 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000396
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000397def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000398 let Latency = 1;
399 let NumMicroOps = 1;
400 let ResourceCycles = [1];
401}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000402def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000403
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000404def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000405 let Latency = 1;
406 let NumMicroOps = 1;
407 let ResourceCycles = [1];
408}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000409def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
410 "(V?)PABSD(Y?)rr",
411 "(V?)PABSW(Y?)rr",
412 "(V?)PADDSB(Y?)rr",
413 "(V?)PADDSW(Y?)rr",
414 "(V?)PADDUSB(Y?)rr",
415 "(V?)PADDUSW(Y?)rr",
416 "(V?)PAVGB(Y?)rr",
417 "(V?)PAVGW(Y?)rr",
418 "(V?)PCMPEQB(Y?)rr",
419 "(V?)PCMPEQD(Y?)rr",
420 "(V?)PCMPEQQ(Y?)rr",
421 "(V?)PCMPEQW(Y?)rr",
422 "(V?)PCMPGTB(Y?)rr",
423 "(V?)PCMPGTD(Y?)rr",
424 "(V?)PCMPGTW(Y?)rr",
425 "(V?)PMAXSB(Y?)rr",
426 "(V?)PMAXSD(Y?)rr",
427 "(V?)PMAXSW(Y?)rr",
428 "(V?)PMAXUB(Y?)rr",
429 "(V?)PMAXUD(Y?)rr",
430 "(V?)PMAXUW(Y?)rr",
431 "(V?)PMINSB(Y?)rr",
432 "(V?)PMINSD(Y?)rr",
433 "(V?)PMINSW(Y?)rr",
434 "(V?)PMINUB(Y?)rr",
435 "(V?)PMINUD(Y?)rr",
436 "(V?)PMINUW(Y?)rr",
437 "(V?)PSIGNB(Y?)rr",
438 "(V?)PSIGND(Y?)rr",
439 "(V?)PSIGNW(Y?)rr",
440 "(V?)PSLLD(Y?)ri",
441 "(V?)PSLLQ(Y?)ri",
442 "VPSLLVD(Y?)rr",
443 "VPSLLVQ(Y?)rr",
444 "(V?)PSLLW(Y?)ri",
445 "(V?)PSRAD(Y?)ri",
446 "VPSRAVD(Y?)rr",
447 "(V?)PSRAW(Y?)ri",
448 "(V?)PSRLD(Y?)ri",
449 "(V?)PSRLQ(Y?)ri",
450 "VPSRLVD(Y?)rr",
451 "VPSRLVQ(Y?)rr",
452 "(V?)PSRLW(Y?)ri",
453 "(V?)PSUBSB(Y?)rr",
454 "(V?)PSUBSW(Y?)rr",
455 "(V?)PSUBUSB(Y?)rr",
456 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000457
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000458def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000459 let Latency = 1;
460 let NumMicroOps = 1;
461 let ResourceCycles = [1];
462}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000463def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
464def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000465 "MMX_PABS(B|D|W)rr",
466 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000467 "MMX_PANDNirr",
468 "MMX_PANDirr",
469 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000470 "MMX_PSIGN(B|D|W)rr",
471 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000472 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000473
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000474def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000475 let Latency = 1;
476 let NumMicroOps = 1;
477 let ResourceCycles = [1];
478}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000479def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000480def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
481 "ADC(16|32|64)i",
482 "ADC(8|16|32|64)rr",
483 "ADCX(32|64)rr",
484 "ADOX(32|64)rr",
485 "BT(16|32|64)ri8",
486 "BT(16|32|64)rr",
487 "BTC(16|32|64)ri8",
488 "BTC(16|32|64)rr",
489 "BTR(16|32|64)ri8",
490 "BTR(16|32|64)rr",
491 "BTS(16|32|64)ri8",
492 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000493 "SAR(8|16|32|64)r1",
494 "SAR(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000495 "SBB(16|32|64)ri",
496 "SBB(16|32|64)i",
497 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000498 "SHL(8|16|32|64)r1",
499 "SHL(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000500 "SHR(8|16|32|64)r1",
Simon Pilgrimeb609092018-04-23 22:19:55 +0000501 "SHR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000502
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000503def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
504 let Latency = 1;
505 let NumMicroOps = 1;
506 let ResourceCycles = [1];
507}
Craig Topperfc179c62018-03-22 04:23:41 +0000508def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
509 "BLSI(32|64)rr",
510 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000511 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000512
513def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
514 let Latency = 1;
515 let NumMicroOps = 1;
516 let ResourceCycles = [1];
517}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000518def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000519 "(V?)PADDD(Y?)rr",
520 "(V?)PADDQ(Y?)rr",
521 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000522 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000523 "(V?)PSUBB(Y?)rr",
524 "(V?)PSUBD(Y?)rr",
525 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000526 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000527
528def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
529 let Latency = 1;
530 let NumMicroOps = 1;
531 let ResourceCycles = [1];
532}
Craig Topperfbe31322018-04-05 21:56:19 +0000533def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000534def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000535 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000536 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000537 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000538 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000539 "SGDT64m",
540 "SIDT64m",
541 "SLDT64m",
542 "SMSW16m",
543 "STC",
544 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000545 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000546
547def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000548 let Latency = 1;
549 let NumMicroOps = 2;
550 let ResourceCycles = [1,1];
551}
Craig Topperfc179c62018-03-22 04:23:41 +0000552def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
553 "MMX_MOVD64from64rm",
554 "MMX_MOVD64mr",
555 "MMX_MOVNTQmr",
556 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000557 "MOVNTI_64mr",
558 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000559 "ST_FP32m",
560 "ST_FP64m",
561 "ST_FP80m",
562 "VEXTRACTF128mr",
563 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000564 "(V?)MOVAPDYmr",
565 "(V?)MOVAPS(Y?)mr",
566 "(V?)MOVDQA(Y?)mr",
567 "(V?)MOVDQU(Y?)mr",
568 "(V?)MOVHPDmr",
569 "(V?)MOVHPSmr",
570 "(V?)MOVLPDmr",
571 "(V?)MOVLPSmr",
572 "(V?)MOVNTDQ(Y?)mr",
573 "(V?)MOVNTPD(Y?)mr",
574 "(V?)MOVNTPS(Y?)mr",
575 "(V?)MOVPDI2DImr",
576 "(V?)MOVPQI2QImr",
577 "(V?)MOVPQIto64mr",
578 "(V?)MOVSDmr",
579 "(V?)MOVSSmr",
580 "(V?)MOVUPD(Y?)mr",
581 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000582 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000583
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000584def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000585 let Latency = 2;
586 let NumMicroOps = 1;
587 let ResourceCycles = [1];
588}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000589def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000590 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000591 "(V?)MOVPDI2DIrr",
592 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000593 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000594 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000595
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000596def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000597 let Latency = 2;
598 let NumMicroOps = 2;
599 let ResourceCycles = [2];
600}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000601def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000602
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000603def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000604 let Latency = 2;
605 let NumMicroOps = 2;
606 let ResourceCycles = [2];
607}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000608def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
609def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000610
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000611def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000612 let Latency = 2;
613 let NumMicroOps = 2;
614 let ResourceCycles = [2];
615}
Craig Topperfc179c62018-03-22 04:23:41 +0000616def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
617 "ROL(8|16|32|64)r1",
618 "ROL(8|16|32|64)ri",
619 "ROR(8|16|32|64)r1",
620 "ROR(8|16|32|64)ri",
621 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000622
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000623def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000624 let Latency = 2;
625 let NumMicroOps = 2;
626 let ResourceCycles = [2];
627}
Craig Topperfc179c62018-03-22 04:23:41 +0000628def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
629 "WAIT",
630 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000631
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000632def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000633 let Latency = 2;
634 let NumMicroOps = 2;
635 let ResourceCycles = [1,1];
636}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000637def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
638 "VMASKMOVPS(Y?)mr",
639 "VPMASKMOVD(Y?)mr",
640 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000641
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000642def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000643 let Latency = 2;
644 let NumMicroOps = 2;
645 let ResourceCycles = [1,1];
646}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000647def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
648 "(V?)PSLLQrr",
649 "(V?)PSLLWrr",
650 "(V?)PSRADrr",
651 "(V?)PSRAWrr",
652 "(V?)PSRLDrr",
653 "(V?)PSRLQrr",
654 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000655
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000656def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000657 let Latency = 2;
658 let NumMicroOps = 2;
659 let ResourceCycles = [1,1];
660}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000661def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000662
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000663def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000664 let Latency = 2;
665 let NumMicroOps = 2;
666 let ResourceCycles = [1,1];
667}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000668def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000669
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000670def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000671 let Latency = 2;
672 let NumMicroOps = 2;
673 let ResourceCycles = [1,1];
674}
Craig Topper498875f2018-04-04 17:54:19 +0000675def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
676
677def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
678 let Latency = 1;
679 let NumMicroOps = 1;
680 let ResourceCycles = [1];
681}
682def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000683
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000684def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000685 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000686 let NumMicroOps = 2;
687 let ResourceCycles = [1,1];
688}
Craig Topper2d451e72018-03-18 08:38:06 +0000689def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000690def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000691def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
692 "ADC8ri",
693 "SBB8i8",
694 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000695
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000696def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
697 let Latency = 2;
698 let NumMicroOps = 3;
699 let ResourceCycles = [1,1,1];
700}
701def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
702
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000703def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
704 let Latency = 2;
705 let NumMicroOps = 3;
706 let ResourceCycles = [1,1,1];
707}
708def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
709
710def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
711 let Latency = 2;
712 let NumMicroOps = 3;
713 let ResourceCycles = [1,1,1];
714}
Craig Topper2d451e72018-03-18 08:38:06 +0000715def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000716def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
717 "PUSH64i8",
718 "STOSB",
719 "STOSL",
720 "STOSQ",
721 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000722
723def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
724 let Latency = 3;
725 let NumMicroOps = 1;
726 let ResourceCycles = [1];
727}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000728def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000729 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000730 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000731 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000732
Clement Courbet327fac42018-03-07 08:14:02 +0000733def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000734 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000735 let NumMicroOps = 2;
736 let ResourceCycles = [1,1];
737}
Clement Courbet327fac42018-03-07 08:14:02 +0000738def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000739
740def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
741 let Latency = 3;
742 let NumMicroOps = 1;
743 let ResourceCycles = [1];
744}
Craig Topperfc179c62018-03-22 04:23:41 +0000745def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
746 "ADD_FST0r",
747 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000748 "SUBR_FPrST0",
749 "SUBR_FST0r",
750 "SUBR_FrST0",
751 "SUB_FPrST0",
752 "SUB_FST0r",
753 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000754 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000755 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000756 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000757 "VPMOVSXBDYrr",
758 "VPMOVSXBQYrr",
759 "VPMOVSXBWYrr",
760 "VPMOVSXDQYrr",
761 "VPMOVSXWDYrr",
762 "VPMOVSXWQYrr",
763 "VPMOVZXBDYrr",
764 "VPMOVZXBQYrr",
765 "VPMOVZXBWYrr",
766 "VPMOVZXDQYrr",
767 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000768 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000769
770def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
771 let Latency = 3;
772 let NumMicroOps = 2;
773 let ResourceCycles = [1,1];
774}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000775def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000776
777def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
778 let Latency = 3;
779 let NumMicroOps = 2;
780 let ResourceCycles = [1,1];
781}
782def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
783
784def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
785 let Latency = 3;
786 let NumMicroOps = 3;
787 let ResourceCycles = [3];
788}
Craig Topperfc179c62018-03-22 04:23:41 +0000789def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
790 "ROR(8|16|32|64)rCL",
791 "SAR(8|16|32|64)rCL",
792 "SHL(8|16|32|64)rCL",
793 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000794
795def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000796 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000797 let NumMicroOps = 3;
798 let ResourceCycles = [3];
799}
Craig Topperb5f26592018-04-19 18:00:17 +0000800def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
801 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
802 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000803
804def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
805 let Latency = 3;
806 let NumMicroOps = 3;
807 let ResourceCycles = [1,2];
808}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000809def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000810
811def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
812 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000813 let NumMicroOps = 3;
814 let ResourceCycles = [2,1];
815}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000816def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
817 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000818
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000819def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
820 let Latency = 3;
821 let NumMicroOps = 3;
822 let ResourceCycles = [2,1];
823}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000824def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000825
826def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
827 let Latency = 3;
828 let NumMicroOps = 3;
829 let ResourceCycles = [2,1];
830}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000831def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
832 "(V?)PHADDW(Y?)rr",
833 "(V?)PHSUBD(Y?)rr",
834 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000835
836def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
837 let Latency = 3;
838 let NumMicroOps = 3;
839 let ResourceCycles = [2,1];
840}
Craig Topperfc179c62018-03-22 04:23:41 +0000841def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
842 "MMX_PACKSSWBirr",
843 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000844
845def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
846 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000847 let NumMicroOps = 3;
848 let ResourceCycles = [1,2];
849}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000850def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000851
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000852def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
853 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000854 let NumMicroOps = 3;
855 let ResourceCycles = [1,2];
856}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000857def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000858
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000859def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
860 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000861 let NumMicroOps = 3;
862 let ResourceCycles = [1,2];
863}
Craig Topperfc179c62018-03-22 04:23:41 +0000864def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
865 "RCL(8|16|32|64)ri",
866 "RCR(8|16|32|64)r1",
867 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000868
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000869def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
870 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000871 let NumMicroOps = 3;
872 let ResourceCycles = [1,1,1];
873}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000874def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000875
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000876def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
877 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000878 let NumMicroOps = 4;
879 let ResourceCycles = [1,1,2];
880}
Craig Topperf4cd9082018-01-19 05:47:32 +0000881def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000882
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000883def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
884 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000885 let NumMicroOps = 4;
886 let ResourceCycles = [1,1,1,1];
887}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000888def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000889
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000890def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
891 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000892 let NumMicroOps = 4;
893 let ResourceCycles = [1,1,1,1];
894}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000895def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000896
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000897def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000898 let Latency = 4;
899 let NumMicroOps = 1;
900 let ResourceCycles = [1];
901}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000902def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000903 "MMX_PMADDWDirr",
904 "MMX_PMULHRSWrr",
905 "MMX_PMULHUWirr",
906 "MMX_PMULHWirr",
907 "MMX_PMULLWirr",
908 "MMX_PMULUDQirr",
909 "MUL_FPrST0",
910 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000911 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000912
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000913def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000914 let Latency = 4;
915 let NumMicroOps = 1;
916 let ResourceCycles = [1];
917}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000918def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
919 "(V?)ADDPS(Y?)rr",
920 "(V?)ADDSDrr",
921 "(V?)ADDSSrr",
922 "(V?)ADDSUBPD(Y?)rr",
923 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000924 "(V?)CVTDQ2PS(Y?)rr",
925 "(V?)CVTPS2DQ(Y?)rr",
926 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000927 "(V?)MULPD(Y?)rr",
928 "(V?)MULPS(Y?)rr",
929 "(V?)MULSDrr",
930 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000931 "(V?)PMADDUBSW(Y?)rr",
932 "(V?)PMADDWD(Y?)rr",
933 "(V?)PMULDQ(Y?)rr",
934 "(V?)PMULHRSW(Y?)rr",
935 "(V?)PMULHUW(Y?)rr",
936 "(V?)PMULHW(Y?)rr",
937 "(V?)PMULLW(Y?)rr",
938 "(V?)PMULUDQ(Y?)rr",
939 "(V?)SUBPD(Y?)rr",
940 "(V?)SUBPS(Y?)rr",
941 "(V?)SUBSDrr",
942 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000943
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000944def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000945 let Latency = 4;
946 let NumMicroOps = 2;
947 let ResourceCycles = [1,1];
948}
Craig Topperf846e2d2018-04-19 05:34:05 +0000949def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000950
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000951def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
952 let Latency = 4;
953 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000954 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000955}
Craig Topperfc179c62018-03-22 04:23:41 +0000956def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000957
958def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000959 let Latency = 4;
960 let NumMicroOps = 2;
961 let ResourceCycles = [1,1];
962}
Craig Topperfc179c62018-03-22 04:23:41 +0000963def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
964 "VPSLLQYrr",
965 "VPSLLWYrr",
966 "VPSRADYrr",
967 "VPSRAWYrr",
968 "VPSRLDYrr",
969 "VPSRLQYrr",
970 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000971
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000972def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000973 let Latency = 4;
974 let NumMicroOps = 3;
975 let ResourceCycles = [1,1,1];
976}
Craig Topperfc179c62018-03-22 04:23:41 +0000977def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
978 "ISTT_FP32m",
979 "ISTT_FP64m",
980 "IST_F16m",
981 "IST_F32m",
982 "IST_FP16m",
983 "IST_FP32m",
984 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000985
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000986def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000987 let Latency = 4;
988 let NumMicroOps = 4;
989 let ResourceCycles = [4];
990}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000991def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000992
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000993def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000994 let Latency = 4;
995 let NumMicroOps = 4;
996 let ResourceCycles = [1,3];
997}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000998def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000999
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001000def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001001 let Latency = 4;
1002 let NumMicroOps = 4;
1003 let ResourceCycles = [1,3];
1004}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001005def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001006
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001007def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008 let Latency = 4;
1009 let NumMicroOps = 4;
1010 let ResourceCycles = [1,1,2];
1011}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001012def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001013
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001014def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1015 let Latency = 5;
1016 let NumMicroOps = 1;
1017 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001018}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001019def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001020 "MOVSX(16|32|64)rm32",
1021 "MOVSX(16|32|64)rm8",
1022 "MOVZX(16|32|64)rm16",
1023 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001024 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001025
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001026def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001027 let Latency = 5;
1028 let NumMicroOps = 2;
1029 let ResourceCycles = [1,1];
1030}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001031def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1032 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001033
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001034def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001035 let Latency = 5;
1036 let NumMicroOps = 2;
1037 let ResourceCycles = [1,1];
1038}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001039def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001040 "MMX_CVTPS2PIirr",
1041 "MMX_CVTTPD2PIirr",
1042 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001043 "(V?)CVTPD2DQrr",
1044 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001045 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001046 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001047 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001048 "(V?)CVTSD2SSrr",
1049 "(V?)CVTSI642SDrr",
1050 "(V?)CVTSI2SDrr",
1051 "(V?)CVTSI2SSrr",
1052 "(V?)CVTSS2SDrr",
1053 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001054
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001055def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001056 let Latency = 5;
1057 let NumMicroOps = 3;
1058 let ResourceCycles = [1,1,1];
1059}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001060def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001061
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001062def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001063 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001064 let NumMicroOps = 3;
1065 let ResourceCycles = [1,1,1];
1066}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001067def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001068
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001069def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001070 let Latency = 5;
1071 let NumMicroOps = 5;
1072 let ResourceCycles = [1,4];
1073}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001074def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001075
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001076def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001077 let Latency = 5;
1078 let NumMicroOps = 5;
1079 let ResourceCycles = [2,3];
1080}
Craig Topper13a16502018-03-19 00:56:09 +00001081def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001082
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001083def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001084 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001085 let NumMicroOps = 6;
1086 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001087}
Craig Topperfc179c62018-03-22 04:23:41 +00001088def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1089 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001090
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001091def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1092 let Latency = 6;
1093 let NumMicroOps = 1;
1094 let ResourceCycles = [1];
1095}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001096def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001097 "(V?)MOVSHDUPrm",
1098 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001099 "VPBROADCASTDrm",
1100 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001101
1102def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001103 let Latency = 6;
1104 let NumMicroOps = 2;
1105 let ResourceCycles = [2];
1106}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001107def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001108
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001109def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001110 let Latency = 6;
1111 let NumMicroOps = 2;
1112 let ResourceCycles = [1,1];
1113}
Craig Topperfc179c62018-03-22 04:23:41 +00001114def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1115 "MMX_PADDSWirm",
1116 "MMX_PADDUSBirm",
1117 "MMX_PADDUSWirm",
1118 "MMX_PAVGBirm",
1119 "MMX_PAVGWirm",
1120 "MMX_PCMPEQBirm",
1121 "MMX_PCMPEQDirm",
1122 "MMX_PCMPEQWirm",
1123 "MMX_PCMPGTBirm",
1124 "MMX_PCMPGTDirm",
1125 "MMX_PCMPGTWirm",
1126 "MMX_PMAXSWirm",
1127 "MMX_PMAXUBirm",
1128 "MMX_PMINSWirm",
1129 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001130 "MMX_PSUBSBirm",
1131 "MMX_PSUBSWirm",
1132 "MMX_PSUBUSBirm",
1133 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001134
Craig Topper58afb4e2018-03-22 21:10:07 +00001135def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001136 let Latency = 6;
1137 let NumMicroOps = 2;
1138 let ResourceCycles = [1,1];
1139}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001140def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1141 "(V?)CVTSD2SIrr",
1142 "(V?)CVTSS2SI64rr",
1143 "(V?)CVTSS2SIrr",
1144 "(V?)CVTTSD2SI64rr",
1145 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001146
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001147def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1148 let Latency = 6;
1149 let NumMicroOps = 2;
1150 let ResourceCycles = [1,1];
1151}
Craig Topperfc179c62018-03-22 04:23:41 +00001152def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1153 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001154
1155def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1156 let Latency = 6;
1157 let NumMicroOps = 2;
1158 let ResourceCycles = [1,1];
1159}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001160def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1161 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001162 "MMX_PANDNirm",
1163 "MMX_PANDirm",
1164 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001165 "MMX_PSIGN(B|D|W)rm",
1166 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001167 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001168
1169def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1170 let Latency = 6;
1171 let NumMicroOps = 2;
1172 let ResourceCycles = [1,1];
1173}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001174def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001175def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1176 ADCX32rm, ADCX64rm,
1177 ADOX32rm, ADOX64rm,
1178 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001179
1180def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1181 let Latency = 6;
1182 let NumMicroOps = 2;
1183 let ResourceCycles = [1,1];
1184}
Craig Topperfc179c62018-03-22 04:23:41 +00001185def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1186 "BLSI(32|64)rm",
1187 "BLSMSK(32|64)rm",
1188 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001189 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001190
1191def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1192 let Latency = 6;
1193 let NumMicroOps = 2;
1194 let ResourceCycles = [1,1];
1195}
Craig Topper2d451e72018-03-18 08:38:06 +00001196def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001197def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001198
Craig Topper58afb4e2018-03-22 21:10:07 +00001199def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001200 let Latency = 6;
1201 let NumMicroOps = 3;
1202 let ResourceCycles = [2,1];
1203}
Craig Topperfc179c62018-03-22 04:23:41 +00001204def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001205
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001206def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001207 let Latency = 6;
1208 let NumMicroOps = 4;
1209 let ResourceCycles = [1,2,1];
1210}
Craig Topperfc179c62018-03-22 04:23:41 +00001211def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1212 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001213
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001214def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001215 let Latency = 6;
1216 let NumMicroOps = 4;
1217 let ResourceCycles = [1,1,1,1];
1218}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001219def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001220
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001221def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1222 let Latency = 6;
1223 let NumMicroOps = 4;
1224 let ResourceCycles = [1,1,1,1];
1225}
Craig Topperfc179c62018-03-22 04:23:41 +00001226def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1227 "BTR(16|32|64)mi8",
1228 "BTS(16|32|64)mi8",
1229 "SAR(8|16|32|64)m1",
1230 "SAR(8|16|32|64)mi",
1231 "SHL(8|16|32|64)m1",
1232 "SHL(8|16|32|64)mi",
1233 "SHR(8|16|32|64)m1",
1234 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001235
1236def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1237 let Latency = 6;
1238 let NumMicroOps = 4;
1239 let ResourceCycles = [1,1,1,1];
1240}
Craig Topperf0d04262018-04-06 16:16:48 +00001241def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1242 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001243
1244def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001245 let Latency = 6;
1246 let NumMicroOps = 6;
1247 let ResourceCycles = [1,5];
1248}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001249def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001250
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001251def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1252 let Latency = 7;
1253 let NumMicroOps = 1;
1254 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001255}
Craig Topperfc179c62018-03-22 04:23:41 +00001256def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1257 "LD_F64m",
1258 "LD_F80m",
1259 "VBROADCASTF128",
1260 "VBROADCASTI128",
1261 "VBROADCASTSDYrm",
1262 "VBROADCASTSSYrm",
1263 "VLDDQUYrm",
1264 "VMOVAPDYrm",
1265 "VMOVAPSYrm",
1266 "VMOVDDUPYrm",
1267 "VMOVDQAYrm",
1268 "VMOVDQUYrm",
1269 "VMOVNTDQAYrm",
1270 "VMOVSHDUPYrm",
1271 "VMOVSLDUPYrm",
1272 "VMOVUPDYrm",
1273 "VMOVUPSYrm",
1274 "VPBROADCASTDYrm",
1275 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001276
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001277def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001278 let Latency = 7;
1279 let NumMicroOps = 2;
1280 let ResourceCycles = [1,1];
1281}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001282def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001283
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001284def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1285 let Latency = 7;
1286 let NumMicroOps = 2;
1287 let ResourceCycles = [1,1];
1288}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001289def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1290 "(V?)PACKSSDWrm",
1291 "(V?)PACKSSWBrm",
1292 "(V?)PACKUSDWrm",
1293 "(V?)PACKUSWBrm",
1294 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001295 "VPBROADCASTBrm",
1296 "VPBROADCASTWrm",
1297 "VPERMILPDmi",
1298 "VPERMILPDrm",
1299 "VPERMILPSmi",
1300 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001301 "(V?)PSHUFBrm",
1302 "(V?)PSHUFDmi",
1303 "(V?)PSHUFHWmi",
1304 "(V?)PSHUFLWmi",
1305 "(V?)PUNPCKHBWrm",
1306 "(V?)PUNPCKHDQrm",
1307 "(V?)PUNPCKHQDQrm",
1308 "(V?)PUNPCKHWDrm",
1309 "(V?)PUNPCKLBWrm",
1310 "(V?)PUNPCKLDQrm",
1311 "(V?)PUNPCKLQDQrm",
1312 "(V?)PUNPCKLWDrm",
1313 "(V?)SHUFPDrmi",
1314 "(V?)SHUFPSrmi",
1315 "(V?)UNPCKHPDrm",
1316 "(V?)UNPCKHPSrm",
1317 "(V?)UNPCKLPDrm",
1318 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001319
Craig Topper58afb4e2018-03-22 21:10:07 +00001320def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001321 let Latency = 7;
1322 let NumMicroOps = 2;
1323 let ResourceCycles = [1,1];
1324}
Craig Topperfc179c62018-03-22 04:23:41 +00001325def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1326 "VCVTPD2PSYrr",
1327 "VCVTPH2PSYrr",
1328 "VCVTPS2PDYrr",
1329 "VCVTPS2PHYrr",
1330 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001331
1332def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1333 let Latency = 7;
1334 let NumMicroOps = 2;
1335 let ResourceCycles = [1,1];
1336}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001337def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1338 "(V?)PABSDrm",
1339 "(V?)PABSWrm",
1340 "(V?)PADDSBrm",
1341 "(V?)PADDSWrm",
1342 "(V?)PADDUSBrm",
1343 "(V?)PADDUSWrm",
1344 "(V?)PAVGBrm",
1345 "(V?)PAVGWrm",
1346 "(V?)PCMPEQBrm",
1347 "(V?)PCMPEQDrm",
1348 "(V?)PCMPEQQrm",
1349 "(V?)PCMPEQWrm",
1350 "(V?)PCMPGTBrm",
1351 "(V?)PCMPGTDrm",
1352 "(V?)PCMPGTWrm",
1353 "(V?)PMAXSBrm",
1354 "(V?)PMAXSDrm",
1355 "(V?)PMAXSWrm",
1356 "(V?)PMAXUBrm",
1357 "(V?)PMAXUDrm",
1358 "(V?)PMAXUWrm",
1359 "(V?)PMINSBrm",
1360 "(V?)PMINSDrm",
1361 "(V?)PMINSWrm",
1362 "(V?)PMINUBrm",
1363 "(V?)PMINUDrm",
1364 "(V?)PMINUWrm",
1365 "(V?)PSIGNBrm",
1366 "(V?)PSIGNDrm",
1367 "(V?)PSIGNWrm",
1368 "(V?)PSLLDrm",
1369 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001370 "VPSLLVDrm",
1371 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001372 "(V?)PSLLWrm",
1373 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001374 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001375 "(V?)PSRAWrm",
1376 "(V?)PSRLDrm",
1377 "(V?)PSRLQrm",
1378 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001379 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001380 "(V?)PSRLWrm",
1381 "(V?)PSUBSBrm",
1382 "(V?)PSUBSWrm",
1383 "(V?)PSUBUSBrm",
1384 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001385
1386def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1387 let Latency = 7;
1388 let NumMicroOps = 2;
1389 let ResourceCycles = [1,1];
1390}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001391def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001392 "(V?)INSERTI128rm",
1393 "(V?)MASKMOVPDrm",
1394 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001395 "(V?)PADDBrm",
1396 "(V?)PADDDrm",
1397 "(V?)PADDQrm",
1398 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001399 "(V?)PBLENDDrmi",
1400 "(V?)PMASKMOVDrm",
1401 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001402 "(V?)PSUBBrm",
1403 "(V?)PSUBDrm",
1404 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001405 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001406
1407def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1408 let Latency = 7;
1409 let NumMicroOps = 3;
1410 let ResourceCycles = [2,1];
1411}
Craig Topperfc179c62018-03-22 04:23:41 +00001412def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1413 "MMX_PACKSSWBirm",
1414 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001415
1416def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1417 let Latency = 7;
1418 let NumMicroOps = 3;
1419 let ResourceCycles = [1,2];
1420}
Craig Topperf4cd9082018-01-19 05:47:32 +00001421def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001422
1423def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1424 let Latency = 7;
1425 let NumMicroOps = 3;
1426 let ResourceCycles = [1,2];
1427}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001428def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1429 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001430
Craig Topper58afb4e2018-03-22 21:10:07 +00001431def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001432 let Latency = 7;
1433 let NumMicroOps = 3;
1434 let ResourceCycles = [1,1,1];
1435}
Craig Topperfc179c62018-03-22 04:23:41 +00001436def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1437 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001438
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001439def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001440 let Latency = 7;
1441 let NumMicroOps = 3;
1442 let ResourceCycles = [1,1,1];
1443}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001444def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001445
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001446def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001447 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001448 let NumMicroOps = 3;
1449 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001450}
Craig Topperfc179c62018-03-22 04:23:41 +00001451def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1452 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001453
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001454def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1455 let Latency = 7;
1456 let NumMicroOps = 5;
1457 let ResourceCycles = [1,1,1,2];
1458}
Craig Topperfc179c62018-03-22 04:23:41 +00001459def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1460 "ROL(8|16|32|64)mi",
1461 "ROR(8|16|32|64)m1",
1462 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001463
1464def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1465 let Latency = 7;
1466 let NumMicroOps = 5;
1467 let ResourceCycles = [1,1,1,2];
1468}
Craig Topper13a16502018-03-19 00:56:09 +00001469def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001470
1471def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1472 let Latency = 7;
1473 let NumMicroOps = 5;
1474 let ResourceCycles = [1,1,1,1,1];
1475}
Craig Topperfc179c62018-03-22 04:23:41 +00001476def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1477 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001478
1479def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001480 let Latency = 7;
1481 let NumMicroOps = 7;
1482 let ResourceCycles = [1,3,1,2];
1483}
Craig Topper2d451e72018-03-18 08:38:06 +00001484def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001485
Craig Topper58afb4e2018-03-22 21:10:07 +00001486def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001487 let Latency = 8;
1488 let NumMicroOps = 2;
1489 let ResourceCycles = [2];
1490}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001491def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1492 "(V?)ROUNDPS(Y?)r",
1493 "(V?)ROUNDSDr",
1494 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001495
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001496def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001497 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001498 let NumMicroOps = 2;
1499 let ResourceCycles = [1,1];
1500}
Craig Topperfc179c62018-03-22 04:23:41 +00001501def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1502 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001503
1504def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1505 let Latency = 8;
1506 let NumMicroOps = 2;
1507 let ResourceCycles = [1,1];
1508}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001509def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1510 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001511
1512def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001513 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001514 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001515 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001516}
Craig Topperf846e2d2018-04-19 05:34:05 +00001517def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001518
Craig Topperf846e2d2018-04-19 05:34:05 +00001519def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1520 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001521 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001522 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001523}
Craig Topperfc179c62018-03-22 04:23:41 +00001524def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001525
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001526def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1527 let Latency = 8;
1528 let NumMicroOps = 2;
1529 let ResourceCycles = [1,1];
1530}
Craig Topperfc179c62018-03-22 04:23:41 +00001531def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1532 "FCOM64m",
1533 "FCOMP32m",
1534 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001535 "VPACKSSDWYrm",
1536 "VPACKSSWBYrm",
1537 "VPACKUSDWYrm",
1538 "VPACKUSWBYrm",
1539 "VPALIGNRYrmi",
1540 "VPBLENDWYrmi",
1541 "VPBROADCASTBYrm",
1542 "VPBROADCASTWYrm",
1543 "VPERMILPDYmi",
1544 "VPERMILPDYrm",
1545 "VPERMILPSYmi",
1546 "VPERMILPSYrm",
1547 "VPMOVSXBDYrm",
1548 "VPMOVSXBQYrm",
1549 "VPMOVSXWQYrm",
1550 "VPSHUFBYrm",
1551 "VPSHUFDYmi",
1552 "VPSHUFHWYmi",
1553 "VPSHUFLWYmi",
1554 "VPUNPCKHBWYrm",
1555 "VPUNPCKHDQYrm",
1556 "VPUNPCKHQDQYrm",
1557 "VPUNPCKHWDYrm",
1558 "VPUNPCKLBWYrm",
1559 "VPUNPCKLDQYrm",
1560 "VPUNPCKLQDQYrm",
1561 "VPUNPCKLWDYrm",
1562 "VSHUFPDYrmi",
1563 "VSHUFPSYrmi",
1564 "VUNPCKHPDYrm",
1565 "VUNPCKHPSYrm",
1566 "VUNPCKLPDYrm",
1567 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001568
1569def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1570 let Latency = 8;
1571 let NumMicroOps = 2;
1572 let ResourceCycles = [1,1];
1573}
Craig Topperfc179c62018-03-22 04:23:41 +00001574def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1575 "VPABSDYrm",
1576 "VPABSWYrm",
1577 "VPADDSBYrm",
1578 "VPADDSWYrm",
1579 "VPADDUSBYrm",
1580 "VPADDUSWYrm",
1581 "VPAVGBYrm",
1582 "VPAVGWYrm",
1583 "VPCMPEQBYrm",
1584 "VPCMPEQDYrm",
1585 "VPCMPEQQYrm",
1586 "VPCMPEQWYrm",
1587 "VPCMPGTBYrm",
1588 "VPCMPGTDYrm",
1589 "VPCMPGTWYrm",
1590 "VPMAXSBYrm",
1591 "VPMAXSDYrm",
1592 "VPMAXSWYrm",
1593 "VPMAXUBYrm",
1594 "VPMAXUDYrm",
1595 "VPMAXUWYrm",
1596 "VPMINSBYrm",
1597 "VPMINSDYrm",
1598 "VPMINSWYrm",
1599 "VPMINUBYrm",
1600 "VPMINUDYrm",
1601 "VPMINUWYrm",
1602 "VPSIGNBYrm",
1603 "VPSIGNDYrm",
1604 "VPSIGNWYrm",
1605 "VPSLLDYrm",
1606 "VPSLLQYrm",
1607 "VPSLLVDYrm",
1608 "VPSLLVQYrm",
1609 "VPSLLWYrm",
1610 "VPSRADYrm",
1611 "VPSRAVDYrm",
1612 "VPSRAWYrm",
1613 "VPSRLDYrm",
1614 "VPSRLQYrm",
1615 "VPSRLVDYrm",
1616 "VPSRLVQYrm",
1617 "VPSRLWYrm",
1618 "VPSUBSBYrm",
1619 "VPSUBSWYrm",
1620 "VPSUBUSBYrm",
1621 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001622
1623def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1624 let Latency = 8;
1625 let NumMicroOps = 2;
1626 let ResourceCycles = [1,1];
1627}
Craig Topperfc179c62018-03-22 04:23:41 +00001628def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1629 "VANDNPSYrm",
1630 "VANDPDYrm",
1631 "VANDPSYrm",
1632 "VBLENDPDYrmi",
1633 "VBLENDPSYrmi",
1634 "VMASKMOVPDYrm",
1635 "VMASKMOVPSYrm",
1636 "VORPDYrm",
1637 "VORPSYrm",
1638 "VPADDBYrm",
1639 "VPADDDYrm",
1640 "VPADDQYrm",
1641 "VPADDWYrm",
1642 "VPANDNYrm",
1643 "VPANDYrm",
1644 "VPBLENDDYrmi",
1645 "VPMASKMOVDYrm",
1646 "VPMASKMOVQYrm",
1647 "VPORYrm",
1648 "VPSUBBYrm",
1649 "VPSUBDYrm",
1650 "VPSUBQYrm",
1651 "VPSUBWYrm",
1652 "VPXORYrm",
1653 "VXORPDYrm",
1654 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001655
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001656def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1657 let Latency = 8;
1658 let NumMicroOps = 4;
1659 let ResourceCycles = [1,2,1];
1660}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001661def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001662
1663def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1664 let Latency = 8;
1665 let NumMicroOps = 4;
1666 let ResourceCycles = [2,1,1];
1667}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001668def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001669
Craig Topper58afb4e2018-03-22 21:10:07 +00001670def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001671 let Latency = 8;
1672 let NumMicroOps = 4;
1673 let ResourceCycles = [1,1,1,1];
1674}
1675def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1676
1677def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1678 let Latency = 8;
1679 let NumMicroOps = 5;
1680 let ResourceCycles = [1,1,3];
1681}
Craig Topper13a16502018-03-19 00:56:09 +00001682def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001683
1684def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1685 let Latency = 8;
1686 let NumMicroOps = 5;
1687 let ResourceCycles = [1,1,1,2];
1688}
Craig Topperfc179c62018-03-22 04:23:41 +00001689def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1690 "RCL(8|16|32|64)mi",
1691 "RCR(8|16|32|64)m1",
1692 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001693
1694def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1695 let Latency = 8;
1696 let NumMicroOps = 6;
1697 let ResourceCycles = [1,1,1,3];
1698}
Craig Topperfc179c62018-03-22 04:23:41 +00001699def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1700 "SAR(8|16|32|64)mCL",
1701 "SHL(8|16|32|64)mCL",
1702 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001703
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001704def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1705 let Latency = 8;
1706 let NumMicroOps = 6;
1707 let ResourceCycles = [1,1,1,2,1];
1708}
Craig Topper9f834812018-04-01 21:54:24 +00001709def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001710 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001711 "SBB(8|16|32|64)mi")>;
1712def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1713 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001714
1715def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1716 let Latency = 9;
1717 let NumMicroOps = 2;
1718 let ResourceCycles = [1,1];
1719}
Craig Topperfc179c62018-03-22 04:23:41 +00001720def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1721 "MMX_PMADDUBSWrm",
1722 "MMX_PMADDWDirm",
1723 "MMX_PMULHRSWrm",
1724 "MMX_PMULHUWirm",
1725 "MMX_PMULHWirm",
1726 "MMX_PMULLWirm",
1727 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001728 "VTESTPDYrm",
1729 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001730
1731def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1732 let Latency = 9;
1733 let NumMicroOps = 2;
1734 let ResourceCycles = [1,1];
1735}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001736def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001737 "VPMOVSXBWYrm",
1738 "VPMOVSXDQYrm",
1739 "VPMOVSXWDYrm",
1740 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001741 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001742
1743def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1744 let Latency = 9;
1745 let NumMicroOps = 2;
1746 let ResourceCycles = [1,1];
1747}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001748def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1749 "(V?)ADDSSrm",
1750 "(V?)CMPSDrm",
1751 "(V?)CMPSSrm",
1752 "(V?)MAX(C?)SDrm",
1753 "(V?)MAX(C?)SSrm",
1754 "(V?)MIN(C?)SDrm",
1755 "(V?)MIN(C?)SSrm",
1756 "(V?)MULSDrm",
1757 "(V?)MULSSrm",
1758 "(V?)SUBSDrm",
1759 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001760
Craig Topper58afb4e2018-03-22 21:10:07 +00001761def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001762 let Latency = 9;
1763 let NumMicroOps = 2;
1764 let ResourceCycles = [1,1];
1765}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001766def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001767 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001768 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001769 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001770
Craig Topper58afb4e2018-03-22 21:10:07 +00001771def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001772 let Latency = 9;
1773 let NumMicroOps = 3;
1774 let ResourceCycles = [1,2];
1775}
Craig Topperfc179c62018-03-22 04:23:41 +00001776def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001777
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001778def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1779 let Latency = 9;
1780 let NumMicroOps = 3;
1781 let ResourceCycles = [1,2];
1782}
Craig Topperfc179c62018-03-22 04:23:41 +00001783def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1784 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001785
1786def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1787 let Latency = 9;
1788 let NumMicroOps = 3;
1789 let ResourceCycles = [1,1,1];
1790}
Craig Topperfc179c62018-03-22 04:23:41 +00001791def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001792
1793def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1794 let Latency = 9;
1795 let NumMicroOps = 3;
1796 let ResourceCycles = [1,1,1];
1797}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001798def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001799
1800def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001801 let Latency = 9;
1802 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001803 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001804}
Craig Topperfc179c62018-03-22 04:23:41 +00001805def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1806 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001807
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001808def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1809 let Latency = 9;
1810 let NumMicroOps = 4;
1811 let ResourceCycles = [2,1,1];
1812}
Craig Topperfc179c62018-03-22 04:23:41 +00001813def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1814 "(V?)PHADDWrm",
1815 "(V?)PHSUBDrm",
1816 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001817
1818def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1819 let Latency = 9;
1820 let NumMicroOps = 4;
1821 let ResourceCycles = [1,1,1,1];
1822}
Craig Topperfc179c62018-03-22 04:23:41 +00001823def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1824 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001825
1826def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1827 let Latency = 9;
1828 let NumMicroOps = 5;
1829 let ResourceCycles = [1,2,1,1];
1830}
Craig Topperfc179c62018-03-22 04:23:41 +00001831def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1832 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001833
1834def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1835 let Latency = 10;
1836 let NumMicroOps = 2;
1837 let ResourceCycles = [1,1];
1838}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001839def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001840 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001841
1842def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1843 let Latency = 10;
1844 let NumMicroOps = 2;
1845 let ResourceCycles = [1,1];
1846}
Craig Topperfc179c62018-03-22 04:23:41 +00001847def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1848 "ADD_F64m",
1849 "ILD_F16m",
1850 "ILD_F32m",
1851 "ILD_F64m",
1852 "SUBR_F32m",
1853 "SUBR_F64m",
1854 "SUB_F32m",
1855 "SUB_F64m",
1856 "VPCMPGTQYrm",
1857 "VPERM2F128rm",
1858 "VPERM2I128rm",
1859 "VPERMDYrm",
1860 "VPERMPDYmi",
1861 "VPERMPSYrm",
1862 "VPERMQYmi",
1863 "VPMOVZXBDYrm",
1864 "VPMOVZXBQYrm",
1865 "VPMOVZXBWYrm",
1866 "VPMOVZXDQYrm",
1867 "VPMOVZXWQYrm",
1868 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001869
1870def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1871 let Latency = 10;
1872 let NumMicroOps = 2;
1873 let ResourceCycles = [1,1];
1874}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001875def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1876 "(V?)ADDPSrm",
1877 "(V?)ADDSUBPDrm",
1878 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001879 "(V?)CVTDQ2PSrm",
1880 "(V?)CVTPH2PSYrm",
1881 "(V?)CVTPS2DQrm",
1882 "(V?)CVTSS2SDrm",
1883 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001884 "(V?)MULPDrm",
1885 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001886 "(V?)PMADDUBSWrm",
1887 "(V?)PMADDWDrm",
1888 "(V?)PMULDQrm",
1889 "(V?)PMULHRSWrm",
1890 "(V?)PMULHUWrm",
1891 "(V?)PMULHWrm",
1892 "(V?)PMULLWrm",
1893 "(V?)PMULUDQrm",
1894 "(V?)SUBPDrm",
1895 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001896def: InstRW<[SKLWriteResGroup134],
1897 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001898
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001899def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1900 let Latency = 10;
1901 let NumMicroOps = 3;
1902 let ResourceCycles = [1,1,1];
1903}
Craig Topperfc179c62018-03-22 04:23:41 +00001904def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1905 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001906
Craig Topper58afb4e2018-03-22 21:10:07 +00001907def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001908 let Latency = 10;
1909 let NumMicroOps = 3;
1910 let ResourceCycles = [1,1,1];
1911}
Craig Topperfc179c62018-03-22 04:23:41 +00001912def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001913
1914def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001915 let Latency = 10;
1916 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001917 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001918}
Craig Topperfc179c62018-03-22 04:23:41 +00001919def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1920 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001921
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001922def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1923 let Latency = 10;
1924 let NumMicroOps = 4;
1925 let ResourceCycles = [2,1,1];
1926}
Craig Topperfc179c62018-03-22 04:23:41 +00001927def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1928 "VPHADDWYrm",
1929 "VPHSUBDYrm",
1930 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001931
1932def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001933 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001934 let NumMicroOps = 4;
1935 let ResourceCycles = [1,1,1,1];
1936}
Craig Topperf846e2d2018-04-19 05:34:05 +00001937def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001938
1939def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1940 let Latency = 10;
1941 let NumMicroOps = 8;
1942 let ResourceCycles = [1,1,1,1,1,3];
1943}
Craig Topper13a16502018-03-19 00:56:09 +00001944def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001945
1946def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001947 let Latency = 10;
1948 let NumMicroOps = 10;
1949 let ResourceCycles = [9,1];
1950}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001951def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001952
Craig Topper8104f262018-04-02 05:33:28 +00001953def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001954 let Latency = 11;
1955 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001956 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001957}
Craig Topper8104f262018-04-02 05:33:28 +00001958def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001959 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001960
Craig Topper8104f262018-04-02 05:33:28 +00001961def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1962 let Latency = 11;
1963 let NumMicroOps = 1;
1964 let ResourceCycles = [1,5];
1965}
1966def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1967
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001968def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001969 let Latency = 11;
1970 let NumMicroOps = 2;
1971 let ResourceCycles = [1,1];
1972}
Craig Topperfc179c62018-03-22 04:23:41 +00001973def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
1974 "MUL_F64m",
1975 "VRCPPSYm",
1976 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001977
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001978def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1979 let Latency = 11;
1980 let NumMicroOps = 2;
1981 let ResourceCycles = [1,1];
1982}
Craig Topperfc179c62018-03-22 04:23:41 +00001983def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1984 "VADDPSYrm",
1985 "VADDSUBPDYrm",
1986 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001987 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001988 "VCMPPSYrmi",
1989 "VCVTDQ2PSYrm",
1990 "VCVTPS2DQYrm",
1991 "VCVTPS2PDYrm",
1992 "VCVTTPS2DQYrm",
1993 "VMAX(C?)PDYrm",
1994 "VMAX(C?)PSYrm",
1995 "VMIN(C?)PDYrm",
1996 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001997 "VMULPDYrm",
1998 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001999 "VPMADDUBSWYrm",
2000 "VPMADDWDYrm",
2001 "VPMULDQYrm",
2002 "VPMULHRSWYrm",
2003 "VPMULHUWYrm",
2004 "VPMULHWYrm",
2005 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002006 "VPMULUDQYrm",
2007 "VSUBPDYrm",
2008 "VSUBPSYrm")>;
2009def: InstRW<[SKLWriteResGroup147],
2010 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002011
2012def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2013 let Latency = 11;
2014 let NumMicroOps = 3;
2015 let ResourceCycles = [2,1];
2016}
Craig Topperfc179c62018-03-22 04:23:41 +00002017def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2018 "FICOM32m",
2019 "FICOMP16m",
2020 "FICOMP32m",
2021 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002022
2023def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2024 let Latency = 11;
2025 let NumMicroOps = 3;
2026 let ResourceCycles = [1,1,1];
2027}
Craig Topperfc179c62018-03-22 04:23:41 +00002028def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002029
Craig Topper58afb4e2018-03-22 21:10:07 +00002030def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002031 let Latency = 11;
2032 let NumMicroOps = 3;
2033 let ResourceCycles = [1,1,1];
2034}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002035def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2036 "(V?)CVTSD2SIrm",
2037 "(V?)CVTSS2SI64rm",
2038 "(V?)CVTSS2SIrm",
2039 "(V?)CVTTSD2SI64rm",
2040 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002041 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002042 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002043
Craig Topper58afb4e2018-03-22 21:10:07 +00002044def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002045 let Latency = 11;
2046 let NumMicroOps = 3;
2047 let ResourceCycles = [1,1,1];
2048}
Craig Topperfc179c62018-03-22 04:23:41 +00002049def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2050 "CVTPD2PSrm",
2051 "CVTTPD2DQrm",
2052 "MMX_CVTPD2PIirm",
2053 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002054
2055def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2056 let Latency = 11;
2057 let NumMicroOps = 6;
2058 let ResourceCycles = [1,1,1,2,1];
2059}
Craig Topperfc179c62018-03-22 04:23:41 +00002060def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2061 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002062
2063def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002064 let Latency = 11;
2065 let NumMicroOps = 7;
2066 let ResourceCycles = [2,3,2];
2067}
Craig Topperfc179c62018-03-22 04:23:41 +00002068def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2069 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002070
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002071def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002072 let Latency = 11;
2073 let NumMicroOps = 9;
2074 let ResourceCycles = [1,5,1,2];
2075}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002076def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002077
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002078def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002079 let Latency = 11;
2080 let NumMicroOps = 11;
2081 let ResourceCycles = [2,9];
2082}
Craig Topperfc179c62018-03-22 04:23:41 +00002083def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002084
Craig Topper8104f262018-04-02 05:33:28 +00002085def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002086 let Latency = 12;
2087 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002088 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002089}
Craig Topper8104f262018-04-02 05:33:28 +00002090def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002091 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002092
Craig Topper8104f262018-04-02 05:33:28 +00002093def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2094 let Latency = 12;
2095 let NumMicroOps = 1;
2096 let ResourceCycles = [1,6];
2097}
2098def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2099
Craig Topper58afb4e2018-03-22 21:10:07 +00002100def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002101 let Latency = 12;
2102 let NumMicroOps = 4;
2103 let ResourceCycles = [1,1,1,1];
2104}
2105def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2106
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002107def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002108 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002109 let NumMicroOps = 3;
2110 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002111}
Craig Topperfc179c62018-03-22 04:23:41 +00002112def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2113 "ADD_FI32m",
2114 "SUBR_FI16m",
2115 "SUBR_FI32m",
2116 "SUB_FI16m",
2117 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002118
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002119def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2120 let Latency = 13;
2121 let NumMicroOps = 3;
2122 let ResourceCycles = [1,1,1];
2123}
2124def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2125
Craig Topper58afb4e2018-03-22 21:10:07 +00002126def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002127 let Latency = 13;
2128 let NumMicroOps = 4;
2129 let ResourceCycles = [1,3];
2130}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002131def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002132
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002133def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002134 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002135 let NumMicroOps = 4;
2136 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002137}
Craig Topperfc179c62018-03-22 04:23:41 +00002138def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2139 "VHADDPSYrm",
2140 "VHSUBPDYrm",
2141 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002142
Craig Topper8104f262018-04-02 05:33:28 +00002143def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002144 let Latency = 14;
2145 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002146 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002147}
Craig Topper8104f262018-04-02 05:33:28 +00002148def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002149 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002150
Craig Topper8104f262018-04-02 05:33:28 +00002151def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2152 let Latency = 14;
2153 let NumMicroOps = 1;
2154 let ResourceCycles = [1,5];
2155}
2156def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2157
Craig Topper58afb4e2018-03-22 21:10:07 +00002158def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002159 let Latency = 14;
2160 let NumMicroOps = 3;
2161 let ResourceCycles = [1,2];
2162}
Craig Topperfc179c62018-03-22 04:23:41 +00002163def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2164def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2165def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2166def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002167
2168def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2169 let Latency = 14;
2170 let NumMicroOps = 3;
2171 let ResourceCycles = [1,1,1];
2172}
Craig Topperfc179c62018-03-22 04:23:41 +00002173def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2174 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002175
2176def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002177 let Latency = 14;
2178 let NumMicroOps = 10;
2179 let ResourceCycles = [2,4,1,3];
2180}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002181def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002182
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002183def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002184 let Latency = 15;
2185 let NumMicroOps = 1;
2186 let ResourceCycles = [1];
2187}
Craig Topperfc179c62018-03-22 04:23:41 +00002188def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2189 "DIVR_FST0r",
2190 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002191
Craig Topper58afb4e2018-03-22 21:10:07 +00002192def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002193 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002194 let NumMicroOps = 3;
2195 let ResourceCycles = [1,2];
2196}
Craig Topper40d3b322018-03-22 21:55:20 +00002197def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2198 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002199
Craig Topperd25f1ac2018-03-20 23:39:48 +00002200def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2201 let Latency = 17;
2202 let NumMicroOps = 3;
2203 let ResourceCycles = [1,2];
2204}
2205def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2206
Craig Topper58afb4e2018-03-22 21:10:07 +00002207def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002208 let Latency = 15;
2209 let NumMicroOps = 4;
2210 let ResourceCycles = [1,1,2];
2211}
Craig Topperfc179c62018-03-22 04:23:41 +00002212def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002213
2214def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2215 let Latency = 15;
2216 let NumMicroOps = 10;
2217 let ResourceCycles = [1,1,1,5,1,1];
2218}
Craig Topper13a16502018-03-19 00:56:09 +00002219def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002220
Craig Topper8104f262018-04-02 05:33:28 +00002221def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002222 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002223 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002224 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002225}
Craig Topperfc179c62018-03-22 04:23:41 +00002226def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002227
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002228def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2229 let Latency = 16;
2230 let NumMicroOps = 14;
2231 let ResourceCycles = [1,1,1,4,2,5];
2232}
2233def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2234
2235def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002236 let Latency = 16;
2237 let NumMicroOps = 16;
2238 let ResourceCycles = [16];
2239}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002240def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002241
Craig Topper8104f262018-04-02 05:33:28 +00002242def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002243 let Latency = 17;
2244 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002245 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002246}
Craig Topper8104f262018-04-02 05:33:28 +00002247def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2248
2249def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2250 let Latency = 17;
2251 let NumMicroOps = 2;
2252 let ResourceCycles = [1,1,3];
2253}
2254def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002255
2256def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002257 let Latency = 17;
2258 let NumMicroOps = 15;
2259 let ResourceCycles = [2,1,2,4,2,4];
2260}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002261def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002262
Craig Topper8104f262018-04-02 05:33:28 +00002263def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002264 let Latency = 18;
2265 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002266 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002267}
Craig Topper8104f262018-04-02 05:33:28 +00002268def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002269 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002270
Craig Topper8104f262018-04-02 05:33:28 +00002271def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2272 let Latency = 18;
2273 let NumMicroOps = 1;
2274 let ResourceCycles = [1,12];
2275}
2276def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2277
2278def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002279 let Latency = 18;
2280 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002281 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002282}
Craig Topper8104f262018-04-02 05:33:28 +00002283def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2284
2285def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2286 let Latency = 18;
2287 let NumMicroOps = 2;
2288 let ResourceCycles = [1,1,3];
2289}
2290def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002291
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002292def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002293 let Latency = 18;
2294 let NumMicroOps = 8;
2295 let ResourceCycles = [1,1,1,5];
2296}
Craig Topperfc179c62018-03-22 04:23:41 +00002297def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002298
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002299def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002300 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002301 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002302 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002303}
Craig Topper13a16502018-03-19 00:56:09 +00002304def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002305
Craig Topper8104f262018-04-02 05:33:28 +00002306def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002307 let Latency = 19;
2308 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002309 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002310}
Craig Topper8104f262018-04-02 05:33:28 +00002311def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2312
2313def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2314 let Latency = 19;
2315 let NumMicroOps = 2;
2316 let ResourceCycles = [1,1,6];
2317}
2318def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002319
Craig Topper58afb4e2018-03-22 21:10:07 +00002320def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002321 let Latency = 19;
2322 let NumMicroOps = 5;
2323 let ResourceCycles = [1,1,3];
2324}
Craig Topperfc179c62018-03-22 04:23:41 +00002325def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002326
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002327def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002328 let Latency = 20;
2329 let NumMicroOps = 1;
2330 let ResourceCycles = [1];
2331}
Craig Topperfc179c62018-03-22 04:23:41 +00002332def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2333 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002334 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002335
Craig Topper8104f262018-04-02 05:33:28 +00002336def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002337 let Latency = 20;
2338 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002339 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002340}
Craig Topperfc179c62018-03-22 04:23:41 +00002341def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002342
Craig Topper58afb4e2018-03-22 21:10:07 +00002343def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002344 let Latency = 20;
2345 let NumMicroOps = 5;
2346 let ResourceCycles = [1,1,3];
2347}
2348def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2349
2350def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2351 let Latency = 20;
2352 let NumMicroOps = 8;
2353 let ResourceCycles = [1,1,1,1,1,1,2];
2354}
Craig Topperfc179c62018-03-22 04:23:41 +00002355def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2356 "INSL",
2357 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002358
2359def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002360 let Latency = 20;
2361 let NumMicroOps = 10;
2362 let ResourceCycles = [1,2,7];
2363}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002364def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002365
Craig Topper8104f262018-04-02 05:33:28 +00002366def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002367 let Latency = 21;
2368 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002369 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002370}
2371def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2372
2373def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2374 let Latency = 22;
2375 let NumMicroOps = 2;
2376 let ResourceCycles = [1,1];
2377}
Craig Topperfc179c62018-03-22 04:23:41 +00002378def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2379 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002380
2381def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2382 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002383 let NumMicroOps = 5;
2384 let ResourceCycles = [1,2,1,1];
2385}
Craig Topper17a31182017-12-16 18:35:29 +00002386def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2387 VGATHERDPDrm,
2388 VGATHERQPDrm,
2389 VGATHERQPSrm,
2390 VPGATHERDDrm,
2391 VPGATHERDQrm,
2392 VPGATHERQDrm,
2393 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002394
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002395def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2396 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002397 let NumMicroOps = 5;
2398 let ResourceCycles = [1,2,1,1];
2399}
Craig Topper17a31182017-12-16 18:35:29 +00002400def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2401 VGATHERQPDYrm,
2402 VGATHERQPSYrm,
2403 VPGATHERDDYrm,
2404 VPGATHERDQYrm,
2405 VPGATHERQDYrm,
2406 VPGATHERQQYrm,
2407 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002408
Craig Topper8104f262018-04-02 05:33:28 +00002409def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002410 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002411 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002412 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002413}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002414def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002415
2416def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2417 let Latency = 23;
2418 let NumMicroOps = 19;
2419 let ResourceCycles = [2,1,4,1,1,4,6];
2420}
2421def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2422
Craig Topper8104f262018-04-02 05:33:28 +00002423def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002424 let Latency = 24;
2425 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002426 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002427}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002428def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002429
Craig Topper8104f262018-04-02 05:33:28 +00002430def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002431 let Latency = 25;
2432 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002433 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002434}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002435def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002436
2437def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2438 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002439 let NumMicroOps = 3;
2440 let ResourceCycles = [1,1,1];
2441}
Craig Topperfc179c62018-03-22 04:23:41 +00002442def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2443 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002444
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002445def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2446 let Latency = 27;
2447 let NumMicroOps = 2;
2448 let ResourceCycles = [1,1];
2449}
Craig Topperfc179c62018-03-22 04:23:41 +00002450def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2451 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002452
2453def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2454 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002455 let NumMicroOps = 8;
2456 let ResourceCycles = [2,4,1,1];
2457}
Craig Topper13a16502018-03-19 00:56:09 +00002458def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002459
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002460def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002461 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002462 let NumMicroOps = 3;
2463 let ResourceCycles = [1,1,1];
2464}
Craig Topperfc179c62018-03-22 04:23:41 +00002465def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2466 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002467
2468def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2469 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002470 let NumMicroOps = 23;
2471 let ResourceCycles = [1,5,3,4,10];
2472}
Craig Topperfc179c62018-03-22 04:23:41 +00002473def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2474 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002475
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002476def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2477 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002478 let NumMicroOps = 23;
2479 let ResourceCycles = [1,5,2,1,4,10];
2480}
Craig Topperfc179c62018-03-22 04:23:41 +00002481def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2482 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002483
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002484def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2485 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002486 let NumMicroOps = 31;
2487 let ResourceCycles = [1,8,1,21];
2488}
Craig Topper391c6f92017-12-10 01:24:08 +00002489def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002490
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002491def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2492 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002493 let NumMicroOps = 18;
2494 let ResourceCycles = [1,1,2,3,1,1,1,8];
2495}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002496def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002497
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002498def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2499 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002500 let NumMicroOps = 39;
2501 let ResourceCycles = [1,10,1,1,26];
2502}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002503def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002504
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002505def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002506 let Latency = 42;
2507 let NumMicroOps = 22;
2508 let ResourceCycles = [2,20];
2509}
Craig Topper2d451e72018-03-18 08:38:06 +00002510def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002511
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002512def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2513 let Latency = 42;
2514 let NumMicroOps = 40;
2515 let ResourceCycles = [1,11,1,1,26];
2516}
Craig Topper391c6f92017-12-10 01:24:08 +00002517def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002518
2519def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2520 let Latency = 46;
2521 let NumMicroOps = 44;
2522 let ResourceCycles = [1,11,1,1,30];
2523}
2524def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2525
2526def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2527 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002528 let NumMicroOps = 64;
2529 let ResourceCycles = [2,8,5,10,39];
2530}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002531def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002532
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002533def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2534 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002535 let NumMicroOps = 88;
2536 let ResourceCycles = [4,4,31,1,2,1,45];
2537}
Craig Topper2d451e72018-03-18 08:38:06 +00002538def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002539
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002540def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2541 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002542 let NumMicroOps = 90;
2543 let ResourceCycles = [4,2,33,1,2,1,47];
2544}
Craig Topper2d451e72018-03-18 08:38:06 +00002545def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002546
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002547def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002548 let Latency = 75;
2549 let NumMicroOps = 15;
2550 let ResourceCycles = [6,3,6];
2551}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002552def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002553
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002554def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002555 let Latency = 76;
2556 let NumMicroOps = 32;
2557 let ResourceCycles = [7,2,8,3,1,11];
2558}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002559def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002560
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002561def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002562 let Latency = 102;
2563 let NumMicroOps = 66;
2564 let ResourceCycles = [4,2,4,8,14,34];
2565}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002566def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002567
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002568def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2569 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002570 let NumMicroOps = 100;
2571 let ResourceCycles = [9,1,11,16,1,11,21,30];
2572}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002573def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002574
2575} // SchedModel