blob: f661f34bb108d7aaa8d01015dfe32dbf5afa5110 [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : SKLWriteResPair<WriteCMOV, [SKLPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [SKLPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [SKLPort06,SKLPort4,SKLPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
125defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
126defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
127defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
134defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
135
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteMove, [SKLPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
145// Branches don't produce values, so they have no latency, but they still
146// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000148
149// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000150def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
151def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
152def : WriteRes<WriteFMove, [SKLPort015]>;
153
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
156defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000157defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
158defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
159defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000160defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4>; // Floating point reciprocal estimate.
161defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4>; // Floating point reciprocal square root estimate.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
164defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000167defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1>; // Floating point vector blends.
168defm : SKLWriteResPair<WriteFVarBlend, [SKLPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000169
170// FMA Scheduling helper class.
171// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
172
173// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000174def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
175def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
176def : WriteRes<WriteVecMove, [SKLPort015]>;
177
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000178defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000179defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
181defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000182defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000184defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000185defm : SKLWriteResPair<WriteBlend, [SKLPort15], 1>; // Vector blends.
186defm : SKLWriteResPair<WriteVarBlend, [SKLPort5], 2, [2]>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000187defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000188defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000189
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000191defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
192defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
193defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000194
195// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000197// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000198def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
199 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000200 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000201 let ResourceCycles = [3];
202}
203def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000204 let Latency = 16;
205 let NumMicroOps = 4;
206 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000207}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000208
209// Packed Compare Explicit Length Strings, Return Mask
210def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
211 let Latency = 19;
212 let NumMicroOps = 9;
213 let ResourceCycles = [4,3,1,1];
214}
215def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
216 let Latency = 25;
217 let NumMicroOps = 10;
218 let ResourceCycles = [4,3,1,1,1];
219}
220
221// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000222def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000223 let Latency = 10;
224 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000225 let ResourceCycles = [3];
226}
227def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000228 let Latency = 16;
229 let NumMicroOps = 4;
230 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000232
233// Packed Compare Explicit Length Strings, Return Index
234def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
235 let Latency = 18;
236 let NumMicroOps = 8;
237 let ResourceCycles = [4,3,1];
238}
239def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
240 let Latency = 24;
241 let NumMicroOps = 9;
242 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000243}
244
Simon Pilgrima2f26782018-03-27 20:38:54 +0000245// MOVMSK Instructions.
246def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
247def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
248def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
249
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000250// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000251def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
252 let Latency = 4;
253 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000254 let ResourceCycles = [1];
255}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
257 let Latency = 10;
258 let NumMicroOps = 2;
259 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000260}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261
262def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
263 let Latency = 8;
264 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265 let ResourceCycles = [2];
266}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000268 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000269 let NumMicroOps = 3;
270 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000272
273def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
274 let Latency = 20;
275 let NumMicroOps = 11;
276 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000278def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
279 let Latency = 25;
280 let NumMicroOps = 11;
281 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000282}
283
284// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000285def : WriteRes<WriteCLMul, [SKLPort5]> {
286 let Latency = 6;
287 let NumMicroOps = 1;
288 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000289}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000290def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
291 let Latency = 12;
292 let NumMicroOps = 2;
293 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000294}
295
296// Catch-all for expensive system instructions.
297def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
298
299// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000300defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000301defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000302defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000303defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000304defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305
306// Old microcoded instructions that nobody use.
307def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
308
309// Fence instructions.
310def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
311
Craig Topper05242bf2018-04-21 18:07:36 +0000312// Load/store MXCSR.
313def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
314def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
315
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000316// Nop, not very useful expect it provides a model for nops!
317def : WriteRes<WriteNop, []>;
318
319////////////////////////////////////////////////////////////////////////////////
320// Horizontal add/sub instructions.
321////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000322
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000323defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
324defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000325
326// Remaining instrs.
327
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000328def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000329 let Latency = 1;
330 let NumMicroOps = 1;
331 let ResourceCycles = [1];
332}
Craig Topperfc179c62018-03-22 04:23:41 +0000333def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
334 "MMX_PADDSWirr",
335 "MMX_PADDUSBirr",
336 "MMX_PADDUSWirr",
337 "MMX_PAVGBirr",
338 "MMX_PAVGWirr",
339 "MMX_PCMPEQBirr",
340 "MMX_PCMPEQDirr",
341 "MMX_PCMPEQWirr",
342 "MMX_PCMPGTBirr",
343 "MMX_PCMPGTDirr",
344 "MMX_PCMPGTWirr",
345 "MMX_PMAXSWirr",
346 "MMX_PMAXUBirr",
347 "MMX_PMINSWirr",
348 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000349 "MMX_PSUBSBirr",
350 "MMX_PSUBSWirr",
351 "MMX_PSUBUSBirr",
352 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000353
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000354def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000355 let Latency = 1;
356 let NumMicroOps = 1;
357 let ResourceCycles = [1];
358}
Craig Topperfc179c62018-03-22 04:23:41 +0000359def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
360 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000361 "MMX_MOVD64rr",
362 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000363 "UCOM_FPr",
364 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000365 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000366 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000367 "(V?)PBLENDW(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000368 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000369 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000370
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000371def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000372 let Latency = 1;
373 let NumMicroOps = 1;
374 let ResourceCycles = [1];
375}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000376def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000377
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000378def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000379 let Latency = 1;
380 let NumMicroOps = 1;
381 let ResourceCycles = [1];
382}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000383def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
384 "(V?)PABSD(Y?)rr",
385 "(V?)PABSW(Y?)rr",
386 "(V?)PADDSB(Y?)rr",
387 "(V?)PADDSW(Y?)rr",
388 "(V?)PADDUSB(Y?)rr",
389 "(V?)PADDUSW(Y?)rr",
390 "(V?)PAVGB(Y?)rr",
391 "(V?)PAVGW(Y?)rr",
392 "(V?)PCMPEQB(Y?)rr",
393 "(V?)PCMPEQD(Y?)rr",
394 "(V?)PCMPEQQ(Y?)rr",
395 "(V?)PCMPEQW(Y?)rr",
396 "(V?)PCMPGTB(Y?)rr",
397 "(V?)PCMPGTD(Y?)rr",
398 "(V?)PCMPGTW(Y?)rr",
399 "(V?)PMAXSB(Y?)rr",
400 "(V?)PMAXSD(Y?)rr",
401 "(V?)PMAXSW(Y?)rr",
402 "(V?)PMAXUB(Y?)rr",
403 "(V?)PMAXUD(Y?)rr",
404 "(V?)PMAXUW(Y?)rr",
405 "(V?)PMINSB(Y?)rr",
406 "(V?)PMINSD(Y?)rr",
407 "(V?)PMINSW(Y?)rr",
408 "(V?)PMINUB(Y?)rr",
409 "(V?)PMINUD(Y?)rr",
410 "(V?)PMINUW(Y?)rr",
411 "(V?)PSIGNB(Y?)rr",
412 "(V?)PSIGND(Y?)rr",
413 "(V?)PSIGNW(Y?)rr",
414 "(V?)PSLLD(Y?)ri",
415 "(V?)PSLLQ(Y?)ri",
416 "VPSLLVD(Y?)rr",
417 "VPSLLVQ(Y?)rr",
418 "(V?)PSLLW(Y?)ri",
419 "(V?)PSRAD(Y?)ri",
420 "VPSRAVD(Y?)rr",
421 "(V?)PSRAW(Y?)ri",
422 "(V?)PSRLD(Y?)ri",
423 "(V?)PSRLQ(Y?)ri",
424 "VPSRLVD(Y?)rr",
425 "VPSRLVQ(Y?)rr",
426 "(V?)PSRLW(Y?)ri",
427 "(V?)PSUBSB(Y?)rr",
428 "(V?)PSUBSW(Y?)rr",
429 "(V?)PSUBUSB(Y?)rr",
430 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000431
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000432def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000433 let Latency = 1;
434 let NumMicroOps = 1;
435 let ResourceCycles = [1];
436}
Craig Topperfc179c62018-03-22 04:23:41 +0000437def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
438 "FNOP",
439 "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000440 "MMX_PABS(B|D|W)rr",
441 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000442 "MMX_PANDNirr",
443 "MMX_PANDirr",
444 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000445 "MMX_PSIGN(B|D|W)rr",
446 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000447 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000448
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000449def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000450 let Latency = 1;
451 let NumMicroOps = 1;
452 let ResourceCycles = [1];
453}
Craig Topperfbe31322018-04-05 21:56:19 +0000454def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000455def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
456 "ADC(16|32|64)i",
457 "ADC(8|16|32|64)rr",
458 "ADCX(32|64)rr",
459 "ADOX(32|64)rr",
460 "BT(16|32|64)ri8",
461 "BT(16|32|64)rr",
462 "BTC(16|32|64)ri8",
463 "BTC(16|32|64)rr",
464 "BTR(16|32|64)ri8",
465 "BTR(16|32|64)rr",
466 "BTS(16|32|64)ri8",
467 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000468 "CLAC",
Craig Topperfc179c62018-03-22 04:23:41 +0000469 "RORX(32|64)ri",
470 "SAR(8|16|32|64)r1",
471 "SAR(8|16|32|64)ri",
472 "SARX(32|64)rr",
473 "SBB(16|32|64)ri",
474 "SBB(16|32|64)i",
475 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000476 "SHL(8|16|32|64)r1",
477 "SHL(8|16|32|64)ri",
478 "SHLX(32|64)rr",
479 "SHR(8|16|32|64)r1",
480 "SHR(8|16|32|64)ri",
481 "SHRX(32|64)rr",
482 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000483
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000484def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
485 let Latency = 1;
486 let NumMicroOps = 1;
487 let ResourceCycles = [1];
488}
Craig Topperfc179c62018-03-22 04:23:41 +0000489def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
490 "BLSI(32|64)rr",
491 "BLSMSK(32|64)rr",
492 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000493 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000494
495def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
496 let Latency = 1;
497 let NumMicroOps = 1;
498 let ResourceCycles = [1];
499}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000500def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000501 "(V?)PADDD(Y?)rr",
502 "(V?)PADDQ(Y?)rr",
503 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000504 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000505 "(V?)PSUBB(Y?)rr",
506 "(V?)PSUBD(Y?)rr",
507 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000508 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000509
510def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
511 let Latency = 1;
512 let NumMicroOps = 1;
513 let ResourceCycles = [1];
514}
Craig Topperfbe31322018-04-05 21:56:19 +0000515def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000516def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000517 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000518 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000519 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000520 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000521 "SGDT64m",
522 "SIDT64m",
523 "SLDT64m",
524 "SMSW16m",
525 "STC",
526 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000527 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000528
529def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000530 let Latency = 1;
531 let NumMicroOps = 2;
532 let ResourceCycles = [1,1];
533}
Craig Topperfc179c62018-03-22 04:23:41 +0000534def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
535 "MMX_MOVD64from64rm",
536 "MMX_MOVD64mr",
537 "MMX_MOVNTQmr",
538 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000539 "MOVNTI_64mr",
540 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000541 "ST_FP32m",
542 "ST_FP64m",
543 "ST_FP80m",
544 "VEXTRACTF128mr",
545 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000546 "(V?)MOVAPDYmr",
547 "(V?)MOVAPS(Y?)mr",
548 "(V?)MOVDQA(Y?)mr",
549 "(V?)MOVDQU(Y?)mr",
550 "(V?)MOVHPDmr",
551 "(V?)MOVHPSmr",
552 "(V?)MOVLPDmr",
553 "(V?)MOVLPSmr",
554 "(V?)MOVNTDQ(Y?)mr",
555 "(V?)MOVNTPD(Y?)mr",
556 "(V?)MOVNTPS(Y?)mr",
557 "(V?)MOVPDI2DImr",
558 "(V?)MOVPQI2QImr",
559 "(V?)MOVPQIto64mr",
560 "(V?)MOVSDmr",
561 "(V?)MOVSSmr",
562 "(V?)MOVUPD(Y?)mr",
563 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000564 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000565
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000566def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000567 let Latency = 2;
568 let NumMicroOps = 1;
569 let ResourceCycles = [1];
570}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000571def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000572 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000573 "(V?)MOVPDI2DIrr",
574 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000575 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000576 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000577
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000578def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000579 let Latency = 2;
580 let NumMicroOps = 2;
581 let ResourceCycles = [2];
582}
Craig Topperfc179c62018-03-22 04:23:41 +0000583def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
584 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000585 "(V?)PINSRBrr",
586 "(V?)PINSRDrr",
587 "(V?)PINSRQrr",
588 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000589
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000590def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000591 let Latency = 2;
592 let NumMicroOps = 2;
593 let ResourceCycles = [2];
594}
Craig Topperfc179c62018-03-22 04:23:41 +0000595def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
596 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000597
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000598def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000599 let Latency = 2;
600 let NumMicroOps = 2;
601 let ResourceCycles = [2];
602}
Craig Topperfc179c62018-03-22 04:23:41 +0000603def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
604 "ROL(8|16|32|64)r1",
605 "ROL(8|16|32|64)ri",
606 "ROR(8|16|32|64)r1",
607 "ROR(8|16|32|64)ri",
608 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000609
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000610def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000611 let Latency = 2;
612 let NumMicroOps = 2;
613 let ResourceCycles = [2];
614}
Craig Topperfc179c62018-03-22 04:23:41 +0000615def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
616 "BLENDVPSrr0",
617 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000618 "VBLENDVPD(Y?)rr",
619 "VBLENDVPS(Y?)rr",
620 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000621
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000622def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000623 let Latency = 2;
624 let NumMicroOps = 2;
625 let ResourceCycles = [2];
626}
Craig Topperfc179c62018-03-22 04:23:41 +0000627def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
628 "WAIT",
629 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000630
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000631def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000632 let Latency = 2;
633 let NumMicroOps = 2;
634 let ResourceCycles = [1,1];
635}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000636def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
637 "VMASKMOVPS(Y?)mr",
638 "VPMASKMOVD(Y?)mr",
639 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000640
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000641def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000642 let Latency = 2;
643 let NumMicroOps = 2;
644 let ResourceCycles = [1,1];
645}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000646def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
647 "(V?)PSLLQrr",
648 "(V?)PSLLWrr",
649 "(V?)PSRADrr",
650 "(V?)PSRAWrr",
651 "(V?)PSRLDrr",
652 "(V?)PSRLQrr",
653 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000654
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000655def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000656 let Latency = 2;
657 let NumMicroOps = 2;
658 let ResourceCycles = [1,1];
659}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000660def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000661
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000662def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000663 let Latency = 2;
664 let NumMicroOps = 2;
665 let ResourceCycles = [1,1];
666}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000667def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000668
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000669def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000670 let Latency = 2;
671 let NumMicroOps = 2;
672 let ResourceCycles = [1,1];
673}
Craig Topper498875f2018-04-04 17:54:19 +0000674def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
675
676def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
677 let Latency = 1;
678 let NumMicroOps = 1;
679 let ResourceCycles = [1];
680}
681def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000682
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000683def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000684 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000685 let NumMicroOps = 2;
686 let ResourceCycles = [1,1];
687}
Craig Topper2d451e72018-03-18 08:38:06 +0000688def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000689def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000690def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
691 "ADC8ri",
692 "SBB8i8",
693 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000694
695def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
696 let Latency = 2;
697 let NumMicroOps = 3;
698 let ResourceCycles = [1,1,1];
699}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000700def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
701 "(V?)PEXTRBmr",
702 "(V?)PEXTRDmr",
703 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000704 "(V?)PEXTRWmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000705
706def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
707 let Latency = 2;
708 let NumMicroOps = 3;
709 let ResourceCycles = [1,1,1];
710}
711def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
712
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000713def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
714 let Latency = 2;
715 let NumMicroOps = 3;
716 let ResourceCycles = [1,1,1];
717}
718def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
719
720def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
721 let Latency = 2;
722 let NumMicroOps = 3;
723 let ResourceCycles = [1,1,1];
724}
Craig Topper2d451e72018-03-18 08:38:06 +0000725def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000726def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
727 "PUSH64i8",
728 "STOSB",
729 "STOSL",
730 "STOSQ",
731 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000732
733def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
734 let Latency = 3;
735 let NumMicroOps = 1;
736 let ResourceCycles = [1];
737}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000738def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000739 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000740 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000741 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000742
Clement Courbet327fac42018-03-07 08:14:02 +0000743def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000744 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000745 let NumMicroOps = 2;
746 let ResourceCycles = [1,1];
747}
Clement Courbet327fac42018-03-07 08:14:02 +0000748def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000749
750def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
751 let Latency = 3;
752 let NumMicroOps = 1;
753 let ResourceCycles = [1];
754}
Craig Topperfc179c62018-03-22 04:23:41 +0000755def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
756 "ADD_FST0r",
757 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000758 "SUBR_FPrST0",
759 "SUBR_FST0r",
760 "SUBR_FrST0",
761 "SUB_FPrST0",
762 "SUB_FST0r",
763 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000764 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000765 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000766 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000767 "VPMOVSXBDYrr",
768 "VPMOVSXBQYrr",
769 "VPMOVSXBWYrr",
770 "VPMOVSXDQYrr",
771 "VPMOVSXWDYrr",
772 "VPMOVSXWQYrr",
773 "VPMOVZXBDYrr",
774 "VPMOVZXBQYrr",
775 "VPMOVZXBWYrr",
776 "VPMOVZXDQYrr",
777 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000778 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000779
780def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
781 let Latency = 3;
782 let NumMicroOps = 2;
783 let ResourceCycles = [1,1];
784}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000785def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
786 "(V?)EXTRACTPSrr",
787 "(V?)PEXTRBrr",
788 "(V?)PEXTRDrr",
789 "(V?)PEXTRQrr",
790 "(V?)PEXTRWrr",
791 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000792
793def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
794 let Latency = 3;
795 let NumMicroOps = 2;
796 let ResourceCycles = [1,1];
797}
798def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
799
800def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
801 let Latency = 3;
802 let NumMicroOps = 3;
803 let ResourceCycles = [3];
804}
Craig Topperfc179c62018-03-22 04:23:41 +0000805def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
806 "ROR(8|16|32|64)rCL",
807 "SAR(8|16|32|64)rCL",
808 "SHL(8|16|32|64)rCL",
809 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000810
811def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000812 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000813 let NumMicroOps = 3;
814 let ResourceCycles = [3];
815}
Craig Topperb5f26592018-04-19 18:00:17 +0000816def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
817 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
818 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000819
820def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
821 let Latency = 3;
822 let NumMicroOps = 3;
823 let ResourceCycles = [1,2];
824}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000825def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000826
827def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
828 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000829 let NumMicroOps = 3;
830 let ResourceCycles = [2,1];
831}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000832def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
833 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000834
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000835def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
836 let Latency = 3;
837 let NumMicroOps = 3;
838 let ResourceCycles = [2,1];
839}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000840def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000841
842def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
843 let Latency = 3;
844 let NumMicroOps = 3;
845 let ResourceCycles = [2,1];
846}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000847def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
848 "(V?)PHADDW(Y?)rr",
849 "(V?)PHSUBD(Y?)rr",
850 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000851
852def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
853 let Latency = 3;
854 let NumMicroOps = 3;
855 let ResourceCycles = [2,1];
856}
Craig Topperfc179c62018-03-22 04:23:41 +0000857def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
858 "MMX_PACKSSWBirr",
859 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000860
861def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
862 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000863 let NumMicroOps = 3;
864 let ResourceCycles = [1,2];
865}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000866def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000867
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000868def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
869 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000870 let NumMicroOps = 3;
871 let ResourceCycles = [1,2];
872}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000873def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000874
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000875def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
876 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000877 let NumMicroOps = 3;
878 let ResourceCycles = [1,2];
879}
Craig Topperfc179c62018-03-22 04:23:41 +0000880def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
881 "RCL(8|16|32|64)ri",
882 "RCR(8|16|32|64)r1",
883 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000884
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000885def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
886 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000887 let NumMicroOps = 3;
888 let ResourceCycles = [1,1,1];
889}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000890def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000891
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000892def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
893 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000894 let NumMicroOps = 4;
895 let ResourceCycles = [1,1,2];
896}
Craig Topperf4cd9082018-01-19 05:47:32 +0000897def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000898
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000899def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
900 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000901 let NumMicroOps = 4;
902 let ResourceCycles = [1,1,1,1];
903}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000904def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000905
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000906def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
907 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000908 let NumMicroOps = 4;
909 let ResourceCycles = [1,1,1,1];
910}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000911def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000912
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000913def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000914 let Latency = 4;
915 let NumMicroOps = 1;
916 let ResourceCycles = [1];
917}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000918def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000919 "MMX_PMADDWDirr",
920 "MMX_PMULHRSWrr",
921 "MMX_PMULHUWirr",
922 "MMX_PMULHWirr",
923 "MMX_PMULLWirr",
924 "MMX_PMULUDQirr",
925 "MUL_FPrST0",
926 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000927 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000928
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000929def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000930 let Latency = 4;
931 let NumMicroOps = 1;
932 let ResourceCycles = [1];
933}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000934def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
935 "(V?)ADDPS(Y?)rr",
936 "(V?)ADDSDrr",
937 "(V?)ADDSSrr",
938 "(V?)ADDSUBPD(Y?)rr",
939 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000940 "(V?)CVTDQ2PS(Y?)rr",
941 "(V?)CVTPS2DQ(Y?)rr",
942 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000943 "(V?)MULPD(Y?)rr",
944 "(V?)MULPS(Y?)rr",
945 "(V?)MULSDrr",
946 "(V?)MULSSrr",
947 "(V?)PHMINPOSUWrr",
948 "(V?)PMADDUBSW(Y?)rr",
949 "(V?)PMADDWD(Y?)rr",
950 "(V?)PMULDQ(Y?)rr",
951 "(V?)PMULHRSW(Y?)rr",
952 "(V?)PMULHUW(Y?)rr",
953 "(V?)PMULHW(Y?)rr",
954 "(V?)PMULLW(Y?)rr",
955 "(V?)PMULUDQ(Y?)rr",
956 "(V?)SUBPD(Y?)rr",
957 "(V?)SUBPS(Y?)rr",
958 "(V?)SUBSDrr",
959 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000960
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000961def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000962 let Latency = 4;
963 let NumMicroOps = 2;
964 let ResourceCycles = [1,1];
965}
Craig Topperf846e2d2018-04-19 05:34:05 +0000966def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000967
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000968def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
969 let Latency = 4;
970 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000971 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000972}
Craig Topperfc179c62018-03-22 04:23:41 +0000973def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000974
975def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000976 let Latency = 4;
977 let NumMicroOps = 2;
978 let ResourceCycles = [1,1];
979}
Craig Topperfc179c62018-03-22 04:23:41 +0000980def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
981 "VPSLLQYrr",
982 "VPSLLWYrr",
983 "VPSRADYrr",
984 "VPSRAWYrr",
985 "VPSRLDYrr",
986 "VPSRLQYrr",
987 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000988
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000989def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000990 let Latency = 4;
991 let NumMicroOps = 3;
992 let ResourceCycles = [1,1,1];
993}
Craig Topperfc179c62018-03-22 04:23:41 +0000994def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
995 "ISTT_FP32m",
996 "ISTT_FP64m",
997 "IST_F16m",
998 "IST_F32m",
999 "IST_FP16m",
1000 "IST_FP32m",
1001 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001002
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001003def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001004 let Latency = 4;
1005 let NumMicroOps = 4;
1006 let ResourceCycles = [4];
1007}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001008def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001009
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001010def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001011 let Latency = 4;
1012 let NumMicroOps = 4;
1013 let ResourceCycles = [1,3];
1014}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001015def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001016
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001017def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001018 let Latency = 4;
1019 let NumMicroOps = 4;
1020 let ResourceCycles = [1,3];
1021}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001022def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001023
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001024def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001025 let Latency = 4;
1026 let NumMicroOps = 4;
1027 let ResourceCycles = [1,1,2];
1028}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001029def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001030
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001031def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1032 let Latency = 5;
1033 let NumMicroOps = 1;
1034 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001035}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001036def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001037 "MOVSX(16|32|64)rm32",
1038 "MOVSX(16|32|64)rm8",
1039 "MOVZX(16|32|64)rm16",
1040 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001041 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001042
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001043def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001044 let Latency = 5;
1045 let NumMicroOps = 2;
1046 let ResourceCycles = [1,1];
1047}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001048def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1049 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001050
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001051def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001052 let Latency = 5;
1053 let NumMicroOps = 2;
1054 let ResourceCycles = [1,1];
1055}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001056def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001057 "MMX_CVTPS2PIirr",
1058 "MMX_CVTTPD2PIirr",
1059 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001060 "(V?)CVTPD2DQrr",
1061 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001062 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001063 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001064 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001065 "(V?)CVTSD2SSrr",
1066 "(V?)CVTSI642SDrr",
1067 "(V?)CVTSI2SDrr",
1068 "(V?)CVTSI2SSrr",
1069 "(V?)CVTSS2SDrr",
1070 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001071
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001072def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001073 let Latency = 5;
1074 let NumMicroOps = 3;
1075 let ResourceCycles = [1,1,1];
1076}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001077def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001078
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001079def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001080 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001081 let NumMicroOps = 3;
1082 let ResourceCycles = [1,1,1];
1083}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001084def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001085
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001086def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001087 let Latency = 5;
1088 let NumMicroOps = 5;
1089 let ResourceCycles = [1,4];
1090}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001091def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001092
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001093def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001094 let Latency = 5;
1095 let NumMicroOps = 5;
1096 let ResourceCycles = [2,3];
1097}
Craig Topper13a16502018-03-19 00:56:09 +00001098def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001099
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001100def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001101 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001102 let NumMicroOps = 6;
1103 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001104}
Craig Topperfc179c62018-03-22 04:23:41 +00001105def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1106 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001107
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001108def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1109 let Latency = 6;
1110 let NumMicroOps = 1;
1111 let ResourceCycles = [1];
1112}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001113def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001114 "(V?)MOVSHDUPrm",
1115 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001116 "VPBROADCASTDrm",
1117 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001118
1119def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001120 let Latency = 6;
1121 let NumMicroOps = 2;
1122 let ResourceCycles = [2];
1123}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001124def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001125
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001126def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001127 let Latency = 6;
1128 let NumMicroOps = 2;
1129 let ResourceCycles = [1,1];
1130}
Craig Topperfc179c62018-03-22 04:23:41 +00001131def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1132 "MMX_PADDSWirm",
1133 "MMX_PADDUSBirm",
1134 "MMX_PADDUSWirm",
1135 "MMX_PAVGBirm",
1136 "MMX_PAVGWirm",
1137 "MMX_PCMPEQBirm",
1138 "MMX_PCMPEQDirm",
1139 "MMX_PCMPEQWirm",
1140 "MMX_PCMPGTBirm",
1141 "MMX_PCMPGTDirm",
1142 "MMX_PCMPGTWirm",
1143 "MMX_PMAXSWirm",
1144 "MMX_PMAXUBirm",
1145 "MMX_PMINSWirm",
1146 "MMX_PMINUBirm",
1147 "MMX_PSLLDrm",
1148 "MMX_PSLLQrm",
1149 "MMX_PSLLWrm",
1150 "MMX_PSRADrm",
1151 "MMX_PSRAWrm",
1152 "MMX_PSRLDrm",
1153 "MMX_PSRLQrm",
1154 "MMX_PSRLWrm",
1155 "MMX_PSUBSBirm",
1156 "MMX_PSUBSWirm",
1157 "MMX_PSUBUSBirm",
1158 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001159
Craig Topper58afb4e2018-03-22 21:10:07 +00001160def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001161 let Latency = 6;
1162 let NumMicroOps = 2;
1163 let ResourceCycles = [1,1];
1164}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001165def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1166 "(V?)CVTSD2SIrr",
1167 "(V?)CVTSS2SI64rr",
1168 "(V?)CVTSS2SIrr",
1169 "(V?)CVTTSD2SI64rr",
1170 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001171
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001172def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1173 let Latency = 6;
1174 let NumMicroOps = 2;
1175 let ResourceCycles = [1,1];
1176}
Craig Topperfc179c62018-03-22 04:23:41 +00001177def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1178 "MMX_PINSRWrm",
1179 "MMX_PSHUFBrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001180 "MMX_PUNPCKHBWirm",
1181 "MMX_PUNPCKHDQirm",
1182 "MMX_PUNPCKHWDirm",
1183 "MMX_PUNPCKLBWirm",
1184 "MMX_PUNPCKLDQirm",
1185 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001186 "(V?)MOVHPDrm",
1187 "(V?)MOVHPSrm",
1188 "(V?)MOVLPDrm",
1189 "(V?)MOVLPSrm",
1190 "(V?)PINSRBrm",
1191 "(V?)PINSRDrm",
1192 "(V?)PINSRQrm",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001193 "(V?)PINSRWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001194
1195def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1196 let Latency = 6;
1197 let NumMicroOps = 2;
1198 let ResourceCycles = [1,1];
1199}
Craig Topperfc179c62018-03-22 04:23:41 +00001200def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1201 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001202
1203def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1204 let Latency = 6;
1205 let NumMicroOps = 2;
1206 let ResourceCycles = [1,1];
1207}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001208def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1209 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001210 "MMX_PANDNirm",
1211 "MMX_PANDirm",
1212 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001213 "MMX_PSIGN(B|D|W)rm",
1214 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001215 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001216
1217def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1218 let Latency = 6;
1219 let NumMicroOps = 2;
1220 let ResourceCycles = [1,1];
1221}
Craig Topperc50570f2018-04-06 17:12:18 +00001222def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001223 "RORX(32|64)mi",
1224 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001225 "SHLX(32|64)rm",
1226 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001227def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1228 ADCX32rm, ADCX64rm,
1229 ADOX32rm, ADOX64rm,
1230 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001231
1232def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1233 let Latency = 6;
1234 let NumMicroOps = 2;
1235 let ResourceCycles = [1,1];
1236}
Craig Topperfc179c62018-03-22 04:23:41 +00001237def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1238 "BLSI(32|64)rm",
1239 "BLSMSK(32|64)rm",
1240 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001241 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001242
1243def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1244 let Latency = 6;
1245 let NumMicroOps = 2;
1246 let ResourceCycles = [1,1];
1247}
Craig Topper2d451e72018-03-18 08:38:06 +00001248def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001249def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001250
1251def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001252 let Latency = 6;
1253 let NumMicroOps = 3;
1254 let ResourceCycles = [2,1];
1255}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001256def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1257 "(V?)HADDPS(Y?)rr",
1258 "(V?)HSUBPD(Y?)rr",
1259 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001260
Craig Topper58afb4e2018-03-22 21:10:07 +00001261def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001262 let Latency = 6;
1263 let NumMicroOps = 3;
1264 let ResourceCycles = [2,1];
1265}
Craig Topperfc179c62018-03-22 04:23:41 +00001266def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001267
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001268def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001269 let Latency = 6;
1270 let NumMicroOps = 4;
1271 let ResourceCycles = [1,2,1];
1272}
Craig Topperfc179c62018-03-22 04:23:41 +00001273def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1274 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001275
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001276def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001277 let Latency = 6;
1278 let NumMicroOps = 4;
1279 let ResourceCycles = [1,1,1,1];
1280}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001281def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001282
Craig Topper58afb4e2018-03-22 21:10:07 +00001283def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001284 let Latency = 6;
1285 let NumMicroOps = 4;
1286 let ResourceCycles = [1,1,1,1];
1287}
1288def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1289
1290def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1291 let Latency = 6;
1292 let NumMicroOps = 4;
1293 let ResourceCycles = [1,1,1,1];
1294}
Craig Topperfc179c62018-03-22 04:23:41 +00001295def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1296 "BTR(16|32|64)mi8",
1297 "BTS(16|32|64)mi8",
1298 "SAR(8|16|32|64)m1",
1299 "SAR(8|16|32|64)mi",
1300 "SHL(8|16|32|64)m1",
1301 "SHL(8|16|32|64)mi",
1302 "SHR(8|16|32|64)m1",
1303 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001304
1305def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1306 let Latency = 6;
1307 let NumMicroOps = 4;
1308 let ResourceCycles = [1,1,1,1];
1309}
Craig Topperf0d04262018-04-06 16:16:48 +00001310def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1311 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001312
1313def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001314 let Latency = 6;
1315 let NumMicroOps = 6;
1316 let ResourceCycles = [1,5];
1317}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001318def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001319
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001320def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1321 let Latency = 7;
1322 let NumMicroOps = 1;
1323 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001324}
Craig Topperfc179c62018-03-22 04:23:41 +00001325def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1326 "LD_F64m",
1327 "LD_F80m",
1328 "VBROADCASTF128",
1329 "VBROADCASTI128",
1330 "VBROADCASTSDYrm",
1331 "VBROADCASTSSYrm",
1332 "VLDDQUYrm",
1333 "VMOVAPDYrm",
1334 "VMOVAPSYrm",
1335 "VMOVDDUPYrm",
1336 "VMOVDQAYrm",
1337 "VMOVDQUYrm",
1338 "VMOVNTDQAYrm",
1339 "VMOVSHDUPYrm",
1340 "VMOVSLDUPYrm",
1341 "VMOVUPDYrm",
1342 "VMOVUPSYrm",
1343 "VPBROADCASTDYrm",
1344 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001345
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001346def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001347 let Latency = 7;
1348 let NumMicroOps = 2;
1349 let ResourceCycles = [1,1];
1350}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001351def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001352
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001353def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1354 let Latency = 7;
1355 let NumMicroOps = 2;
1356 let ResourceCycles = [1,1];
1357}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001358def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1359 "(V?)PACKSSDWrm",
1360 "(V?)PACKSSWBrm",
1361 "(V?)PACKUSDWrm",
1362 "(V?)PACKUSWBrm",
1363 "(V?)PALIGNRrmi",
1364 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001365 "VPBROADCASTBrm",
1366 "VPBROADCASTWrm",
1367 "VPERMILPDmi",
1368 "VPERMILPDrm",
1369 "VPERMILPSmi",
1370 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001371 "(V?)PSHUFBrm",
1372 "(V?)PSHUFDmi",
1373 "(V?)PSHUFHWmi",
1374 "(V?)PSHUFLWmi",
1375 "(V?)PUNPCKHBWrm",
1376 "(V?)PUNPCKHDQrm",
1377 "(V?)PUNPCKHQDQrm",
1378 "(V?)PUNPCKHWDrm",
1379 "(V?)PUNPCKLBWrm",
1380 "(V?)PUNPCKLDQrm",
1381 "(V?)PUNPCKLQDQrm",
1382 "(V?)PUNPCKLWDrm",
1383 "(V?)SHUFPDrmi",
1384 "(V?)SHUFPSrmi",
1385 "(V?)UNPCKHPDrm",
1386 "(V?)UNPCKHPSrm",
1387 "(V?)UNPCKLPDrm",
1388 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001389
Craig Topper58afb4e2018-03-22 21:10:07 +00001390def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001391 let Latency = 7;
1392 let NumMicroOps = 2;
1393 let ResourceCycles = [1,1];
1394}
Craig Topperfc179c62018-03-22 04:23:41 +00001395def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1396 "VCVTPD2PSYrr",
1397 "VCVTPH2PSYrr",
1398 "VCVTPS2PDYrr",
1399 "VCVTPS2PHYrr",
1400 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001401
1402def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1403 let Latency = 7;
1404 let NumMicroOps = 2;
1405 let ResourceCycles = [1,1];
1406}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001407def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1408 "(V?)PABSDrm",
1409 "(V?)PABSWrm",
1410 "(V?)PADDSBrm",
1411 "(V?)PADDSWrm",
1412 "(V?)PADDUSBrm",
1413 "(V?)PADDUSWrm",
1414 "(V?)PAVGBrm",
1415 "(V?)PAVGWrm",
1416 "(V?)PCMPEQBrm",
1417 "(V?)PCMPEQDrm",
1418 "(V?)PCMPEQQrm",
1419 "(V?)PCMPEQWrm",
1420 "(V?)PCMPGTBrm",
1421 "(V?)PCMPGTDrm",
1422 "(V?)PCMPGTWrm",
1423 "(V?)PMAXSBrm",
1424 "(V?)PMAXSDrm",
1425 "(V?)PMAXSWrm",
1426 "(V?)PMAXUBrm",
1427 "(V?)PMAXUDrm",
1428 "(V?)PMAXUWrm",
1429 "(V?)PMINSBrm",
1430 "(V?)PMINSDrm",
1431 "(V?)PMINSWrm",
1432 "(V?)PMINUBrm",
1433 "(V?)PMINUDrm",
1434 "(V?)PMINUWrm",
1435 "(V?)PSIGNBrm",
1436 "(V?)PSIGNDrm",
1437 "(V?)PSIGNWrm",
1438 "(V?)PSLLDrm",
1439 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001440 "VPSLLVDrm",
1441 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001442 "(V?)PSLLWrm",
1443 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001444 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001445 "(V?)PSRAWrm",
1446 "(V?)PSRLDrm",
1447 "(V?)PSRLQrm",
1448 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001449 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001450 "(V?)PSRLWrm",
1451 "(V?)PSUBSBrm",
1452 "(V?)PSUBSWrm",
1453 "(V?)PSUBUSBrm",
1454 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001455
1456def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1457 let Latency = 7;
1458 let NumMicroOps = 2;
1459 let ResourceCycles = [1,1];
1460}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001461def: InstRW<[SKLWriteResGroup91], (instregex "(V?)BLENDPDrmi",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001462 "(V?)BLENDPSrmi",
1463 "(V?)INSERTF128rm",
1464 "(V?)INSERTI128rm",
1465 "(V?)MASKMOVPDrm",
1466 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001467 "(V?)PADDBrm",
1468 "(V?)PADDDrm",
1469 "(V?)PADDQrm",
1470 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001471 "(V?)PBLENDDrmi",
1472 "(V?)PMASKMOVDrm",
1473 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001474 "(V?)PSUBBrm",
1475 "(V?)PSUBDrm",
1476 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001477 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001478
1479def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1480 let Latency = 7;
1481 let NumMicroOps = 3;
1482 let ResourceCycles = [2,1];
1483}
Craig Topperfc179c62018-03-22 04:23:41 +00001484def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1485 "MMX_PACKSSWBirm",
1486 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001487
1488def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1489 let Latency = 7;
1490 let NumMicroOps = 3;
1491 let ResourceCycles = [1,2];
1492}
Craig Topperf4cd9082018-01-19 05:47:32 +00001493def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001494
1495def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1496 let Latency = 7;
1497 let NumMicroOps = 3;
1498 let ResourceCycles = [1,2];
1499}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001500def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1501 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001502
Craig Topper58afb4e2018-03-22 21:10:07 +00001503def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001504 let Latency = 7;
1505 let NumMicroOps = 3;
1506 let ResourceCycles = [1,1,1];
1507}
Craig Topperfc179c62018-03-22 04:23:41 +00001508def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1509 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001510
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001511def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001512 let Latency = 7;
1513 let NumMicroOps = 3;
1514 let ResourceCycles = [1,1,1];
1515}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001516def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001517
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001518def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001519 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001520 let NumMicroOps = 3;
1521 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001522}
Craig Topperfc179c62018-03-22 04:23:41 +00001523def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1524 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001525
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001526def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1527 let Latency = 7;
1528 let NumMicroOps = 5;
1529 let ResourceCycles = [1,1,1,2];
1530}
Craig Topperfc179c62018-03-22 04:23:41 +00001531def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1532 "ROL(8|16|32|64)mi",
1533 "ROR(8|16|32|64)m1",
1534 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001535
1536def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1537 let Latency = 7;
1538 let NumMicroOps = 5;
1539 let ResourceCycles = [1,1,1,2];
1540}
Craig Topper13a16502018-03-19 00:56:09 +00001541def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001542
1543def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1544 let Latency = 7;
1545 let NumMicroOps = 5;
1546 let ResourceCycles = [1,1,1,1,1];
1547}
Craig Topperfc179c62018-03-22 04:23:41 +00001548def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1549 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001550
1551def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001552 let Latency = 7;
1553 let NumMicroOps = 7;
1554 let ResourceCycles = [1,3,1,2];
1555}
Craig Topper2d451e72018-03-18 08:38:06 +00001556def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001557
Craig Topper58afb4e2018-03-22 21:10:07 +00001558def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001559 let Latency = 8;
1560 let NumMicroOps = 2;
1561 let ResourceCycles = [2];
1562}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001563def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1564 "(V?)ROUNDPS(Y?)r",
1565 "(V?)ROUNDSDr",
1566 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001567
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001568def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001569 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001570 let NumMicroOps = 2;
1571 let ResourceCycles = [1,1];
1572}
Craig Topperfc179c62018-03-22 04:23:41 +00001573def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1574 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001575
1576def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1577 let Latency = 8;
1578 let NumMicroOps = 2;
1579 let ResourceCycles = [1,1];
1580}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001581def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1582 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001583
1584def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001585 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001586 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001587 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001588}
Craig Topperf846e2d2018-04-19 05:34:05 +00001589def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001590
Craig Topperf846e2d2018-04-19 05:34:05 +00001591def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1592 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001593 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001594 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001595}
Craig Topperfc179c62018-03-22 04:23:41 +00001596def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001597
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001598def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1599 let Latency = 8;
1600 let NumMicroOps = 2;
1601 let ResourceCycles = [1,1];
1602}
Craig Topperfc179c62018-03-22 04:23:41 +00001603def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1604 "FCOM64m",
1605 "FCOMP32m",
1606 "FCOMP64m",
1607 "MMX_PSADBWirm",
1608 "VPACKSSDWYrm",
1609 "VPACKSSWBYrm",
1610 "VPACKUSDWYrm",
1611 "VPACKUSWBYrm",
1612 "VPALIGNRYrmi",
1613 "VPBLENDWYrmi",
1614 "VPBROADCASTBYrm",
1615 "VPBROADCASTWYrm",
1616 "VPERMILPDYmi",
1617 "VPERMILPDYrm",
1618 "VPERMILPSYmi",
1619 "VPERMILPSYrm",
1620 "VPMOVSXBDYrm",
1621 "VPMOVSXBQYrm",
1622 "VPMOVSXWQYrm",
1623 "VPSHUFBYrm",
1624 "VPSHUFDYmi",
1625 "VPSHUFHWYmi",
1626 "VPSHUFLWYmi",
1627 "VPUNPCKHBWYrm",
1628 "VPUNPCKHDQYrm",
1629 "VPUNPCKHQDQYrm",
1630 "VPUNPCKHWDYrm",
1631 "VPUNPCKLBWYrm",
1632 "VPUNPCKLDQYrm",
1633 "VPUNPCKLQDQYrm",
1634 "VPUNPCKLWDYrm",
1635 "VSHUFPDYrmi",
1636 "VSHUFPSYrmi",
1637 "VUNPCKHPDYrm",
1638 "VUNPCKHPSYrm",
1639 "VUNPCKLPDYrm",
1640 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001641
1642def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1643 let Latency = 8;
1644 let NumMicroOps = 2;
1645 let ResourceCycles = [1,1];
1646}
Craig Topperfc179c62018-03-22 04:23:41 +00001647def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1648 "VPABSDYrm",
1649 "VPABSWYrm",
1650 "VPADDSBYrm",
1651 "VPADDSWYrm",
1652 "VPADDUSBYrm",
1653 "VPADDUSWYrm",
1654 "VPAVGBYrm",
1655 "VPAVGWYrm",
1656 "VPCMPEQBYrm",
1657 "VPCMPEQDYrm",
1658 "VPCMPEQQYrm",
1659 "VPCMPEQWYrm",
1660 "VPCMPGTBYrm",
1661 "VPCMPGTDYrm",
1662 "VPCMPGTWYrm",
1663 "VPMAXSBYrm",
1664 "VPMAXSDYrm",
1665 "VPMAXSWYrm",
1666 "VPMAXUBYrm",
1667 "VPMAXUDYrm",
1668 "VPMAXUWYrm",
1669 "VPMINSBYrm",
1670 "VPMINSDYrm",
1671 "VPMINSWYrm",
1672 "VPMINUBYrm",
1673 "VPMINUDYrm",
1674 "VPMINUWYrm",
1675 "VPSIGNBYrm",
1676 "VPSIGNDYrm",
1677 "VPSIGNWYrm",
1678 "VPSLLDYrm",
1679 "VPSLLQYrm",
1680 "VPSLLVDYrm",
1681 "VPSLLVQYrm",
1682 "VPSLLWYrm",
1683 "VPSRADYrm",
1684 "VPSRAVDYrm",
1685 "VPSRAWYrm",
1686 "VPSRLDYrm",
1687 "VPSRLQYrm",
1688 "VPSRLVDYrm",
1689 "VPSRLVQYrm",
1690 "VPSRLWYrm",
1691 "VPSUBSBYrm",
1692 "VPSUBSWYrm",
1693 "VPSUBUSBYrm",
1694 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001695
1696def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1697 let Latency = 8;
1698 let NumMicroOps = 2;
1699 let ResourceCycles = [1,1];
1700}
Craig Topperfc179c62018-03-22 04:23:41 +00001701def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1702 "VANDNPSYrm",
1703 "VANDPDYrm",
1704 "VANDPSYrm",
1705 "VBLENDPDYrmi",
1706 "VBLENDPSYrmi",
1707 "VMASKMOVPDYrm",
1708 "VMASKMOVPSYrm",
1709 "VORPDYrm",
1710 "VORPSYrm",
1711 "VPADDBYrm",
1712 "VPADDDYrm",
1713 "VPADDQYrm",
1714 "VPADDWYrm",
1715 "VPANDNYrm",
1716 "VPANDYrm",
1717 "VPBLENDDYrmi",
1718 "VPMASKMOVDYrm",
1719 "VPMASKMOVQYrm",
1720 "VPORYrm",
1721 "VPSUBBYrm",
1722 "VPSUBDYrm",
1723 "VPSUBQYrm",
1724 "VPSUBWYrm",
1725 "VPXORYrm",
1726 "VXORPDYrm",
1727 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001728
1729def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001730 let Latency = 8;
1731 let NumMicroOps = 3;
1732 let ResourceCycles = [1,2];
1733}
Craig Topperfc179c62018-03-22 04:23:41 +00001734def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
1735 "BLENDVPSrm0",
1736 "PBLENDVBrm0",
1737 "VBLENDVPDrm",
1738 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001739 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001740
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001741def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1742 let Latency = 8;
1743 let NumMicroOps = 4;
1744 let ResourceCycles = [1,2,1];
1745}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001746def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001747
1748def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1749 let Latency = 8;
1750 let NumMicroOps = 4;
1751 let ResourceCycles = [2,1,1];
1752}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001753def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001754
Craig Topper58afb4e2018-03-22 21:10:07 +00001755def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001756 let Latency = 8;
1757 let NumMicroOps = 4;
1758 let ResourceCycles = [1,1,1,1];
1759}
1760def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1761
1762def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1763 let Latency = 8;
1764 let NumMicroOps = 5;
1765 let ResourceCycles = [1,1,3];
1766}
Craig Topper13a16502018-03-19 00:56:09 +00001767def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001768
1769def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1770 let Latency = 8;
1771 let NumMicroOps = 5;
1772 let ResourceCycles = [1,1,1,2];
1773}
Craig Topperfc179c62018-03-22 04:23:41 +00001774def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1775 "RCL(8|16|32|64)mi",
1776 "RCR(8|16|32|64)m1",
1777 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001778
1779def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1780 let Latency = 8;
1781 let NumMicroOps = 6;
1782 let ResourceCycles = [1,1,1,3];
1783}
Craig Topperfc179c62018-03-22 04:23:41 +00001784def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1785 "SAR(8|16|32|64)mCL",
1786 "SHL(8|16|32|64)mCL",
1787 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001788
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001789def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1790 let Latency = 8;
1791 let NumMicroOps = 6;
1792 let ResourceCycles = [1,1,1,2,1];
1793}
Craig Topper9f834812018-04-01 21:54:24 +00001794def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001795 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001796 "SBB(8|16|32|64)mi")>;
1797def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1798 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001799
1800def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1801 let Latency = 9;
1802 let NumMicroOps = 2;
1803 let ResourceCycles = [1,1];
1804}
Craig Topperfc179c62018-03-22 04:23:41 +00001805def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1806 "MMX_PMADDUBSWrm",
1807 "MMX_PMADDWDirm",
1808 "MMX_PMULHRSWrm",
1809 "MMX_PMULHUWirm",
1810 "MMX_PMULHWirm",
1811 "MMX_PMULLWirm",
1812 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001813 "(V?)RCPSSm",
1814 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001815 "VTESTPDYrm",
1816 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001817
1818def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1819 let Latency = 9;
1820 let NumMicroOps = 2;
1821 let ResourceCycles = [1,1];
1822}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001823def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001824 "VPMOVSXBWYrm",
1825 "VPMOVSXDQYrm",
1826 "VPMOVSXWDYrm",
1827 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001828 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001829
1830def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1831 let Latency = 9;
1832 let NumMicroOps = 2;
1833 let ResourceCycles = [1,1];
1834}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001835def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1836 "(V?)ADDSSrm",
1837 "(V?)CMPSDrm",
1838 "(V?)CMPSSrm",
1839 "(V?)MAX(C?)SDrm",
1840 "(V?)MAX(C?)SSrm",
1841 "(V?)MIN(C?)SDrm",
1842 "(V?)MIN(C?)SSrm",
1843 "(V?)MULSDrm",
1844 "(V?)MULSSrm",
1845 "(V?)SUBSDrm",
1846 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001847def: InstRW<[SKLWriteResGroup122],
1848 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001849
Craig Topper58afb4e2018-03-22 21:10:07 +00001850def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001851 let Latency = 9;
1852 let NumMicroOps = 2;
1853 let ResourceCycles = [1,1];
1854}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001855def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001856 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001857 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001858 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001859
Craig Topper58afb4e2018-03-22 21:10:07 +00001860def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001861 let Latency = 9;
1862 let NumMicroOps = 3;
1863 let ResourceCycles = [1,2];
1864}
Craig Topperfc179c62018-03-22 04:23:41 +00001865def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001866
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001867def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1868 let Latency = 9;
1869 let NumMicroOps = 3;
1870 let ResourceCycles = [1,2];
1871}
Craig Topperfc179c62018-03-22 04:23:41 +00001872def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1873 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001874
1875def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1876 let Latency = 9;
1877 let NumMicroOps = 3;
1878 let ResourceCycles = [1,1,1];
1879}
Craig Topperfc179c62018-03-22 04:23:41 +00001880def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001881
1882def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1883 let Latency = 9;
1884 let NumMicroOps = 3;
1885 let ResourceCycles = [1,1,1];
1886}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001887def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001888
1889def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001890 let Latency = 9;
1891 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001892 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001893}
Craig Topperfc179c62018-03-22 04:23:41 +00001894def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1895 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001896
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001897def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1898 let Latency = 9;
1899 let NumMicroOps = 4;
1900 let ResourceCycles = [2,1,1];
1901}
Craig Topperfc179c62018-03-22 04:23:41 +00001902def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1903 "(V?)PHADDWrm",
1904 "(V?)PHSUBDrm",
1905 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001906
1907def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1908 let Latency = 9;
1909 let NumMicroOps = 4;
1910 let ResourceCycles = [1,1,1,1];
1911}
Craig Topperfc179c62018-03-22 04:23:41 +00001912def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1913 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001914
1915def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1916 let Latency = 9;
1917 let NumMicroOps = 5;
1918 let ResourceCycles = [1,2,1,1];
1919}
Craig Topperfc179c62018-03-22 04:23:41 +00001920def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1921 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001922
1923def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1924 let Latency = 10;
1925 let NumMicroOps = 2;
1926 let ResourceCycles = [1,1];
1927}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001928def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001929 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001930
1931def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1932 let Latency = 10;
1933 let NumMicroOps = 2;
1934 let ResourceCycles = [1,1];
1935}
Craig Topperfc179c62018-03-22 04:23:41 +00001936def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1937 "ADD_F64m",
1938 "ILD_F16m",
1939 "ILD_F32m",
1940 "ILD_F64m",
1941 "SUBR_F32m",
1942 "SUBR_F64m",
1943 "SUB_F32m",
1944 "SUB_F64m",
1945 "VPCMPGTQYrm",
1946 "VPERM2F128rm",
1947 "VPERM2I128rm",
1948 "VPERMDYrm",
1949 "VPERMPDYmi",
1950 "VPERMPSYrm",
1951 "VPERMQYmi",
1952 "VPMOVZXBDYrm",
1953 "VPMOVZXBQYrm",
1954 "VPMOVZXBWYrm",
1955 "VPMOVZXDQYrm",
1956 "VPMOVZXWQYrm",
1957 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001958
1959def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1960 let Latency = 10;
1961 let NumMicroOps = 2;
1962 let ResourceCycles = [1,1];
1963}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001964def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1965 "(V?)ADDPSrm",
1966 "(V?)ADDSUBPDrm",
1967 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001968 "(V?)CVTDQ2PSrm",
1969 "(V?)CVTPH2PSYrm",
1970 "(V?)CVTPS2DQrm",
1971 "(V?)CVTSS2SDrm",
1972 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001973 "(V?)MULPDrm",
1974 "(V?)MULPSrm",
1975 "(V?)PHMINPOSUWrm",
1976 "(V?)PMADDUBSWrm",
1977 "(V?)PMADDWDrm",
1978 "(V?)PMULDQrm",
1979 "(V?)PMULHRSWrm",
1980 "(V?)PMULHUWrm",
1981 "(V?)PMULHWrm",
1982 "(V?)PMULLWrm",
1983 "(V?)PMULUDQrm",
1984 "(V?)SUBPDrm",
1985 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001986def: InstRW<[SKLWriteResGroup134],
1987 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001988
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001989def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1990 let Latency = 10;
1991 let NumMicroOps = 3;
1992 let ResourceCycles = [1,1,1];
1993}
Craig Topperfc179c62018-03-22 04:23:41 +00001994def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1995 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001996
Craig Topper58afb4e2018-03-22 21:10:07 +00001997def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001998 let Latency = 10;
1999 let NumMicroOps = 3;
2000 let ResourceCycles = [1,1,1];
2001}
Craig Topperfc179c62018-03-22 04:23:41 +00002002def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002003
2004def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002005 let Latency = 10;
2006 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002007 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002008}
Craig Topperfc179c62018-03-22 04:23:41 +00002009def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2010 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002011
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002012def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2013 let Latency = 10;
2014 let NumMicroOps = 4;
2015 let ResourceCycles = [2,1,1];
2016}
Craig Topperfc179c62018-03-22 04:23:41 +00002017def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2018 "VPHADDWYrm",
2019 "VPHSUBDYrm",
2020 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002021
2022def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002023 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002024 let NumMicroOps = 4;
2025 let ResourceCycles = [1,1,1,1];
2026}
Craig Topperf846e2d2018-04-19 05:34:05 +00002027def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002028
2029def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2030 let Latency = 10;
2031 let NumMicroOps = 8;
2032 let ResourceCycles = [1,1,1,1,1,3];
2033}
Craig Topper13a16502018-03-19 00:56:09 +00002034def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002035
2036def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002037 let Latency = 10;
2038 let NumMicroOps = 10;
2039 let ResourceCycles = [9,1];
2040}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002041def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002042
Craig Topper8104f262018-04-02 05:33:28 +00002043def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002044 let Latency = 11;
2045 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002046 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002047}
Craig Topper8104f262018-04-02 05:33:28 +00002048def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002049 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002050
Craig Topper8104f262018-04-02 05:33:28 +00002051def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2052 let Latency = 11;
2053 let NumMicroOps = 1;
2054 let ResourceCycles = [1,5];
2055}
2056def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
2057
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002058def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002059 let Latency = 11;
2060 let NumMicroOps = 2;
2061 let ResourceCycles = [1,1];
2062}
Craig Topperfc179c62018-03-22 04:23:41 +00002063def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2064 "MUL_F64m",
2065 "VRCPPSYm",
2066 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002067
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002068def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2069 let Latency = 11;
2070 let NumMicroOps = 2;
2071 let ResourceCycles = [1,1];
2072}
Craig Topperfc179c62018-03-22 04:23:41 +00002073def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2074 "VADDPSYrm",
2075 "VADDSUBPDYrm",
2076 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002077 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002078 "VCMPPSYrmi",
2079 "VCVTDQ2PSYrm",
2080 "VCVTPS2DQYrm",
2081 "VCVTPS2PDYrm",
2082 "VCVTTPS2DQYrm",
2083 "VMAX(C?)PDYrm",
2084 "VMAX(C?)PSYrm",
2085 "VMIN(C?)PDYrm",
2086 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002087 "VMULPDYrm",
2088 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002089 "VPMADDUBSWYrm",
2090 "VPMADDWDYrm",
2091 "VPMULDQYrm",
2092 "VPMULHRSWYrm",
2093 "VPMULHUWYrm",
2094 "VPMULHWYrm",
2095 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002096 "VPMULUDQYrm",
2097 "VSUBPDYrm",
2098 "VSUBPSYrm")>;
2099def: InstRW<[SKLWriteResGroup147],
2100 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002101
2102def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2103 let Latency = 11;
2104 let NumMicroOps = 3;
2105 let ResourceCycles = [2,1];
2106}
Craig Topperfc179c62018-03-22 04:23:41 +00002107def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2108 "FICOM32m",
2109 "FICOMP16m",
2110 "FICOMP32m",
2111 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002112
2113def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2114 let Latency = 11;
2115 let NumMicroOps = 3;
2116 let ResourceCycles = [1,1,1];
2117}
Craig Topperfc179c62018-03-22 04:23:41 +00002118def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002119
Craig Topper58afb4e2018-03-22 21:10:07 +00002120def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002121 let Latency = 11;
2122 let NumMicroOps = 3;
2123 let ResourceCycles = [1,1,1];
2124}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002125def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2126 "(V?)CVTSD2SIrm",
2127 "(V?)CVTSS2SI64rm",
2128 "(V?)CVTSS2SIrm",
2129 "(V?)CVTTSD2SI64rm",
2130 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002131 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002132 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002133
Craig Topper58afb4e2018-03-22 21:10:07 +00002134def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002135 let Latency = 11;
2136 let NumMicroOps = 3;
2137 let ResourceCycles = [1,1,1];
2138}
Craig Topperfc179c62018-03-22 04:23:41 +00002139def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2140 "CVTPD2PSrm",
2141 "CVTTPD2DQrm",
2142 "MMX_CVTPD2PIirm",
2143 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002144
2145def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2146 let Latency = 11;
2147 let NumMicroOps = 6;
2148 let ResourceCycles = [1,1,1,2,1];
2149}
Craig Topperfc179c62018-03-22 04:23:41 +00002150def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2151 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002152
2153def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002154 let Latency = 11;
2155 let NumMicroOps = 7;
2156 let ResourceCycles = [2,3,2];
2157}
Craig Topperfc179c62018-03-22 04:23:41 +00002158def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2159 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002160
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002161def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002162 let Latency = 11;
2163 let NumMicroOps = 9;
2164 let ResourceCycles = [1,5,1,2];
2165}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002166def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002167
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002168def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002169 let Latency = 11;
2170 let NumMicroOps = 11;
2171 let ResourceCycles = [2,9];
2172}
Craig Topperfc179c62018-03-22 04:23:41 +00002173def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002174
Craig Topper8104f262018-04-02 05:33:28 +00002175def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002176 let Latency = 12;
2177 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002178 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002179}
Craig Topper8104f262018-04-02 05:33:28 +00002180def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002181 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002182
Craig Topper8104f262018-04-02 05:33:28 +00002183def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2184 let Latency = 12;
2185 let NumMicroOps = 1;
2186 let ResourceCycles = [1,6];
2187}
2188def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2189
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002190def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2191 let Latency = 12;
2192 let NumMicroOps = 4;
2193 let ResourceCycles = [2,1,1];
2194}
Craig Topperfc179c62018-03-22 04:23:41 +00002195def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2196 "(V?)HADDPSrm",
2197 "(V?)HSUBPDrm",
2198 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002199
Craig Topper58afb4e2018-03-22 21:10:07 +00002200def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002201 let Latency = 12;
2202 let NumMicroOps = 4;
2203 let ResourceCycles = [1,1,1,1];
2204}
2205def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2206
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002207def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002208 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002209 let NumMicroOps = 3;
2210 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002211}
Craig Topperfc179c62018-03-22 04:23:41 +00002212def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2213 "ADD_FI32m",
2214 "SUBR_FI16m",
2215 "SUBR_FI32m",
2216 "SUB_FI16m",
2217 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002218
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002219def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2220 let Latency = 13;
2221 let NumMicroOps = 3;
2222 let ResourceCycles = [1,1,1];
2223}
2224def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2225
Craig Topper58afb4e2018-03-22 21:10:07 +00002226def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002227 let Latency = 13;
2228 let NumMicroOps = 4;
2229 let ResourceCycles = [1,3];
2230}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002231def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002232
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002233def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002234 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002235 let NumMicroOps = 4;
2236 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002237}
Craig Topperfc179c62018-03-22 04:23:41 +00002238def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2239 "VHADDPSYrm",
2240 "VHSUBPDYrm",
2241 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002242
Craig Topper8104f262018-04-02 05:33:28 +00002243def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002244 let Latency = 14;
2245 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002246 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002247}
Craig Topper8104f262018-04-02 05:33:28 +00002248def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002249 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002250
Craig Topper8104f262018-04-02 05:33:28 +00002251def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2252 let Latency = 14;
2253 let NumMicroOps = 1;
2254 let ResourceCycles = [1,5];
2255}
2256def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2257
Craig Topper58afb4e2018-03-22 21:10:07 +00002258def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002259 let Latency = 14;
2260 let NumMicroOps = 3;
2261 let ResourceCycles = [1,2];
2262}
Craig Topperfc179c62018-03-22 04:23:41 +00002263def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2264def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2265def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2266def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002267
2268def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2269 let Latency = 14;
2270 let NumMicroOps = 3;
2271 let ResourceCycles = [1,1,1];
2272}
Craig Topperfc179c62018-03-22 04:23:41 +00002273def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2274 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002275
2276def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002277 let Latency = 14;
2278 let NumMicroOps = 10;
2279 let ResourceCycles = [2,4,1,3];
2280}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002281def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002282
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002283def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002284 let Latency = 15;
2285 let NumMicroOps = 1;
2286 let ResourceCycles = [1];
2287}
Craig Topperfc179c62018-03-22 04:23:41 +00002288def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2289 "DIVR_FST0r",
2290 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002291
Craig Topper58afb4e2018-03-22 21:10:07 +00002292def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002293 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002294 let NumMicroOps = 3;
2295 let ResourceCycles = [1,2];
2296}
Craig Topper40d3b322018-03-22 21:55:20 +00002297def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2298 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002299
Craig Topperd25f1ac2018-03-20 23:39:48 +00002300def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2301 let Latency = 17;
2302 let NumMicroOps = 3;
2303 let ResourceCycles = [1,2];
2304}
2305def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2306
Craig Topper58afb4e2018-03-22 21:10:07 +00002307def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002308 let Latency = 15;
2309 let NumMicroOps = 4;
2310 let ResourceCycles = [1,1,2];
2311}
Craig Topperfc179c62018-03-22 04:23:41 +00002312def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002313
2314def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2315 let Latency = 15;
2316 let NumMicroOps = 10;
2317 let ResourceCycles = [1,1,1,5,1,1];
2318}
Craig Topper13a16502018-03-19 00:56:09 +00002319def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002320
Craig Topper8104f262018-04-02 05:33:28 +00002321def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002322 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002323 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002324 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002325}
Craig Topperfc179c62018-03-22 04:23:41 +00002326def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002327
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002328def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2329 let Latency = 16;
2330 let NumMicroOps = 14;
2331 let ResourceCycles = [1,1,1,4,2,5];
2332}
2333def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2334
2335def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002336 let Latency = 16;
2337 let NumMicroOps = 16;
2338 let ResourceCycles = [16];
2339}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002340def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002341
Craig Topper8104f262018-04-02 05:33:28 +00002342def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002343 let Latency = 17;
2344 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002345 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002346}
Craig Topper8104f262018-04-02 05:33:28 +00002347def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2348
2349def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2350 let Latency = 17;
2351 let NumMicroOps = 2;
2352 let ResourceCycles = [1,1,3];
2353}
2354def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002355
2356def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002357 let Latency = 17;
2358 let NumMicroOps = 15;
2359 let ResourceCycles = [2,1,2,4,2,4];
2360}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002361def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002362
Craig Topper8104f262018-04-02 05:33:28 +00002363def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002364 let Latency = 18;
2365 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002366 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002367}
Craig Topper8104f262018-04-02 05:33:28 +00002368def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002369 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002370
Craig Topper8104f262018-04-02 05:33:28 +00002371def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2372 let Latency = 18;
2373 let NumMicroOps = 1;
2374 let ResourceCycles = [1,12];
2375}
2376def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2377
2378def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002379 let Latency = 18;
2380 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002381 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002382}
Craig Topper8104f262018-04-02 05:33:28 +00002383def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2384
2385def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2386 let Latency = 18;
2387 let NumMicroOps = 2;
2388 let ResourceCycles = [1,1,3];
2389}
2390def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002391
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002392def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002393 let Latency = 18;
2394 let NumMicroOps = 8;
2395 let ResourceCycles = [1,1,1,5];
2396}
Craig Topperfc179c62018-03-22 04:23:41 +00002397def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002398
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002399def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002400 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002401 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002402 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002403}
Craig Topper13a16502018-03-19 00:56:09 +00002404def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002405
Craig Topper8104f262018-04-02 05:33:28 +00002406def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002407 let Latency = 19;
2408 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002409 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002410}
Craig Topper8104f262018-04-02 05:33:28 +00002411def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2412
2413def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2414 let Latency = 19;
2415 let NumMicroOps = 2;
2416 let ResourceCycles = [1,1,6];
2417}
2418def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002419
Craig Topper58afb4e2018-03-22 21:10:07 +00002420def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002421 let Latency = 19;
2422 let NumMicroOps = 5;
2423 let ResourceCycles = [1,1,3];
2424}
Craig Topperfc179c62018-03-22 04:23:41 +00002425def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002426
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002427def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002428 let Latency = 20;
2429 let NumMicroOps = 1;
2430 let ResourceCycles = [1];
2431}
Craig Topperfc179c62018-03-22 04:23:41 +00002432def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2433 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002434 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002435
Craig Topper8104f262018-04-02 05:33:28 +00002436def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002437 let Latency = 20;
2438 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002439 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002440}
Craig Topperfc179c62018-03-22 04:23:41 +00002441def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002442
Craig Topper58afb4e2018-03-22 21:10:07 +00002443def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002444 let Latency = 20;
2445 let NumMicroOps = 5;
2446 let ResourceCycles = [1,1,3];
2447}
2448def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2449
2450def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2451 let Latency = 20;
2452 let NumMicroOps = 8;
2453 let ResourceCycles = [1,1,1,1,1,1,2];
2454}
Craig Topperfc179c62018-03-22 04:23:41 +00002455def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2456 "INSL",
2457 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002458
2459def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002460 let Latency = 20;
2461 let NumMicroOps = 10;
2462 let ResourceCycles = [1,2,7];
2463}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002464def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002465
Craig Topper8104f262018-04-02 05:33:28 +00002466def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002467 let Latency = 21;
2468 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002469 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002470}
2471def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2472
2473def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2474 let Latency = 22;
2475 let NumMicroOps = 2;
2476 let ResourceCycles = [1,1];
2477}
Craig Topperfc179c62018-03-22 04:23:41 +00002478def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2479 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002480
2481def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2482 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002483 let NumMicroOps = 5;
2484 let ResourceCycles = [1,2,1,1];
2485}
Craig Topper17a31182017-12-16 18:35:29 +00002486def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2487 VGATHERDPDrm,
2488 VGATHERQPDrm,
2489 VGATHERQPSrm,
2490 VPGATHERDDrm,
2491 VPGATHERDQrm,
2492 VPGATHERQDrm,
2493 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002494
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002495def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2496 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002497 let NumMicroOps = 5;
2498 let ResourceCycles = [1,2,1,1];
2499}
Craig Topper17a31182017-12-16 18:35:29 +00002500def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2501 VGATHERQPDYrm,
2502 VGATHERQPSYrm,
2503 VPGATHERDDYrm,
2504 VPGATHERDQYrm,
2505 VPGATHERQDYrm,
2506 VPGATHERQQYrm,
2507 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002508
Craig Topper8104f262018-04-02 05:33:28 +00002509def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002510 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002511 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002512 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002513}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002514def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002515
2516def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2517 let Latency = 23;
2518 let NumMicroOps = 19;
2519 let ResourceCycles = [2,1,4,1,1,4,6];
2520}
2521def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2522
Craig Topper8104f262018-04-02 05:33:28 +00002523def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002524 let Latency = 24;
2525 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002526 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002527}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002528def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002529
Craig Topper8104f262018-04-02 05:33:28 +00002530def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002531 let Latency = 25;
2532 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002533 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002534}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002535def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002536
2537def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2538 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002539 let NumMicroOps = 3;
2540 let ResourceCycles = [1,1,1];
2541}
Craig Topperfc179c62018-03-22 04:23:41 +00002542def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2543 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002544
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002545def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2546 let Latency = 27;
2547 let NumMicroOps = 2;
2548 let ResourceCycles = [1,1];
2549}
Craig Topperfc179c62018-03-22 04:23:41 +00002550def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2551 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002552
2553def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2554 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002555 let NumMicroOps = 8;
2556 let ResourceCycles = [2,4,1,1];
2557}
Craig Topper13a16502018-03-19 00:56:09 +00002558def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002559
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002560def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002561 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002562 let NumMicroOps = 3;
2563 let ResourceCycles = [1,1,1];
2564}
Craig Topperfc179c62018-03-22 04:23:41 +00002565def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2566 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002567
2568def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2569 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002570 let NumMicroOps = 23;
2571 let ResourceCycles = [1,5,3,4,10];
2572}
Craig Topperfc179c62018-03-22 04:23:41 +00002573def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2574 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002575
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002576def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2577 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002578 let NumMicroOps = 23;
2579 let ResourceCycles = [1,5,2,1,4,10];
2580}
Craig Topperfc179c62018-03-22 04:23:41 +00002581def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2582 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002583
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002584def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2585 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002586 let NumMicroOps = 31;
2587 let ResourceCycles = [1,8,1,21];
2588}
Craig Topper391c6f92017-12-10 01:24:08 +00002589def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002590
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002591def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2592 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002593 let NumMicroOps = 18;
2594 let ResourceCycles = [1,1,2,3,1,1,1,8];
2595}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002596def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002597
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002598def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2599 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002600 let NumMicroOps = 39;
2601 let ResourceCycles = [1,10,1,1,26];
2602}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002603def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002604
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002605def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002606 let Latency = 42;
2607 let NumMicroOps = 22;
2608 let ResourceCycles = [2,20];
2609}
Craig Topper2d451e72018-03-18 08:38:06 +00002610def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002611
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002612def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2613 let Latency = 42;
2614 let NumMicroOps = 40;
2615 let ResourceCycles = [1,11,1,1,26];
2616}
Craig Topper391c6f92017-12-10 01:24:08 +00002617def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002618
2619def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2620 let Latency = 46;
2621 let NumMicroOps = 44;
2622 let ResourceCycles = [1,11,1,1,30];
2623}
2624def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2625
2626def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2627 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002628 let NumMicroOps = 64;
2629 let ResourceCycles = [2,8,5,10,39];
2630}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002631def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002632
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002633def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2634 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002635 let NumMicroOps = 88;
2636 let ResourceCycles = [4,4,31,1,2,1,45];
2637}
Craig Topper2d451e72018-03-18 08:38:06 +00002638def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002639
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002640def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2641 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002642 let NumMicroOps = 90;
2643 let ResourceCycles = [4,2,33,1,2,1,47];
2644}
Craig Topper2d451e72018-03-18 08:38:06 +00002645def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002646
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002647def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002648 let Latency = 75;
2649 let NumMicroOps = 15;
2650 let ResourceCycles = [6,3,6];
2651}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002652def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002653
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002654def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002655 let Latency = 76;
2656 let NumMicroOps = 32;
2657 let ResourceCycles = [7,2,8,3,1,11];
2658}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002659def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002660
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002661def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002662 let Latency = 102;
2663 let NumMicroOps = 66;
2664 let ResourceCycles = [4,2,4,8,14,34];
2665}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002666def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002667
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002668def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2669 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002670 let NumMicroOps = 100;
2671 let ResourceCycles = [9,1,11,16,1,11,21,30];
2672}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002673def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002674
2675} // SchedModel