blob: 6511206992d4cfe9f129edfecc79a8a639ba899e [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 Pilgrim30c38c32018-03-19 14:46:07 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub/compare.
155defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
156defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
157defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
158defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 5>; // Floating point reciprocal estimate.
159defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 5>; // Floating point reciprocal square root estimate.
160defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
161defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000162defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000163defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1>; // Floating point vector blends.
164defm : SKLWriteResPair<WriteFVarBlend, [SKLPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000165
166// FMA Scheduling helper class.
167// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
168
169// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000170def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
171def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
172def : WriteRes<WriteVecMove, [SKLPort015]>;
173
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000174defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
175defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
176defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000177defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000178defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000179defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : SKLWriteResPair<WriteBlend, [SKLPort15], 1>; // Vector blends.
181defm : SKLWriteResPair<WriteVarBlend, [SKLPort5], 2, [2]>; // Vector variable blends.
182defm : SKLWriteResPair<WriteMPSAD, [SKLPort0, SKLPort5], 6, [1, 2]>; // Vector MPSAD.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000183
184// Vector bitwise operations.
185// These are often used on both floating point and integer vectors.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000186defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1>; // Vector and/or/xor.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000187
188// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000189defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
190defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
191defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000192
193// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000194
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000195// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000196def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
197 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000198 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000199 let ResourceCycles = [3];
200}
201def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000202 let Latency = 16;
203 let NumMicroOps = 4;
204 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000205}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000206
207// Packed Compare Explicit Length Strings, Return Mask
208def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
209 let Latency = 19;
210 let NumMicroOps = 9;
211 let ResourceCycles = [4,3,1,1];
212}
213def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
214 let Latency = 25;
215 let NumMicroOps = 10;
216 let ResourceCycles = [4,3,1,1,1];
217}
218
219// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000220def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000221 let Latency = 10;
222 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000223 let ResourceCycles = [3];
224}
225def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000226 let Latency = 16;
227 let NumMicroOps = 4;
228 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000229}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000230
231// Packed Compare Explicit Length Strings, Return Index
232def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
233 let Latency = 18;
234 let NumMicroOps = 8;
235 let ResourceCycles = [4,3,1];
236}
237def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
238 let Latency = 24;
239 let NumMicroOps = 9;
240 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000241}
242
Simon Pilgrima2f26782018-03-27 20:38:54 +0000243// MOVMSK Instructions.
244def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
245def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
246def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
247
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000248// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000249def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
250 let Latency = 4;
251 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000252 let ResourceCycles = [1];
253}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000254def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
255 let Latency = 10;
256 let NumMicroOps = 2;
257 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000258}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000259
260def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
261 let Latency = 8;
262 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000263 let ResourceCycles = [2];
264}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000265def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000266 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267 let NumMicroOps = 3;
268 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000269}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000270
271def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
272 let Latency = 20;
273 let NumMicroOps = 11;
274 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000275}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000276def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
277 let Latency = 25;
278 let NumMicroOps = 11;
279 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000280}
281
282// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000283def : WriteRes<WriteCLMul, [SKLPort5]> {
284 let Latency = 6;
285 let NumMicroOps = 1;
286 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000287}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000288def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
289 let Latency = 12;
290 let NumMicroOps = 2;
291 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000292}
293
294// Catch-all for expensive system instructions.
295def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
296
297// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000298defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000299defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000300defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000301defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000302defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000303
304// Old microcoded instructions that nobody use.
305def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
306
307// Fence instructions.
308def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
309
310// Nop, not very useful expect it provides a model for nops!
311def : WriteRes<WriteNop, []>;
312
313////////////////////////////////////////////////////////////////////////////////
314// Horizontal add/sub instructions.
315////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000316
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000317defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
318defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000319
320// Remaining instrs.
321
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000322def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000323 let Latency = 1;
324 let NumMicroOps = 1;
325 let ResourceCycles = [1];
326}
Craig Topperfc179c62018-03-22 04:23:41 +0000327def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
328 "MMX_PADDSWirr",
329 "MMX_PADDUSBirr",
330 "MMX_PADDUSWirr",
331 "MMX_PAVGBirr",
332 "MMX_PAVGWirr",
333 "MMX_PCMPEQBirr",
334 "MMX_PCMPEQDirr",
335 "MMX_PCMPEQWirr",
336 "MMX_PCMPGTBirr",
337 "MMX_PCMPGTDirr",
338 "MMX_PCMPGTWirr",
339 "MMX_PMAXSWirr",
340 "MMX_PMAXUBirr",
341 "MMX_PMINSWirr",
342 "MMX_PMINUBirr",
343 "MMX_PSLLDri",
344 "MMX_PSLLDrr",
345 "MMX_PSLLQri",
346 "MMX_PSLLQrr",
347 "MMX_PSLLWri",
348 "MMX_PSLLWrr",
349 "MMX_PSRADri",
350 "MMX_PSRADrr",
351 "MMX_PSRAWri",
352 "MMX_PSRAWrr",
353 "MMX_PSRLDri",
354 "MMX_PSRLDrr",
355 "MMX_PSRLQri",
356 "MMX_PSRLQrr",
357 "MMX_PSRLWri",
358 "MMX_PSRLWrr",
359 "MMX_PSUBSBirr",
360 "MMX_PSUBSWirr",
361 "MMX_PSUBUSBirr",
362 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000363
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000364def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000365 let Latency = 1;
366 let NumMicroOps = 1;
367 let ResourceCycles = [1];
368}
Craig Topperfc179c62018-03-22 04:23:41 +0000369def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
370 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000371 "MMX_MOVD64rr",
372 "MMX_MOVD64to64rr",
373 "MMX_PALIGNRrri",
Craig Topperfc179c62018-03-22 04:23:41 +0000374 "MMX_PSHUFWri",
375 "MMX_PUNPCKHBWirr",
376 "MMX_PUNPCKHDQirr",
377 "MMX_PUNPCKHWDirr",
378 "MMX_PUNPCKLBWirr",
379 "MMX_PUNPCKLDQirr",
380 "MMX_PUNPCKLWDirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000381 "UCOM_FPr",
382 "UCOM_Fr",
Craig Topperfc179c62018-03-22 04:23:41 +0000383 "VBROADCASTSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000384 "(V?)INSERTPSrr",
385 "(V?)MOV64toPQIrr",
386 "(V?)MOVDDUP(Y?)rr",
387 "(V?)MOVDI2PDIrr",
388 "(V?)MOVHLPSrr",
389 "(V?)MOVLHPSrr",
390 "(V?)MOVSDrr",
391 "(V?)MOVSHDUP(Y?)rr",
392 "(V?)MOVSLDUP(Y?)rr",
Craig Topper15fef892018-03-25 23:40:56 +0000393 "(V?)MOVSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000394 "(V?)PACKSSDW(Y?)rr",
395 "(V?)PACKSSWB(Y?)rr",
396 "(V?)PACKUSDW(Y?)rr",
397 "(V?)PACKUSWB(Y?)rr",
398 "(V?)PALIGNR(Y?)rri",
399 "(V?)PBLENDW(Y?)rri",
Craig Topperfc179c62018-03-22 04:23:41 +0000400 "VPBROADCASTDrr",
401 "VPBROADCASTQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000402 "VPERMILPD(Y?)ri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000403 "VPERMILPS(Y?)ri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000404 "(V?)PMOVSXBDrr",
405 "(V?)PMOVSXBQrr",
406 "(V?)PMOVSXBWrr",
407 "(V?)PMOVSXDQrr",
408 "(V?)PMOVSXWDrr",
409 "(V?)PMOVSXWQrr",
410 "(V?)PMOVZXBDrr",
411 "(V?)PMOVZXBQrr",
412 "(V?)PMOVZXBWrr",
413 "(V?)PMOVZXDQrr",
414 "(V?)PMOVZXWDrr",
415 "(V?)PMOVZXWQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000416 "(V?)PSHUFD(Y?)ri",
417 "(V?)PSHUFHW(Y?)ri",
418 "(V?)PSHUFLW(Y?)ri",
419 "(V?)PSLLDQ(Y?)ri",
420 "(V?)PSRLDQ(Y?)ri",
421 "(V?)PUNPCKHBW(Y?)rr",
422 "(V?)PUNPCKHDQ(Y?)rr",
423 "(V?)PUNPCKHQDQ(Y?)rr",
424 "(V?)PUNPCKHWD(Y?)rr",
425 "(V?)PUNPCKLBW(Y?)rr",
426 "(V?)PUNPCKLDQ(Y?)rr",
427 "(V?)PUNPCKLQDQ(Y?)rr",
428 "(V?)PUNPCKLWD(Y?)rr",
429 "(V?)SHUFPD(Y?)rri",
430 "(V?)SHUFPS(Y?)rri",
431 "(V?)UNPCKHPD(Y?)rr",
432 "(V?)UNPCKHPS(Y?)rr",
433 "(V?)UNPCKLPD(Y?)rr",
434 "(V?)UNPCKLPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000435
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000436def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000437 let Latency = 1;
438 let NumMicroOps = 1;
439 let ResourceCycles = [1];
440}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000441def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000442
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000443def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000444 let Latency = 1;
445 let NumMicroOps = 1;
446 let ResourceCycles = [1];
447}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000448def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
449 "(V?)PABSD(Y?)rr",
450 "(V?)PABSW(Y?)rr",
451 "(V?)PADDSB(Y?)rr",
452 "(V?)PADDSW(Y?)rr",
453 "(V?)PADDUSB(Y?)rr",
454 "(V?)PADDUSW(Y?)rr",
455 "(V?)PAVGB(Y?)rr",
456 "(V?)PAVGW(Y?)rr",
457 "(V?)PCMPEQB(Y?)rr",
458 "(V?)PCMPEQD(Y?)rr",
459 "(V?)PCMPEQQ(Y?)rr",
460 "(V?)PCMPEQW(Y?)rr",
461 "(V?)PCMPGTB(Y?)rr",
462 "(V?)PCMPGTD(Y?)rr",
463 "(V?)PCMPGTW(Y?)rr",
464 "(V?)PMAXSB(Y?)rr",
465 "(V?)PMAXSD(Y?)rr",
466 "(V?)PMAXSW(Y?)rr",
467 "(V?)PMAXUB(Y?)rr",
468 "(V?)PMAXUD(Y?)rr",
469 "(V?)PMAXUW(Y?)rr",
470 "(V?)PMINSB(Y?)rr",
471 "(V?)PMINSD(Y?)rr",
472 "(V?)PMINSW(Y?)rr",
473 "(V?)PMINUB(Y?)rr",
474 "(V?)PMINUD(Y?)rr",
475 "(V?)PMINUW(Y?)rr",
476 "(V?)PSIGNB(Y?)rr",
477 "(V?)PSIGND(Y?)rr",
478 "(V?)PSIGNW(Y?)rr",
479 "(V?)PSLLD(Y?)ri",
480 "(V?)PSLLQ(Y?)ri",
481 "VPSLLVD(Y?)rr",
482 "VPSLLVQ(Y?)rr",
483 "(V?)PSLLW(Y?)ri",
484 "(V?)PSRAD(Y?)ri",
485 "VPSRAVD(Y?)rr",
486 "(V?)PSRAW(Y?)ri",
487 "(V?)PSRLD(Y?)ri",
488 "(V?)PSRLQ(Y?)ri",
489 "VPSRLVD(Y?)rr",
490 "VPSRLVQ(Y?)rr",
491 "(V?)PSRLW(Y?)ri",
492 "(V?)PSUBSB(Y?)rr",
493 "(V?)PSUBSW(Y?)rr",
494 "(V?)PSUBUSB(Y?)rr",
495 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000496
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000497def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000498 let Latency = 1;
499 let NumMicroOps = 1;
500 let ResourceCycles = [1];
501}
Craig Topperfc179c62018-03-22 04:23:41 +0000502def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
503 "FNOP",
504 "MMX_MOVQ64rr",
505 "MMX_PABSBrr",
506 "MMX_PABSDrr",
507 "MMX_PABSWrr",
508 "MMX_PADDBirr",
509 "MMX_PADDDirr",
510 "MMX_PADDQirr",
511 "MMX_PADDWirr",
512 "MMX_PANDNirr",
513 "MMX_PANDirr",
514 "MMX_PORirr",
515 "MMX_PSIGNBrr",
516 "MMX_PSIGNDrr",
517 "MMX_PSIGNWrr",
518 "MMX_PSUBBirr",
519 "MMX_PSUBDirr",
520 "MMX_PSUBQirr",
521 "MMX_PSUBWirr",
522 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000523
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000524def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000525 let Latency = 1;
526 let NumMicroOps = 1;
527 let ResourceCycles = [1];
528}
Craig Topperfbe31322018-04-05 21:56:19 +0000529def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000530def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
531 "ADC(16|32|64)i",
532 "ADC(8|16|32|64)rr",
533 "ADCX(32|64)rr",
534 "ADOX(32|64)rr",
535 "BT(16|32|64)ri8",
536 "BT(16|32|64)rr",
537 "BTC(16|32|64)ri8",
538 "BTC(16|32|64)rr",
539 "BTR(16|32|64)ri8",
540 "BTR(16|32|64)rr",
541 "BTS(16|32|64)ri8",
542 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000543 "CLAC",
Craig Topperfc179c62018-03-22 04:23:41 +0000544 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
545 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
546 "JMP_1",
547 "JMP_4",
548 "RORX(32|64)ri",
549 "SAR(8|16|32|64)r1",
550 "SAR(8|16|32|64)ri",
551 "SARX(32|64)rr",
552 "SBB(16|32|64)ri",
553 "SBB(16|32|64)i",
554 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000555 "SHL(8|16|32|64)r1",
556 "SHL(8|16|32|64)ri",
557 "SHLX(32|64)rr",
558 "SHR(8|16|32|64)r1",
559 "SHR(8|16|32|64)ri",
560 "SHRX(32|64)rr",
561 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000562
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000563def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
564 let Latency = 1;
565 let NumMicroOps = 1;
566 let ResourceCycles = [1];
567}
Craig Topperfc179c62018-03-22 04:23:41 +0000568def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
569 "BLSI(32|64)rr",
570 "BLSMSK(32|64)rr",
571 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000572 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000573
574def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
575 let Latency = 1;
576 let NumMicroOps = 1;
577 let ResourceCycles = [1];
578}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000579def: InstRW<[SKLWriteResGroup9], (instregex "(V?)ANDNPD(Y?)rr",
580 "(V?)ANDNPS(Y?)rr",
581 "(V?)ANDPD(Y?)rr",
582 "(V?)ANDPS(Y?)rr",
583 "(V?)BLENDPD(Y?)rri",
584 "(V?)BLENDPS(Y?)rri",
585 "(V?)MOVAPD(Y?)rr",
586 "(V?)MOVAPS(Y?)rr",
587 "(V?)MOVDQA(Y?)rr",
588 "(V?)MOVDQU(Y?)rr",
589 "(V?)MOVPQI2QIrr",
Craig Topper15fef892018-03-25 23:40:56 +0000590 "(V?)MOVUPD(Y?)rr",
591 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000592 "(V?)MOVZPQILo2PQIrr",
593 "(V?)ORPD(Y?)rr",
594 "(V?)ORPS(Y?)rr",
595 "(V?)PADDB(Y?)rr",
596 "(V?)PADDD(Y?)rr",
597 "(V?)PADDQ(Y?)rr",
598 "(V?)PADDW(Y?)rr",
599 "(V?)PANDN(Y?)rr",
600 "(V?)PAND(Y?)rr",
601 "VPBLENDD(Y?)rri",
602 "(V?)POR(Y?)rr",
603 "(V?)PSUBB(Y?)rr",
604 "(V?)PSUBD(Y?)rr",
605 "(V?)PSUBQ(Y?)rr",
606 "(V?)PSUBW(Y?)rr",
607 "(V?)PXOR(Y?)rr",
Simon Pilgrimfecb0b72018-03-25 19:17:17 +0000608 "(V?)XORPD(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000609 "(V?)XORPS(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000610
611def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
612 let Latency = 1;
613 let NumMicroOps = 1;
614 let ResourceCycles = [1];
615}
Craig Topperfbe31322018-04-05 21:56:19 +0000616def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000617def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000618 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000619 "LAHF",
Craig Topperfc179c62018-03-22 04:23:41 +0000620 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000621 "SAHF",
622 "SGDT64m",
623 "SIDT64m",
624 "SLDT64m",
625 "SMSW16m",
626 "STC",
627 "STRm",
Craig Topperfc179c62018-03-22 04:23:41 +0000628 "SYSCALL",
Craig Topperf0d04262018-04-06 16:16:48 +0000629 "XCHG(16|32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000630
631def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000632 let Latency = 1;
633 let NumMicroOps = 2;
634 let ResourceCycles = [1,1];
635}
Craig Topperfc179c62018-03-22 04:23:41 +0000636def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
637 "MMX_MOVD64from64rm",
638 "MMX_MOVD64mr",
639 "MMX_MOVNTQmr",
640 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000641 "MOVNTI_64mr",
642 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000643 "ST_FP32m",
644 "ST_FP64m",
645 "ST_FP80m",
646 "VEXTRACTF128mr",
647 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000648 "(V?)MOVAPDYmr",
649 "(V?)MOVAPS(Y?)mr",
650 "(V?)MOVDQA(Y?)mr",
651 "(V?)MOVDQU(Y?)mr",
652 "(V?)MOVHPDmr",
653 "(V?)MOVHPSmr",
654 "(V?)MOVLPDmr",
655 "(V?)MOVLPSmr",
656 "(V?)MOVNTDQ(Y?)mr",
657 "(V?)MOVNTPD(Y?)mr",
658 "(V?)MOVNTPS(Y?)mr",
659 "(V?)MOVPDI2DImr",
660 "(V?)MOVPQI2QImr",
661 "(V?)MOVPQIto64mr",
662 "(V?)MOVSDmr",
663 "(V?)MOVSSmr",
664 "(V?)MOVUPD(Y?)mr",
665 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000666 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000667
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000668def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000669 let Latency = 2;
670 let NumMicroOps = 1;
671 let ResourceCycles = [1];
672}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000673def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000674 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000675 "(V?)COMISDrr",
676 "(V?)COMISSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000677 "(V?)MOVPDI2DIrr",
678 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000679 "VTESTPD(Y?)rr",
680 "VTESTPS(Y?)rr",
681 "(V?)UCOMISDrr",
682 "(V?)UCOMISSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000683
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000684def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000685 let Latency = 2;
686 let NumMicroOps = 2;
687 let ResourceCycles = [2];
688}
Craig Topperfc179c62018-03-22 04:23:41 +0000689def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
690 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000691 "(V?)PINSRBrr",
692 "(V?)PINSRDrr",
693 "(V?)PINSRQrr",
694 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000695
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000696def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000697 let Latency = 2;
698 let NumMicroOps = 2;
699 let ResourceCycles = [2];
700}
Craig Topperfc179c62018-03-22 04:23:41 +0000701def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
702 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000703
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000704def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000705 let Latency = 2;
706 let NumMicroOps = 2;
707 let ResourceCycles = [2];
708}
Craig Topperfc179c62018-03-22 04:23:41 +0000709def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
710 "ROL(8|16|32|64)r1",
711 "ROL(8|16|32|64)ri",
712 "ROR(8|16|32|64)r1",
713 "ROR(8|16|32|64)ri",
714 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000715
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000716def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000717 let Latency = 2;
718 let NumMicroOps = 2;
719 let ResourceCycles = [2];
720}
Craig Topperfc179c62018-03-22 04:23:41 +0000721def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
722 "BLENDVPSrr0",
723 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000724 "VBLENDVPD(Y?)rr",
725 "VBLENDVPS(Y?)rr",
726 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000727
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000728def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000729 let Latency = 2;
730 let NumMicroOps = 2;
731 let ResourceCycles = [2];
732}
Craig Topperfc179c62018-03-22 04:23:41 +0000733def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
734 "WAIT",
735 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000736
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000737def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000738 let Latency = 2;
739 let NumMicroOps = 2;
740 let ResourceCycles = [1,1];
741}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000742def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
743 "VMASKMOVPS(Y?)mr",
744 "VPMASKMOVD(Y?)mr",
745 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000746
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000747def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000748 let Latency = 2;
749 let NumMicroOps = 2;
750 let ResourceCycles = [1,1];
751}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000752def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
753 "(V?)PSLLQrr",
754 "(V?)PSLLWrr",
755 "(V?)PSRADrr",
756 "(V?)PSRAWrr",
757 "(V?)PSRLDrr",
758 "(V?)PSRLQrr",
759 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000760
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000761def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000762 let Latency = 2;
763 let NumMicroOps = 2;
764 let ResourceCycles = [1,1];
765}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000766def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000767
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000768def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000769 let Latency = 2;
770 let NumMicroOps = 2;
771 let ResourceCycles = [1,1];
772}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000773def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000774
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000775def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000776 let Latency = 2;
777 let NumMicroOps = 2;
778 let ResourceCycles = [1,1];
779}
Craig Topper498875f2018-04-04 17:54:19 +0000780def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
781
782def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
783 let Latency = 1;
784 let NumMicroOps = 1;
785 let ResourceCycles = [1];
786}
787def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000788
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000789def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000790 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000791 let NumMicroOps = 2;
792 let ResourceCycles = [1,1];
793}
Craig Topper2d451e72018-03-18 08:38:06 +0000794def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000795def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000796def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
797 "ADC8ri",
798 "SBB8i8",
799 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000800
801def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
802 let Latency = 2;
803 let NumMicroOps = 3;
804 let ResourceCycles = [1,1,1];
805}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000806def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
807 "(V?)PEXTRBmr",
808 "(V?)PEXTRDmr",
809 "(V?)PEXTRQmr",
810 "(V?)PEXTRWmr",
811 "(V?)STMXCSR")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000812
813def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
814 let Latency = 2;
815 let NumMicroOps = 3;
816 let ResourceCycles = [1,1,1];
817}
818def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
819
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000820def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
821 let Latency = 2;
822 let NumMicroOps = 3;
823 let ResourceCycles = [1,1,1];
824}
825def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
826
827def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
828 let Latency = 2;
829 let NumMicroOps = 3;
830 let ResourceCycles = [1,1,1];
831}
Craig Topper2d451e72018-03-18 08:38:06 +0000832def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000833def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
834 "PUSH64i8",
835 "STOSB",
836 "STOSL",
837 "STOSQ",
838 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000839
840def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
841 let Latency = 3;
842 let NumMicroOps = 1;
843 let ResourceCycles = [1];
844}
Clement Courbet327fac42018-03-07 08:14:02 +0000845def: InstRW<[SKLWriteResGroup29], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000846def: InstRW<[SKLWriteResGroup29], (instrs IMUL8r, MUL8r)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000847def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000848 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000849 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000850 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000851
Clement Courbet327fac42018-03-07 08:14:02 +0000852def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000853 let Latency = 3;
854 let NumMicroOps = 2;
855 let ResourceCycles = [1,1];
856}
Clement Courbet327fac42018-03-07 08:14:02 +0000857def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000858
859def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
860 let Latency = 3;
861 let NumMicroOps = 1;
862 let ResourceCycles = [1];
863}
Craig Topperfc179c62018-03-22 04:23:41 +0000864def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
865 "ADD_FST0r",
866 "ADD_FrST0",
867 "MMX_PSADBWirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000868 "SUBR_FPrST0",
869 "SUBR_FST0r",
870 "SUBR_FrST0",
871 "SUB_FPrST0",
872 "SUB_FST0r",
873 "SUB_FrST0",
874 "VBROADCASTSDYrr",
875 "VBROADCASTSSYrr",
876 "VEXTRACTF128rr",
877 "VEXTRACTI128rr",
878 "VINSERTF128rr",
879 "VINSERTI128rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000880 "VPBROADCASTB(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000881 "VPBROADCASTDYrr",
882 "VPBROADCASTQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000883 "VPBROADCASTW(Y?)rr",
884 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000885 "VPERM2F128rr",
886 "VPERM2I128rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000887 "VPERMPDYri",
Craig Topperfc179c62018-03-22 04:23:41 +0000888 "VPERMQYri",
889 "VPMOVSXBDYrr",
890 "VPMOVSXBQYrr",
891 "VPMOVSXBWYrr",
892 "VPMOVSXDQYrr",
893 "VPMOVSXWDYrr",
894 "VPMOVSXWQYrr",
895 "VPMOVZXBDYrr",
896 "VPMOVZXBQYrr",
897 "VPMOVZXBWYrr",
898 "VPMOVZXDQYrr",
899 "VPMOVZXWDYrr",
900 "VPMOVZXWQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000901 "(V?)PSADBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000902
903def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
904 let Latency = 3;
905 let NumMicroOps = 2;
906 let ResourceCycles = [1,1];
907}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000908def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
909 "(V?)EXTRACTPSrr",
910 "(V?)PEXTRBrr",
911 "(V?)PEXTRDrr",
912 "(V?)PEXTRQrr",
913 "(V?)PEXTRWrr",
914 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000915
916def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
917 let Latency = 3;
918 let NumMicroOps = 2;
919 let ResourceCycles = [1,1];
920}
921def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
922
923def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
924 let Latency = 3;
925 let NumMicroOps = 3;
926 let ResourceCycles = [3];
927}
Craig Topperfc179c62018-03-22 04:23:41 +0000928def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
929 "ROR(8|16|32|64)rCL",
930 "SAR(8|16|32|64)rCL",
931 "SHL(8|16|32|64)rCL",
932 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000933
934def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
935 let Latency = 3;
936 let NumMicroOps = 3;
937 let ResourceCycles = [3];
938}
Craig Topperfc179c62018-03-22 04:23:41 +0000939def: InstRW<[SKLWriteResGroup34], (instregex "XADD(8|16|32|64)rr",
940 "XCHG8rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000941
942def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
943 let Latency = 3;
944 let NumMicroOps = 3;
945 let ResourceCycles = [1,2];
946}
Craig Topperfc179c62018-03-22 04:23:41 +0000947def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PHADDSWrr",
948 "MMX_PHSUBSWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000949
950def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
951 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000952 let NumMicroOps = 3;
953 let ResourceCycles = [2,1];
954}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000955def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
956 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000957
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000958def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
959 let Latency = 3;
960 let NumMicroOps = 3;
961 let ResourceCycles = [2,1];
962}
Craig Topperfc179c62018-03-22 04:23:41 +0000963def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHADDDrr",
964 "MMX_PHADDWrr",
965 "MMX_PHSUBDrr",
966 "MMX_PHSUBWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000967
968def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
969 let Latency = 3;
970 let NumMicroOps = 3;
971 let ResourceCycles = [2,1];
972}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000973def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
974 "(V?)PHADDW(Y?)rr",
975 "(V?)PHSUBD(Y?)rr",
976 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000977
978def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
979 let Latency = 3;
980 let NumMicroOps = 3;
981 let ResourceCycles = [2,1];
982}
Craig Topperfc179c62018-03-22 04:23:41 +0000983def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
984 "MMX_PACKSSWBirr",
985 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000986
987def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
988 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000989 let NumMicroOps = 3;
990 let ResourceCycles = [1,2];
991}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000992def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000993
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000994def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
995 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000996 let NumMicroOps = 3;
997 let ResourceCycles = [1,2];
998}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000999def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001000
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001001def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
1002 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001003 let NumMicroOps = 3;
1004 let ResourceCycles = [1,2];
1005}
Craig Topperfc179c62018-03-22 04:23:41 +00001006def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
1007 "RCL(8|16|32|64)ri",
1008 "RCR(8|16|32|64)r1",
1009 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001010
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001011def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
1012 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001013 let NumMicroOps = 3;
1014 let ResourceCycles = [1,1,1];
1015}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001016def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001017
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001018def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
1019 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001020 let NumMicroOps = 4;
1021 let ResourceCycles = [1,1,2];
1022}
Craig Topperf4cd9082018-01-19 05:47:32 +00001023def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001024
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001025def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
1026 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001027 let NumMicroOps = 4;
1028 let ResourceCycles = [1,1,1,1];
1029}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001030def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001031
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001032def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
1033 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001034 let NumMicroOps = 4;
1035 let ResourceCycles = [1,1,1,1];
1036}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001037def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001038
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001039def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001040 let Latency = 4;
1041 let NumMicroOps = 1;
1042 let ResourceCycles = [1];
1043}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001044def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001045 "MMX_PMADDWDirr",
1046 "MMX_PMULHRSWrr",
1047 "MMX_PMULHUWirr",
1048 "MMX_PMULHWirr",
1049 "MMX_PMULLWirr",
1050 "MMX_PMULUDQirr",
1051 "MUL_FPrST0",
1052 "MUL_FST0r",
1053 "MUL_FrST0",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001054 "(V?)RCPPS(Y?)r",
1055 "(V?)RCPSSr",
1056 "(V?)RSQRTPS(Y?)r",
1057 "(V?)RSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001058
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001059def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001060 let Latency = 4;
1061 let NumMicroOps = 1;
1062 let ResourceCycles = [1];
1063}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001064def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
1065 "(V?)ADDPS(Y?)rr",
1066 "(V?)ADDSDrr",
1067 "(V?)ADDSSrr",
1068 "(V?)ADDSUBPD(Y?)rr",
1069 "(V?)ADDSUBPS(Y?)rr",
1070 "(V?)CMPPD(Y?)rri",
1071 "(V?)CMPPS(Y?)rri",
1072 "(V?)CMPSDrr",
1073 "(V?)CMPSSrr",
1074 "(V?)CVTDQ2PS(Y?)rr",
1075 "(V?)CVTPS2DQ(Y?)rr",
1076 "(V?)CVTTPS2DQ(Y?)rr",
1077 "(V?)MAX(C?)PD(Y?)rr",
1078 "(V?)MAX(C?)PS(Y?)rr",
1079 "(V?)MAX(C?)SDrr",
1080 "(V?)MAX(C?)SSrr",
1081 "(V?)MIN(C?)PD(Y?)rr",
1082 "(V?)MIN(C?)PS(Y?)rr",
1083 "(V?)MIN(C?)SDrr",
1084 "(V?)MIN(C?)SSrr",
1085 "(V?)MULPD(Y?)rr",
1086 "(V?)MULPS(Y?)rr",
1087 "(V?)MULSDrr",
1088 "(V?)MULSSrr",
1089 "(V?)PHMINPOSUWrr",
1090 "(V?)PMADDUBSW(Y?)rr",
1091 "(V?)PMADDWD(Y?)rr",
1092 "(V?)PMULDQ(Y?)rr",
1093 "(V?)PMULHRSW(Y?)rr",
1094 "(V?)PMULHUW(Y?)rr",
1095 "(V?)PMULHW(Y?)rr",
1096 "(V?)PMULLW(Y?)rr",
1097 "(V?)PMULUDQ(Y?)rr",
1098 "(V?)SUBPD(Y?)rr",
1099 "(V?)SUBPS(Y?)rr",
1100 "(V?)SUBSDrr",
1101 "(V?)SUBSSrr")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001102def: InstRW<[SKLWriteResGroup48],
1103 (instregex
1104 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1105 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001106
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001107def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001108 let Latency = 4;
1109 let NumMicroOps = 2;
1110 let ResourceCycles = [2];
1111}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001112def: InstRW<[SKLWriteResGroup50], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001113
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001114def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001115 let Latency = 4;
1116 let NumMicroOps = 2;
1117 let ResourceCycles = [1,1];
1118}
Craig Topperfc179c62018-03-22 04:23:41 +00001119def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r,
1120 MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001121
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001122def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1123 let Latency = 4;
1124 let NumMicroOps = 4;
1125}
Craig Topperfc179c62018-03-22 04:23:41 +00001126def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001127
1128def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001129 let Latency = 4;
1130 let NumMicroOps = 2;
1131 let ResourceCycles = [1,1];
1132}
Craig Topperfc179c62018-03-22 04:23:41 +00001133def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1134 "VPSLLQYrr",
1135 "VPSLLWYrr",
1136 "VPSRADYrr",
1137 "VPSRAWYrr",
1138 "VPSRLDYrr",
1139 "VPSRLQYrr",
1140 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001141
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001142def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001143 let Latency = 4;
1144 let NumMicroOps = 3;
1145 let ResourceCycles = [1,1,1];
1146}
Craig Topperfc179c62018-03-22 04:23:41 +00001147def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1148 "ISTT_FP32m",
1149 "ISTT_FP64m",
1150 "IST_F16m",
1151 "IST_F32m",
1152 "IST_FP16m",
1153 "IST_FP32m",
1154 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001155
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001156def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001157 let Latency = 4;
1158 let NumMicroOps = 4;
1159 let ResourceCycles = [4];
1160}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001161def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001162
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001163def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001164 let Latency = 4;
1165 let NumMicroOps = 4;
1166 let ResourceCycles = [1,3];
1167}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001168def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001169
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001170def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001171 let Latency = 4;
1172 let NumMicroOps = 4;
1173 let ResourceCycles = [1,3];
1174}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001175def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001176
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001177def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001178 let Latency = 4;
1179 let NumMicroOps = 4;
1180 let ResourceCycles = [1,1,2];
1181}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001182def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001183
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001184def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1185 let Latency = 5;
1186 let NumMicroOps = 1;
1187 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001188}
Craig Topperfc179c62018-03-22 04:23:41 +00001189def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64rm",
1190 "MMX_MOVD64to64rm",
1191 "MMX_MOVQ64rm",
1192 "MOV(8|16|32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001193 "MOVSX(16|32|64)rm16",
1194 "MOVSX(16|32|64)rm32",
1195 "MOVSX(16|32|64)rm8",
1196 "MOVZX(16|32|64)rm16",
1197 "MOVZX(16|32|64)rm8",
1198 "PREFETCHNTA",
1199 "PREFETCHT0",
1200 "PREFETCHT1",
1201 "PREFETCHT2",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001202 "(V?)MOV64toPQIrm",
1203 "(V?)MOVDDUPrm",
1204 "(V?)MOVDI2PDIrm",
1205 "(V?)MOVQI2PQIrm",
1206 "(V?)MOVSDrm",
1207 "(V?)MOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001208
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001209def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001210 let Latency = 5;
1211 let NumMicroOps = 2;
1212 let ResourceCycles = [1,1];
1213}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001214def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1215 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001216
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001217def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001218 let Latency = 5;
1219 let NumMicroOps = 2;
1220 let ResourceCycles = [1,1];
1221}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001222def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001223 "MMX_CVTPS2PIirr",
1224 "MMX_CVTTPD2PIirr",
1225 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001226 "(V?)CVTPD2DQrr",
1227 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001228 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001229 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001230 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001231 "(V?)CVTSD2SSrr",
1232 "(V?)CVTSI642SDrr",
1233 "(V?)CVTSI2SDrr",
1234 "(V?)CVTSI2SSrr",
1235 "(V?)CVTSS2SDrr",
1236 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001237
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001238def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001239 let Latency = 5;
1240 let NumMicroOps = 3;
1241 let ResourceCycles = [1,1,1];
1242}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001243def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001244
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001245def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001246 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001247 let NumMicroOps = 3;
1248 let ResourceCycles = [1,1,1];
1249}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001250def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001251
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001252def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001253 let Latency = 5;
1254 let NumMicroOps = 5;
1255 let ResourceCycles = [1,4];
1256}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001257def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001258
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001259def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001260 let Latency = 5;
1261 let NumMicroOps = 5;
1262 let ResourceCycles = [2,3];
1263}
Craig Topper13a16502018-03-19 00:56:09 +00001264def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001265
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001266def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001267 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001268 let NumMicroOps = 6;
1269 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001270}
Craig Topperfc179c62018-03-22 04:23:41 +00001271def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1272 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001273
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001274def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1275 let Latency = 6;
1276 let NumMicroOps = 1;
1277 let ResourceCycles = [1];
1278}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001279def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
1280 "(V?)LDDQUrm",
1281 "(V?)MOVAPDrm",
1282 "(V?)MOVAPSrm",
1283 "(V?)MOVDQArm",
1284 "(V?)MOVDQUrm",
1285 "(V?)MOVNTDQArm",
1286 "(V?)MOVSHDUPrm",
1287 "(V?)MOVSLDUPrm",
1288 "(V?)MOVUPDrm",
1289 "(V?)MOVUPSrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001290 "VPBROADCASTDrm",
1291 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001292
1293def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001294 let Latency = 6;
1295 let NumMicroOps = 2;
1296 let ResourceCycles = [2];
1297}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001298def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001299
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001300def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001301 let Latency = 6;
1302 let NumMicroOps = 2;
1303 let ResourceCycles = [1,1];
1304}
Craig Topperfc179c62018-03-22 04:23:41 +00001305def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1306 "MMX_PADDSWirm",
1307 "MMX_PADDUSBirm",
1308 "MMX_PADDUSWirm",
1309 "MMX_PAVGBirm",
1310 "MMX_PAVGWirm",
1311 "MMX_PCMPEQBirm",
1312 "MMX_PCMPEQDirm",
1313 "MMX_PCMPEQWirm",
1314 "MMX_PCMPGTBirm",
1315 "MMX_PCMPGTDirm",
1316 "MMX_PCMPGTWirm",
1317 "MMX_PMAXSWirm",
1318 "MMX_PMAXUBirm",
1319 "MMX_PMINSWirm",
1320 "MMX_PMINUBirm",
1321 "MMX_PSLLDrm",
1322 "MMX_PSLLQrm",
1323 "MMX_PSLLWrm",
1324 "MMX_PSRADrm",
1325 "MMX_PSRAWrm",
1326 "MMX_PSRLDrm",
1327 "MMX_PSRLQrm",
1328 "MMX_PSRLWrm",
1329 "MMX_PSUBSBirm",
1330 "MMX_PSUBSWirm",
1331 "MMX_PSUBUSBirm",
1332 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001333
Craig Topper58afb4e2018-03-22 21:10:07 +00001334def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001335 let Latency = 6;
1336 let NumMicroOps = 2;
1337 let ResourceCycles = [1,1];
1338}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001339def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1340 "(V?)CVTSD2SIrr",
1341 "(V?)CVTSS2SI64rr",
1342 "(V?)CVTSS2SIrr",
1343 "(V?)CVTTSD2SI64rr",
1344 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001345
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001346def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1347 let Latency = 6;
1348 let NumMicroOps = 2;
1349 let ResourceCycles = [1,1];
1350}
Craig Topperfc179c62018-03-22 04:23:41 +00001351def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1352 "MMX_PINSRWrm",
1353 "MMX_PSHUFBrm",
1354 "MMX_PSHUFWmi",
1355 "MMX_PUNPCKHBWirm",
1356 "MMX_PUNPCKHDQirm",
1357 "MMX_PUNPCKHWDirm",
1358 "MMX_PUNPCKLBWirm",
1359 "MMX_PUNPCKLDQirm",
1360 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001361 "(V?)MOVHPDrm",
1362 "(V?)MOVHPSrm",
1363 "(V?)MOVLPDrm",
1364 "(V?)MOVLPSrm",
1365 "(V?)PINSRBrm",
1366 "(V?)PINSRDrm",
1367 "(V?)PINSRQrm",
1368 "(V?)PINSRWrm",
1369 "(V?)PMOVSXBDrm",
1370 "(V?)PMOVSXBQrm",
1371 "(V?)PMOVSXBWrm",
1372 "(V?)PMOVSXDQrm",
1373 "(V?)PMOVSXWDrm",
1374 "(V?)PMOVSXWQrm",
1375 "(V?)PMOVZXBDrm",
1376 "(V?)PMOVZXBQrm",
1377 "(V?)PMOVZXBWrm",
1378 "(V?)PMOVZXDQrm",
1379 "(V?)PMOVZXWDrm",
1380 "(V?)PMOVZXWQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001381
1382def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1383 let Latency = 6;
1384 let NumMicroOps = 2;
1385 let ResourceCycles = [1,1];
1386}
Craig Topperfc179c62018-03-22 04:23:41 +00001387def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1388 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001389
1390def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1391 let Latency = 6;
1392 let NumMicroOps = 2;
1393 let ResourceCycles = [1,1];
1394}
Craig Topperfc179c62018-03-22 04:23:41 +00001395def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSBrm",
1396 "MMX_PABSDrm",
1397 "MMX_PABSWrm",
1398 "MMX_PADDBirm",
1399 "MMX_PADDDirm",
1400 "MMX_PADDQirm",
1401 "MMX_PADDWirm",
1402 "MMX_PANDNirm",
1403 "MMX_PANDirm",
1404 "MMX_PORirm",
1405 "MMX_PSIGNBrm",
1406 "MMX_PSIGNDrm",
1407 "MMX_PSIGNWrm",
1408 "MMX_PSUBBirm",
1409 "MMX_PSUBDirm",
1410 "MMX_PSUBQirm",
1411 "MMX_PSUBWirm",
1412 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001413
1414def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1415 let Latency = 6;
1416 let NumMicroOps = 2;
1417 let ResourceCycles = [1,1];
1418}
Craig Topperc50570f2018-04-06 17:12:18 +00001419def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001420 "RORX(32|64)mi",
1421 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001422 "SHLX(32|64)rm",
1423 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001424def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1425 ADCX32rm, ADCX64rm,
1426 ADOX32rm, ADOX64rm,
1427 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001428
1429def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1430 let Latency = 6;
1431 let NumMicroOps = 2;
1432 let ResourceCycles = [1,1];
1433}
Craig Topperfc179c62018-03-22 04:23:41 +00001434def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1435 "BLSI(32|64)rm",
1436 "BLSMSK(32|64)rm",
1437 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001438 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001439
1440def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1441 let Latency = 6;
1442 let NumMicroOps = 2;
1443 let ResourceCycles = [1,1];
1444}
Craig Topper2d451e72018-03-18 08:38:06 +00001445def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001446def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001447
1448def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001449 let Latency = 6;
1450 let NumMicroOps = 3;
1451 let ResourceCycles = [2,1];
1452}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001453def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1454 "(V?)HADDPS(Y?)rr",
1455 "(V?)HSUBPD(Y?)rr",
1456 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001457
Craig Topper58afb4e2018-03-22 21:10:07 +00001458def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001459 let Latency = 6;
1460 let NumMicroOps = 3;
1461 let ResourceCycles = [2,1];
1462}
Craig Topperfc179c62018-03-22 04:23:41 +00001463def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001464
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001465def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001466 let Latency = 6;
1467 let NumMicroOps = 4;
1468 let ResourceCycles = [1,2,1];
1469}
Craig Topperfc179c62018-03-22 04:23:41 +00001470def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1471 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001472
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001473def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001474 let Latency = 6;
1475 let NumMicroOps = 4;
1476 let ResourceCycles = [1,1,1,1];
1477}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001478def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001479
Craig Topper58afb4e2018-03-22 21:10:07 +00001480def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001481 let Latency = 6;
1482 let NumMicroOps = 4;
1483 let ResourceCycles = [1,1,1,1];
1484}
1485def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1486
1487def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1488 let Latency = 6;
1489 let NumMicroOps = 4;
1490 let ResourceCycles = [1,1,1,1];
1491}
Craig Topperfc179c62018-03-22 04:23:41 +00001492def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1493 "BTR(16|32|64)mi8",
1494 "BTS(16|32|64)mi8",
1495 "SAR(8|16|32|64)m1",
1496 "SAR(8|16|32|64)mi",
1497 "SHL(8|16|32|64)m1",
1498 "SHL(8|16|32|64)mi",
1499 "SHR(8|16|32|64)m1",
1500 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001501
1502def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1503 let Latency = 6;
1504 let NumMicroOps = 4;
1505 let ResourceCycles = [1,1,1,1];
1506}
Craig Topperf0d04262018-04-06 16:16:48 +00001507def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1508 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001509
1510def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001511 let Latency = 6;
1512 let NumMicroOps = 6;
1513 let ResourceCycles = [1,5];
1514}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001515def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001516
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001517def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1518 let Latency = 7;
1519 let NumMicroOps = 1;
1520 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001521}
Craig Topperfc179c62018-03-22 04:23:41 +00001522def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1523 "LD_F64m",
1524 "LD_F80m",
1525 "VBROADCASTF128",
1526 "VBROADCASTI128",
1527 "VBROADCASTSDYrm",
1528 "VBROADCASTSSYrm",
1529 "VLDDQUYrm",
1530 "VMOVAPDYrm",
1531 "VMOVAPSYrm",
1532 "VMOVDDUPYrm",
1533 "VMOVDQAYrm",
1534 "VMOVDQUYrm",
1535 "VMOVNTDQAYrm",
1536 "VMOVSHDUPYrm",
1537 "VMOVSLDUPYrm",
1538 "VMOVUPDYrm",
1539 "VMOVUPSYrm",
1540 "VPBROADCASTDYrm",
1541 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001542
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001543def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001544 let Latency = 7;
1545 let NumMicroOps = 2;
1546 let ResourceCycles = [1,1];
1547}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001548def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001549
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001550def SKLWriteResGroup87 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001551 let Latency = 7;
1552 let NumMicroOps = 2;
1553 let ResourceCycles = [1,1];
1554}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001555def: InstRW<[SKLWriteResGroup87], (instregex "(V?)COMISDrm",
1556 "(V?)COMISSrm",
1557 "(V?)UCOMISDrm",
1558 "(V?)UCOMISSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001559
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001560def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1561 let Latency = 7;
1562 let NumMicroOps = 2;
1563 let ResourceCycles = [1,1];
1564}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001565def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1566 "(V?)PACKSSDWrm",
1567 "(V?)PACKSSWBrm",
1568 "(V?)PACKUSDWrm",
1569 "(V?)PACKUSWBrm",
1570 "(V?)PALIGNRrmi",
1571 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001572 "VPBROADCASTBrm",
1573 "VPBROADCASTWrm",
1574 "VPERMILPDmi",
1575 "VPERMILPDrm",
1576 "VPERMILPSmi",
1577 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001578 "(V?)PSHUFBrm",
1579 "(V?)PSHUFDmi",
1580 "(V?)PSHUFHWmi",
1581 "(V?)PSHUFLWmi",
1582 "(V?)PUNPCKHBWrm",
1583 "(V?)PUNPCKHDQrm",
1584 "(V?)PUNPCKHQDQrm",
1585 "(V?)PUNPCKHWDrm",
1586 "(V?)PUNPCKLBWrm",
1587 "(V?)PUNPCKLDQrm",
1588 "(V?)PUNPCKLQDQrm",
1589 "(V?)PUNPCKLWDrm",
1590 "(V?)SHUFPDrmi",
1591 "(V?)SHUFPSrmi",
1592 "(V?)UNPCKHPDrm",
1593 "(V?)UNPCKHPSrm",
1594 "(V?)UNPCKLPDrm",
1595 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001596
Craig Topper58afb4e2018-03-22 21:10:07 +00001597def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001598 let Latency = 7;
1599 let NumMicroOps = 2;
1600 let ResourceCycles = [1,1];
1601}
Craig Topperfc179c62018-03-22 04:23:41 +00001602def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1603 "VCVTPD2PSYrr",
1604 "VCVTPH2PSYrr",
1605 "VCVTPS2PDYrr",
1606 "VCVTPS2PHYrr",
1607 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001608
1609def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1610 let Latency = 7;
1611 let NumMicroOps = 2;
1612 let ResourceCycles = [1,1];
1613}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001614def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1615 "(V?)PABSDrm",
1616 "(V?)PABSWrm",
1617 "(V?)PADDSBrm",
1618 "(V?)PADDSWrm",
1619 "(V?)PADDUSBrm",
1620 "(V?)PADDUSWrm",
1621 "(V?)PAVGBrm",
1622 "(V?)PAVGWrm",
1623 "(V?)PCMPEQBrm",
1624 "(V?)PCMPEQDrm",
1625 "(V?)PCMPEQQrm",
1626 "(V?)PCMPEQWrm",
1627 "(V?)PCMPGTBrm",
1628 "(V?)PCMPGTDrm",
1629 "(V?)PCMPGTWrm",
1630 "(V?)PMAXSBrm",
1631 "(V?)PMAXSDrm",
1632 "(V?)PMAXSWrm",
1633 "(V?)PMAXUBrm",
1634 "(V?)PMAXUDrm",
1635 "(V?)PMAXUWrm",
1636 "(V?)PMINSBrm",
1637 "(V?)PMINSDrm",
1638 "(V?)PMINSWrm",
1639 "(V?)PMINUBrm",
1640 "(V?)PMINUDrm",
1641 "(V?)PMINUWrm",
1642 "(V?)PSIGNBrm",
1643 "(V?)PSIGNDrm",
1644 "(V?)PSIGNWrm",
1645 "(V?)PSLLDrm",
1646 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001647 "VPSLLVDrm",
1648 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001649 "(V?)PSLLWrm",
1650 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001651 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001652 "(V?)PSRAWrm",
1653 "(V?)PSRLDrm",
1654 "(V?)PSRLQrm",
1655 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001656 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001657 "(V?)PSRLWrm",
1658 "(V?)PSUBSBrm",
1659 "(V?)PSUBSWrm",
1660 "(V?)PSUBUSBrm",
1661 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001662
1663def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1664 let Latency = 7;
1665 let NumMicroOps = 2;
1666 let ResourceCycles = [1,1];
1667}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001668def: InstRW<[SKLWriteResGroup91], (instregex "(V?)ANDNPDrm",
1669 "(V?)ANDNPSrm",
1670 "(V?)ANDPDrm",
1671 "(V?)ANDPSrm",
1672 "(V?)BLENDPDrmi",
1673 "(V?)BLENDPSrmi",
1674 "(V?)INSERTF128rm",
1675 "(V?)INSERTI128rm",
1676 "(V?)MASKMOVPDrm",
1677 "(V?)MASKMOVPSrm",
1678 "(V?)ORPDrm",
1679 "(V?)ORPSrm",
1680 "(V?)PADDBrm",
1681 "(V?)PADDDrm",
1682 "(V?)PADDQrm",
1683 "(V?)PADDWrm",
1684 "(V?)PANDNrm",
1685 "(V?)PANDrm",
1686 "(V?)PBLENDDrmi",
1687 "(V?)PMASKMOVDrm",
1688 "(V?)PMASKMOVQrm",
1689 "(V?)PORrm",
1690 "(V?)PSUBBrm",
1691 "(V?)PSUBDrm",
1692 "(V?)PSUBQrm",
1693 "(V?)PSUBWrm",
1694 "(V?)PXORrm",
1695 "(V?)XORPDrm",
1696 "(V?)XORPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001697
1698def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1699 let Latency = 7;
1700 let NumMicroOps = 3;
1701 let ResourceCycles = [2,1];
1702}
Craig Topperfc179c62018-03-22 04:23:41 +00001703def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1704 "MMX_PACKSSWBirm",
1705 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001706
1707def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1708 let Latency = 7;
1709 let NumMicroOps = 3;
1710 let ResourceCycles = [1,2];
1711}
Craig Topperf4cd9082018-01-19 05:47:32 +00001712def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001713
1714def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1715 let Latency = 7;
1716 let NumMicroOps = 3;
1717 let ResourceCycles = [1,2];
1718}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001719def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1720 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001721
Craig Topper58afb4e2018-03-22 21:10:07 +00001722def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001723 let Latency = 7;
1724 let NumMicroOps = 3;
1725 let ResourceCycles = [1,1,1];
1726}
Craig Topperfc179c62018-03-22 04:23:41 +00001727def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1728 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001729
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001730def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001731 let Latency = 7;
1732 let NumMicroOps = 3;
1733 let ResourceCycles = [1,1,1];
1734}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001735def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001736
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001737def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001738 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001739 let NumMicroOps = 3;
1740 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001741}
Craig Topperfc179c62018-03-22 04:23:41 +00001742def: InstRW<[SKLWriteResGroup97], (instregex "(V?)LDMXCSR")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001743
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001744def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001745 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001746 let NumMicroOps = 3;
1747 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001748}
Craig Topperfc179c62018-03-22 04:23:41 +00001749def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1750 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001751
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001752def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1753 let Latency = 7;
1754 let NumMicroOps = 5;
1755 let ResourceCycles = [1,1,1,2];
1756}
Craig Topperfc179c62018-03-22 04:23:41 +00001757def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1758 "ROL(8|16|32|64)mi",
1759 "ROR(8|16|32|64)m1",
1760 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001761
1762def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1763 let Latency = 7;
1764 let NumMicroOps = 5;
1765 let ResourceCycles = [1,1,1,2];
1766}
Craig Topper13a16502018-03-19 00:56:09 +00001767def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001768
1769def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1770 let Latency = 7;
1771 let NumMicroOps = 5;
1772 let ResourceCycles = [1,1,1,1,1];
1773}
Craig Topperfc179c62018-03-22 04:23:41 +00001774def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1775 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001776
1777def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001778 let Latency = 7;
1779 let NumMicroOps = 7;
1780 let ResourceCycles = [1,3,1,2];
1781}
Craig Topper2d451e72018-03-18 08:38:06 +00001782def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001783
Craig Topper58afb4e2018-03-22 21:10:07 +00001784def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001785 let Latency = 8;
1786 let NumMicroOps = 2;
1787 let ResourceCycles = [2];
1788}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001789def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1790 "(V?)ROUNDPS(Y?)r",
1791 "(V?)ROUNDSDr",
1792 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001793
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001794def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001795 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001796 let NumMicroOps = 2;
1797 let ResourceCycles = [1,1];
1798}
Craig Topperfc179c62018-03-22 04:23:41 +00001799def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1800 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001801
1802def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1803 let Latency = 8;
1804 let NumMicroOps = 2;
1805 let ResourceCycles = [1,1];
1806}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001807def: InstRW<[SKLWriteResGroup107], (instrs IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001808def: InstRW<[SKLWriteResGroup107], (instrs IMUL8m, MUL8m)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001809def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1810 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001811
1812def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001813 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001814 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001815 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001816}
Craig Topperb369cdb2018-01-25 06:57:42 +00001817def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001818
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001819def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001820 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001821 let NumMicroOps = 5;
1822}
Craig Topperfc179c62018-03-22 04:23:41 +00001823def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001824
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001825def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1826 let Latency = 8;
1827 let NumMicroOps = 2;
1828 let ResourceCycles = [1,1];
1829}
Craig Topperfc179c62018-03-22 04:23:41 +00001830def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1831 "FCOM64m",
1832 "FCOMP32m",
1833 "FCOMP64m",
1834 "MMX_PSADBWirm",
1835 "VPACKSSDWYrm",
1836 "VPACKSSWBYrm",
1837 "VPACKUSDWYrm",
1838 "VPACKUSWBYrm",
1839 "VPALIGNRYrmi",
1840 "VPBLENDWYrmi",
1841 "VPBROADCASTBYrm",
1842 "VPBROADCASTWYrm",
1843 "VPERMILPDYmi",
1844 "VPERMILPDYrm",
1845 "VPERMILPSYmi",
1846 "VPERMILPSYrm",
1847 "VPMOVSXBDYrm",
1848 "VPMOVSXBQYrm",
1849 "VPMOVSXWQYrm",
1850 "VPSHUFBYrm",
1851 "VPSHUFDYmi",
1852 "VPSHUFHWYmi",
1853 "VPSHUFLWYmi",
1854 "VPUNPCKHBWYrm",
1855 "VPUNPCKHDQYrm",
1856 "VPUNPCKHQDQYrm",
1857 "VPUNPCKHWDYrm",
1858 "VPUNPCKLBWYrm",
1859 "VPUNPCKLDQYrm",
1860 "VPUNPCKLQDQYrm",
1861 "VPUNPCKLWDYrm",
1862 "VSHUFPDYrmi",
1863 "VSHUFPSYrmi",
1864 "VUNPCKHPDYrm",
1865 "VUNPCKHPSYrm",
1866 "VUNPCKLPDYrm",
1867 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001868
1869def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1870 let Latency = 8;
1871 let NumMicroOps = 2;
1872 let ResourceCycles = [1,1];
1873}
Craig Topperfc179c62018-03-22 04:23:41 +00001874def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1875 "VPABSDYrm",
1876 "VPABSWYrm",
1877 "VPADDSBYrm",
1878 "VPADDSWYrm",
1879 "VPADDUSBYrm",
1880 "VPADDUSWYrm",
1881 "VPAVGBYrm",
1882 "VPAVGWYrm",
1883 "VPCMPEQBYrm",
1884 "VPCMPEQDYrm",
1885 "VPCMPEQQYrm",
1886 "VPCMPEQWYrm",
1887 "VPCMPGTBYrm",
1888 "VPCMPGTDYrm",
1889 "VPCMPGTWYrm",
1890 "VPMAXSBYrm",
1891 "VPMAXSDYrm",
1892 "VPMAXSWYrm",
1893 "VPMAXUBYrm",
1894 "VPMAXUDYrm",
1895 "VPMAXUWYrm",
1896 "VPMINSBYrm",
1897 "VPMINSDYrm",
1898 "VPMINSWYrm",
1899 "VPMINUBYrm",
1900 "VPMINUDYrm",
1901 "VPMINUWYrm",
1902 "VPSIGNBYrm",
1903 "VPSIGNDYrm",
1904 "VPSIGNWYrm",
1905 "VPSLLDYrm",
1906 "VPSLLQYrm",
1907 "VPSLLVDYrm",
1908 "VPSLLVQYrm",
1909 "VPSLLWYrm",
1910 "VPSRADYrm",
1911 "VPSRAVDYrm",
1912 "VPSRAWYrm",
1913 "VPSRLDYrm",
1914 "VPSRLQYrm",
1915 "VPSRLVDYrm",
1916 "VPSRLVQYrm",
1917 "VPSRLWYrm",
1918 "VPSUBSBYrm",
1919 "VPSUBSWYrm",
1920 "VPSUBUSBYrm",
1921 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001922
1923def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1924 let Latency = 8;
1925 let NumMicroOps = 2;
1926 let ResourceCycles = [1,1];
1927}
Craig Topperfc179c62018-03-22 04:23:41 +00001928def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1929 "VANDNPSYrm",
1930 "VANDPDYrm",
1931 "VANDPSYrm",
1932 "VBLENDPDYrmi",
1933 "VBLENDPSYrmi",
1934 "VMASKMOVPDYrm",
1935 "VMASKMOVPSYrm",
1936 "VORPDYrm",
1937 "VORPSYrm",
1938 "VPADDBYrm",
1939 "VPADDDYrm",
1940 "VPADDQYrm",
1941 "VPADDWYrm",
1942 "VPANDNYrm",
1943 "VPANDYrm",
1944 "VPBLENDDYrmi",
1945 "VPMASKMOVDYrm",
1946 "VPMASKMOVQYrm",
1947 "VPORYrm",
1948 "VPSUBBYrm",
1949 "VPSUBDYrm",
1950 "VPSUBQYrm",
1951 "VPSUBWYrm",
1952 "VPXORYrm",
1953 "VXORPDYrm",
1954 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001955
1956def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001957 let Latency = 8;
1958 let NumMicroOps = 3;
1959 let ResourceCycles = [1,2];
1960}
Craig Topperfc179c62018-03-22 04:23:41 +00001961def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
1962 "BLENDVPSrm0",
1963 "PBLENDVBrm0",
1964 "VBLENDVPDrm",
1965 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001966 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001967
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001968def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1969 let Latency = 8;
1970 let NumMicroOps = 4;
1971 let ResourceCycles = [1,2,1];
1972}
Craig Topperfc179c62018-03-22 04:23:41 +00001973def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PHADDSWrm",
1974 "MMX_PHSUBSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001975
1976def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1977 let Latency = 8;
1978 let NumMicroOps = 4;
1979 let ResourceCycles = [2,1,1];
1980}
Craig Topperfc179c62018-03-22 04:23:41 +00001981def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHADDDrm",
1982 "MMX_PHADDWrm",
1983 "MMX_PHSUBDrm",
1984 "MMX_PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001985
Craig Topper58afb4e2018-03-22 21:10:07 +00001986def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001987 let Latency = 8;
1988 let NumMicroOps = 4;
1989 let ResourceCycles = [1,1,1,1];
1990}
1991def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1992
1993def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1994 let Latency = 8;
1995 let NumMicroOps = 5;
1996 let ResourceCycles = [1,1,3];
1997}
Craig Topper13a16502018-03-19 00:56:09 +00001998def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001999
2000def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2001 let Latency = 8;
2002 let NumMicroOps = 5;
2003 let ResourceCycles = [1,1,1,2];
2004}
Craig Topperfc179c62018-03-22 04:23:41 +00002005def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
2006 "RCL(8|16|32|64)mi",
2007 "RCR(8|16|32|64)m1",
2008 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002009
2010def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2011 let Latency = 8;
2012 let NumMicroOps = 6;
2013 let ResourceCycles = [1,1,1,3];
2014}
Craig Topperfc179c62018-03-22 04:23:41 +00002015def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
2016 "SAR(8|16|32|64)mCL",
2017 "SHL(8|16|32|64)mCL",
2018 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002019
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002020def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2021 let Latency = 8;
2022 let NumMicroOps = 6;
2023 let ResourceCycles = [1,1,1,2,1];
2024}
Craig Topper9f834812018-04-01 21:54:24 +00002025def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00002026 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00002027 "SBB(8|16|32|64)mi")>;
2028def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
2029 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002030
2031def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2032 let Latency = 9;
2033 let NumMicroOps = 2;
2034 let ResourceCycles = [1,1];
2035}
Craig Topperfc179c62018-03-22 04:23:41 +00002036def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
2037 "MMX_PMADDUBSWrm",
2038 "MMX_PMADDWDirm",
2039 "MMX_PMULHRSWrm",
2040 "MMX_PMULHUWirm",
2041 "MMX_PMULHWirm",
2042 "MMX_PMULLWirm",
2043 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002044 "(V?)RCPSSm",
2045 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002046 "VTESTPDYrm",
2047 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002048
2049def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2050 let Latency = 9;
2051 let NumMicroOps = 2;
2052 let ResourceCycles = [1,1];
2053}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002054def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002055 "VPMOVSXBWYrm",
2056 "VPMOVSXDQYrm",
2057 "VPMOVSXWDYrm",
2058 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002059 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002060
2061def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2062 let Latency = 9;
2063 let NumMicroOps = 2;
2064 let ResourceCycles = [1,1];
2065}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002066def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
2067 "(V?)ADDSSrm",
2068 "(V?)CMPSDrm",
2069 "(V?)CMPSSrm",
2070 "(V?)MAX(C?)SDrm",
2071 "(V?)MAX(C?)SSrm",
2072 "(V?)MIN(C?)SDrm",
2073 "(V?)MIN(C?)SSrm",
2074 "(V?)MULSDrm",
2075 "(V?)MULSSrm",
2076 "(V?)SUBSDrm",
2077 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00002078def: InstRW<[SKLWriteResGroup122],
2079 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002080
Craig Topper58afb4e2018-03-22 21:10:07 +00002081def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002082 let Latency = 9;
2083 let NumMicroOps = 2;
2084 let ResourceCycles = [1,1];
2085}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002086def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002087 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002088 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002089 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002090
Craig Topper58afb4e2018-03-22 21:10:07 +00002091def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002092 let Latency = 9;
2093 let NumMicroOps = 3;
2094 let ResourceCycles = [1,2];
2095}
Craig Topperfc179c62018-03-22 04:23:41 +00002096def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002097
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002098def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2099 let Latency = 9;
2100 let NumMicroOps = 3;
2101 let ResourceCycles = [1,2];
2102}
Craig Topperfc179c62018-03-22 04:23:41 +00002103def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
2104 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002105
2106def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2107 let Latency = 9;
2108 let NumMicroOps = 3;
2109 let ResourceCycles = [1,1,1];
2110}
Craig Topperfc179c62018-03-22 04:23:41 +00002111def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002112
2113def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
2114 let Latency = 9;
2115 let NumMicroOps = 3;
2116 let ResourceCycles = [1,1,1];
2117}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002118def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002119
2120def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002121 let Latency = 9;
2122 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002123 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002124}
Craig Topperfc179c62018-03-22 04:23:41 +00002125def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
2126 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002127
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002128def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2129 let Latency = 9;
2130 let NumMicroOps = 4;
2131 let ResourceCycles = [2,1,1];
2132}
Craig Topperfc179c62018-03-22 04:23:41 +00002133def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
2134 "(V?)PHADDWrm",
2135 "(V?)PHSUBDrm",
2136 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002137
2138def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
2139 let Latency = 9;
2140 let NumMicroOps = 4;
2141 let ResourceCycles = [1,1,1,1];
2142}
Craig Topperfc179c62018-03-22 04:23:41 +00002143def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
2144 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002145
2146def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2147 let Latency = 9;
2148 let NumMicroOps = 5;
2149 let ResourceCycles = [1,2,1,1];
2150}
Craig Topperfc179c62018-03-22 04:23:41 +00002151def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
2152 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002153
2154def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2155 let Latency = 10;
2156 let NumMicroOps = 2;
2157 let ResourceCycles = [1,1];
2158}
Simon Pilgrim7684e052018-03-22 13:18:08 +00002159def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002160 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002161
2162def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2163 let Latency = 10;
2164 let NumMicroOps = 2;
2165 let ResourceCycles = [1,1];
2166}
Craig Topperfc179c62018-03-22 04:23:41 +00002167def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
2168 "ADD_F64m",
2169 "ILD_F16m",
2170 "ILD_F32m",
2171 "ILD_F64m",
2172 "SUBR_F32m",
2173 "SUBR_F64m",
2174 "SUB_F32m",
2175 "SUB_F64m",
2176 "VPCMPGTQYrm",
2177 "VPERM2F128rm",
2178 "VPERM2I128rm",
2179 "VPERMDYrm",
2180 "VPERMPDYmi",
2181 "VPERMPSYrm",
2182 "VPERMQYmi",
2183 "VPMOVZXBDYrm",
2184 "VPMOVZXBQYrm",
2185 "VPMOVZXBWYrm",
2186 "VPMOVZXDQYrm",
2187 "VPMOVZXWQYrm",
2188 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002189
2190def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2191 let Latency = 10;
2192 let NumMicroOps = 2;
2193 let ResourceCycles = [1,1];
2194}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002195def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
2196 "(V?)ADDPSrm",
2197 "(V?)ADDSUBPDrm",
2198 "(V?)ADDSUBPSrm",
2199 "(V?)CMPPDrmi",
2200 "(V?)CMPPSrmi",
2201 "(V?)CVTDQ2PSrm",
2202 "(V?)CVTPH2PSYrm",
2203 "(V?)CVTPS2DQrm",
2204 "(V?)CVTSS2SDrm",
2205 "(V?)CVTTPS2DQrm",
2206 "(V?)MAX(C?)PDrm",
2207 "(V?)MAX(C?)PSrm",
2208 "(V?)MIN(C?)PDrm",
2209 "(V?)MIN(C?)PSrm",
2210 "(V?)MULPDrm",
2211 "(V?)MULPSrm",
2212 "(V?)PHMINPOSUWrm",
2213 "(V?)PMADDUBSWrm",
2214 "(V?)PMADDWDrm",
2215 "(V?)PMULDQrm",
2216 "(V?)PMULHRSWrm",
2217 "(V?)PMULHUWrm",
2218 "(V?)PMULHWrm",
2219 "(V?)PMULLWrm",
2220 "(V?)PMULUDQrm",
2221 "(V?)SUBPDrm",
2222 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00002223def: InstRW<[SKLWriteResGroup134],
2224 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002225
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002226def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2227 let Latency = 10;
2228 let NumMicroOps = 3;
2229 let ResourceCycles = [2,1];
2230}
Craig Topperfc179c62018-03-22 04:23:41 +00002231def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002232
2233def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2234 let Latency = 10;
2235 let NumMicroOps = 3;
2236 let ResourceCycles = [1,1,1];
2237}
Craig Topperfc179c62018-03-22 04:23:41 +00002238def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2239 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002240
Craig Topper58afb4e2018-03-22 21:10:07 +00002241def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002242 let Latency = 10;
2243 let NumMicroOps = 3;
2244 let ResourceCycles = [1,1,1];
2245}
Craig Topperfc179c62018-03-22 04:23:41 +00002246def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002247
2248def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002249 let Latency = 10;
2250 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002251 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002252}
Craig Topperfc179c62018-03-22 04:23:41 +00002253def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2254 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002255
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002256def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2257 let Latency = 10;
2258 let NumMicroOps = 4;
2259 let ResourceCycles = [2,1,1];
2260}
Craig Topperfc179c62018-03-22 04:23:41 +00002261def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2262 "VPHADDWYrm",
2263 "VPHSUBDYrm",
2264 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002265
2266def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002267 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002268 let NumMicroOps = 4;
2269 let ResourceCycles = [1,1,1,1];
2270}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002271def: InstRW<[SKLWriteResGroup142], (instrs IMUL32rm, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002272
2273def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2274 let Latency = 10;
2275 let NumMicroOps = 8;
2276 let ResourceCycles = [1,1,1,1,1,3];
2277}
Craig Topper13a16502018-03-19 00:56:09 +00002278def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002279
2280def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002281 let Latency = 10;
2282 let NumMicroOps = 10;
2283 let ResourceCycles = [9,1];
2284}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002285def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002286
Craig Topper8104f262018-04-02 05:33:28 +00002287def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002288 let Latency = 11;
2289 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002290 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002291}
Craig Topper8104f262018-04-02 05:33:28 +00002292def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002293 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002294
Craig Topper8104f262018-04-02 05:33:28 +00002295def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2296 let Latency = 11;
2297 let NumMicroOps = 1;
2298 let ResourceCycles = [1,5];
2299}
2300def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
2301
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002302def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002303 let Latency = 11;
2304 let NumMicroOps = 2;
2305 let ResourceCycles = [1,1];
2306}
Craig Topperfc179c62018-03-22 04:23:41 +00002307def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2308 "MUL_F64m",
2309 "VRCPPSYm",
2310 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002311
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002312def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2313 let Latency = 11;
2314 let NumMicroOps = 2;
2315 let ResourceCycles = [1,1];
2316}
Craig Topperfc179c62018-03-22 04:23:41 +00002317def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2318 "VADDPSYrm",
2319 "VADDSUBPDYrm",
2320 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002321 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002322 "VCMPPSYrmi",
2323 "VCVTDQ2PSYrm",
2324 "VCVTPS2DQYrm",
2325 "VCVTPS2PDYrm",
2326 "VCVTTPS2DQYrm",
2327 "VMAX(C?)PDYrm",
2328 "VMAX(C?)PSYrm",
2329 "VMIN(C?)PDYrm",
2330 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002331 "VMULPDYrm",
2332 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002333 "VPMADDUBSWYrm",
2334 "VPMADDWDYrm",
2335 "VPMULDQYrm",
2336 "VPMULHRSWYrm",
2337 "VPMULHUWYrm",
2338 "VPMULHWYrm",
2339 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002340 "VPMULUDQYrm",
2341 "VSUBPDYrm",
2342 "VSUBPSYrm")>;
2343def: InstRW<[SKLWriteResGroup147],
2344 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002345
2346def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2347 let Latency = 11;
2348 let NumMicroOps = 3;
2349 let ResourceCycles = [2,1];
2350}
Craig Topperfc179c62018-03-22 04:23:41 +00002351def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2352 "FICOM32m",
2353 "FICOMP16m",
2354 "FICOMP32m",
2355 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002356
2357def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2358 let Latency = 11;
2359 let NumMicroOps = 3;
2360 let ResourceCycles = [1,1,1];
2361}
Craig Topperfc179c62018-03-22 04:23:41 +00002362def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002363
Craig Topper58afb4e2018-03-22 21:10:07 +00002364def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002365 let Latency = 11;
2366 let NumMicroOps = 3;
2367 let ResourceCycles = [1,1,1];
2368}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002369def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2370 "(V?)CVTSD2SIrm",
2371 "(V?)CVTSS2SI64rm",
2372 "(V?)CVTSS2SIrm",
2373 "(V?)CVTTSD2SI64rm",
2374 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002375 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002376 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002377
Craig Topper58afb4e2018-03-22 21:10:07 +00002378def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002379 let Latency = 11;
2380 let NumMicroOps = 3;
2381 let ResourceCycles = [1,1,1];
2382}
Craig Topperfc179c62018-03-22 04:23:41 +00002383def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2384 "CVTPD2PSrm",
2385 "CVTTPD2DQrm",
2386 "MMX_CVTPD2PIirm",
2387 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002388
2389def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2390 let Latency = 11;
2391 let NumMicroOps = 6;
2392 let ResourceCycles = [1,1,1,2,1];
2393}
Craig Topperfc179c62018-03-22 04:23:41 +00002394def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2395 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002396
2397def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002398 let Latency = 11;
2399 let NumMicroOps = 7;
2400 let ResourceCycles = [2,3,2];
2401}
Craig Topperfc179c62018-03-22 04:23:41 +00002402def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2403 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002404
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002405def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002406 let Latency = 11;
2407 let NumMicroOps = 9;
2408 let ResourceCycles = [1,5,1,2];
2409}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002410def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002411
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002412def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002413 let Latency = 11;
2414 let NumMicroOps = 11;
2415 let ResourceCycles = [2,9];
2416}
Craig Topperfc179c62018-03-22 04:23:41 +00002417def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002418
Craig Topper8104f262018-04-02 05:33:28 +00002419def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002420 let Latency = 12;
2421 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002422 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002423}
Craig Topper8104f262018-04-02 05:33:28 +00002424def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002425 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002426
Craig Topper8104f262018-04-02 05:33:28 +00002427def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2428 let Latency = 12;
2429 let NumMicroOps = 1;
2430 let ResourceCycles = [1,6];
2431}
2432def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2433
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002434def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2435 let Latency = 12;
2436 let NumMicroOps = 4;
2437 let ResourceCycles = [2,1,1];
2438}
Craig Topperfc179c62018-03-22 04:23:41 +00002439def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2440 "(V?)HADDPSrm",
2441 "(V?)HSUBPDrm",
2442 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002443
Craig Topper58afb4e2018-03-22 21:10:07 +00002444def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002445 let Latency = 12;
2446 let NumMicroOps = 4;
2447 let ResourceCycles = [1,1,1,1];
2448}
2449def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2450
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002451def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002452 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002453 let NumMicroOps = 3;
2454 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002455}
Craig Topperfc179c62018-03-22 04:23:41 +00002456def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2457 "ADD_FI32m",
2458 "SUBR_FI16m",
2459 "SUBR_FI32m",
2460 "SUB_FI16m",
2461 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002462
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002463def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2464 let Latency = 13;
2465 let NumMicroOps = 3;
2466 let ResourceCycles = [1,1,1];
2467}
2468def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2469
Craig Topper58afb4e2018-03-22 21:10:07 +00002470def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002471 let Latency = 13;
2472 let NumMicroOps = 4;
2473 let ResourceCycles = [1,3];
2474}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002475def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002477def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002478 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002479 let NumMicroOps = 4;
2480 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002481}
Craig Topperfc179c62018-03-22 04:23:41 +00002482def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2483 "VHADDPSYrm",
2484 "VHSUBPDYrm",
2485 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002486
Craig Topper8104f262018-04-02 05:33:28 +00002487def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002488 let Latency = 14;
2489 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002490 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002491}
Craig Topper8104f262018-04-02 05:33:28 +00002492def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002493 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002494
Craig Topper8104f262018-04-02 05:33:28 +00002495def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2496 let Latency = 14;
2497 let NumMicroOps = 1;
2498 let ResourceCycles = [1,5];
2499}
2500def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2501
Craig Topper58afb4e2018-03-22 21:10:07 +00002502def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002503 let Latency = 14;
2504 let NumMicroOps = 3;
2505 let ResourceCycles = [1,2];
2506}
Craig Topperfc179c62018-03-22 04:23:41 +00002507def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2508def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2509def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2510def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002511
2512def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2513 let Latency = 14;
2514 let NumMicroOps = 3;
2515 let ResourceCycles = [1,1,1];
2516}
Craig Topperfc179c62018-03-22 04:23:41 +00002517def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2518 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002519
2520def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002521 let Latency = 14;
2522 let NumMicroOps = 10;
2523 let ResourceCycles = [2,4,1,3];
2524}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002525def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002526
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002527def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002528 let Latency = 15;
2529 let NumMicroOps = 1;
2530 let ResourceCycles = [1];
2531}
Craig Topperfc179c62018-03-22 04:23:41 +00002532def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2533 "DIVR_FST0r",
2534 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002535
Craig Topper58afb4e2018-03-22 21:10:07 +00002536def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002537 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002538 let NumMicroOps = 3;
2539 let ResourceCycles = [1,2];
2540}
Craig Topper40d3b322018-03-22 21:55:20 +00002541def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2542 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002543
Craig Topperd25f1ac2018-03-20 23:39:48 +00002544def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2545 let Latency = 17;
2546 let NumMicroOps = 3;
2547 let ResourceCycles = [1,2];
2548}
2549def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2550
Craig Topper58afb4e2018-03-22 21:10:07 +00002551def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002552 let Latency = 15;
2553 let NumMicroOps = 4;
2554 let ResourceCycles = [1,1,2];
2555}
Craig Topperfc179c62018-03-22 04:23:41 +00002556def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002557
2558def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2559 let Latency = 15;
2560 let NumMicroOps = 10;
2561 let ResourceCycles = [1,1,1,5,1,1];
2562}
Craig Topper13a16502018-03-19 00:56:09 +00002563def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002564
Craig Topper8104f262018-04-02 05:33:28 +00002565def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002566 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002567 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002568 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002569}
Craig Topperfc179c62018-03-22 04:23:41 +00002570def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002571
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002572def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2573 let Latency = 16;
2574 let NumMicroOps = 14;
2575 let ResourceCycles = [1,1,1,4,2,5];
2576}
2577def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2578
2579def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002580 let Latency = 16;
2581 let NumMicroOps = 16;
2582 let ResourceCycles = [16];
2583}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002584def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002585
Craig Topper8104f262018-04-02 05:33:28 +00002586def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002587 let Latency = 17;
2588 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002589 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002590}
Craig Topper8104f262018-04-02 05:33:28 +00002591def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2592
2593def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2594 let Latency = 17;
2595 let NumMicroOps = 2;
2596 let ResourceCycles = [1,1,3];
2597}
2598def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002599
2600def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002601 let Latency = 17;
2602 let NumMicroOps = 15;
2603 let ResourceCycles = [2,1,2,4,2,4];
2604}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002605def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002606
Craig Topper8104f262018-04-02 05:33:28 +00002607def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002608 let Latency = 18;
2609 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002610 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002611}
Craig Topper8104f262018-04-02 05:33:28 +00002612def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002613 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002614
Craig Topper8104f262018-04-02 05:33:28 +00002615def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2616 let Latency = 18;
2617 let NumMicroOps = 1;
2618 let ResourceCycles = [1,12];
2619}
2620def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2621
2622def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002623 let Latency = 18;
2624 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002625 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002626}
Craig Topper8104f262018-04-02 05:33:28 +00002627def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2628
2629def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2630 let Latency = 18;
2631 let NumMicroOps = 2;
2632 let ResourceCycles = [1,1,3];
2633}
2634def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002635
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002636def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002637 let Latency = 18;
2638 let NumMicroOps = 8;
2639 let ResourceCycles = [1,1,1,5];
2640}
Craig Topperfc179c62018-03-22 04:23:41 +00002641def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002642
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002643def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002644 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002645 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002646 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002647}
Craig Topper13a16502018-03-19 00:56:09 +00002648def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002649
Craig Topper8104f262018-04-02 05:33:28 +00002650def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002651 let Latency = 19;
2652 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002653 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002654}
Craig Topper8104f262018-04-02 05:33:28 +00002655def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2656
2657def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2658 let Latency = 19;
2659 let NumMicroOps = 2;
2660 let ResourceCycles = [1,1,6];
2661}
2662def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002663
Craig Topper58afb4e2018-03-22 21:10:07 +00002664def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002665 let Latency = 19;
2666 let NumMicroOps = 5;
2667 let ResourceCycles = [1,1,3];
2668}
Craig Topperfc179c62018-03-22 04:23:41 +00002669def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002670
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002671def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002672 let Latency = 20;
2673 let NumMicroOps = 1;
2674 let ResourceCycles = [1];
2675}
Craig Topperfc179c62018-03-22 04:23:41 +00002676def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2677 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002678 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002679
Craig Topper8104f262018-04-02 05:33:28 +00002680def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002681 let Latency = 20;
2682 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002683 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002684}
Craig Topperfc179c62018-03-22 04:23:41 +00002685def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002686
Craig Topper58afb4e2018-03-22 21:10:07 +00002687def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002688 let Latency = 20;
2689 let NumMicroOps = 5;
2690 let ResourceCycles = [1,1,3];
2691}
2692def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2693
2694def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2695 let Latency = 20;
2696 let NumMicroOps = 8;
2697 let ResourceCycles = [1,1,1,1,1,1,2];
2698}
Craig Topperfc179c62018-03-22 04:23:41 +00002699def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2700 "INSL",
2701 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002702
2703def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002704 let Latency = 20;
2705 let NumMicroOps = 10;
2706 let ResourceCycles = [1,2,7];
2707}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002708def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002709
Craig Topper8104f262018-04-02 05:33:28 +00002710def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002711 let Latency = 21;
2712 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002713 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002714}
2715def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2716
2717def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2718 let Latency = 22;
2719 let NumMicroOps = 2;
2720 let ResourceCycles = [1,1];
2721}
Craig Topperfc179c62018-03-22 04:23:41 +00002722def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2723 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002724
2725def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2726 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002727 let NumMicroOps = 5;
2728 let ResourceCycles = [1,2,1,1];
2729}
Craig Topper17a31182017-12-16 18:35:29 +00002730def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2731 VGATHERDPDrm,
2732 VGATHERQPDrm,
2733 VGATHERQPSrm,
2734 VPGATHERDDrm,
2735 VPGATHERDQrm,
2736 VPGATHERQDrm,
2737 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002738
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002739def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2740 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002741 let NumMicroOps = 5;
2742 let ResourceCycles = [1,2,1,1];
2743}
Craig Topper17a31182017-12-16 18:35:29 +00002744def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2745 VGATHERQPDYrm,
2746 VGATHERQPSYrm,
2747 VPGATHERDDYrm,
2748 VPGATHERDQYrm,
2749 VPGATHERQDYrm,
2750 VPGATHERQQYrm,
2751 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002752
Craig Topper8104f262018-04-02 05:33:28 +00002753def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002754 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002755 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002756 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002757}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002758def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002759
2760def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2761 let Latency = 23;
2762 let NumMicroOps = 19;
2763 let ResourceCycles = [2,1,4,1,1,4,6];
2764}
2765def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2766
Craig Topper8104f262018-04-02 05:33:28 +00002767def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002768 let Latency = 24;
2769 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002770 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002771}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002772def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002773
Craig Topper8104f262018-04-02 05:33:28 +00002774def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002775 let Latency = 25;
2776 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002777 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002778}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002779def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002780
2781def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2782 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002783 let NumMicroOps = 3;
2784 let ResourceCycles = [1,1,1];
2785}
Craig Topperfc179c62018-03-22 04:23:41 +00002786def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2787 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002788
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002789def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2790 let Latency = 27;
2791 let NumMicroOps = 2;
2792 let ResourceCycles = [1,1];
2793}
Craig Topperfc179c62018-03-22 04:23:41 +00002794def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2795 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002796
2797def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2798 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002799 let NumMicroOps = 8;
2800 let ResourceCycles = [2,4,1,1];
2801}
Craig Topper13a16502018-03-19 00:56:09 +00002802def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002803
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002804def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002805 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002806 let NumMicroOps = 3;
2807 let ResourceCycles = [1,1,1];
2808}
Craig Topperfc179c62018-03-22 04:23:41 +00002809def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2810 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002811
2812def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2813 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002814 let NumMicroOps = 23;
2815 let ResourceCycles = [1,5,3,4,10];
2816}
Craig Topperfc179c62018-03-22 04:23:41 +00002817def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2818 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002819
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002820def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2821 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002822 let NumMicroOps = 23;
2823 let ResourceCycles = [1,5,2,1,4,10];
2824}
Craig Topperfc179c62018-03-22 04:23:41 +00002825def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2826 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002827
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002828def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2829 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002830 let NumMicroOps = 31;
2831 let ResourceCycles = [1,8,1,21];
2832}
Craig Topper391c6f92017-12-10 01:24:08 +00002833def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002834
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002835def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2836 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002837 let NumMicroOps = 18;
2838 let ResourceCycles = [1,1,2,3,1,1,1,8];
2839}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002840def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002841
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002842def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2843 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002844 let NumMicroOps = 39;
2845 let ResourceCycles = [1,10,1,1,26];
2846}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002847def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002848
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002849def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002850 let Latency = 42;
2851 let NumMicroOps = 22;
2852 let ResourceCycles = [2,20];
2853}
Craig Topper2d451e72018-03-18 08:38:06 +00002854def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002855
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002856def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2857 let Latency = 42;
2858 let NumMicroOps = 40;
2859 let ResourceCycles = [1,11,1,1,26];
2860}
Craig Topper391c6f92017-12-10 01:24:08 +00002861def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002862
2863def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2864 let Latency = 46;
2865 let NumMicroOps = 44;
2866 let ResourceCycles = [1,11,1,1,30];
2867}
2868def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2869
2870def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2871 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002872 let NumMicroOps = 64;
2873 let ResourceCycles = [2,8,5,10,39];
2874}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002875def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002876
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002877def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2878 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002879 let NumMicroOps = 88;
2880 let ResourceCycles = [4,4,31,1,2,1,45];
2881}
Craig Topper2d451e72018-03-18 08:38:06 +00002882def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002883
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002884def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2885 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002886 let NumMicroOps = 90;
2887 let ResourceCycles = [4,2,33,1,2,1,47];
2888}
Craig Topper2d451e72018-03-18 08:38:06 +00002889def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002890
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002891def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002892 let Latency = 75;
2893 let NumMicroOps = 15;
2894 let ResourceCycles = [6,3,6];
2895}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002896def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002897
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002898def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002899 let Latency = 76;
2900 let NumMicroOps = 32;
2901 let ResourceCycles = [7,2,8,3,1,11];
2902}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002903def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002904
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002905def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002906 let Latency = 102;
2907 let NumMicroOps = 66;
2908 let ResourceCycles = [4,2,4,8,14,34];
2909}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002910def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002911
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002912def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2913 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002914 let NumMicroOps = 100;
2915 let ResourceCycles = [9,1,11,16,1,11,21,30];
2916}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002917def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002918
2919} // SchedModel