blob: d09e6707eddf17bd33a058e85ecbd275329c2bfc [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.
163defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000164defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1>; // Floating point vector blends.
166defm : SKLWriteResPair<WriteFVarBlend, [SKLPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000167
168// FMA Scheduling helper class.
169// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
170
171// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000172def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
173def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
174def : WriteRes<WriteVecMove, [SKLPort015]>;
175
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000176defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
177defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
178defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000179defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000181defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000182defm : SKLWriteResPair<WriteBlend, [SKLPort15], 1>; // Vector blends.
183defm : SKLWriteResPair<WriteVarBlend, [SKLPort5], 2, [2]>; // Vector variable blends.
184defm : SKLWriteResPair<WriteMPSAD, [SKLPort0, SKLPort5], 6, [1, 2]>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000185defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000186
187// Vector bitwise operations.
188// These are often used on both floating point and integer vectors.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000189defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1>; // Vector and/or/xor.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190
191// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000192defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
193defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
194defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000195
196// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000197
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000198// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000199def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
200 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000201 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000202 let ResourceCycles = [3];
203}
204def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000205 let Latency = 16;
206 let NumMicroOps = 4;
207 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000208}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000209
210// Packed Compare Explicit Length Strings, Return Mask
211def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
212 let Latency = 19;
213 let NumMicroOps = 9;
214 let ResourceCycles = [4,3,1,1];
215}
216def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
217 let Latency = 25;
218 let NumMicroOps = 10;
219 let ResourceCycles = [4,3,1,1,1];
220}
221
222// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000223def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000224 let Latency = 10;
225 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000226 let ResourceCycles = [3];
227}
228def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229 let Latency = 16;
230 let NumMicroOps = 4;
231 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000232}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000233
234// Packed Compare Explicit Length Strings, Return Index
235def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
236 let Latency = 18;
237 let NumMicroOps = 8;
238 let ResourceCycles = [4,3,1];
239}
240def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
241 let Latency = 24;
242 let NumMicroOps = 9;
243 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000244}
245
Simon Pilgrima2f26782018-03-27 20:38:54 +0000246// MOVMSK Instructions.
247def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
248def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
249def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
250
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000251// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000252def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
253 let Latency = 4;
254 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000255 let ResourceCycles = [1];
256}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000257def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
258 let Latency = 10;
259 let NumMicroOps = 2;
260 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000261}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000262
263def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
264 let Latency = 8;
265 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000266 let ResourceCycles = [2];
267}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000268def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000269 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000270 let NumMicroOps = 3;
271 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000272}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000273
274def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
275 let Latency = 20;
276 let NumMicroOps = 11;
277 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000278}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000279def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
280 let Latency = 25;
281 let NumMicroOps = 11;
282 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000283}
284
285// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000286def : WriteRes<WriteCLMul, [SKLPort5]> {
287 let Latency = 6;
288 let NumMicroOps = 1;
289 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000290}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000291def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
292 let Latency = 12;
293 let NumMicroOps = 2;
294 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000295}
296
297// Catch-all for expensive system instructions.
298def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
299
300// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000301defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000302defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000303defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000304defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000305defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000306
307// Old microcoded instructions that nobody use.
308def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
309
310// Fence instructions.
311def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
312
313// Nop, not very useful expect it provides a model for nops!
314def : WriteRes<WriteNop, []>;
315
316////////////////////////////////////////////////////////////////////////////////
317// Horizontal add/sub instructions.
318////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000319
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000320defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
321defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000322
323// Remaining instrs.
324
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000325def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000326 let Latency = 1;
327 let NumMicroOps = 1;
328 let ResourceCycles = [1];
329}
Craig Topperfc179c62018-03-22 04:23:41 +0000330def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
331 "MMX_PADDSWirr",
332 "MMX_PADDUSBirr",
333 "MMX_PADDUSWirr",
334 "MMX_PAVGBirr",
335 "MMX_PAVGWirr",
336 "MMX_PCMPEQBirr",
337 "MMX_PCMPEQDirr",
338 "MMX_PCMPEQWirr",
339 "MMX_PCMPGTBirr",
340 "MMX_PCMPGTDirr",
341 "MMX_PCMPGTWirr",
342 "MMX_PMAXSWirr",
343 "MMX_PMAXUBirr",
344 "MMX_PMINSWirr",
345 "MMX_PMINUBirr",
346 "MMX_PSLLDri",
347 "MMX_PSLLDrr",
348 "MMX_PSLLQri",
349 "MMX_PSLLQrr",
350 "MMX_PSLLWri",
351 "MMX_PSLLWrr",
352 "MMX_PSRADri",
353 "MMX_PSRADrr",
354 "MMX_PSRAWri",
355 "MMX_PSRAWrr",
356 "MMX_PSRLDri",
357 "MMX_PSRLDrr",
358 "MMX_PSRLQri",
359 "MMX_PSRLQrr",
360 "MMX_PSRLWri",
361 "MMX_PSRLWrr",
362 "MMX_PSUBSBirr",
363 "MMX_PSUBSWirr",
364 "MMX_PSUBUSBirr",
365 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000366
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000367def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000368 let Latency = 1;
369 let NumMicroOps = 1;
370 let ResourceCycles = [1];
371}
Craig Topperfc179c62018-03-22 04:23:41 +0000372def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
373 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000374 "MMX_MOVD64rr",
375 "MMX_MOVD64to64rr",
376 "MMX_PALIGNRrri",
Craig Topperfc179c62018-03-22 04:23:41 +0000377 "MMX_PSHUFWri",
378 "MMX_PUNPCKHBWirr",
379 "MMX_PUNPCKHDQirr",
380 "MMX_PUNPCKHWDirr",
381 "MMX_PUNPCKLBWirr",
382 "MMX_PUNPCKLDQirr",
383 "MMX_PUNPCKLWDirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000384 "UCOM_FPr",
385 "UCOM_Fr",
Craig Topperfc179c62018-03-22 04:23:41 +0000386 "VBROADCASTSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000387 "(V?)INSERTPSrr",
388 "(V?)MOV64toPQIrr",
389 "(V?)MOVDDUP(Y?)rr",
390 "(V?)MOVDI2PDIrr",
391 "(V?)MOVHLPSrr",
392 "(V?)MOVLHPSrr",
393 "(V?)MOVSDrr",
394 "(V?)MOVSHDUP(Y?)rr",
395 "(V?)MOVSLDUP(Y?)rr",
Craig Topper15fef892018-03-25 23:40:56 +0000396 "(V?)MOVSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000397 "(V?)PACKSSDW(Y?)rr",
398 "(V?)PACKSSWB(Y?)rr",
399 "(V?)PACKUSDW(Y?)rr",
400 "(V?)PACKUSWB(Y?)rr",
401 "(V?)PALIGNR(Y?)rri",
402 "(V?)PBLENDW(Y?)rri",
Craig Topperfc179c62018-03-22 04:23:41 +0000403 "VPBROADCASTDrr",
404 "VPBROADCASTQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000405 "VPERMILPD(Y?)ri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000406 "VPERMILPS(Y?)ri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000407 "(V?)PMOVSXBDrr",
408 "(V?)PMOVSXBQrr",
409 "(V?)PMOVSXBWrr",
410 "(V?)PMOVSXDQrr",
411 "(V?)PMOVSXWDrr",
412 "(V?)PMOVSXWQrr",
413 "(V?)PMOVZXBDrr",
414 "(V?)PMOVZXBQrr",
415 "(V?)PMOVZXBWrr",
416 "(V?)PMOVZXDQrr",
417 "(V?)PMOVZXWDrr",
418 "(V?)PMOVZXWQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000419 "(V?)PSHUFD(Y?)ri",
420 "(V?)PSHUFHW(Y?)ri",
421 "(V?)PSHUFLW(Y?)ri",
422 "(V?)PSLLDQ(Y?)ri",
423 "(V?)PSRLDQ(Y?)ri",
424 "(V?)PUNPCKHBW(Y?)rr",
425 "(V?)PUNPCKHDQ(Y?)rr",
426 "(V?)PUNPCKHQDQ(Y?)rr",
427 "(V?)PUNPCKHWD(Y?)rr",
428 "(V?)PUNPCKLBW(Y?)rr",
429 "(V?)PUNPCKLDQ(Y?)rr",
430 "(V?)PUNPCKLQDQ(Y?)rr",
431 "(V?)PUNPCKLWD(Y?)rr",
432 "(V?)SHUFPD(Y?)rri",
433 "(V?)SHUFPS(Y?)rri",
434 "(V?)UNPCKHPD(Y?)rr",
435 "(V?)UNPCKHPS(Y?)rr",
436 "(V?)UNPCKLPD(Y?)rr",
437 "(V?)UNPCKLPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000438
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000439def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000440 let Latency = 1;
441 let NumMicroOps = 1;
442 let ResourceCycles = [1];
443}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000444def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000445
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000446def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000447 let Latency = 1;
448 let NumMicroOps = 1;
449 let ResourceCycles = [1];
450}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000451def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
452 "(V?)PABSD(Y?)rr",
453 "(V?)PABSW(Y?)rr",
454 "(V?)PADDSB(Y?)rr",
455 "(V?)PADDSW(Y?)rr",
456 "(V?)PADDUSB(Y?)rr",
457 "(V?)PADDUSW(Y?)rr",
458 "(V?)PAVGB(Y?)rr",
459 "(V?)PAVGW(Y?)rr",
460 "(V?)PCMPEQB(Y?)rr",
461 "(V?)PCMPEQD(Y?)rr",
462 "(V?)PCMPEQQ(Y?)rr",
463 "(V?)PCMPEQW(Y?)rr",
464 "(V?)PCMPGTB(Y?)rr",
465 "(V?)PCMPGTD(Y?)rr",
466 "(V?)PCMPGTW(Y?)rr",
467 "(V?)PMAXSB(Y?)rr",
468 "(V?)PMAXSD(Y?)rr",
469 "(V?)PMAXSW(Y?)rr",
470 "(V?)PMAXUB(Y?)rr",
471 "(V?)PMAXUD(Y?)rr",
472 "(V?)PMAXUW(Y?)rr",
473 "(V?)PMINSB(Y?)rr",
474 "(V?)PMINSD(Y?)rr",
475 "(V?)PMINSW(Y?)rr",
476 "(V?)PMINUB(Y?)rr",
477 "(V?)PMINUD(Y?)rr",
478 "(V?)PMINUW(Y?)rr",
479 "(V?)PSIGNB(Y?)rr",
480 "(V?)PSIGND(Y?)rr",
481 "(V?)PSIGNW(Y?)rr",
482 "(V?)PSLLD(Y?)ri",
483 "(V?)PSLLQ(Y?)ri",
484 "VPSLLVD(Y?)rr",
485 "VPSLLVQ(Y?)rr",
486 "(V?)PSLLW(Y?)ri",
487 "(V?)PSRAD(Y?)ri",
488 "VPSRAVD(Y?)rr",
489 "(V?)PSRAW(Y?)ri",
490 "(V?)PSRLD(Y?)ri",
491 "(V?)PSRLQ(Y?)ri",
492 "VPSRLVD(Y?)rr",
493 "VPSRLVQ(Y?)rr",
494 "(V?)PSRLW(Y?)ri",
495 "(V?)PSUBSB(Y?)rr",
496 "(V?)PSUBSW(Y?)rr",
497 "(V?)PSUBUSB(Y?)rr",
498 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000499
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000500def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000501 let Latency = 1;
502 let NumMicroOps = 1;
503 let ResourceCycles = [1];
504}
Craig Topperfc179c62018-03-22 04:23:41 +0000505def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
506 "FNOP",
507 "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000508 "MMX_PABS(B|D|W)rr",
509 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000510 "MMX_PANDNirr",
511 "MMX_PANDirr",
512 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000513 "MMX_PSIGN(B|D|W)rr",
514 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000515 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000516
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000517def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000518 let Latency = 1;
519 let NumMicroOps = 1;
520 let ResourceCycles = [1];
521}
Craig Topperfbe31322018-04-05 21:56:19 +0000522def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000523def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
524 "ADC(16|32|64)i",
525 "ADC(8|16|32|64)rr",
526 "ADCX(32|64)rr",
527 "ADOX(32|64)rr",
528 "BT(16|32|64)ri8",
529 "BT(16|32|64)rr",
530 "BTC(16|32|64)ri8",
531 "BTC(16|32|64)rr",
532 "BTR(16|32|64)ri8",
533 "BTR(16|32|64)rr",
534 "BTS(16|32|64)ri8",
535 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000536 "CLAC",
Craig Topperfc179c62018-03-22 04:23:41 +0000537 "RORX(32|64)ri",
538 "SAR(8|16|32|64)r1",
539 "SAR(8|16|32|64)ri",
540 "SARX(32|64)rr",
541 "SBB(16|32|64)ri",
542 "SBB(16|32|64)i",
543 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000544 "SHL(8|16|32|64)r1",
545 "SHL(8|16|32|64)ri",
546 "SHLX(32|64)rr",
547 "SHR(8|16|32|64)r1",
548 "SHR(8|16|32|64)ri",
549 "SHRX(32|64)rr",
550 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000551
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000552def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
553 let Latency = 1;
554 let NumMicroOps = 1;
555 let ResourceCycles = [1];
556}
Craig Topperfc179c62018-03-22 04:23:41 +0000557def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
558 "BLSI(32|64)rr",
559 "BLSMSK(32|64)rr",
560 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000561 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000562
563def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
564 let Latency = 1;
565 let NumMicroOps = 1;
566 let ResourceCycles = [1];
567}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000568def: InstRW<[SKLWriteResGroup9], (instregex "(V?)ANDNPD(Y?)rr",
569 "(V?)ANDNPS(Y?)rr",
570 "(V?)ANDPD(Y?)rr",
571 "(V?)ANDPS(Y?)rr",
572 "(V?)BLENDPD(Y?)rri",
573 "(V?)BLENDPS(Y?)rri",
574 "(V?)MOVAPD(Y?)rr",
575 "(V?)MOVAPS(Y?)rr",
576 "(V?)MOVDQA(Y?)rr",
577 "(V?)MOVDQU(Y?)rr",
578 "(V?)MOVPQI2QIrr",
Craig Topper15fef892018-03-25 23:40:56 +0000579 "(V?)MOVUPD(Y?)rr",
580 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000581 "(V?)MOVZPQILo2PQIrr",
582 "(V?)ORPD(Y?)rr",
583 "(V?)ORPS(Y?)rr",
584 "(V?)PADDB(Y?)rr",
585 "(V?)PADDD(Y?)rr",
586 "(V?)PADDQ(Y?)rr",
587 "(V?)PADDW(Y?)rr",
588 "(V?)PANDN(Y?)rr",
589 "(V?)PAND(Y?)rr",
590 "VPBLENDD(Y?)rri",
591 "(V?)POR(Y?)rr",
592 "(V?)PSUBB(Y?)rr",
593 "(V?)PSUBD(Y?)rr",
594 "(V?)PSUBQ(Y?)rr",
595 "(V?)PSUBW(Y?)rr",
596 "(V?)PXOR(Y?)rr",
Simon Pilgrimfecb0b72018-03-25 19:17:17 +0000597 "(V?)XORPD(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000598 "(V?)XORPS(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000599
600def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
601 let Latency = 1;
602 let NumMicroOps = 1;
603 let ResourceCycles = [1];
604}
Craig Topperfbe31322018-04-05 21:56:19 +0000605def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000606def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000607 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000608 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000609 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000610 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000611 "SGDT64m",
612 "SIDT64m",
613 "SLDT64m",
614 "SMSW16m",
615 "STC",
616 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000617 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000618
619def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000620 let Latency = 1;
621 let NumMicroOps = 2;
622 let ResourceCycles = [1,1];
623}
Craig Topperfc179c62018-03-22 04:23:41 +0000624def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
625 "MMX_MOVD64from64rm",
626 "MMX_MOVD64mr",
627 "MMX_MOVNTQmr",
628 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000629 "MOVNTI_64mr",
630 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000631 "ST_FP32m",
632 "ST_FP64m",
633 "ST_FP80m",
634 "VEXTRACTF128mr",
635 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000636 "(V?)MOVAPDYmr",
637 "(V?)MOVAPS(Y?)mr",
638 "(V?)MOVDQA(Y?)mr",
639 "(V?)MOVDQU(Y?)mr",
640 "(V?)MOVHPDmr",
641 "(V?)MOVHPSmr",
642 "(V?)MOVLPDmr",
643 "(V?)MOVLPSmr",
644 "(V?)MOVNTDQ(Y?)mr",
645 "(V?)MOVNTPD(Y?)mr",
646 "(V?)MOVNTPS(Y?)mr",
647 "(V?)MOVPDI2DImr",
648 "(V?)MOVPQI2QImr",
649 "(V?)MOVPQIto64mr",
650 "(V?)MOVSDmr",
651 "(V?)MOVSSmr",
652 "(V?)MOVUPD(Y?)mr",
653 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000654 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000655
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000656def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000657 let Latency = 2;
658 let NumMicroOps = 1;
659 let ResourceCycles = [1];
660}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000661def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000662 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000663 "(V?)MOVPDI2DIrr",
664 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000665 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000666 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000667
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000668def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000669 let Latency = 2;
670 let NumMicroOps = 2;
671 let ResourceCycles = [2];
672}
Craig Topperfc179c62018-03-22 04:23:41 +0000673def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
674 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000675 "(V?)PINSRBrr",
676 "(V?)PINSRDrr",
677 "(V?)PINSRQrr",
678 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000679
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000680def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000681 let Latency = 2;
682 let NumMicroOps = 2;
683 let ResourceCycles = [2];
684}
Craig Topperfc179c62018-03-22 04:23:41 +0000685def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
686 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000687
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000688def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000689 let Latency = 2;
690 let NumMicroOps = 2;
691 let ResourceCycles = [2];
692}
Craig Topperfc179c62018-03-22 04:23:41 +0000693def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
694 "ROL(8|16|32|64)r1",
695 "ROL(8|16|32|64)ri",
696 "ROR(8|16|32|64)r1",
697 "ROR(8|16|32|64)ri",
698 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000699
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000700def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000701 let Latency = 2;
702 let NumMicroOps = 2;
703 let ResourceCycles = [2];
704}
Craig Topperfc179c62018-03-22 04:23:41 +0000705def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
706 "BLENDVPSrr0",
707 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000708 "VBLENDVPD(Y?)rr",
709 "VBLENDVPS(Y?)rr",
710 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000711
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000712def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000713 let Latency = 2;
714 let NumMicroOps = 2;
715 let ResourceCycles = [2];
716}
Craig Topperfc179c62018-03-22 04:23:41 +0000717def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
718 "WAIT",
719 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000720
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000721def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000722 let Latency = 2;
723 let NumMicroOps = 2;
724 let ResourceCycles = [1,1];
725}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000726def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
727 "VMASKMOVPS(Y?)mr",
728 "VPMASKMOVD(Y?)mr",
729 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000730
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000731def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000732 let Latency = 2;
733 let NumMicroOps = 2;
734 let ResourceCycles = [1,1];
735}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000736def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
737 "(V?)PSLLQrr",
738 "(V?)PSLLWrr",
739 "(V?)PSRADrr",
740 "(V?)PSRAWrr",
741 "(V?)PSRLDrr",
742 "(V?)PSRLQrr",
743 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000744
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000745def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000746 let Latency = 2;
747 let NumMicroOps = 2;
748 let ResourceCycles = [1,1];
749}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000750def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000751
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000752def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000753 let Latency = 2;
754 let NumMicroOps = 2;
755 let ResourceCycles = [1,1];
756}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000757def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000758
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000759def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000760 let Latency = 2;
761 let NumMicroOps = 2;
762 let ResourceCycles = [1,1];
763}
Craig Topper498875f2018-04-04 17:54:19 +0000764def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
765
766def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
767 let Latency = 1;
768 let NumMicroOps = 1;
769 let ResourceCycles = [1];
770}
771def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000772
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000773def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000774 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000775 let NumMicroOps = 2;
776 let ResourceCycles = [1,1];
777}
Craig Topper2d451e72018-03-18 08:38:06 +0000778def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000779def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000780def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
781 "ADC8ri",
782 "SBB8i8",
783 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000784
785def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
786 let Latency = 2;
787 let NumMicroOps = 3;
788 let ResourceCycles = [1,1,1];
789}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000790def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
791 "(V?)PEXTRBmr",
792 "(V?)PEXTRDmr",
793 "(V?)PEXTRQmr",
794 "(V?)PEXTRWmr",
795 "(V?)STMXCSR")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000796
797def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
798 let Latency = 2;
799 let NumMicroOps = 3;
800 let ResourceCycles = [1,1,1];
801}
802def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
803
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000804def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
805 let Latency = 2;
806 let NumMicroOps = 3;
807 let ResourceCycles = [1,1,1];
808}
809def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
810
811def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
812 let Latency = 2;
813 let NumMicroOps = 3;
814 let ResourceCycles = [1,1,1];
815}
Craig Topper2d451e72018-03-18 08:38:06 +0000816def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000817def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
818 "PUSH64i8",
819 "STOSB",
820 "STOSL",
821 "STOSQ",
822 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000823
824def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
825 let Latency = 3;
826 let NumMicroOps = 1;
827 let ResourceCycles = [1];
828}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000829def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000830 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000831 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000832 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000833
Clement Courbet327fac42018-03-07 08:14:02 +0000834def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000835 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000836 let NumMicroOps = 2;
837 let ResourceCycles = [1,1];
838}
Clement Courbet327fac42018-03-07 08:14:02 +0000839def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000840
841def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
842 let Latency = 3;
843 let NumMicroOps = 1;
844 let ResourceCycles = [1];
845}
Craig Topperfc179c62018-03-22 04:23:41 +0000846def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
847 "ADD_FST0r",
848 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000849 "SUBR_FPrST0",
850 "SUBR_FST0r",
851 "SUBR_FrST0",
852 "SUB_FPrST0",
853 "SUB_FST0r",
854 "SUB_FrST0",
855 "VBROADCASTSDYrr",
856 "VBROADCASTSSYrr",
857 "VEXTRACTF128rr",
858 "VEXTRACTI128rr",
859 "VINSERTF128rr",
860 "VINSERTI128rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000861 "VPBROADCASTB(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000862 "VPBROADCASTDYrr",
863 "VPBROADCASTQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000864 "VPBROADCASTW(Y?)rr",
865 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000866 "VPERM2F128rr",
867 "VPERM2I128rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000868 "VPERMPDYri",
Craig Topperfc179c62018-03-22 04:23:41 +0000869 "VPERMQYri",
870 "VPMOVSXBDYrr",
871 "VPMOVSXBQYrr",
872 "VPMOVSXBWYrr",
873 "VPMOVSXDQYrr",
874 "VPMOVSXWDYrr",
875 "VPMOVSXWQYrr",
876 "VPMOVZXBDYrr",
877 "VPMOVZXBQYrr",
878 "VPMOVZXBWYrr",
879 "VPMOVZXDQYrr",
880 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000881 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000882
883def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
884 let Latency = 3;
885 let NumMicroOps = 2;
886 let ResourceCycles = [1,1];
887}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000888def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
889 "(V?)EXTRACTPSrr",
890 "(V?)PEXTRBrr",
891 "(V?)PEXTRDrr",
892 "(V?)PEXTRQrr",
893 "(V?)PEXTRWrr",
894 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000895
896def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
897 let Latency = 3;
898 let NumMicroOps = 2;
899 let ResourceCycles = [1,1];
900}
901def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
902
903def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
904 let Latency = 3;
905 let NumMicroOps = 3;
906 let ResourceCycles = [3];
907}
Craig Topperfc179c62018-03-22 04:23:41 +0000908def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
909 "ROR(8|16|32|64)rCL",
910 "SAR(8|16|32|64)rCL",
911 "SHL(8|16|32|64)rCL",
912 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000913
914def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000915 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000916 let NumMicroOps = 3;
917 let ResourceCycles = [3];
918}
Craig Topperb5f26592018-04-19 18:00:17 +0000919def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
920 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
921 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000922
923def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
924 let Latency = 3;
925 let NumMicroOps = 3;
926 let ResourceCycles = [1,2];
927}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000928def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000929
930def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
931 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000932 let NumMicroOps = 3;
933 let ResourceCycles = [2,1];
934}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000935def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
936 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000937
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000938def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
939 let Latency = 3;
940 let NumMicroOps = 3;
941 let ResourceCycles = [2,1];
942}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000943def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000944
945def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
946 let Latency = 3;
947 let NumMicroOps = 3;
948 let ResourceCycles = [2,1];
949}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000950def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
951 "(V?)PHADDW(Y?)rr",
952 "(V?)PHSUBD(Y?)rr",
953 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000954
955def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
956 let Latency = 3;
957 let NumMicroOps = 3;
958 let ResourceCycles = [2,1];
959}
Craig Topperfc179c62018-03-22 04:23:41 +0000960def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
961 "MMX_PACKSSWBirr",
962 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000963
964def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
965 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000966 let NumMicroOps = 3;
967 let ResourceCycles = [1,2];
968}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000969def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000970
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000971def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
972 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000973 let NumMicroOps = 3;
974 let ResourceCycles = [1,2];
975}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000976def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000977
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000978def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
979 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000980 let NumMicroOps = 3;
981 let ResourceCycles = [1,2];
982}
Craig Topperfc179c62018-03-22 04:23:41 +0000983def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
984 "RCL(8|16|32|64)ri",
985 "RCR(8|16|32|64)r1",
986 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000987
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000988def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
989 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000990 let NumMicroOps = 3;
991 let ResourceCycles = [1,1,1];
992}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000993def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000994
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000995def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
996 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000997 let NumMicroOps = 4;
998 let ResourceCycles = [1,1,2];
999}
Craig Topperf4cd9082018-01-19 05:47:32 +00001000def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001001
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001002def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
1003 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001004 let NumMicroOps = 4;
1005 let ResourceCycles = [1,1,1,1];
1006}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001007def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001009def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
1010 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001011 let NumMicroOps = 4;
1012 let ResourceCycles = [1,1,1,1];
1013}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001014def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001015
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001016def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001017 let Latency = 4;
1018 let NumMicroOps = 1;
1019 let ResourceCycles = [1];
1020}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001021def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001022 "MMX_PMADDWDirr",
1023 "MMX_PMULHRSWrr",
1024 "MMX_PMULHUWirr",
1025 "MMX_PMULHWirr",
1026 "MMX_PMULLWirr",
1027 "MMX_PMULUDQirr",
1028 "MUL_FPrST0",
1029 "MUL_FST0r",
1030 "MUL_FrST0",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001031 "(V?)RCPPS(Y?)r",
1032 "(V?)RCPSSr",
1033 "(V?)RSQRTPS(Y?)r",
1034 "(V?)RSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001035
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001036def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001037 let Latency = 4;
1038 let NumMicroOps = 1;
1039 let ResourceCycles = [1];
1040}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001041def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
1042 "(V?)ADDPS(Y?)rr",
1043 "(V?)ADDSDrr",
1044 "(V?)ADDSSrr",
1045 "(V?)ADDSUBPD(Y?)rr",
1046 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001047 "(V?)CVTDQ2PS(Y?)rr",
1048 "(V?)CVTPS2DQ(Y?)rr",
1049 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001050 "(V?)MULPD(Y?)rr",
1051 "(V?)MULPS(Y?)rr",
1052 "(V?)MULSDrr",
1053 "(V?)MULSSrr",
1054 "(V?)PHMINPOSUWrr",
1055 "(V?)PMADDUBSW(Y?)rr",
1056 "(V?)PMADDWD(Y?)rr",
1057 "(V?)PMULDQ(Y?)rr",
1058 "(V?)PMULHRSW(Y?)rr",
1059 "(V?)PMULHUW(Y?)rr",
1060 "(V?)PMULHW(Y?)rr",
1061 "(V?)PMULLW(Y?)rr",
1062 "(V?)PMULUDQ(Y?)rr",
1063 "(V?)SUBPD(Y?)rr",
1064 "(V?)SUBPS(Y?)rr",
1065 "(V?)SUBSDrr",
1066 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001067
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001068def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001069 let Latency = 4;
1070 let NumMicroOps = 2;
1071 let ResourceCycles = [2];
1072}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001073def: InstRW<[SKLWriteResGroup50], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001074
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001075def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001076 let Latency = 4;
1077 let NumMicroOps = 2;
1078 let ResourceCycles = [1,1];
1079}
Craig Topperf846e2d2018-04-19 05:34:05 +00001080def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001081
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001082def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1083 let Latency = 4;
1084 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001085 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001086}
Craig Topperfc179c62018-03-22 04:23:41 +00001087def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001088
1089def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001090 let Latency = 4;
1091 let NumMicroOps = 2;
1092 let ResourceCycles = [1,1];
1093}
Craig Topperfc179c62018-03-22 04:23:41 +00001094def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1095 "VPSLLQYrr",
1096 "VPSLLWYrr",
1097 "VPSRADYrr",
1098 "VPSRAWYrr",
1099 "VPSRLDYrr",
1100 "VPSRLQYrr",
1101 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001102
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001103def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001104 let Latency = 4;
1105 let NumMicroOps = 3;
1106 let ResourceCycles = [1,1,1];
1107}
Craig Topperfc179c62018-03-22 04:23:41 +00001108def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1109 "ISTT_FP32m",
1110 "ISTT_FP64m",
1111 "IST_F16m",
1112 "IST_F32m",
1113 "IST_FP16m",
1114 "IST_FP32m",
1115 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001116
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001117def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001118 let Latency = 4;
1119 let NumMicroOps = 4;
1120 let ResourceCycles = [4];
1121}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001122def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001123
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001124def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001125 let Latency = 4;
1126 let NumMicroOps = 4;
1127 let ResourceCycles = [1,3];
1128}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001129def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001130
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001131def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001132 let Latency = 4;
1133 let NumMicroOps = 4;
1134 let ResourceCycles = [1,3];
1135}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001136def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001137
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001138def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001139 let Latency = 4;
1140 let NumMicroOps = 4;
1141 let ResourceCycles = [1,1,2];
1142}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001143def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001144
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001145def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1146 let Latency = 5;
1147 let NumMicroOps = 1;
1148 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001149}
Craig Topperfc179c62018-03-22 04:23:41 +00001150def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64rm",
1151 "MMX_MOVD64to64rm",
1152 "MMX_MOVQ64rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001153 "MOVSX(16|32|64)rm16",
1154 "MOVSX(16|32|64)rm32",
1155 "MOVSX(16|32|64)rm8",
1156 "MOVZX(16|32|64)rm16",
1157 "MOVZX(16|32|64)rm8",
1158 "PREFETCHNTA",
1159 "PREFETCHT0",
1160 "PREFETCHT1",
1161 "PREFETCHT2",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001162 "(V?)MOV64toPQIrm",
1163 "(V?)MOVDDUPrm",
1164 "(V?)MOVDI2PDIrm",
1165 "(V?)MOVQI2PQIrm",
1166 "(V?)MOVSDrm",
1167 "(V?)MOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001168
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001169def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001170 let Latency = 5;
1171 let NumMicroOps = 2;
1172 let ResourceCycles = [1,1];
1173}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001174def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1175 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001176
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001177def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001178 let Latency = 5;
1179 let NumMicroOps = 2;
1180 let ResourceCycles = [1,1];
1181}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001182def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001183 "MMX_CVTPS2PIirr",
1184 "MMX_CVTTPD2PIirr",
1185 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001186 "(V?)CVTPD2DQrr",
1187 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001188 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001189 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001190 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001191 "(V?)CVTSD2SSrr",
1192 "(V?)CVTSI642SDrr",
1193 "(V?)CVTSI2SDrr",
1194 "(V?)CVTSI2SSrr",
1195 "(V?)CVTSS2SDrr",
1196 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001197
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001198def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001199 let Latency = 5;
1200 let NumMicroOps = 3;
1201 let ResourceCycles = [1,1,1];
1202}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001203def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001204
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001205def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001206 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001207 let NumMicroOps = 3;
1208 let ResourceCycles = [1,1,1];
1209}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001210def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001211
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001212def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001213 let Latency = 5;
1214 let NumMicroOps = 5;
1215 let ResourceCycles = [1,4];
1216}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001217def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001218
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001219def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001220 let Latency = 5;
1221 let NumMicroOps = 5;
1222 let ResourceCycles = [2,3];
1223}
Craig Topper13a16502018-03-19 00:56:09 +00001224def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001225
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001226def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001227 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001228 let NumMicroOps = 6;
1229 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001230}
Craig Topperfc179c62018-03-22 04:23:41 +00001231def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1232 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001233
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001234def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1235 let Latency = 6;
1236 let NumMicroOps = 1;
1237 let ResourceCycles = [1];
1238}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001239def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
1240 "(V?)LDDQUrm",
1241 "(V?)MOVAPDrm",
1242 "(V?)MOVAPSrm",
1243 "(V?)MOVDQArm",
1244 "(V?)MOVDQUrm",
1245 "(V?)MOVNTDQArm",
1246 "(V?)MOVSHDUPrm",
1247 "(V?)MOVSLDUPrm",
1248 "(V?)MOVUPDrm",
1249 "(V?)MOVUPSrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001250 "VPBROADCASTDrm",
1251 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001252
1253def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001254 let Latency = 6;
1255 let NumMicroOps = 2;
1256 let ResourceCycles = [2];
1257}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001258def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001259
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001260def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001261 let Latency = 6;
1262 let NumMicroOps = 2;
1263 let ResourceCycles = [1,1];
1264}
Craig Topperfc179c62018-03-22 04:23:41 +00001265def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1266 "MMX_PADDSWirm",
1267 "MMX_PADDUSBirm",
1268 "MMX_PADDUSWirm",
1269 "MMX_PAVGBirm",
1270 "MMX_PAVGWirm",
1271 "MMX_PCMPEQBirm",
1272 "MMX_PCMPEQDirm",
1273 "MMX_PCMPEQWirm",
1274 "MMX_PCMPGTBirm",
1275 "MMX_PCMPGTDirm",
1276 "MMX_PCMPGTWirm",
1277 "MMX_PMAXSWirm",
1278 "MMX_PMAXUBirm",
1279 "MMX_PMINSWirm",
1280 "MMX_PMINUBirm",
1281 "MMX_PSLLDrm",
1282 "MMX_PSLLQrm",
1283 "MMX_PSLLWrm",
1284 "MMX_PSRADrm",
1285 "MMX_PSRAWrm",
1286 "MMX_PSRLDrm",
1287 "MMX_PSRLQrm",
1288 "MMX_PSRLWrm",
1289 "MMX_PSUBSBirm",
1290 "MMX_PSUBSWirm",
1291 "MMX_PSUBUSBirm",
1292 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001293
Craig Topper58afb4e2018-03-22 21:10:07 +00001294def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001295 let Latency = 6;
1296 let NumMicroOps = 2;
1297 let ResourceCycles = [1,1];
1298}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001299def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1300 "(V?)CVTSD2SIrr",
1301 "(V?)CVTSS2SI64rr",
1302 "(V?)CVTSS2SIrr",
1303 "(V?)CVTTSD2SI64rr",
1304 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001305
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001306def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1307 let Latency = 6;
1308 let NumMicroOps = 2;
1309 let ResourceCycles = [1,1];
1310}
Craig Topperfc179c62018-03-22 04:23:41 +00001311def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1312 "MMX_PINSRWrm",
1313 "MMX_PSHUFBrm",
1314 "MMX_PSHUFWmi",
1315 "MMX_PUNPCKHBWirm",
1316 "MMX_PUNPCKHDQirm",
1317 "MMX_PUNPCKHWDirm",
1318 "MMX_PUNPCKLBWirm",
1319 "MMX_PUNPCKLDQirm",
1320 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001321 "(V?)MOVHPDrm",
1322 "(V?)MOVHPSrm",
1323 "(V?)MOVLPDrm",
1324 "(V?)MOVLPSrm",
1325 "(V?)PINSRBrm",
1326 "(V?)PINSRDrm",
1327 "(V?)PINSRQrm",
1328 "(V?)PINSRWrm",
1329 "(V?)PMOVSXBDrm",
1330 "(V?)PMOVSXBQrm",
1331 "(V?)PMOVSXBWrm",
1332 "(V?)PMOVSXDQrm",
1333 "(V?)PMOVSXWDrm",
1334 "(V?)PMOVSXWQrm",
1335 "(V?)PMOVZXBDrm",
1336 "(V?)PMOVZXBQrm",
1337 "(V?)PMOVZXBWrm",
1338 "(V?)PMOVZXDQrm",
1339 "(V?)PMOVZXWDrm",
1340 "(V?)PMOVZXWQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001341
1342def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1343 let Latency = 6;
1344 let NumMicroOps = 2;
1345 let ResourceCycles = [1,1];
1346}
Craig Topperfc179c62018-03-22 04:23:41 +00001347def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1348 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001349
1350def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1351 let Latency = 6;
1352 let NumMicroOps = 2;
1353 let ResourceCycles = [1,1];
1354}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001355def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1356 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001357 "MMX_PANDNirm",
1358 "MMX_PANDirm",
1359 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001360 "MMX_PSIGN(B|D|W)rm",
1361 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001362 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001363
1364def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1365 let Latency = 6;
1366 let NumMicroOps = 2;
1367 let ResourceCycles = [1,1];
1368}
Craig Topperc50570f2018-04-06 17:12:18 +00001369def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001370 "RORX(32|64)mi",
1371 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001372 "SHLX(32|64)rm",
1373 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001374def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1375 ADCX32rm, ADCX64rm,
1376 ADOX32rm, ADOX64rm,
1377 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001378
1379def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1380 let Latency = 6;
1381 let NumMicroOps = 2;
1382 let ResourceCycles = [1,1];
1383}
Craig Topperfc179c62018-03-22 04:23:41 +00001384def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1385 "BLSI(32|64)rm",
1386 "BLSMSK(32|64)rm",
1387 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001388 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001389
1390def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1391 let Latency = 6;
1392 let NumMicroOps = 2;
1393 let ResourceCycles = [1,1];
1394}
Craig Topper2d451e72018-03-18 08:38:06 +00001395def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001396def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001397
1398def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001399 let Latency = 6;
1400 let NumMicroOps = 3;
1401 let ResourceCycles = [2,1];
1402}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001403def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1404 "(V?)HADDPS(Y?)rr",
1405 "(V?)HSUBPD(Y?)rr",
1406 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001407
Craig Topper58afb4e2018-03-22 21:10:07 +00001408def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001409 let Latency = 6;
1410 let NumMicroOps = 3;
1411 let ResourceCycles = [2,1];
1412}
Craig Topperfc179c62018-03-22 04:23:41 +00001413def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001414
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001415def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001416 let Latency = 6;
1417 let NumMicroOps = 4;
1418 let ResourceCycles = [1,2,1];
1419}
Craig Topperfc179c62018-03-22 04:23:41 +00001420def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1421 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001422
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001423def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001424 let Latency = 6;
1425 let NumMicroOps = 4;
1426 let ResourceCycles = [1,1,1,1];
1427}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001428def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001429
Craig Topper58afb4e2018-03-22 21:10:07 +00001430def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001431 let Latency = 6;
1432 let NumMicroOps = 4;
1433 let ResourceCycles = [1,1,1,1];
1434}
1435def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1436
1437def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1438 let Latency = 6;
1439 let NumMicroOps = 4;
1440 let ResourceCycles = [1,1,1,1];
1441}
Craig Topperfc179c62018-03-22 04:23:41 +00001442def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1443 "BTR(16|32|64)mi8",
1444 "BTS(16|32|64)mi8",
1445 "SAR(8|16|32|64)m1",
1446 "SAR(8|16|32|64)mi",
1447 "SHL(8|16|32|64)m1",
1448 "SHL(8|16|32|64)mi",
1449 "SHR(8|16|32|64)m1",
1450 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001451
1452def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1453 let Latency = 6;
1454 let NumMicroOps = 4;
1455 let ResourceCycles = [1,1,1,1];
1456}
Craig Topperf0d04262018-04-06 16:16:48 +00001457def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1458 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001459
1460def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001461 let Latency = 6;
1462 let NumMicroOps = 6;
1463 let ResourceCycles = [1,5];
1464}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001465def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001466
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001467def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1468 let Latency = 7;
1469 let NumMicroOps = 1;
1470 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001471}
Craig Topperfc179c62018-03-22 04:23:41 +00001472def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1473 "LD_F64m",
1474 "LD_F80m",
1475 "VBROADCASTF128",
1476 "VBROADCASTI128",
1477 "VBROADCASTSDYrm",
1478 "VBROADCASTSSYrm",
1479 "VLDDQUYrm",
1480 "VMOVAPDYrm",
1481 "VMOVAPSYrm",
1482 "VMOVDDUPYrm",
1483 "VMOVDQAYrm",
1484 "VMOVDQUYrm",
1485 "VMOVNTDQAYrm",
1486 "VMOVSHDUPYrm",
1487 "VMOVSLDUPYrm",
1488 "VMOVUPDYrm",
1489 "VMOVUPSYrm",
1490 "VPBROADCASTDYrm",
1491 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001492
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001493def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001494 let Latency = 7;
1495 let NumMicroOps = 2;
1496 let ResourceCycles = [1,1];
1497}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001498def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001499
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001500def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1501 let Latency = 7;
1502 let NumMicroOps = 2;
1503 let ResourceCycles = [1,1];
1504}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001505def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1506 "(V?)PACKSSDWrm",
1507 "(V?)PACKSSWBrm",
1508 "(V?)PACKUSDWrm",
1509 "(V?)PACKUSWBrm",
1510 "(V?)PALIGNRrmi",
1511 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001512 "VPBROADCASTBrm",
1513 "VPBROADCASTWrm",
1514 "VPERMILPDmi",
1515 "VPERMILPDrm",
1516 "VPERMILPSmi",
1517 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001518 "(V?)PSHUFBrm",
1519 "(V?)PSHUFDmi",
1520 "(V?)PSHUFHWmi",
1521 "(V?)PSHUFLWmi",
1522 "(V?)PUNPCKHBWrm",
1523 "(V?)PUNPCKHDQrm",
1524 "(V?)PUNPCKHQDQrm",
1525 "(V?)PUNPCKHWDrm",
1526 "(V?)PUNPCKLBWrm",
1527 "(V?)PUNPCKLDQrm",
1528 "(V?)PUNPCKLQDQrm",
1529 "(V?)PUNPCKLWDrm",
1530 "(V?)SHUFPDrmi",
1531 "(V?)SHUFPSrmi",
1532 "(V?)UNPCKHPDrm",
1533 "(V?)UNPCKHPSrm",
1534 "(V?)UNPCKLPDrm",
1535 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001536
Craig Topper58afb4e2018-03-22 21:10:07 +00001537def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001538 let Latency = 7;
1539 let NumMicroOps = 2;
1540 let ResourceCycles = [1,1];
1541}
Craig Topperfc179c62018-03-22 04:23:41 +00001542def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1543 "VCVTPD2PSYrr",
1544 "VCVTPH2PSYrr",
1545 "VCVTPS2PDYrr",
1546 "VCVTPS2PHYrr",
1547 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001548
1549def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1550 let Latency = 7;
1551 let NumMicroOps = 2;
1552 let ResourceCycles = [1,1];
1553}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001554def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1555 "(V?)PABSDrm",
1556 "(V?)PABSWrm",
1557 "(V?)PADDSBrm",
1558 "(V?)PADDSWrm",
1559 "(V?)PADDUSBrm",
1560 "(V?)PADDUSWrm",
1561 "(V?)PAVGBrm",
1562 "(V?)PAVGWrm",
1563 "(V?)PCMPEQBrm",
1564 "(V?)PCMPEQDrm",
1565 "(V?)PCMPEQQrm",
1566 "(V?)PCMPEQWrm",
1567 "(V?)PCMPGTBrm",
1568 "(V?)PCMPGTDrm",
1569 "(V?)PCMPGTWrm",
1570 "(V?)PMAXSBrm",
1571 "(V?)PMAXSDrm",
1572 "(V?)PMAXSWrm",
1573 "(V?)PMAXUBrm",
1574 "(V?)PMAXUDrm",
1575 "(V?)PMAXUWrm",
1576 "(V?)PMINSBrm",
1577 "(V?)PMINSDrm",
1578 "(V?)PMINSWrm",
1579 "(V?)PMINUBrm",
1580 "(V?)PMINUDrm",
1581 "(V?)PMINUWrm",
1582 "(V?)PSIGNBrm",
1583 "(V?)PSIGNDrm",
1584 "(V?)PSIGNWrm",
1585 "(V?)PSLLDrm",
1586 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001587 "VPSLLVDrm",
1588 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001589 "(V?)PSLLWrm",
1590 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001591 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001592 "(V?)PSRAWrm",
1593 "(V?)PSRLDrm",
1594 "(V?)PSRLQrm",
1595 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001596 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001597 "(V?)PSRLWrm",
1598 "(V?)PSUBSBrm",
1599 "(V?)PSUBSWrm",
1600 "(V?)PSUBUSBrm",
1601 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001602
1603def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1604 let Latency = 7;
1605 let NumMicroOps = 2;
1606 let ResourceCycles = [1,1];
1607}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001608def: InstRW<[SKLWriteResGroup91], (instregex "(V?)ANDNPDrm",
1609 "(V?)ANDNPSrm",
1610 "(V?)ANDPDrm",
1611 "(V?)ANDPSrm",
1612 "(V?)BLENDPDrmi",
1613 "(V?)BLENDPSrmi",
1614 "(V?)INSERTF128rm",
1615 "(V?)INSERTI128rm",
1616 "(V?)MASKMOVPDrm",
1617 "(V?)MASKMOVPSrm",
1618 "(V?)ORPDrm",
1619 "(V?)ORPSrm",
1620 "(V?)PADDBrm",
1621 "(V?)PADDDrm",
1622 "(V?)PADDQrm",
1623 "(V?)PADDWrm",
1624 "(V?)PANDNrm",
1625 "(V?)PANDrm",
1626 "(V?)PBLENDDrmi",
1627 "(V?)PMASKMOVDrm",
1628 "(V?)PMASKMOVQrm",
1629 "(V?)PORrm",
1630 "(V?)PSUBBrm",
1631 "(V?)PSUBDrm",
1632 "(V?)PSUBQrm",
1633 "(V?)PSUBWrm",
1634 "(V?)PXORrm",
1635 "(V?)XORPDrm",
1636 "(V?)XORPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001637
1638def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1639 let Latency = 7;
1640 let NumMicroOps = 3;
1641 let ResourceCycles = [2,1];
1642}
Craig Topperfc179c62018-03-22 04:23:41 +00001643def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1644 "MMX_PACKSSWBirm",
1645 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001646
1647def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1648 let Latency = 7;
1649 let NumMicroOps = 3;
1650 let ResourceCycles = [1,2];
1651}
Craig Topperf4cd9082018-01-19 05:47:32 +00001652def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001653
1654def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1655 let Latency = 7;
1656 let NumMicroOps = 3;
1657 let ResourceCycles = [1,2];
1658}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001659def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1660 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001661
Craig Topper58afb4e2018-03-22 21:10:07 +00001662def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001663 let Latency = 7;
1664 let NumMicroOps = 3;
1665 let ResourceCycles = [1,1,1];
1666}
Craig Topperfc179c62018-03-22 04:23:41 +00001667def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1668 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001669
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001670def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001671 let Latency = 7;
1672 let NumMicroOps = 3;
1673 let ResourceCycles = [1,1,1];
1674}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001675def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001676
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001677def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001678 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001679 let NumMicroOps = 3;
1680 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001681}
Craig Topperfc179c62018-03-22 04:23:41 +00001682def: InstRW<[SKLWriteResGroup97], (instregex "(V?)LDMXCSR")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001683
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001684def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001685 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001686 let NumMicroOps = 3;
1687 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001688}
Craig Topperfc179c62018-03-22 04:23:41 +00001689def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1690 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001691
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001692def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1693 let Latency = 7;
1694 let NumMicroOps = 5;
1695 let ResourceCycles = [1,1,1,2];
1696}
Craig Topperfc179c62018-03-22 04:23:41 +00001697def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1698 "ROL(8|16|32|64)mi",
1699 "ROR(8|16|32|64)m1",
1700 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001701
1702def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1703 let Latency = 7;
1704 let NumMicroOps = 5;
1705 let ResourceCycles = [1,1,1,2];
1706}
Craig Topper13a16502018-03-19 00:56:09 +00001707def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001708
1709def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1710 let Latency = 7;
1711 let NumMicroOps = 5;
1712 let ResourceCycles = [1,1,1,1,1];
1713}
Craig Topperfc179c62018-03-22 04:23:41 +00001714def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1715 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001716
1717def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001718 let Latency = 7;
1719 let NumMicroOps = 7;
1720 let ResourceCycles = [1,3,1,2];
1721}
Craig Topper2d451e72018-03-18 08:38:06 +00001722def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001723
Craig Topper58afb4e2018-03-22 21:10:07 +00001724def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001725 let Latency = 8;
1726 let NumMicroOps = 2;
1727 let ResourceCycles = [2];
1728}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001729def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1730 "(V?)ROUNDPS(Y?)r",
1731 "(V?)ROUNDSDr",
1732 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001733
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001734def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001735 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001736 let NumMicroOps = 2;
1737 let ResourceCycles = [1,1];
1738}
Craig Topperfc179c62018-03-22 04:23:41 +00001739def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1740 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001741
1742def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1743 let Latency = 8;
1744 let NumMicroOps = 2;
1745 let ResourceCycles = [1,1];
1746}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001747def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1748 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001749
1750def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001751 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001752 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001753 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001754}
Craig Topperf846e2d2018-04-19 05:34:05 +00001755def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001756
Craig Topperf846e2d2018-04-19 05:34:05 +00001757def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1758 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001759 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001760 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001761}
Craig Topperfc179c62018-03-22 04:23:41 +00001762def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001763
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001764def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1765 let Latency = 8;
1766 let NumMicroOps = 2;
1767 let ResourceCycles = [1,1];
1768}
Craig Topperfc179c62018-03-22 04:23:41 +00001769def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1770 "FCOM64m",
1771 "FCOMP32m",
1772 "FCOMP64m",
1773 "MMX_PSADBWirm",
1774 "VPACKSSDWYrm",
1775 "VPACKSSWBYrm",
1776 "VPACKUSDWYrm",
1777 "VPACKUSWBYrm",
1778 "VPALIGNRYrmi",
1779 "VPBLENDWYrmi",
1780 "VPBROADCASTBYrm",
1781 "VPBROADCASTWYrm",
1782 "VPERMILPDYmi",
1783 "VPERMILPDYrm",
1784 "VPERMILPSYmi",
1785 "VPERMILPSYrm",
1786 "VPMOVSXBDYrm",
1787 "VPMOVSXBQYrm",
1788 "VPMOVSXWQYrm",
1789 "VPSHUFBYrm",
1790 "VPSHUFDYmi",
1791 "VPSHUFHWYmi",
1792 "VPSHUFLWYmi",
1793 "VPUNPCKHBWYrm",
1794 "VPUNPCKHDQYrm",
1795 "VPUNPCKHQDQYrm",
1796 "VPUNPCKHWDYrm",
1797 "VPUNPCKLBWYrm",
1798 "VPUNPCKLDQYrm",
1799 "VPUNPCKLQDQYrm",
1800 "VPUNPCKLWDYrm",
1801 "VSHUFPDYrmi",
1802 "VSHUFPSYrmi",
1803 "VUNPCKHPDYrm",
1804 "VUNPCKHPSYrm",
1805 "VUNPCKLPDYrm",
1806 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001807
1808def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1809 let Latency = 8;
1810 let NumMicroOps = 2;
1811 let ResourceCycles = [1,1];
1812}
Craig Topperfc179c62018-03-22 04:23:41 +00001813def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1814 "VPABSDYrm",
1815 "VPABSWYrm",
1816 "VPADDSBYrm",
1817 "VPADDSWYrm",
1818 "VPADDUSBYrm",
1819 "VPADDUSWYrm",
1820 "VPAVGBYrm",
1821 "VPAVGWYrm",
1822 "VPCMPEQBYrm",
1823 "VPCMPEQDYrm",
1824 "VPCMPEQQYrm",
1825 "VPCMPEQWYrm",
1826 "VPCMPGTBYrm",
1827 "VPCMPGTDYrm",
1828 "VPCMPGTWYrm",
1829 "VPMAXSBYrm",
1830 "VPMAXSDYrm",
1831 "VPMAXSWYrm",
1832 "VPMAXUBYrm",
1833 "VPMAXUDYrm",
1834 "VPMAXUWYrm",
1835 "VPMINSBYrm",
1836 "VPMINSDYrm",
1837 "VPMINSWYrm",
1838 "VPMINUBYrm",
1839 "VPMINUDYrm",
1840 "VPMINUWYrm",
1841 "VPSIGNBYrm",
1842 "VPSIGNDYrm",
1843 "VPSIGNWYrm",
1844 "VPSLLDYrm",
1845 "VPSLLQYrm",
1846 "VPSLLVDYrm",
1847 "VPSLLVQYrm",
1848 "VPSLLWYrm",
1849 "VPSRADYrm",
1850 "VPSRAVDYrm",
1851 "VPSRAWYrm",
1852 "VPSRLDYrm",
1853 "VPSRLQYrm",
1854 "VPSRLVDYrm",
1855 "VPSRLVQYrm",
1856 "VPSRLWYrm",
1857 "VPSUBSBYrm",
1858 "VPSUBSWYrm",
1859 "VPSUBUSBYrm",
1860 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001861
1862def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1863 let Latency = 8;
1864 let NumMicroOps = 2;
1865 let ResourceCycles = [1,1];
1866}
Craig Topperfc179c62018-03-22 04:23:41 +00001867def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1868 "VANDNPSYrm",
1869 "VANDPDYrm",
1870 "VANDPSYrm",
1871 "VBLENDPDYrmi",
1872 "VBLENDPSYrmi",
1873 "VMASKMOVPDYrm",
1874 "VMASKMOVPSYrm",
1875 "VORPDYrm",
1876 "VORPSYrm",
1877 "VPADDBYrm",
1878 "VPADDDYrm",
1879 "VPADDQYrm",
1880 "VPADDWYrm",
1881 "VPANDNYrm",
1882 "VPANDYrm",
1883 "VPBLENDDYrmi",
1884 "VPMASKMOVDYrm",
1885 "VPMASKMOVQYrm",
1886 "VPORYrm",
1887 "VPSUBBYrm",
1888 "VPSUBDYrm",
1889 "VPSUBQYrm",
1890 "VPSUBWYrm",
1891 "VPXORYrm",
1892 "VXORPDYrm",
1893 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001894
1895def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001896 let Latency = 8;
1897 let NumMicroOps = 3;
1898 let ResourceCycles = [1,2];
1899}
Craig Topperfc179c62018-03-22 04:23:41 +00001900def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
1901 "BLENDVPSrm0",
1902 "PBLENDVBrm0",
1903 "VBLENDVPDrm",
1904 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001905 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001906
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001907def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1908 let Latency = 8;
1909 let NumMicroOps = 4;
1910 let ResourceCycles = [1,2,1];
1911}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001912def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001913
1914def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1915 let Latency = 8;
1916 let NumMicroOps = 4;
1917 let ResourceCycles = [2,1,1];
1918}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001919def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001920
Craig Topper58afb4e2018-03-22 21:10:07 +00001921def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001922 let Latency = 8;
1923 let NumMicroOps = 4;
1924 let ResourceCycles = [1,1,1,1];
1925}
1926def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1927
1928def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1929 let Latency = 8;
1930 let NumMicroOps = 5;
1931 let ResourceCycles = [1,1,3];
1932}
Craig Topper13a16502018-03-19 00:56:09 +00001933def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001934
1935def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1936 let Latency = 8;
1937 let NumMicroOps = 5;
1938 let ResourceCycles = [1,1,1,2];
1939}
Craig Topperfc179c62018-03-22 04:23:41 +00001940def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1941 "RCL(8|16|32|64)mi",
1942 "RCR(8|16|32|64)m1",
1943 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001944
1945def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1946 let Latency = 8;
1947 let NumMicroOps = 6;
1948 let ResourceCycles = [1,1,1,3];
1949}
Craig Topperfc179c62018-03-22 04:23:41 +00001950def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1951 "SAR(8|16|32|64)mCL",
1952 "SHL(8|16|32|64)mCL",
1953 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001954
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001955def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1956 let Latency = 8;
1957 let NumMicroOps = 6;
1958 let ResourceCycles = [1,1,1,2,1];
1959}
Craig Topper9f834812018-04-01 21:54:24 +00001960def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001961 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001962 "SBB(8|16|32|64)mi")>;
1963def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1964 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001965
1966def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1967 let Latency = 9;
1968 let NumMicroOps = 2;
1969 let ResourceCycles = [1,1];
1970}
Craig Topperfc179c62018-03-22 04:23:41 +00001971def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1972 "MMX_PMADDUBSWrm",
1973 "MMX_PMADDWDirm",
1974 "MMX_PMULHRSWrm",
1975 "MMX_PMULHUWirm",
1976 "MMX_PMULHWirm",
1977 "MMX_PMULLWirm",
1978 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001979 "(V?)RCPSSm",
1980 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001981 "VTESTPDYrm",
1982 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001983
1984def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1985 let Latency = 9;
1986 let NumMicroOps = 2;
1987 let ResourceCycles = [1,1];
1988}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001989def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001990 "VPMOVSXBWYrm",
1991 "VPMOVSXDQYrm",
1992 "VPMOVSXWDYrm",
1993 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001994 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001995
1996def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1997 let Latency = 9;
1998 let NumMicroOps = 2;
1999 let ResourceCycles = [1,1];
2000}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002001def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
2002 "(V?)ADDSSrm",
2003 "(V?)CMPSDrm",
2004 "(V?)CMPSSrm",
2005 "(V?)MAX(C?)SDrm",
2006 "(V?)MAX(C?)SSrm",
2007 "(V?)MIN(C?)SDrm",
2008 "(V?)MIN(C?)SSrm",
2009 "(V?)MULSDrm",
2010 "(V?)MULSSrm",
2011 "(V?)SUBSDrm",
2012 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00002013def: InstRW<[SKLWriteResGroup122],
2014 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002015
Craig Topper58afb4e2018-03-22 21:10:07 +00002016def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002017 let Latency = 9;
2018 let NumMicroOps = 2;
2019 let ResourceCycles = [1,1];
2020}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002021def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002022 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002023 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002024 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002025
Craig Topper58afb4e2018-03-22 21:10:07 +00002026def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002027 let Latency = 9;
2028 let NumMicroOps = 3;
2029 let ResourceCycles = [1,2];
2030}
Craig Topperfc179c62018-03-22 04:23:41 +00002031def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002032
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002033def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2034 let Latency = 9;
2035 let NumMicroOps = 3;
2036 let ResourceCycles = [1,2];
2037}
Craig Topperfc179c62018-03-22 04:23:41 +00002038def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
2039 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002040
2041def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2042 let Latency = 9;
2043 let NumMicroOps = 3;
2044 let ResourceCycles = [1,1,1];
2045}
Craig Topperfc179c62018-03-22 04:23:41 +00002046def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002047
2048def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
2049 let Latency = 9;
2050 let NumMicroOps = 3;
2051 let ResourceCycles = [1,1,1];
2052}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002053def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002054
2055def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002056 let Latency = 9;
2057 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002058 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002059}
Craig Topperfc179c62018-03-22 04:23:41 +00002060def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
2061 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002062
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002063def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2064 let Latency = 9;
2065 let NumMicroOps = 4;
2066 let ResourceCycles = [2,1,1];
2067}
Craig Topperfc179c62018-03-22 04:23:41 +00002068def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
2069 "(V?)PHADDWrm",
2070 "(V?)PHSUBDrm",
2071 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002072
2073def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
2074 let Latency = 9;
2075 let NumMicroOps = 4;
2076 let ResourceCycles = [1,1,1,1];
2077}
Craig Topperfc179c62018-03-22 04:23:41 +00002078def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
2079 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002080
2081def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2082 let Latency = 9;
2083 let NumMicroOps = 5;
2084 let ResourceCycles = [1,2,1,1];
2085}
Craig Topperfc179c62018-03-22 04:23:41 +00002086def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
2087 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002088
2089def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2090 let Latency = 10;
2091 let NumMicroOps = 2;
2092 let ResourceCycles = [1,1];
2093}
Simon Pilgrim7684e052018-03-22 13:18:08 +00002094def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002095 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002096
2097def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2098 let Latency = 10;
2099 let NumMicroOps = 2;
2100 let ResourceCycles = [1,1];
2101}
Craig Topperfc179c62018-03-22 04:23:41 +00002102def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
2103 "ADD_F64m",
2104 "ILD_F16m",
2105 "ILD_F32m",
2106 "ILD_F64m",
2107 "SUBR_F32m",
2108 "SUBR_F64m",
2109 "SUB_F32m",
2110 "SUB_F64m",
2111 "VPCMPGTQYrm",
2112 "VPERM2F128rm",
2113 "VPERM2I128rm",
2114 "VPERMDYrm",
2115 "VPERMPDYmi",
2116 "VPERMPSYrm",
2117 "VPERMQYmi",
2118 "VPMOVZXBDYrm",
2119 "VPMOVZXBQYrm",
2120 "VPMOVZXBWYrm",
2121 "VPMOVZXDQYrm",
2122 "VPMOVZXWQYrm",
2123 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002124
2125def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2126 let Latency = 10;
2127 let NumMicroOps = 2;
2128 let ResourceCycles = [1,1];
2129}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002130def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
2131 "(V?)ADDPSrm",
2132 "(V?)ADDSUBPDrm",
2133 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002134 "(V?)CVTDQ2PSrm",
2135 "(V?)CVTPH2PSYrm",
2136 "(V?)CVTPS2DQrm",
2137 "(V?)CVTSS2SDrm",
2138 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002139 "(V?)MULPDrm",
2140 "(V?)MULPSrm",
2141 "(V?)PHMINPOSUWrm",
2142 "(V?)PMADDUBSWrm",
2143 "(V?)PMADDWDrm",
2144 "(V?)PMULDQrm",
2145 "(V?)PMULHRSWrm",
2146 "(V?)PMULHUWrm",
2147 "(V?)PMULHWrm",
2148 "(V?)PMULLWrm",
2149 "(V?)PMULUDQrm",
2150 "(V?)SUBPDrm",
2151 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00002152def: InstRW<[SKLWriteResGroup134],
2153 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002154
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002155def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2156 let Latency = 10;
2157 let NumMicroOps = 3;
2158 let ResourceCycles = [2,1];
2159}
Craig Topperfc179c62018-03-22 04:23:41 +00002160def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002161
2162def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2163 let Latency = 10;
2164 let NumMicroOps = 3;
2165 let ResourceCycles = [1,1,1];
2166}
Craig Topperfc179c62018-03-22 04:23:41 +00002167def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2168 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002169
Craig Topper58afb4e2018-03-22 21:10:07 +00002170def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002171 let Latency = 10;
2172 let NumMicroOps = 3;
2173 let ResourceCycles = [1,1,1];
2174}
Craig Topperfc179c62018-03-22 04:23:41 +00002175def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002176
2177def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002178 let Latency = 10;
2179 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002180 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002181}
Craig Topperfc179c62018-03-22 04:23:41 +00002182def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2183 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002184
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002185def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2186 let Latency = 10;
2187 let NumMicroOps = 4;
2188 let ResourceCycles = [2,1,1];
2189}
Craig Topperfc179c62018-03-22 04:23:41 +00002190def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2191 "VPHADDWYrm",
2192 "VPHSUBDYrm",
2193 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002194
2195def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002196 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002197 let NumMicroOps = 4;
2198 let ResourceCycles = [1,1,1,1];
2199}
Craig Topperf846e2d2018-04-19 05:34:05 +00002200def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002201
2202def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2203 let Latency = 10;
2204 let NumMicroOps = 8;
2205 let ResourceCycles = [1,1,1,1,1,3];
2206}
Craig Topper13a16502018-03-19 00:56:09 +00002207def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002208
2209def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002210 let Latency = 10;
2211 let NumMicroOps = 10;
2212 let ResourceCycles = [9,1];
2213}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002214def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002215
Craig Topper8104f262018-04-02 05:33:28 +00002216def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002217 let Latency = 11;
2218 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002219 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002220}
Craig Topper8104f262018-04-02 05:33:28 +00002221def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002222 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002223
Craig Topper8104f262018-04-02 05:33:28 +00002224def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2225 let Latency = 11;
2226 let NumMicroOps = 1;
2227 let ResourceCycles = [1,5];
2228}
2229def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
2230
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002231def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002232 let Latency = 11;
2233 let NumMicroOps = 2;
2234 let ResourceCycles = [1,1];
2235}
Craig Topperfc179c62018-03-22 04:23:41 +00002236def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2237 "MUL_F64m",
2238 "VRCPPSYm",
2239 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002240
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002241def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2242 let Latency = 11;
2243 let NumMicroOps = 2;
2244 let ResourceCycles = [1,1];
2245}
Craig Topperfc179c62018-03-22 04:23:41 +00002246def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2247 "VADDPSYrm",
2248 "VADDSUBPDYrm",
2249 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002250 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002251 "VCMPPSYrmi",
2252 "VCVTDQ2PSYrm",
2253 "VCVTPS2DQYrm",
2254 "VCVTPS2PDYrm",
2255 "VCVTTPS2DQYrm",
2256 "VMAX(C?)PDYrm",
2257 "VMAX(C?)PSYrm",
2258 "VMIN(C?)PDYrm",
2259 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002260 "VMULPDYrm",
2261 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002262 "VPMADDUBSWYrm",
2263 "VPMADDWDYrm",
2264 "VPMULDQYrm",
2265 "VPMULHRSWYrm",
2266 "VPMULHUWYrm",
2267 "VPMULHWYrm",
2268 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002269 "VPMULUDQYrm",
2270 "VSUBPDYrm",
2271 "VSUBPSYrm")>;
2272def: InstRW<[SKLWriteResGroup147],
2273 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002274
2275def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2276 let Latency = 11;
2277 let NumMicroOps = 3;
2278 let ResourceCycles = [2,1];
2279}
Craig Topperfc179c62018-03-22 04:23:41 +00002280def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2281 "FICOM32m",
2282 "FICOMP16m",
2283 "FICOMP32m",
2284 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002285
2286def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2287 let Latency = 11;
2288 let NumMicroOps = 3;
2289 let ResourceCycles = [1,1,1];
2290}
Craig Topperfc179c62018-03-22 04:23:41 +00002291def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002292
Craig Topper58afb4e2018-03-22 21:10:07 +00002293def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002294 let Latency = 11;
2295 let NumMicroOps = 3;
2296 let ResourceCycles = [1,1,1];
2297}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002298def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2299 "(V?)CVTSD2SIrm",
2300 "(V?)CVTSS2SI64rm",
2301 "(V?)CVTSS2SIrm",
2302 "(V?)CVTTSD2SI64rm",
2303 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002304 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002305 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002306
Craig Topper58afb4e2018-03-22 21:10:07 +00002307def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002308 let Latency = 11;
2309 let NumMicroOps = 3;
2310 let ResourceCycles = [1,1,1];
2311}
Craig Topperfc179c62018-03-22 04:23:41 +00002312def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2313 "CVTPD2PSrm",
2314 "CVTTPD2DQrm",
2315 "MMX_CVTPD2PIirm",
2316 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002317
2318def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2319 let Latency = 11;
2320 let NumMicroOps = 6;
2321 let ResourceCycles = [1,1,1,2,1];
2322}
Craig Topperfc179c62018-03-22 04:23:41 +00002323def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2324 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002325
2326def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002327 let Latency = 11;
2328 let NumMicroOps = 7;
2329 let ResourceCycles = [2,3,2];
2330}
Craig Topperfc179c62018-03-22 04:23:41 +00002331def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2332 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002333
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002334def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002335 let Latency = 11;
2336 let NumMicroOps = 9;
2337 let ResourceCycles = [1,5,1,2];
2338}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002339def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002340
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002341def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002342 let Latency = 11;
2343 let NumMicroOps = 11;
2344 let ResourceCycles = [2,9];
2345}
Craig Topperfc179c62018-03-22 04:23:41 +00002346def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002347
Craig Topper8104f262018-04-02 05:33:28 +00002348def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002349 let Latency = 12;
2350 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002351 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002352}
Craig Topper8104f262018-04-02 05:33:28 +00002353def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002354 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002355
Craig Topper8104f262018-04-02 05:33:28 +00002356def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2357 let Latency = 12;
2358 let NumMicroOps = 1;
2359 let ResourceCycles = [1,6];
2360}
2361def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2362
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002363def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2364 let Latency = 12;
2365 let NumMicroOps = 4;
2366 let ResourceCycles = [2,1,1];
2367}
Craig Topperfc179c62018-03-22 04:23:41 +00002368def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2369 "(V?)HADDPSrm",
2370 "(V?)HSUBPDrm",
2371 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002372
Craig Topper58afb4e2018-03-22 21:10:07 +00002373def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002374 let Latency = 12;
2375 let NumMicroOps = 4;
2376 let ResourceCycles = [1,1,1,1];
2377}
2378def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2379
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002380def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002381 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002382 let NumMicroOps = 3;
2383 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002384}
Craig Topperfc179c62018-03-22 04:23:41 +00002385def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2386 "ADD_FI32m",
2387 "SUBR_FI16m",
2388 "SUBR_FI32m",
2389 "SUB_FI16m",
2390 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002391
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002392def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2393 let Latency = 13;
2394 let NumMicroOps = 3;
2395 let ResourceCycles = [1,1,1];
2396}
2397def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2398
Craig Topper58afb4e2018-03-22 21:10:07 +00002399def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002400 let Latency = 13;
2401 let NumMicroOps = 4;
2402 let ResourceCycles = [1,3];
2403}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002404def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002405
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002406def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002407 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002408 let NumMicroOps = 4;
2409 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002410}
Craig Topperfc179c62018-03-22 04:23:41 +00002411def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2412 "VHADDPSYrm",
2413 "VHSUBPDYrm",
2414 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002415
Craig Topper8104f262018-04-02 05:33:28 +00002416def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002417 let Latency = 14;
2418 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002419 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002420}
Craig Topper8104f262018-04-02 05:33:28 +00002421def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002422 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002423
Craig Topper8104f262018-04-02 05:33:28 +00002424def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2425 let Latency = 14;
2426 let NumMicroOps = 1;
2427 let ResourceCycles = [1,5];
2428}
2429def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2430
Craig Topper58afb4e2018-03-22 21:10:07 +00002431def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002432 let Latency = 14;
2433 let NumMicroOps = 3;
2434 let ResourceCycles = [1,2];
2435}
Craig Topperfc179c62018-03-22 04:23:41 +00002436def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2437def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2438def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2439def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002440
2441def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2442 let Latency = 14;
2443 let NumMicroOps = 3;
2444 let ResourceCycles = [1,1,1];
2445}
Craig Topperfc179c62018-03-22 04:23:41 +00002446def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2447 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002448
2449def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002450 let Latency = 14;
2451 let NumMicroOps = 10;
2452 let ResourceCycles = [2,4,1,3];
2453}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002454def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002455
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002456def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002457 let Latency = 15;
2458 let NumMicroOps = 1;
2459 let ResourceCycles = [1];
2460}
Craig Topperfc179c62018-03-22 04:23:41 +00002461def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2462 "DIVR_FST0r",
2463 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002464
Craig Topper58afb4e2018-03-22 21:10:07 +00002465def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002466 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002467 let NumMicroOps = 3;
2468 let ResourceCycles = [1,2];
2469}
Craig Topper40d3b322018-03-22 21:55:20 +00002470def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2471 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002472
Craig Topperd25f1ac2018-03-20 23:39:48 +00002473def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2474 let Latency = 17;
2475 let NumMicroOps = 3;
2476 let ResourceCycles = [1,2];
2477}
2478def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2479
Craig Topper58afb4e2018-03-22 21:10:07 +00002480def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002481 let Latency = 15;
2482 let NumMicroOps = 4;
2483 let ResourceCycles = [1,1,2];
2484}
Craig Topperfc179c62018-03-22 04:23:41 +00002485def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002486
2487def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2488 let Latency = 15;
2489 let NumMicroOps = 10;
2490 let ResourceCycles = [1,1,1,5,1,1];
2491}
Craig Topper13a16502018-03-19 00:56:09 +00002492def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002493
Craig Topper8104f262018-04-02 05:33:28 +00002494def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002495 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002496 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002497 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002498}
Craig Topperfc179c62018-03-22 04:23:41 +00002499def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002500
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002501def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2502 let Latency = 16;
2503 let NumMicroOps = 14;
2504 let ResourceCycles = [1,1,1,4,2,5];
2505}
2506def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2507
2508def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002509 let Latency = 16;
2510 let NumMicroOps = 16;
2511 let ResourceCycles = [16];
2512}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002513def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002514
Craig Topper8104f262018-04-02 05:33:28 +00002515def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002516 let Latency = 17;
2517 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002518 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002519}
Craig Topper8104f262018-04-02 05:33:28 +00002520def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2521
2522def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2523 let Latency = 17;
2524 let NumMicroOps = 2;
2525 let ResourceCycles = [1,1,3];
2526}
2527def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002528
2529def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002530 let Latency = 17;
2531 let NumMicroOps = 15;
2532 let ResourceCycles = [2,1,2,4,2,4];
2533}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002534def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002535
Craig Topper8104f262018-04-02 05:33:28 +00002536def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002537 let Latency = 18;
2538 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002539 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002540}
Craig Topper8104f262018-04-02 05:33:28 +00002541def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002542 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002543
Craig Topper8104f262018-04-02 05:33:28 +00002544def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2545 let Latency = 18;
2546 let NumMicroOps = 1;
2547 let ResourceCycles = [1,12];
2548}
2549def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2550
2551def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002552 let Latency = 18;
2553 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002554 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002555}
Craig Topper8104f262018-04-02 05:33:28 +00002556def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2557
2558def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2559 let Latency = 18;
2560 let NumMicroOps = 2;
2561 let ResourceCycles = [1,1,3];
2562}
2563def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002564
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002565def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002566 let Latency = 18;
2567 let NumMicroOps = 8;
2568 let ResourceCycles = [1,1,1,5];
2569}
Craig Topperfc179c62018-03-22 04:23:41 +00002570def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002571
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002572def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002573 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002574 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002575 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002576}
Craig Topper13a16502018-03-19 00:56:09 +00002577def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002578
Craig Topper8104f262018-04-02 05:33:28 +00002579def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002580 let Latency = 19;
2581 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002582 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002583}
Craig Topper8104f262018-04-02 05:33:28 +00002584def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2585
2586def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2587 let Latency = 19;
2588 let NumMicroOps = 2;
2589 let ResourceCycles = [1,1,6];
2590}
2591def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002592
Craig Topper58afb4e2018-03-22 21:10:07 +00002593def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002594 let Latency = 19;
2595 let NumMicroOps = 5;
2596 let ResourceCycles = [1,1,3];
2597}
Craig Topperfc179c62018-03-22 04:23:41 +00002598def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002599
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002600def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002601 let Latency = 20;
2602 let NumMicroOps = 1;
2603 let ResourceCycles = [1];
2604}
Craig Topperfc179c62018-03-22 04:23:41 +00002605def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2606 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002607 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002608
Craig Topper8104f262018-04-02 05:33:28 +00002609def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002610 let Latency = 20;
2611 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002612 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002613}
Craig Topperfc179c62018-03-22 04:23:41 +00002614def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002615
Craig Topper58afb4e2018-03-22 21:10:07 +00002616def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002617 let Latency = 20;
2618 let NumMicroOps = 5;
2619 let ResourceCycles = [1,1,3];
2620}
2621def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2622
2623def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2624 let Latency = 20;
2625 let NumMicroOps = 8;
2626 let ResourceCycles = [1,1,1,1,1,1,2];
2627}
Craig Topperfc179c62018-03-22 04:23:41 +00002628def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2629 "INSL",
2630 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002631
2632def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002633 let Latency = 20;
2634 let NumMicroOps = 10;
2635 let ResourceCycles = [1,2,7];
2636}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002637def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002638
Craig Topper8104f262018-04-02 05:33:28 +00002639def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002640 let Latency = 21;
2641 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002642 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002643}
2644def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2645
2646def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2647 let Latency = 22;
2648 let NumMicroOps = 2;
2649 let ResourceCycles = [1,1];
2650}
Craig Topperfc179c62018-03-22 04:23:41 +00002651def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2652 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002653
2654def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2655 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002656 let NumMicroOps = 5;
2657 let ResourceCycles = [1,2,1,1];
2658}
Craig Topper17a31182017-12-16 18:35:29 +00002659def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2660 VGATHERDPDrm,
2661 VGATHERQPDrm,
2662 VGATHERQPSrm,
2663 VPGATHERDDrm,
2664 VPGATHERDQrm,
2665 VPGATHERQDrm,
2666 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002667
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002668def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2669 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002670 let NumMicroOps = 5;
2671 let ResourceCycles = [1,2,1,1];
2672}
Craig Topper17a31182017-12-16 18:35:29 +00002673def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2674 VGATHERQPDYrm,
2675 VGATHERQPSYrm,
2676 VPGATHERDDYrm,
2677 VPGATHERDQYrm,
2678 VPGATHERQDYrm,
2679 VPGATHERQQYrm,
2680 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002681
Craig Topper8104f262018-04-02 05:33:28 +00002682def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002683 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002684 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002685 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002686}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002687def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002688
2689def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2690 let Latency = 23;
2691 let NumMicroOps = 19;
2692 let ResourceCycles = [2,1,4,1,1,4,6];
2693}
2694def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2695
Craig Topper8104f262018-04-02 05:33:28 +00002696def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002697 let Latency = 24;
2698 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002699 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002700}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002701def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002702
Craig Topper8104f262018-04-02 05:33:28 +00002703def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002704 let Latency = 25;
2705 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002706 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002707}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002708def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002709
2710def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2711 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002712 let NumMicroOps = 3;
2713 let ResourceCycles = [1,1,1];
2714}
Craig Topperfc179c62018-03-22 04:23:41 +00002715def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2716 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002717
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002718def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2719 let Latency = 27;
2720 let NumMicroOps = 2;
2721 let ResourceCycles = [1,1];
2722}
Craig Topperfc179c62018-03-22 04:23:41 +00002723def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2724 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002725
2726def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2727 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002728 let NumMicroOps = 8;
2729 let ResourceCycles = [2,4,1,1];
2730}
Craig Topper13a16502018-03-19 00:56:09 +00002731def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002732
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002733def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002734 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002735 let NumMicroOps = 3;
2736 let ResourceCycles = [1,1,1];
2737}
Craig Topperfc179c62018-03-22 04:23:41 +00002738def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2739 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002740
2741def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2742 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002743 let NumMicroOps = 23;
2744 let ResourceCycles = [1,5,3,4,10];
2745}
Craig Topperfc179c62018-03-22 04:23:41 +00002746def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2747 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002748
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002749def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2750 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002751 let NumMicroOps = 23;
2752 let ResourceCycles = [1,5,2,1,4,10];
2753}
Craig Topperfc179c62018-03-22 04:23:41 +00002754def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2755 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002756
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002757def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2758 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002759 let NumMicroOps = 31;
2760 let ResourceCycles = [1,8,1,21];
2761}
Craig Topper391c6f92017-12-10 01:24:08 +00002762def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002763
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002764def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2765 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002766 let NumMicroOps = 18;
2767 let ResourceCycles = [1,1,2,3,1,1,1,8];
2768}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002769def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002770
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002771def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2772 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002773 let NumMicroOps = 39;
2774 let ResourceCycles = [1,10,1,1,26];
2775}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002776def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002777
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002778def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002779 let Latency = 42;
2780 let NumMicroOps = 22;
2781 let ResourceCycles = [2,20];
2782}
Craig Topper2d451e72018-03-18 08:38:06 +00002783def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002784
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002785def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2786 let Latency = 42;
2787 let NumMicroOps = 40;
2788 let ResourceCycles = [1,11,1,1,26];
2789}
Craig Topper391c6f92017-12-10 01:24:08 +00002790def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002791
2792def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2793 let Latency = 46;
2794 let NumMicroOps = 44;
2795 let ResourceCycles = [1,11,1,1,30];
2796}
2797def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2798
2799def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2800 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002801 let NumMicroOps = 64;
2802 let ResourceCycles = [2,8,5,10,39];
2803}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002804def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002805
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002806def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2807 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002808 let NumMicroOps = 88;
2809 let ResourceCycles = [4,4,31,1,2,1,45];
2810}
Craig Topper2d451e72018-03-18 08:38:06 +00002811def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002812
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002813def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2814 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002815 let NumMicroOps = 90;
2816 let ResourceCycles = [4,2,33,1,2,1,47];
2817}
Craig Topper2d451e72018-03-18 08:38:06 +00002818def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002819
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002820def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002821 let Latency = 75;
2822 let NumMicroOps = 15;
2823 let ResourceCycles = [6,3,6];
2824}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002825def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002826
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002827def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002828 let Latency = 76;
2829 let NumMicroOps = 32;
2830 let ResourceCycles = [7,2,8,3,1,11];
2831}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002832def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002833
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002834def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002835 let Latency = 102;
2836 let NumMicroOps = 66;
2837 let ResourceCycles = [4,2,4,8,14,34];
2838}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002839def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002840
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002841def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2842 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002843 let NumMicroOps = 100;
2844 let ResourceCycles = [9,1,11,16,1,11,21,30];
2845}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002846def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002847
2848} // SchedModel