blob: 72d15a36d8ae965c42cfde371db6d9ca8ccdf591 [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.
160defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 5>; // Floating point reciprocal estimate.
161defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 5>; // Floating point reciprocal square root estimate.
162defm : 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.
187defm : SKLWriteResPair<WriteMPSAD, [SKLPort0, SKLPort5], 6, [1, 2]>; // 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
312// Nop, not very useful expect it provides a model for nops!
313def : WriteRes<WriteNop, []>;
314
315////////////////////////////////////////////////////////////////////////////////
316// Horizontal add/sub instructions.
317////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000318
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000319defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
320defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000321
322// Remaining instrs.
323
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000324def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000325 let Latency = 1;
326 let NumMicroOps = 1;
327 let ResourceCycles = [1];
328}
Craig Topperfc179c62018-03-22 04:23:41 +0000329def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
330 "MMX_PADDSWirr",
331 "MMX_PADDUSBirr",
332 "MMX_PADDUSWirr",
333 "MMX_PAVGBirr",
334 "MMX_PAVGWirr",
335 "MMX_PCMPEQBirr",
336 "MMX_PCMPEQDirr",
337 "MMX_PCMPEQWirr",
338 "MMX_PCMPGTBirr",
339 "MMX_PCMPGTDirr",
340 "MMX_PCMPGTWirr",
341 "MMX_PMAXSWirr",
342 "MMX_PMAXUBirr",
343 "MMX_PMINSWirr",
344 "MMX_PMINUBirr",
345 "MMX_PSLLDri",
346 "MMX_PSLLDrr",
347 "MMX_PSLLQri",
348 "MMX_PSLLQrr",
349 "MMX_PSLLWri",
350 "MMX_PSLLWrr",
351 "MMX_PSRADri",
352 "MMX_PSRADrr",
353 "MMX_PSRAWri",
354 "MMX_PSRAWrr",
355 "MMX_PSRLDri",
356 "MMX_PSRLDrr",
357 "MMX_PSRLQri",
358 "MMX_PSRLQrr",
359 "MMX_PSRLWri",
360 "MMX_PSRLWrr",
361 "MMX_PSUBSBirr",
362 "MMX_PSUBSWirr",
363 "MMX_PSUBUSBirr",
364 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000365
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000366def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000367 let Latency = 1;
368 let NumMicroOps = 1;
369 let ResourceCycles = [1];
370}
Craig Topperfc179c62018-03-22 04:23:41 +0000371def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
372 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000373 "MMX_MOVD64rr",
374 "MMX_MOVD64to64rr",
375 "MMX_PALIGNRrri",
Craig Topperfc179c62018-03-22 04:23:41 +0000376 "MMX_PSHUFWri",
377 "MMX_PUNPCKHBWirr",
378 "MMX_PUNPCKHDQirr",
379 "MMX_PUNPCKHWDirr",
380 "MMX_PUNPCKLBWirr",
381 "MMX_PUNPCKLDQirr",
382 "MMX_PUNPCKLWDirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000383 "UCOM_FPr",
384 "UCOM_Fr",
Craig Topperfc179c62018-03-22 04:23:41 +0000385 "VBROADCASTSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000386 "(V?)INSERTPSrr",
387 "(V?)MOV64toPQIrr",
388 "(V?)MOVDDUP(Y?)rr",
389 "(V?)MOVDI2PDIrr",
390 "(V?)MOVHLPSrr",
391 "(V?)MOVLHPSrr",
392 "(V?)MOVSDrr",
393 "(V?)MOVSHDUP(Y?)rr",
394 "(V?)MOVSLDUP(Y?)rr",
Craig Topper15fef892018-03-25 23:40:56 +0000395 "(V?)MOVSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000396 "(V?)PACKSSDW(Y?)rr",
397 "(V?)PACKSSWB(Y?)rr",
398 "(V?)PACKUSDW(Y?)rr",
399 "(V?)PACKUSWB(Y?)rr",
400 "(V?)PALIGNR(Y?)rri",
401 "(V?)PBLENDW(Y?)rri",
Craig Topperfc179c62018-03-22 04:23:41 +0000402 "VPBROADCASTDrr",
403 "VPBROADCASTQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000404 "VPERMILPD(Y?)ri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000405 "VPERMILPS(Y?)ri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000406 "(V?)PMOVSXBDrr",
407 "(V?)PMOVSXBQrr",
408 "(V?)PMOVSXBWrr",
409 "(V?)PMOVSXDQrr",
410 "(V?)PMOVSXWDrr",
411 "(V?)PMOVSXWQrr",
412 "(V?)PMOVZXBDrr",
413 "(V?)PMOVZXBQrr",
414 "(V?)PMOVZXBWrr",
415 "(V?)PMOVZXDQrr",
416 "(V?)PMOVZXWDrr",
417 "(V?)PMOVZXWQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000418 "(V?)PSHUFD(Y?)ri",
419 "(V?)PSHUFHW(Y?)ri",
420 "(V?)PSHUFLW(Y?)ri",
421 "(V?)PSLLDQ(Y?)ri",
422 "(V?)PSRLDQ(Y?)ri",
423 "(V?)PUNPCKHBW(Y?)rr",
424 "(V?)PUNPCKHDQ(Y?)rr",
425 "(V?)PUNPCKHQDQ(Y?)rr",
426 "(V?)PUNPCKHWD(Y?)rr",
427 "(V?)PUNPCKLBW(Y?)rr",
428 "(V?)PUNPCKLDQ(Y?)rr",
429 "(V?)PUNPCKLQDQ(Y?)rr",
430 "(V?)PUNPCKLWD(Y?)rr",
431 "(V?)SHUFPD(Y?)rri",
432 "(V?)SHUFPS(Y?)rri",
433 "(V?)UNPCKHPD(Y?)rr",
434 "(V?)UNPCKHPS(Y?)rr",
435 "(V?)UNPCKLPD(Y?)rr",
436 "(V?)UNPCKLPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000437
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000438def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000439 let Latency = 1;
440 let NumMicroOps = 1;
441 let ResourceCycles = [1];
442}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000443def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000444
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000445def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000446 let Latency = 1;
447 let NumMicroOps = 1;
448 let ResourceCycles = [1];
449}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000450def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
451 "(V?)PABSD(Y?)rr",
452 "(V?)PABSW(Y?)rr",
453 "(V?)PADDSB(Y?)rr",
454 "(V?)PADDSW(Y?)rr",
455 "(V?)PADDUSB(Y?)rr",
456 "(V?)PADDUSW(Y?)rr",
457 "(V?)PAVGB(Y?)rr",
458 "(V?)PAVGW(Y?)rr",
459 "(V?)PCMPEQB(Y?)rr",
460 "(V?)PCMPEQD(Y?)rr",
461 "(V?)PCMPEQQ(Y?)rr",
462 "(V?)PCMPEQW(Y?)rr",
463 "(V?)PCMPGTB(Y?)rr",
464 "(V?)PCMPGTD(Y?)rr",
465 "(V?)PCMPGTW(Y?)rr",
466 "(V?)PMAXSB(Y?)rr",
467 "(V?)PMAXSD(Y?)rr",
468 "(V?)PMAXSW(Y?)rr",
469 "(V?)PMAXUB(Y?)rr",
470 "(V?)PMAXUD(Y?)rr",
471 "(V?)PMAXUW(Y?)rr",
472 "(V?)PMINSB(Y?)rr",
473 "(V?)PMINSD(Y?)rr",
474 "(V?)PMINSW(Y?)rr",
475 "(V?)PMINUB(Y?)rr",
476 "(V?)PMINUD(Y?)rr",
477 "(V?)PMINUW(Y?)rr",
478 "(V?)PSIGNB(Y?)rr",
479 "(V?)PSIGND(Y?)rr",
480 "(V?)PSIGNW(Y?)rr",
481 "(V?)PSLLD(Y?)ri",
482 "(V?)PSLLQ(Y?)ri",
483 "VPSLLVD(Y?)rr",
484 "VPSLLVQ(Y?)rr",
485 "(V?)PSLLW(Y?)ri",
486 "(V?)PSRAD(Y?)ri",
487 "VPSRAVD(Y?)rr",
488 "(V?)PSRAW(Y?)ri",
489 "(V?)PSRLD(Y?)ri",
490 "(V?)PSRLQ(Y?)ri",
491 "VPSRLVD(Y?)rr",
492 "VPSRLVQ(Y?)rr",
493 "(V?)PSRLW(Y?)ri",
494 "(V?)PSUBSB(Y?)rr",
495 "(V?)PSUBSW(Y?)rr",
496 "(V?)PSUBUSB(Y?)rr",
497 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000498
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000499def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000500 let Latency = 1;
501 let NumMicroOps = 1;
502 let ResourceCycles = [1];
503}
Craig Topperfc179c62018-03-22 04:23:41 +0000504def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
505 "FNOP",
506 "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000507 "MMX_PABS(B|D|W)rr",
508 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000509 "MMX_PANDNirr",
510 "MMX_PANDirr",
511 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000512 "MMX_PSIGN(B|D|W)rr",
513 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000514 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000515
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000516def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000517 let Latency = 1;
518 let NumMicroOps = 1;
519 let ResourceCycles = [1];
520}
Craig Topperfbe31322018-04-05 21:56:19 +0000521def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000522def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
523 "ADC(16|32|64)i",
524 "ADC(8|16|32|64)rr",
525 "ADCX(32|64)rr",
526 "ADOX(32|64)rr",
527 "BT(16|32|64)ri8",
528 "BT(16|32|64)rr",
529 "BTC(16|32|64)ri8",
530 "BTC(16|32|64)rr",
531 "BTR(16|32|64)ri8",
532 "BTR(16|32|64)rr",
533 "BTS(16|32|64)ri8",
534 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000535 "CLAC",
Craig Topperfc179c62018-03-22 04:23:41 +0000536 "RORX(32|64)ri",
537 "SAR(8|16|32|64)r1",
538 "SAR(8|16|32|64)ri",
539 "SARX(32|64)rr",
540 "SBB(16|32|64)ri",
541 "SBB(16|32|64)i",
542 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000543 "SHL(8|16|32|64)r1",
544 "SHL(8|16|32|64)ri",
545 "SHLX(32|64)rr",
546 "SHR(8|16|32|64)r1",
547 "SHR(8|16|32|64)ri",
548 "SHRX(32|64)rr",
549 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000550
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000551def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
552 let Latency = 1;
553 let NumMicroOps = 1;
554 let ResourceCycles = [1];
555}
Craig Topperfc179c62018-03-22 04:23:41 +0000556def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
557 "BLSI(32|64)rr",
558 "BLSMSK(32|64)rr",
559 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000560 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000561
562def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
563 let Latency = 1;
564 let NumMicroOps = 1;
565 let ResourceCycles = [1];
566}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000567def: InstRW<[SKLWriteResGroup9], (instregex "(V?)BLENDPD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000568 "(V?)BLENDPS(Y?)rri",
569 "(V?)MOVAPD(Y?)rr",
570 "(V?)MOVAPS(Y?)rr",
571 "(V?)MOVDQA(Y?)rr",
572 "(V?)MOVDQU(Y?)rr",
573 "(V?)MOVPQI2QIrr",
Craig Topper15fef892018-03-25 23:40:56 +0000574 "(V?)MOVUPD(Y?)rr",
575 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000576 "(V?)MOVZPQILo2PQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000577 "(V?)PADDB(Y?)rr",
578 "(V?)PADDD(Y?)rr",
579 "(V?)PADDQ(Y?)rr",
580 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000581 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000582 "(V?)PSUBB(Y?)rr",
583 "(V?)PSUBD(Y?)rr",
584 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000585 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000586
587def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
588 let Latency = 1;
589 let NumMicroOps = 1;
590 let ResourceCycles = [1];
591}
Craig Topperfbe31322018-04-05 21:56:19 +0000592def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000593def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000594 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000595 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000596 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000597 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000598 "SGDT64m",
599 "SIDT64m",
600 "SLDT64m",
601 "SMSW16m",
602 "STC",
603 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000604 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000605
606def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000607 let Latency = 1;
608 let NumMicroOps = 2;
609 let ResourceCycles = [1,1];
610}
Craig Topperfc179c62018-03-22 04:23:41 +0000611def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
612 "MMX_MOVD64from64rm",
613 "MMX_MOVD64mr",
614 "MMX_MOVNTQmr",
615 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000616 "MOVNTI_64mr",
617 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000618 "ST_FP32m",
619 "ST_FP64m",
620 "ST_FP80m",
621 "VEXTRACTF128mr",
622 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000623 "(V?)MOVAPDYmr",
624 "(V?)MOVAPS(Y?)mr",
625 "(V?)MOVDQA(Y?)mr",
626 "(V?)MOVDQU(Y?)mr",
627 "(V?)MOVHPDmr",
628 "(V?)MOVHPSmr",
629 "(V?)MOVLPDmr",
630 "(V?)MOVLPSmr",
631 "(V?)MOVNTDQ(Y?)mr",
632 "(V?)MOVNTPD(Y?)mr",
633 "(V?)MOVNTPS(Y?)mr",
634 "(V?)MOVPDI2DImr",
635 "(V?)MOVPQI2QImr",
636 "(V?)MOVPQIto64mr",
637 "(V?)MOVSDmr",
638 "(V?)MOVSSmr",
639 "(V?)MOVUPD(Y?)mr",
640 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000641 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000642
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000643def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000644 let Latency = 2;
645 let NumMicroOps = 1;
646 let ResourceCycles = [1];
647}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000648def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000649 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000650 "(V?)MOVPDI2DIrr",
651 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000652 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000653 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000654
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000655def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000656 let Latency = 2;
657 let NumMicroOps = 2;
658 let ResourceCycles = [2];
659}
Craig Topperfc179c62018-03-22 04:23:41 +0000660def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
661 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000662 "(V?)PINSRBrr",
663 "(V?)PINSRDrr",
664 "(V?)PINSRQrr",
665 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000666
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000667def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000668 let Latency = 2;
669 let NumMicroOps = 2;
670 let ResourceCycles = [2];
671}
Craig Topperfc179c62018-03-22 04:23:41 +0000672def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
673 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000674
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000675def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000676 let Latency = 2;
677 let NumMicroOps = 2;
678 let ResourceCycles = [2];
679}
Craig Topperfc179c62018-03-22 04:23:41 +0000680def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
681 "ROL(8|16|32|64)r1",
682 "ROL(8|16|32|64)ri",
683 "ROR(8|16|32|64)r1",
684 "ROR(8|16|32|64)ri",
685 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000686
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000687def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000688 let Latency = 2;
689 let NumMicroOps = 2;
690 let ResourceCycles = [2];
691}
Craig Topperfc179c62018-03-22 04:23:41 +0000692def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
693 "BLENDVPSrr0",
694 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000695 "VBLENDVPD(Y?)rr",
696 "VBLENDVPS(Y?)rr",
697 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000698
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000699def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000700 let Latency = 2;
701 let NumMicroOps = 2;
702 let ResourceCycles = [2];
703}
Craig Topperfc179c62018-03-22 04:23:41 +0000704def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
705 "WAIT",
706 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000707
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000708def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000709 let Latency = 2;
710 let NumMicroOps = 2;
711 let ResourceCycles = [1,1];
712}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000713def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
714 "VMASKMOVPS(Y?)mr",
715 "VPMASKMOVD(Y?)mr",
716 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000717
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000718def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000719 let Latency = 2;
720 let NumMicroOps = 2;
721 let ResourceCycles = [1,1];
722}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000723def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
724 "(V?)PSLLQrr",
725 "(V?)PSLLWrr",
726 "(V?)PSRADrr",
727 "(V?)PSRAWrr",
728 "(V?)PSRLDrr",
729 "(V?)PSRLQrr",
730 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000731
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000732def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000733 let Latency = 2;
734 let NumMicroOps = 2;
735 let ResourceCycles = [1,1];
736}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000737def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000738
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000739def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000740 let Latency = 2;
741 let NumMicroOps = 2;
742 let ResourceCycles = [1,1];
743}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000744def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000745
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000746def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000747 let Latency = 2;
748 let NumMicroOps = 2;
749 let ResourceCycles = [1,1];
750}
Craig Topper498875f2018-04-04 17:54:19 +0000751def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
752
753def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
754 let Latency = 1;
755 let NumMicroOps = 1;
756 let ResourceCycles = [1];
757}
758def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000759
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000760def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000761 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000762 let NumMicroOps = 2;
763 let ResourceCycles = [1,1];
764}
Craig Topper2d451e72018-03-18 08:38:06 +0000765def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000766def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000767def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
768 "ADC8ri",
769 "SBB8i8",
770 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000771
772def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
773 let Latency = 2;
774 let NumMicroOps = 3;
775 let ResourceCycles = [1,1,1];
776}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000777def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
778 "(V?)PEXTRBmr",
779 "(V?)PEXTRDmr",
780 "(V?)PEXTRQmr",
781 "(V?)PEXTRWmr",
782 "(V?)STMXCSR")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000783
784def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
785 let Latency = 2;
786 let NumMicroOps = 3;
787 let ResourceCycles = [1,1,1];
788}
789def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
790
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000791def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
792 let Latency = 2;
793 let NumMicroOps = 3;
794 let ResourceCycles = [1,1,1];
795}
796def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
797
798def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
799 let Latency = 2;
800 let NumMicroOps = 3;
801 let ResourceCycles = [1,1,1];
802}
Craig Topper2d451e72018-03-18 08:38:06 +0000803def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000804def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
805 "PUSH64i8",
806 "STOSB",
807 "STOSL",
808 "STOSQ",
809 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000810
811def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
812 let Latency = 3;
813 let NumMicroOps = 1;
814 let ResourceCycles = [1];
815}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000816def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000817 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000818 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000819 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000820
Clement Courbet327fac42018-03-07 08:14:02 +0000821def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000822 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000823 let NumMicroOps = 2;
824 let ResourceCycles = [1,1];
825}
Clement Courbet327fac42018-03-07 08:14:02 +0000826def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000827
828def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
829 let Latency = 3;
830 let NumMicroOps = 1;
831 let ResourceCycles = [1];
832}
Craig Topperfc179c62018-03-22 04:23:41 +0000833def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
834 "ADD_FST0r",
835 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000836 "SUBR_FPrST0",
837 "SUBR_FST0r",
838 "SUBR_FrST0",
839 "SUB_FPrST0",
840 "SUB_FST0r",
841 "SUB_FrST0",
842 "VBROADCASTSDYrr",
843 "VBROADCASTSSYrr",
844 "VEXTRACTF128rr",
845 "VEXTRACTI128rr",
846 "VINSERTF128rr",
847 "VINSERTI128rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000848 "VPBROADCASTB(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000849 "VPBROADCASTDYrr",
850 "VPBROADCASTQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000851 "VPBROADCASTW(Y?)rr",
852 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000853 "VPERM2F128rr",
854 "VPERM2I128rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000855 "VPERMPDYri",
Craig Topperfc179c62018-03-22 04:23:41 +0000856 "VPERMQYri",
857 "VPMOVSXBDYrr",
858 "VPMOVSXBQYrr",
859 "VPMOVSXBWYrr",
860 "VPMOVSXDQYrr",
861 "VPMOVSXWDYrr",
862 "VPMOVSXWQYrr",
863 "VPMOVZXBDYrr",
864 "VPMOVZXBQYrr",
865 "VPMOVZXBWYrr",
866 "VPMOVZXDQYrr",
867 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000868 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000869
870def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
871 let Latency = 3;
872 let NumMicroOps = 2;
873 let ResourceCycles = [1,1];
874}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000875def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
876 "(V?)EXTRACTPSrr",
877 "(V?)PEXTRBrr",
878 "(V?)PEXTRDrr",
879 "(V?)PEXTRQrr",
880 "(V?)PEXTRWrr",
881 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000882
883def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
884 let Latency = 3;
885 let NumMicroOps = 2;
886 let ResourceCycles = [1,1];
887}
888def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
889
890def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
891 let Latency = 3;
892 let NumMicroOps = 3;
893 let ResourceCycles = [3];
894}
Craig Topperfc179c62018-03-22 04:23:41 +0000895def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
896 "ROR(8|16|32|64)rCL",
897 "SAR(8|16|32|64)rCL",
898 "SHL(8|16|32|64)rCL",
899 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000900
901def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000902 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000903 let NumMicroOps = 3;
904 let ResourceCycles = [3];
905}
Craig Topperb5f26592018-04-19 18:00:17 +0000906def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
907 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
908 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000909
910def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
911 let Latency = 3;
912 let NumMicroOps = 3;
913 let ResourceCycles = [1,2];
914}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000915def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000916
917def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
918 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000919 let NumMicroOps = 3;
920 let ResourceCycles = [2,1];
921}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000922def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
923 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000924
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000925def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
926 let Latency = 3;
927 let NumMicroOps = 3;
928 let ResourceCycles = [2,1];
929}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000930def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000931
932def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
933 let Latency = 3;
934 let NumMicroOps = 3;
935 let ResourceCycles = [2,1];
936}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000937def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
938 "(V?)PHADDW(Y?)rr",
939 "(V?)PHSUBD(Y?)rr",
940 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000941
942def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
943 let Latency = 3;
944 let NumMicroOps = 3;
945 let ResourceCycles = [2,1];
946}
Craig Topperfc179c62018-03-22 04:23:41 +0000947def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
948 "MMX_PACKSSWBirr",
949 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000950
951def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
952 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000953 let NumMicroOps = 3;
954 let ResourceCycles = [1,2];
955}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000956def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000957
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000958def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
959 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000960 let NumMicroOps = 3;
961 let ResourceCycles = [1,2];
962}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000963def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000964
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000965def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
966 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000967 let NumMicroOps = 3;
968 let ResourceCycles = [1,2];
969}
Craig Topperfc179c62018-03-22 04:23:41 +0000970def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
971 "RCL(8|16|32|64)ri",
972 "RCR(8|16|32|64)r1",
973 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000974
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000975def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
976 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000977 let NumMicroOps = 3;
978 let ResourceCycles = [1,1,1];
979}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000980def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000981
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000982def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
983 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000984 let NumMicroOps = 4;
985 let ResourceCycles = [1,1,2];
986}
Craig Topperf4cd9082018-01-19 05:47:32 +0000987def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000988
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000989def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
990 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000991 let NumMicroOps = 4;
992 let ResourceCycles = [1,1,1,1];
993}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000994def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000995
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000996def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
997 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000998 let NumMicroOps = 4;
999 let ResourceCycles = [1,1,1,1];
1000}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001001def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001002
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001003def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001004 let Latency = 4;
1005 let NumMicroOps = 1;
1006 let ResourceCycles = [1];
1007}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001008def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001009 "MMX_PMADDWDirr",
1010 "MMX_PMULHRSWrr",
1011 "MMX_PMULHUWirr",
1012 "MMX_PMULHWirr",
1013 "MMX_PMULLWirr",
1014 "MMX_PMULUDQirr",
1015 "MUL_FPrST0",
1016 "MUL_FST0r",
1017 "MUL_FrST0",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001018 "(V?)RCPPS(Y?)r",
1019 "(V?)RCPSSr",
1020 "(V?)RSQRTPS(Y?)r",
1021 "(V?)RSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001022
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001023def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001024 let Latency = 4;
1025 let NumMicroOps = 1;
1026 let ResourceCycles = [1];
1027}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001028def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
1029 "(V?)ADDPS(Y?)rr",
1030 "(V?)ADDSDrr",
1031 "(V?)ADDSSrr",
1032 "(V?)ADDSUBPD(Y?)rr",
1033 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001034 "(V?)CVTDQ2PS(Y?)rr",
1035 "(V?)CVTPS2DQ(Y?)rr",
1036 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001037 "(V?)MULPD(Y?)rr",
1038 "(V?)MULPS(Y?)rr",
1039 "(V?)MULSDrr",
1040 "(V?)MULSSrr",
1041 "(V?)PHMINPOSUWrr",
1042 "(V?)PMADDUBSW(Y?)rr",
1043 "(V?)PMADDWD(Y?)rr",
1044 "(V?)PMULDQ(Y?)rr",
1045 "(V?)PMULHRSW(Y?)rr",
1046 "(V?)PMULHUW(Y?)rr",
1047 "(V?)PMULHW(Y?)rr",
1048 "(V?)PMULLW(Y?)rr",
1049 "(V?)PMULUDQ(Y?)rr",
1050 "(V?)SUBPD(Y?)rr",
1051 "(V?)SUBPS(Y?)rr",
1052 "(V?)SUBSDrr",
1053 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001054
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001055def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001056 let Latency = 4;
1057 let NumMicroOps = 2;
1058 let ResourceCycles = [2];
1059}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001060def: InstRW<[SKLWriteResGroup50], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001061
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001062def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001063 let Latency = 4;
1064 let NumMicroOps = 2;
1065 let ResourceCycles = [1,1];
1066}
Craig Topperf846e2d2018-04-19 05:34:05 +00001067def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001068
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001069def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1070 let Latency = 4;
1071 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001072 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001073}
Craig Topperfc179c62018-03-22 04:23:41 +00001074def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001075
1076def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001077 let Latency = 4;
1078 let NumMicroOps = 2;
1079 let ResourceCycles = [1,1];
1080}
Craig Topperfc179c62018-03-22 04:23:41 +00001081def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1082 "VPSLLQYrr",
1083 "VPSLLWYrr",
1084 "VPSRADYrr",
1085 "VPSRAWYrr",
1086 "VPSRLDYrr",
1087 "VPSRLQYrr",
1088 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001089
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001090def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001091 let Latency = 4;
1092 let NumMicroOps = 3;
1093 let ResourceCycles = [1,1,1];
1094}
Craig Topperfc179c62018-03-22 04:23:41 +00001095def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1096 "ISTT_FP32m",
1097 "ISTT_FP64m",
1098 "IST_F16m",
1099 "IST_F32m",
1100 "IST_FP16m",
1101 "IST_FP32m",
1102 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001103
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001104def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001105 let Latency = 4;
1106 let NumMicroOps = 4;
1107 let ResourceCycles = [4];
1108}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001109def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001110
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001111def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001112 let Latency = 4;
1113 let NumMicroOps = 4;
1114 let ResourceCycles = [1,3];
1115}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001116def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001117
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001118def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001119 let Latency = 4;
1120 let NumMicroOps = 4;
1121 let ResourceCycles = [1,3];
1122}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001123def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001124
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001125def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001126 let Latency = 4;
1127 let NumMicroOps = 4;
1128 let ResourceCycles = [1,1,2];
1129}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001130def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001131
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001132def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1133 let Latency = 5;
1134 let NumMicroOps = 1;
1135 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001136}
Craig Topperfc179c62018-03-22 04:23:41 +00001137def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64rm",
1138 "MMX_MOVD64to64rm",
1139 "MMX_MOVQ64rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001140 "MOVSX(16|32|64)rm16",
1141 "MOVSX(16|32|64)rm32",
1142 "MOVSX(16|32|64)rm8",
1143 "MOVZX(16|32|64)rm16",
1144 "MOVZX(16|32|64)rm8",
1145 "PREFETCHNTA",
1146 "PREFETCHT0",
1147 "PREFETCHT1",
1148 "PREFETCHT2",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001149 "(V?)MOV64toPQIrm",
1150 "(V?)MOVDDUPrm",
1151 "(V?)MOVDI2PDIrm",
1152 "(V?)MOVQI2PQIrm",
1153 "(V?)MOVSDrm",
1154 "(V?)MOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001155
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001156def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001157 let Latency = 5;
1158 let NumMicroOps = 2;
1159 let ResourceCycles = [1,1];
1160}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001161def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1162 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001163
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001164def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001165 let Latency = 5;
1166 let NumMicroOps = 2;
1167 let ResourceCycles = [1,1];
1168}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001169def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001170 "MMX_CVTPS2PIirr",
1171 "MMX_CVTTPD2PIirr",
1172 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001173 "(V?)CVTPD2DQrr",
1174 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001175 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001176 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001177 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001178 "(V?)CVTSD2SSrr",
1179 "(V?)CVTSI642SDrr",
1180 "(V?)CVTSI2SDrr",
1181 "(V?)CVTSI2SSrr",
1182 "(V?)CVTSS2SDrr",
1183 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001184
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001185def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001186 let Latency = 5;
1187 let NumMicroOps = 3;
1188 let ResourceCycles = [1,1,1];
1189}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001190def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001191
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001192def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001193 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001194 let NumMicroOps = 3;
1195 let ResourceCycles = [1,1,1];
1196}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001197def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001198
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001199def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001200 let Latency = 5;
1201 let NumMicroOps = 5;
1202 let ResourceCycles = [1,4];
1203}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001204def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001205
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001206def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001207 let Latency = 5;
1208 let NumMicroOps = 5;
1209 let ResourceCycles = [2,3];
1210}
Craig Topper13a16502018-03-19 00:56:09 +00001211def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001212
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001213def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001214 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001215 let NumMicroOps = 6;
1216 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001217}
Craig Topperfc179c62018-03-22 04:23:41 +00001218def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1219 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001220
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001221def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1222 let Latency = 6;
1223 let NumMicroOps = 1;
1224 let ResourceCycles = [1];
1225}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001226def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
1227 "(V?)LDDQUrm",
1228 "(V?)MOVAPDrm",
1229 "(V?)MOVAPSrm",
1230 "(V?)MOVDQArm",
1231 "(V?)MOVDQUrm",
1232 "(V?)MOVNTDQArm",
1233 "(V?)MOVSHDUPrm",
1234 "(V?)MOVSLDUPrm",
1235 "(V?)MOVUPDrm",
1236 "(V?)MOVUPSrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001237 "VPBROADCASTDrm",
1238 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001239
1240def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001241 let Latency = 6;
1242 let NumMicroOps = 2;
1243 let ResourceCycles = [2];
1244}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001245def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001246
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001247def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001248 let Latency = 6;
1249 let NumMicroOps = 2;
1250 let ResourceCycles = [1,1];
1251}
Craig Topperfc179c62018-03-22 04:23:41 +00001252def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1253 "MMX_PADDSWirm",
1254 "MMX_PADDUSBirm",
1255 "MMX_PADDUSWirm",
1256 "MMX_PAVGBirm",
1257 "MMX_PAVGWirm",
1258 "MMX_PCMPEQBirm",
1259 "MMX_PCMPEQDirm",
1260 "MMX_PCMPEQWirm",
1261 "MMX_PCMPGTBirm",
1262 "MMX_PCMPGTDirm",
1263 "MMX_PCMPGTWirm",
1264 "MMX_PMAXSWirm",
1265 "MMX_PMAXUBirm",
1266 "MMX_PMINSWirm",
1267 "MMX_PMINUBirm",
1268 "MMX_PSLLDrm",
1269 "MMX_PSLLQrm",
1270 "MMX_PSLLWrm",
1271 "MMX_PSRADrm",
1272 "MMX_PSRAWrm",
1273 "MMX_PSRLDrm",
1274 "MMX_PSRLQrm",
1275 "MMX_PSRLWrm",
1276 "MMX_PSUBSBirm",
1277 "MMX_PSUBSWirm",
1278 "MMX_PSUBUSBirm",
1279 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001280
Craig Topper58afb4e2018-03-22 21:10:07 +00001281def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001282 let Latency = 6;
1283 let NumMicroOps = 2;
1284 let ResourceCycles = [1,1];
1285}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001286def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1287 "(V?)CVTSD2SIrr",
1288 "(V?)CVTSS2SI64rr",
1289 "(V?)CVTSS2SIrr",
1290 "(V?)CVTTSD2SI64rr",
1291 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001292
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001293def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1294 let Latency = 6;
1295 let NumMicroOps = 2;
1296 let ResourceCycles = [1,1];
1297}
Craig Topperfc179c62018-03-22 04:23:41 +00001298def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1299 "MMX_PINSRWrm",
1300 "MMX_PSHUFBrm",
1301 "MMX_PSHUFWmi",
1302 "MMX_PUNPCKHBWirm",
1303 "MMX_PUNPCKHDQirm",
1304 "MMX_PUNPCKHWDirm",
1305 "MMX_PUNPCKLBWirm",
1306 "MMX_PUNPCKLDQirm",
1307 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001308 "(V?)MOVHPDrm",
1309 "(V?)MOVHPSrm",
1310 "(V?)MOVLPDrm",
1311 "(V?)MOVLPSrm",
1312 "(V?)PINSRBrm",
1313 "(V?)PINSRDrm",
1314 "(V?)PINSRQrm",
1315 "(V?)PINSRWrm",
1316 "(V?)PMOVSXBDrm",
1317 "(V?)PMOVSXBQrm",
1318 "(V?)PMOVSXBWrm",
1319 "(V?)PMOVSXDQrm",
1320 "(V?)PMOVSXWDrm",
1321 "(V?)PMOVSXWQrm",
1322 "(V?)PMOVZXBDrm",
1323 "(V?)PMOVZXBQrm",
1324 "(V?)PMOVZXBWrm",
1325 "(V?)PMOVZXDQrm",
1326 "(V?)PMOVZXWDrm",
1327 "(V?)PMOVZXWQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001328
1329def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1330 let Latency = 6;
1331 let NumMicroOps = 2;
1332 let ResourceCycles = [1,1];
1333}
Craig Topperfc179c62018-03-22 04:23:41 +00001334def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1335 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001336
1337def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1338 let Latency = 6;
1339 let NumMicroOps = 2;
1340 let ResourceCycles = [1,1];
1341}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001342def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1343 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001344 "MMX_PANDNirm",
1345 "MMX_PANDirm",
1346 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001347 "MMX_PSIGN(B|D|W)rm",
1348 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001349 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001350
1351def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1352 let Latency = 6;
1353 let NumMicroOps = 2;
1354 let ResourceCycles = [1,1];
1355}
Craig Topperc50570f2018-04-06 17:12:18 +00001356def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001357 "RORX(32|64)mi",
1358 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001359 "SHLX(32|64)rm",
1360 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001361def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1362 ADCX32rm, ADCX64rm,
1363 ADOX32rm, ADOX64rm,
1364 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001365
1366def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1367 let Latency = 6;
1368 let NumMicroOps = 2;
1369 let ResourceCycles = [1,1];
1370}
Craig Topperfc179c62018-03-22 04:23:41 +00001371def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1372 "BLSI(32|64)rm",
1373 "BLSMSK(32|64)rm",
1374 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001375 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001376
1377def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1378 let Latency = 6;
1379 let NumMicroOps = 2;
1380 let ResourceCycles = [1,1];
1381}
Craig Topper2d451e72018-03-18 08:38:06 +00001382def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001383def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001384
1385def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001386 let Latency = 6;
1387 let NumMicroOps = 3;
1388 let ResourceCycles = [2,1];
1389}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001390def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1391 "(V?)HADDPS(Y?)rr",
1392 "(V?)HSUBPD(Y?)rr",
1393 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001394
Craig Topper58afb4e2018-03-22 21:10:07 +00001395def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001396 let Latency = 6;
1397 let NumMicroOps = 3;
1398 let ResourceCycles = [2,1];
1399}
Craig Topperfc179c62018-03-22 04:23:41 +00001400def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001401
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001402def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001403 let Latency = 6;
1404 let NumMicroOps = 4;
1405 let ResourceCycles = [1,2,1];
1406}
Craig Topperfc179c62018-03-22 04:23:41 +00001407def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1408 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001409
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001410def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001411 let Latency = 6;
1412 let NumMicroOps = 4;
1413 let ResourceCycles = [1,1,1,1];
1414}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001415def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001416
Craig Topper58afb4e2018-03-22 21:10:07 +00001417def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001418 let Latency = 6;
1419 let NumMicroOps = 4;
1420 let ResourceCycles = [1,1,1,1];
1421}
1422def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1423
1424def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1425 let Latency = 6;
1426 let NumMicroOps = 4;
1427 let ResourceCycles = [1,1,1,1];
1428}
Craig Topperfc179c62018-03-22 04:23:41 +00001429def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1430 "BTR(16|32|64)mi8",
1431 "BTS(16|32|64)mi8",
1432 "SAR(8|16|32|64)m1",
1433 "SAR(8|16|32|64)mi",
1434 "SHL(8|16|32|64)m1",
1435 "SHL(8|16|32|64)mi",
1436 "SHR(8|16|32|64)m1",
1437 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001438
1439def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1440 let Latency = 6;
1441 let NumMicroOps = 4;
1442 let ResourceCycles = [1,1,1,1];
1443}
Craig Topperf0d04262018-04-06 16:16:48 +00001444def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1445 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001446
1447def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001448 let Latency = 6;
1449 let NumMicroOps = 6;
1450 let ResourceCycles = [1,5];
1451}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001452def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001453
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001454def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1455 let Latency = 7;
1456 let NumMicroOps = 1;
1457 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001458}
Craig Topperfc179c62018-03-22 04:23:41 +00001459def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1460 "LD_F64m",
1461 "LD_F80m",
1462 "VBROADCASTF128",
1463 "VBROADCASTI128",
1464 "VBROADCASTSDYrm",
1465 "VBROADCASTSSYrm",
1466 "VLDDQUYrm",
1467 "VMOVAPDYrm",
1468 "VMOVAPSYrm",
1469 "VMOVDDUPYrm",
1470 "VMOVDQAYrm",
1471 "VMOVDQUYrm",
1472 "VMOVNTDQAYrm",
1473 "VMOVSHDUPYrm",
1474 "VMOVSLDUPYrm",
1475 "VMOVUPDYrm",
1476 "VMOVUPSYrm",
1477 "VPBROADCASTDYrm",
1478 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001479
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001480def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001481 let Latency = 7;
1482 let NumMicroOps = 2;
1483 let ResourceCycles = [1,1];
1484}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001485def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001486
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001487def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1488 let Latency = 7;
1489 let NumMicroOps = 2;
1490 let ResourceCycles = [1,1];
1491}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001492def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1493 "(V?)PACKSSDWrm",
1494 "(V?)PACKSSWBrm",
1495 "(V?)PACKUSDWrm",
1496 "(V?)PACKUSWBrm",
1497 "(V?)PALIGNRrmi",
1498 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001499 "VPBROADCASTBrm",
1500 "VPBROADCASTWrm",
1501 "VPERMILPDmi",
1502 "VPERMILPDrm",
1503 "VPERMILPSmi",
1504 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001505 "(V?)PSHUFBrm",
1506 "(V?)PSHUFDmi",
1507 "(V?)PSHUFHWmi",
1508 "(V?)PSHUFLWmi",
1509 "(V?)PUNPCKHBWrm",
1510 "(V?)PUNPCKHDQrm",
1511 "(V?)PUNPCKHQDQrm",
1512 "(V?)PUNPCKHWDrm",
1513 "(V?)PUNPCKLBWrm",
1514 "(V?)PUNPCKLDQrm",
1515 "(V?)PUNPCKLQDQrm",
1516 "(V?)PUNPCKLWDrm",
1517 "(V?)SHUFPDrmi",
1518 "(V?)SHUFPSrmi",
1519 "(V?)UNPCKHPDrm",
1520 "(V?)UNPCKHPSrm",
1521 "(V?)UNPCKLPDrm",
1522 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001523
Craig Topper58afb4e2018-03-22 21:10:07 +00001524def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001525 let Latency = 7;
1526 let NumMicroOps = 2;
1527 let ResourceCycles = [1,1];
1528}
Craig Topperfc179c62018-03-22 04:23:41 +00001529def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1530 "VCVTPD2PSYrr",
1531 "VCVTPH2PSYrr",
1532 "VCVTPS2PDYrr",
1533 "VCVTPS2PHYrr",
1534 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001535
1536def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1537 let Latency = 7;
1538 let NumMicroOps = 2;
1539 let ResourceCycles = [1,1];
1540}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001541def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1542 "(V?)PABSDrm",
1543 "(V?)PABSWrm",
1544 "(V?)PADDSBrm",
1545 "(V?)PADDSWrm",
1546 "(V?)PADDUSBrm",
1547 "(V?)PADDUSWrm",
1548 "(V?)PAVGBrm",
1549 "(V?)PAVGWrm",
1550 "(V?)PCMPEQBrm",
1551 "(V?)PCMPEQDrm",
1552 "(V?)PCMPEQQrm",
1553 "(V?)PCMPEQWrm",
1554 "(V?)PCMPGTBrm",
1555 "(V?)PCMPGTDrm",
1556 "(V?)PCMPGTWrm",
1557 "(V?)PMAXSBrm",
1558 "(V?)PMAXSDrm",
1559 "(V?)PMAXSWrm",
1560 "(V?)PMAXUBrm",
1561 "(V?)PMAXUDrm",
1562 "(V?)PMAXUWrm",
1563 "(V?)PMINSBrm",
1564 "(V?)PMINSDrm",
1565 "(V?)PMINSWrm",
1566 "(V?)PMINUBrm",
1567 "(V?)PMINUDrm",
1568 "(V?)PMINUWrm",
1569 "(V?)PSIGNBrm",
1570 "(V?)PSIGNDrm",
1571 "(V?)PSIGNWrm",
1572 "(V?)PSLLDrm",
1573 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001574 "VPSLLVDrm",
1575 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001576 "(V?)PSLLWrm",
1577 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001578 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001579 "(V?)PSRAWrm",
1580 "(V?)PSRLDrm",
1581 "(V?)PSRLQrm",
1582 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001583 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001584 "(V?)PSRLWrm",
1585 "(V?)PSUBSBrm",
1586 "(V?)PSUBSWrm",
1587 "(V?)PSUBUSBrm",
1588 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001589
1590def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1591 let Latency = 7;
1592 let NumMicroOps = 2;
1593 let ResourceCycles = [1,1];
1594}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001595def: InstRW<[SKLWriteResGroup91], (instregex "(V?)BLENDPDrmi",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001596 "(V?)BLENDPSrmi",
1597 "(V?)INSERTF128rm",
1598 "(V?)INSERTI128rm",
1599 "(V?)MASKMOVPDrm",
1600 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001601 "(V?)PADDBrm",
1602 "(V?)PADDDrm",
1603 "(V?)PADDQrm",
1604 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001605 "(V?)PBLENDDrmi",
1606 "(V?)PMASKMOVDrm",
1607 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001608 "(V?)PSUBBrm",
1609 "(V?)PSUBDrm",
1610 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001611 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001612
1613def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1614 let Latency = 7;
1615 let NumMicroOps = 3;
1616 let ResourceCycles = [2,1];
1617}
Craig Topperfc179c62018-03-22 04:23:41 +00001618def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1619 "MMX_PACKSSWBirm",
1620 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001621
1622def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1623 let Latency = 7;
1624 let NumMicroOps = 3;
1625 let ResourceCycles = [1,2];
1626}
Craig Topperf4cd9082018-01-19 05:47:32 +00001627def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001628
1629def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1630 let Latency = 7;
1631 let NumMicroOps = 3;
1632 let ResourceCycles = [1,2];
1633}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001634def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1635 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001636
Craig Topper58afb4e2018-03-22 21:10:07 +00001637def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001638 let Latency = 7;
1639 let NumMicroOps = 3;
1640 let ResourceCycles = [1,1,1];
1641}
Craig Topperfc179c62018-03-22 04:23:41 +00001642def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1643 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001644
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001645def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001646 let Latency = 7;
1647 let NumMicroOps = 3;
1648 let ResourceCycles = [1,1,1];
1649}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001650def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001651
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001652def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001653 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001654 let NumMicroOps = 3;
1655 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001656}
Craig Topperfc179c62018-03-22 04:23:41 +00001657def: InstRW<[SKLWriteResGroup97], (instregex "(V?)LDMXCSR")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001658
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001659def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001660 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001661 let NumMicroOps = 3;
1662 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001663}
Craig Topperfc179c62018-03-22 04:23:41 +00001664def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1665 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001666
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001667def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1668 let Latency = 7;
1669 let NumMicroOps = 5;
1670 let ResourceCycles = [1,1,1,2];
1671}
Craig Topperfc179c62018-03-22 04:23:41 +00001672def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1673 "ROL(8|16|32|64)mi",
1674 "ROR(8|16|32|64)m1",
1675 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001676
1677def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1678 let Latency = 7;
1679 let NumMicroOps = 5;
1680 let ResourceCycles = [1,1,1,2];
1681}
Craig Topper13a16502018-03-19 00:56:09 +00001682def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001683
1684def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1685 let Latency = 7;
1686 let NumMicroOps = 5;
1687 let ResourceCycles = [1,1,1,1,1];
1688}
Craig Topperfc179c62018-03-22 04:23:41 +00001689def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1690 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001691
1692def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001693 let Latency = 7;
1694 let NumMicroOps = 7;
1695 let ResourceCycles = [1,3,1,2];
1696}
Craig Topper2d451e72018-03-18 08:38:06 +00001697def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001698
Craig Topper58afb4e2018-03-22 21:10:07 +00001699def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001700 let Latency = 8;
1701 let NumMicroOps = 2;
1702 let ResourceCycles = [2];
1703}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001704def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1705 "(V?)ROUNDPS(Y?)r",
1706 "(V?)ROUNDSDr",
1707 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001708
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001709def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001710 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001711 let NumMicroOps = 2;
1712 let ResourceCycles = [1,1];
1713}
Craig Topperfc179c62018-03-22 04:23:41 +00001714def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1715 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001716
1717def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1718 let Latency = 8;
1719 let NumMicroOps = 2;
1720 let ResourceCycles = [1,1];
1721}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001722def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1723 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001724
1725def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001726 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001727 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001728 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001729}
Craig Topperf846e2d2018-04-19 05:34:05 +00001730def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001731
Craig Topperf846e2d2018-04-19 05:34:05 +00001732def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1733 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001734 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001735 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001736}
Craig Topperfc179c62018-03-22 04:23:41 +00001737def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001738
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001739def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1740 let Latency = 8;
1741 let NumMicroOps = 2;
1742 let ResourceCycles = [1,1];
1743}
Craig Topperfc179c62018-03-22 04:23:41 +00001744def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1745 "FCOM64m",
1746 "FCOMP32m",
1747 "FCOMP64m",
1748 "MMX_PSADBWirm",
1749 "VPACKSSDWYrm",
1750 "VPACKSSWBYrm",
1751 "VPACKUSDWYrm",
1752 "VPACKUSWBYrm",
1753 "VPALIGNRYrmi",
1754 "VPBLENDWYrmi",
1755 "VPBROADCASTBYrm",
1756 "VPBROADCASTWYrm",
1757 "VPERMILPDYmi",
1758 "VPERMILPDYrm",
1759 "VPERMILPSYmi",
1760 "VPERMILPSYrm",
1761 "VPMOVSXBDYrm",
1762 "VPMOVSXBQYrm",
1763 "VPMOVSXWQYrm",
1764 "VPSHUFBYrm",
1765 "VPSHUFDYmi",
1766 "VPSHUFHWYmi",
1767 "VPSHUFLWYmi",
1768 "VPUNPCKHBWYrm",
1769 "VPUNPCKHDQYrm",
1770 "VPUNPCKHQDQYrm",
1771 "VPUNPCKHWDYrm",
1772 "VPUNPCKLBWYrm",
1773 "VPUNPCKLDQYrm",
1774 "VPUNPCKLQDQYrm",
1775 "VPUNPCKLWDYrm",
1776 "VSHUFPDYrmi",
1777 "VSHUFPSYrmi",
1778 "VUNPCKHPDYrm",
1779 "VUNPCKHPSYrm",
1780 "VUNPCKLPDYrm",
1781 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001782
1783def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1784 let Latency = 8;
1785 let NumMicroOps = 2;
1786 let ResourceCycles = [1,1];
1787}
Craig Topperfc179c62018-03-22 04:23:41 +00001788def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1789 "VPABSDYrm",
1790 "VPABSWYrm",
1791 "VPADDSBYrm",
1792 "VPADDSWYrm",
1793 "VPADDUSBYrm",
1794 "VPADDUSWYrm",
1795 "VPAVGBYrm",
1796 "VPAVGWYrm",
1797 "VPCMPEQBYrm",
1798 "VPCMPEQDYrm",
1799 "VPCMPEQQYrm",
1800 "VPCMPEQWYrm",
1801 "VPCMPGTBYrm",
1802 "VPCMPGTDYrm",
1803 "VPCMPGTWYrm",
1804 "VPMAXSBYrm",
1805 "VPMAXSDYrm",
1806 "VPMAXSWYrm",
1807 "VPMAXUBYrm",
1808 "VPMAXUDYrm",
1809 "VPMAXUWYrm",
1810 "VPMINSBYrm",
1811 "VPMINSDYrm",
1812 "VPMINSWYrm",
1813 "VPMINUBYrm",
1814 "VPMINUDYrm",
1815 "VPMINUWYrm",
1816 "VPSIGNBYrm",
1817 "VPSIGNDYrm",
1818 "VPSIGNWYrm",
1819 "VPSLLDYrm",
1820 "VPSLLQYrm",
1821 "VPSLLVDYrm",
1822 "VPSLLVQYrm",
1823 "VPSLLWYrm",
1824 "VPSRADYrm",
1825 "VPSRAVDYrm",
1826 "VPSRAWYrm",
1827 "VPSRLDYrm",
1828 "VPSRLQYrm",
1829 "VPSRLVDYrm",
1830 "VPSRLVQYrm",
1831 "VPSRLWYrm",
1832 "VPSUBSBYrm",
1833 "VPSUBSWYrm",
1834 "VPSUBUSBYrm",
1835 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001836
1837def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1838 let Latency = 8;
1839 let NumMicroOps = 2;
1840 let ResourceCycles = [1,1];
1841}
Craig Topperfc179c62018-03-22 04:23:41 +00001842def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1843 "VANDNPSYrm",
1844 "VANDPDYrm",
1845 "VANDPSYrm",
1846 "VBLENDPDYrmi",
1847 "VBLENDPSYrmi",
1848 "VMASKMOVPDYrm",
1849 "VMASKMOVPSYrm",
1850 "VORPDYrm",
1851 "VORPSYrm",
1852 "VPADDBYrm",
1853 "VPADDDYrm",
1854 "VPADDQYrm",
1855 "VPADDWYrm",
1856 "VPANDNYrm",
1857 "VPANDYrm",
1858 "VPBLENDDYrmi",
1859 "VPMASKMOVDYrm",
1860 "VPMASKMOVQYrm",
1861 "VPORYrm",
1862 "VPSUBBYrm",
1863 "VPSUBDYrm",
1864 "VPSUBQYrm",
1865 "VPSUBWYrm",
1866 "VPXORYrm",
1867 "VXORPDYrm",
1868 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001869
1870def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001871 let Latency = 8;
1872 let NumMicroOps = 3;
1873 let ResourceCycles = [1,2];
1874}
Craig Topperfc179c62018-03-22 04:23:41 +00001875def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
1876 "BLENDVPSrm0",
1877 "PBLENDVBrm0",
1878 "VBLENDVPDrm",
1879 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001880 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001881
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001882def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1883 let Latency = 8;
1884 let NumMicroOps = 4;
1885 let ResourceCycles = [1,2,1];
1886}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001887def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001888
1889def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1890 let Latency = 8;
1891 let NumMicroOps = 4;
1892 let ResourceCycles = [2,1,1];
1893}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001894def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001895
Craig Topper58afb4e2018-03-22 21:10:07 +00001896def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001897 let Latency = 8;
1898 let NumMicroOps = 4;
1899 let ResourceCycles = [1,1,1,1];
1900}
1901def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1902
1903def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1904 let Latency = 8;
1905 let NumMicroOps = 5;
1906 let ResourceCycles = [1,1,3];
1907}
Craig Topper13a16502018-03-19 00:56:09 +00001908def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001909
1910def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1911 let Latency = 8;
1912 let NumMicroOps = 5;
1913 let ResourceCycles = [1,1,1,2];
1914}
Craig Topperfc179c62018-03-22 04:23:41 +00001915def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1916 "RCL(8|16|32|64)mi",
1917 "RCR(8|16|32|64)m1",
1918 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001919
1920def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1921 let Latency = 8;
1922 let NumMicroOps = 6;
1923 let ResourceCycles = [1,1,1,3];
1924}
Craig Topperfc179c62018-03-22 04:23:41 +00001925def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1926 "SAR(8|16|32|64)mCL",
1927 "SHL(8|16|32|64)mCL",
1928 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001929
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001930def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1931 let Latency = 8;
1932 let NumMicroOps = 6;
1933 let ResourceCycles = [1,1,1,2,1];
1934}
Craig Topper9f834812018-04-01 21:54:24 +00001935def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001936 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001937 "SBB(8|16|32|64)mi")>;
1938def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1939 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001940
1941def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1942 let Latency = 9;
1943 let NumMicroOps = 2;
1944 let ResourceCycles = [1,1];
1945}
Craig Topperfc179c62018-03-22 04:23:41 +00001946def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1947 "MMX_PMADDUBSWrm",
1948 "MMX_PMADDWDirm",
1949 "MMX_PMULHRSWrm",
1950 "MMX_PMULHUWirm",
1951 "MMX_PMULHWirm",
1952 "MMX_PMULLWirm",
1953 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001954 "(V?)RCPSSm",
1955 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001956 "VTESTPDYrm",
1957 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001958
1959def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1960 let Latency = 9;
1961 let NumMicroOps = 2;
1962 let ResourceCycles = [1,1];
1963}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001964def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001965 "VPMOVSXBWYrm",
1966 "VPMOVSXDQYrm",
1967 "VPMOVSXWDYrm",
1968 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001969 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001970
1971def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1972 let Latency = 9;
1973 let NumMicroOps = 2;
1974 let ResourceCycles = [1,1];
1975}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001976def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1977 "(V?)ADDSSrm",
1978 "(V?)CMPSDrm",
1979 "(V?)CMPSSrm",
1980 "(V?)MAX(C?)SDrm",
1981 "(V?)MAX(C?)SSrm",
1982 "(V?)MIN(C?)SDrm",
1983 "(V?)MIN(C?)SSrm",
1984 "(V?)MULSDrm",
1985 "(V?)MULSSrm",
1986 "(V?)SUBSDrm",
1987 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001988def: InstRW<[SKLWriteResGroup122],
1989 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001990
Craig Topper58afb4e2018-03-22 21:10:07 +00001991def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001992 let Latency = 9;
1993 let NumMicroOps = 2;
1994 let ResourceCycles = [1,1];
1995}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001996def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001997 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001998 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001999 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002000
Craig Topper58afb4e2018-03-22 21:10:07 +00002001def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002002 let Latency = 9;
2003 let NumMicroOps = 3;
2004 let ResourceCycles = [1,2];
2005}
Craig Topperfc179c62018-03-22 04:23:41 +00002006def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002007
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002008def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2009 let Latency = 9;
2010 let NumMicroOps = 3;
2011 let ResourceCycles = [1,2];
2012}
Craig Topperfc179c62018-03-22 04:23:41 +00002013def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
2014 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002015
2016def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2017 let Latency = 9;
2018 let NumMicroOps = 3;
2019 let ResourceCycles = [1,1,1];
2020}
Craig Topperfc179c62018-03-22 04:23:41 +00002021def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002022
2023def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
2024 let Latency = 9;
2025 let NumMicroOps = 3;
2026 let ResourceCycles = [1,1,1];
2027}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002028def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002029
2030def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002031 let Latency = 9;
2032 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002033 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002034}
Craig Topperfc179c62018-03-22 04:23:41 +00002035def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
2036 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002037
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002038def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2039 let Latency = 9;
2040 let NumMicroOps = 4;
2041 let ResourceCycles = [2,1,1];
2042}
Craig Topperfc179c62018-03-22 04:23:41 +00002043def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
2044 "(V?)PHADDWrm",
2045 "(V?)PHSUBDrm",
2046 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002047
2048def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
2049 let Latency = 9;
2050 let NumMicroOps = 4;
2051 let ResourceCycles = [1,1,1,1];
2052}
Craig Topperfc179c62018-03-22 04:23:41 +00002053def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
2054 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002055
2056def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2057 let Latency = 9;
2058 let NumMicroOps = 5;
2059 let ResourceCycles = [1,2,1,1];
2060}
Craig Topperfc179c62018-03-22 04:23:41 +00002061def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
2062 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002063
2064def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2065 let Latency = 10;
2066 let NumMicroOps = 2;
2067 let ResourceCycles = [1,1];
2068}
Simon Pilgrim7684e052018-03-22 13:18:08 +00002069def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002070 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002071
2072def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2073 let Latency = 10;
2074 let NumMicroOps = 2;
2075 let ResourceCycles = [1,1];
2076}
Craig Topperfc179c62018-03-22 04:23:41 +00002077def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
2078 "ADD_F64m",
2079 "ILD_F16m",
2080 "ILD_F32m",
2081 "ILD_F64m",
2082 "SUBR_F32m",
2083 "SUBR_F64m",
2084 "SUB_F32m",
2085 "SUB_F64m",
2086 "VPCMPGTQYrm",
2087 "VPERM2F128rm",
2088 "VPERM2I128rm",
2089 "VPERMDYrm",
2090 "VPERMPDYmi",
2091 "VPERMPSYrm",
2092 "VPERMQYmi",
2093 "VPMOVZXBDYrm",
2094 "VPMOVZXBQYrm",
2095 "VPMOVZXBWYrm",
2096 "VPMOVZXDQYrm",
2097 "VPMOVZXWQYrm",
2098 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002099
2100def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2101 let Latency = 10;
2102 let NumMicroOps = 2;
2103 let ResourceCycles = [1,1];
2104}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002105def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
2106 "(V?)ADDPSrm",
2107 "(V?)ADDSUBPDrm",
2108 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002109 "(V?)CVTDQ2PSrm",
2110 "(V?)CVTPH2PSYrm",
2111 "(V?)CVTPS2DQrm",
2112 "(V?)CVTSS2SDrm",
2113 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002114 "(V?)MULPDrm",
2115 "(V?)MULPSrm",
2116 "(V?)PHMINPOSUWrm",
2117 "(V?)PMADDUBSWrm",
2118 "(V?)PMADDWDrm",
2119 "(V?)PMULDQrm",
2120 "(V?)PMULHRSWrm",
2121 "(V?)PMULHUWrm",
2122 "(V?)PMULHWrm",
2123 "(V?)PMULLWrm",
2124 "(V?)PMULUDQrm",
2125 "(V?)SUBPDrm",
2126 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00002127def: InstRW<[SKLWriteResGroup134],
2128 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002129
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002130def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2131 let Latency = 10;
2132 let NumMicroOps = 3;
2133 let ResourceCycles = [2,1];
2134}
Craig Topperfc179c62018-03-22 04:23:41 +00002135def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002136
2137def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2138 let Latency = 10;
2139 let NumMicroOps = 3;
2140 let ResourceCycles = [1,1,1];
2141}
Craig Topperfc179c62018-03-22 04:23:41 +00002142def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2143 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002144
Craig Topper58afb4e2018-03-22 21:10:07 +00002145def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002146 let Latency = 10;
2147 let NumMicroOps = 3;
2148 let ResourceCycles = [1,1,1];
2149}
Craig Topperfc179c62018-03-22 04:23:41 +00002150def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002151
2152def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002153 let Latency = 10;
2154 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002155 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002156}
Craig Topperfc179c62018-03-22 04:23:41 +00002157def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2158 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002159
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002160def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2161 let Latency = 10;
2162 let NumMicroOps = 4;
2163 let ResourceCycles = [2,1,1];
2164}
Craig Topperfc179c62018-03-22 04:23:41 +00002165def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2166 "VPHADDWYrm",
2167 "VPHSUBDYrm",
2168 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002169
2170def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002171 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002172 let NumMicroOps = 4;
2173 let ResourceCycles = [1,1,1,1];
2174}
Craig Topperf846e2d2018-04-19 05:34:05 +00002175def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002176
2177def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2178 let Latency = 10;
2179 let NumMicroOps = 8;
2180 let ResourceCycles = [1,1,1,1,1,3];
2181}
Craig Topper13a16502018-03-19 00:56:09 +00002182def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002183
2184def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002185 let Latency = 10;
2186 let NumMicroOps = 10;
2187 let ResourceCycles = [9,1];
2188}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002189def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002190
Craig Topper8104f262018-04-02 05:33:28 +00002191def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002192 let Latency = 11;
2193 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002194 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002195}
Craig Topper8104f262018-04-02 05:33:28 +00002196def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002197 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002198
Craig Topper8104f262018-04-02 05:33:28 +00002199def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2200 let Latency = 11;
2201 let NumMicroOps = 1;
2202 let ResourceCycles = [1,5];
2203}
2204def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
2205
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002206def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002207 let Latency = 11;
2208 let NumMicroOps = 2;
2209 let ResourceCycles = [1,1];
2210}
Craig Topperfc179c62018-03-22 04:23:41 +00002211def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2212 "MUL_F64m",
2213 "VRCPPSYm",
2214 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002215
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002216def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2217 let Latency = 11;
2218 let NumMicroOps = 2;
2219 let ResourceCycles = [1,1];
2220}
Craig Topperfc179c62018-03-22 04:23:41 +00002221def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2222 "VADDPSYrm",
2223 "VADDSUBPDYrm",
2224 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002225 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002226 "VCMPPSYrmi",
2227 "VCVTDQ2PSYrm",
2228 "VCVTPS2DQYrm",
2229 "VCVTPS2PDYrm",
2230 "VCVTTPS2DQYrm",
2231 "VMAX(C?)PDYrm",
2232 "VMAX(C?)PSYrm",
2233 "VMIN(C?)PDYrm",
2234 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002235 "VMULPDYrm",
2236 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002237 "VPMADDUBSWYrm",
2238 "VPMADDWDYrm",
2239 "VPMULDQYrm",
2240 "VPMULHRSWYrm",
2241 "VPMULHUWYrm",
2242 "VPMULHWYrm",
2243 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002244 "VPMULUDQYrm",
2245 "VSUBPDYrm",
2246 "VSUBPSYrm")>;
2247def: InstRW<[SKLWriteResGroup147],
2248 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002249
2250def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2251 let Latency = 11;
2252 let NumMicroOps = 3;
2253 let ResourceCycles = [2,1];
2254}
Craig Topperfc179c62018-03-22 04:23:41 +00002255def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2256 "FICOM32m",
2257 "FICOMP16m",
2258 "FICOMP32m",
2259 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002260
2261def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2262 let Latency = 11;
2263 let NumMicroOps = 3;
2264 let ResourceCycles = [1,1,1];
2265}
Craig Topperfc179c62018-03-22 04:23:41 +00002266def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002267
Craig Topper58afb4e2018-03-22 21:10:07 +00002268def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002269 let Latency = 11;
2270 let NumMicroOps = 3;
2271 let ResourceCycles = [1,1,1];
2272}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002273def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2274 "(V?)CVTSD2SIrm",
2275 "(V?)CVTSS2SI64rm",
2276 "(V?)CVTSS2SIrm",
2277 "(V?)CVTTSD2SI64rm",
2278 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002279 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002280 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002281
Craig Topper58afb4e2018-03-22 21:10:07 +00002282def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002283 let Latency = 11;
2284 let NumMicroOps = 3;
2285 let ResourceCycles = [1,1,1];
2286}
Craig Topperfc179c62018-03-22 04:23:41 +00002287def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2288 "CVTPD2PSrm",
2289 "CVTTPD2DQrm",
2290 "MMX_CVTPD2PIirm",
2291 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002292
2293def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2294 let Latency = 11;
2295 let NumMicroOps = 6;
2296 let ResourceCycles = [1,1,1,2,1];
2297}
Craig Topperfc179c62018-03-22 04:23:41 +00002298def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2299 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002300
2301def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002302 let Latency = 11;
2303 let NumMicroOps = 7;
2304 let ResourceCycles = [2,3,2];
2305}
Craig Topperfc179c62018-03-22 04:23:41 +00002306def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2307 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002308
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002309def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002310 let Latency = 11;
2311 let NumMicroOps = 9;
2312 let ResourceCycles = [1,5,1,2];
2313}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002314def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002315
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002316def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002317 let Latency = 11;
2318 let NumMicroOps = 11;
2319 let ResourceCycles = [2,9];
2320}
Craig Topperfc179c62018-03-22 04:23:41 +00002321def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002322
Craig Topper8104f262018-04-02 05:33:28 +00002323def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002324 let Latency = 12;
2325 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002326 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002327}
Craig Topper8104f262018-04-02 05:33:28 +00002328def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002329 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002330
Craig Topper8104f262018-04-02 05:33:28 +00002331def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2332 let Latency = 12;
2333 let NumMicroOps = 1;
2334 let ResourceCycles = [1,6];
2335}
2336def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2337
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002338def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2339 let Latency = 12;
2340 let NumMicroOps = 4;
2341 let ResourceCycles = [2,1,1];
2342}
Craig Topperfc179c62018-03-22 04:23:41 +00002343def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2344 "(V?)HADDPSrm",
2345 "(V?)HSUBPDrm",
2346 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002347
Craig Topper58afb4e2018-03-22 21:10:07 +00002348def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002349 let Latency = 12;
2350 let NumMicroOps = 4;
2351 let ResourceCycles = [1,1,1,1];
2352}
2353def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2354
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002355def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002356 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002357 let NumMicroOps = 3;
2358 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002359}
Craig Topperfc179c62018-03-22 04:23:41 +00002360def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2361 "ADD_FI32m",
2362 "SUBR_FI16m",
2363 "SUBR_FI32m",
2364 "SUB_FI16m",
2365 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002366
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002367def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2368 let Latency = 13;
2369 let NumMicroOps = 3;
2370 let ResourceCycles = [1,1,1];
2371}
2372def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2373
Craig Topper58afb4e2018-03-22 21:10:07 +00002374def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002375 let Latency = 13;
2376 let NumMicroOps = 4;
2377 let ResourceCycles = [1,3];
2378}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002379def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002380
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002381def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002382 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002383 let NumMicroOps = 4;
2384 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002385}
Craig Topperfc179c62018-03-22 04:23:41 +00002386def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2387 "VHADDPSYrm",
2388 "VHSUBPDYrm",
2389 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002390
Craig Topper8104f262018-04-02 05:33:28 +00002391def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002392 let Latency = 14;
2393 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002394 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002395}
Craig Topper8104f262018-04-02 05:33:28 +00002396def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002397 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002398
Craig Topper8104f262018-04-02 05:33:28 +00002399def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2400 let Latency = 14;
2401 let NumMicroOps = 1;
2402 let ResourceCycles = [1,5];
2403}
2404def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2405
Craig Topper58afb4e2018-03-22 21:10:07 +00002406def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002407 let Latency = 14;
2408 let NumMicroOps = 3;
2409 let ResourceCycles = [1,2];
2410}
Craig Topperfc179c62018-03-22 04:23:41 +00002411def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2412def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2413def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2414def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002415
2416def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2417 let Latency = 14;
2418 let NumMicroOps = 3;
2419 let ResourceCycles = [1,1,1];
2420}
Craig Topperfc179c62018-03-22 04:23:41 +00002421def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2422 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002423
2424def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002425 let Latency = 14;
2426 let NumMicroOps = 10;
2427 let ResourceCycles = [2,4,1,3];
2428}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002429def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002430
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002431def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002432 let Latency = 15;
2433 let NumMicroOps = 1;
2434 let ResourceCycles = [1];
2435}
Craig Topperfc179c62018-03-22 04:23:41 +00002436def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2437 "DIVR_FST0r",
2438 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002439
Craig Topper58afb4e2018-03-22 21:10:07 +00002440def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002441 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002442 let NumMicroOps = 3;
2443 let ResourceCycles = [1,2];
2444}
Craig Topper40d3b322018-03-22 21:55:20 +00002445def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2446 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002447
Craig Topperd25f1ac2018-03-20 23:39:48 +00002448def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2449 let Latency = 17;
2450 let NumMicroOps = 3;
2451 let ResourceCycles = [1,2];
2452}
2453def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2454
Craig Topper58afb4e2018-03-22 21:10:07 +00002455def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002456 let Latency = 15;
2457 let NumMicroOps = 4;
2458 let ResourceCycles = [1,1,2];
2459}
Craig Topperfc179c62018-03-22 04:23:41 +00002460def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002461
2462def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2463 let Latency = 15;
2464 let NumMicroOps = 10;
2465 let ResourceCycles = [1,1,1,5,1,1];
2466}
Craig Topper13a16502018-03-19 00:56:09 +00002467def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002468
Craig Topper8104f262018-04-02 05:33:28 +00002469def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002470 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002471 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002472 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002473}
Craig Topperfc179c62018-03-22 04:23:41 +00002474def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002475
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002476def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2477 let Latency = 16;
2478 let NumMicroOps = 14;
2479 let ResourceCycles = [1,1,1,4,2,5];
2480}
2481def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2482
2483def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002484 let Latency = 16;
2485 let NumMicroOps = 16;
2486 let ResourceCycles = [16];
2487}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002488def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002489
Craig Topper8104f262018-04-02 05:33:28 +00002490def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002491 let Latency = 17;
2492 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002493 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002494}
Craig Topper8104f262018-04-02 05:33:28 +00002495def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2496
2497def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2498 let Latency = 17;
2499 let NumMicroOps = 2;
2500 let ResourceCycles = [1,1,3];
2501}
2502def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002503
2504def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002505 let Latency = 17;
2506 let NumMicroOps = 15;
2507 let ResourceCycles = [2,1,2,4,2,4];
2508}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002509def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002510
Craig Topper8104f262018-04-02 05:33:28 +00002511def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002512 let Latency = 18;
2513 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002514 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002515}
Craig Topper8104f262018-04-02 05:33:28 +00002516def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002517 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002518
Craig Topper8104f262018-04-02 05:33:28 +00002519def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2520 let Latency = 18;
2521 let NumMicroOps = 1;
2522 let ResourceCycles = [1,12];
2523}
2524def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2525
2526def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002527 let Latency = 18;
2528 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002529 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002530}
Craig Topper8104f262018-04-02 05:33:28 +00002531def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2532
2533def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2534 let Latency = 18;
2535 let NumMicroOps = 2;
2536 let ResourceCycles = [1,1,3];
2537}
2538def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002539
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002540def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002541 let Latency = 18;
2542 let NumMicroOps = 8;
2543 let ResourceCycles = [1,1,1,5];
2544}
Craig Topperfc179c62018-03-22 04:23:41 +00002545def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002546
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002547def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002548 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002549 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002550 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002551}
Craig Topper13a16502018-03-19 00:56:09 +00002552def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002553
Craig Topper8104f262018-04-02 05:33:28 +00002554def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002555 let Latency = 19;
2556 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002557 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002558}
Craig Topper8104f262018-04-02 05:33:28 +00002559def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2560
2561def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2562 let Latency = 19;
2563 let NumMicroOps = 2;
2564 let ResourceCycles = [1,1,6];
2565}
2566def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002567
Craig Topper58afb4e2018-03-22 21:10:07 +00002568def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002569 let Latency = 19;
2570 let NumMicroOps = 5;
2571 let ResourceCycles = [1,1,3];
2572}
Craig Topperfc179c62018-03-22 04:23:41 +00002573def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002574
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002575def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002576 let Latency = 20;
2577 let NumMicroOps = 1;
2578 let ResourceCycles = [1];
2579}
Craig Topperfc179c62018-03-22 04:23:41 +00002580def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2581 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002582 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002583
Craig Topper8104f262018-04-02 05:33:28 +00002584def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002585 let Latency = 20;
2586 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002587 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002588}
Craig Topperfc179c62018-03-22 04:23:41 +00002589def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002590
Craig Topper58afb4e2018-03-22 21:10:07 +00002591def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002592 let Latency = 20;
2593 let NumMicroOps = 5;
2594 let ResourceCycles = [1,1,3];
2595}
2596def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2597
2598def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2599 let Latency = 20;
2600 let NumMicroOps = 8;
2601 let ResourceCycles = [1,1,1,1,1,1,2];
2602}
Craig Topperfc179c62018-03-22 04:23:41 +00002603def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2604 "INSL",
2605 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002606
2607def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002608 let Latency = 20;
2609 let NumMicroOps = 10;
2610 let ResourceCycles = [1,2,7];
2611}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002612def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002613
Craig Topper8104f262018-04-02 05:33:28 +00002614def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002615 let Latency = 21;
2616 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002617 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002618}
2619def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2620
2621def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2622 let Latency = 22;
2623 let NumMicroOps = 2;
2624 let ResourceCycles = [1,1];
2625}
Craig Topperfc179c62018-03-22 04:23:41 +00002626def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2627 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002628
2629def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2630 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002631 let NumMicroOps = 5;
2632 let ResourceCycles = [1,2,1,1];
2633}
Craig Topper17a31182017-12-16 18:35:29 +00002634def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2635 VGATHERDPDrm,
2636 VGATHERQPDrm,
2637 VGATHERQPSrm,
2638 VPGATHERDDrm,
2639 VPGATHERDQrm,
2640 VPGATHERQDrm,
2641 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002642
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002643def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2644 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002645 let NumMicroOps = 5;
2646 let ResourceCycles = [1,2,1,1];
2647}
Craig Topper17a31182017-12-16 18:35:29 +00002648def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2649 VGATHERQPDYrm,
2650 VGATHERQPSYrm,
2651 VPGATHERDDYrm,
2652 VPGATHERDQYrm,
2653 VPGATHERQDYrm,
2654 VPGATHERQQYrm,
2655 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002656
Craig Topper8104f262018-04-02 05:33:28 +00002657def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002658 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002659 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002660 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002661}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002662def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002663
2664def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2665 let Latency = 23;
2666 let NumMicroOps = 19;
2667 let ResourceCycles = [2,1,4,1,1,4,6];
2668}
2669def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2670
Craig Topper8104f262018-04-02 05:33:28 +00002671def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002672 let Latency = 24;
2673 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002674 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002675}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002676def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002677
Craig Topper8104f262018-04-02 05:33:28 +00002678def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002679 let Latency = 25;
2680 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002681 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002682}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002683def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002684
2685def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2686 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002687 let NumMicroOps = 3;
2688 let ResourceCycles = [1,1,1];
2689}
Craig Topperfc179c62018-03-22 04:23:41 +00002690def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2691 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002692
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002693def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2694 let Latency = 27;
2695 let NumMicroOps = 2;
2696 let ResourceCycles = [1,1];
2697}
Craig Topperfc179c62018-03-22 04:23:41 +00002698def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2699 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002700
2701def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2702 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002703 let NumMicroOps = 8;
2704 let ResourceCycles = [2,4,1,1];
2705}
Craig Topper13a16502018-03-19 00:56:09 +00002706def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002707
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002708def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002709 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002710 let NumMicroOps = 3;
2711 let ResourceCycles = [1,1,1];
2712}
Craig Topperfc179c62018-03-22 04:23:41 +00002713def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2714 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002715
2716def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2717 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002718 let NumMicroOps = 23;
2719 let ResourceCycles = [1,5,3,4,10];
2720}
Craig Topperfc179c62018-03-22 04:23:41 +00002721def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2722 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002723
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002724def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2725 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002726 let NumMicroOps = 23;
2727 let ResourceCycles = [1,5,2,1,4,10];
2728}
Craig Topperfc179c62018-03-22 04:23:41 +00002729def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2730 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002731
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002732def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2733 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002734 let NumMicroOps = 31;
2735 let ResourceCycles = [1,8,1,21];
2736}
Craig Topper391c6f92017-12-10 01:24:08 +00002737def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002738
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002739def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2740 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002741 let NumMicroOps = 18;
2742 let ResourceCycles = [1,1,2,3,1,1,1,8];
2743}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002744def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002745
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002746def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2747 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002748 let NumMicroOps = 39;
2749 let ResourceCycles = [1,10,1,1,26];
2750}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002751def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002752
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002753def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002754 let Latency = 42;
2755 let NumMicroOps = 22;
2756 let ResourceCycles = [2,20];
2757}
Craig Topper2d451e72018-03-18 08:38:06 +00002758def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002759
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002760def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2761 let Latency = 42;
2762 let NumMicroOps = 40;
2763 let ResourceCycles = [1,11,1,1,26];
2764}
Craig Topper391c6f92017-12-10 01:24:08 +00002765def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002766
2767def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2768 let Latency = 46;
2769 let NumMicroOps = 44;
2770 let ResourceCycles = [1,11,1,1,30];
2771}
2772def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2773
2774def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2775 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002776 let NumMicroOps = 64;
2777 let ResourceCycles = [2,8,5,10,39];
2778}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002779def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002780
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002781def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2782 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002783 let NumMicroOps = 88;
2784 let ResourceCycles = [4,4,31,1,2,1,45];
2785}
Craig Topper2d451e72018-03-18 08:38:06 +00002786def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002787
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002788def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2789 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002790 let NumMicroOps = 90;
2791 let ResourceCycles = [4,2,33,1,2,1,47];
2792}
Craig Topper2d451e72018-03-18 08:38:06 +00002793def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002794
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002795def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002796 let Latency = 75;
2797 let NumMicroOps = 15;
2798 let ResourceCycles = [6,3,6];
2799}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002800def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002801
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002802def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002803 let Latency = 76;
2804 let NumMicroOps = 32;
2805 let ResourceCycles = [7,2,8,3,1,11];
2806}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002807def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002808
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002809def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002810 let Latency = 102;
2811 let NumMicroOps = 66;
2812 let ResourceCycles = [4,2,4,8,14,34];
2813}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002814def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002815
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002816def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2817 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002818 let NumMicroOps = 100;
2819 let ResourceCycles = [9,1,11,16,1,11,21,30];
2820}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002821def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002822
2823} // SchedModel