blob: c5d63d0009bb626a96f58f1a834a0d384c546a3e [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : SKLWriteResPair<WriteCMOV, [SKLPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [SKLPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [SKLPort06,SKLPort4,SKLPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
125defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
126defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
127defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
134defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
135
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteMove, [SKLPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
145// Branches don't produce values, so they have no latency, but they still
146// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000148
149// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000150def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
151def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
152def : WriteRes<WriteFMove, [SKLPort015]>;
153
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
156defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000157defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
158defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
159defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000160defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4>; // Floating point reciprocal estimate.
161defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4>; // Floating point reciprocal square root estimate.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
164defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000167defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1>; // Floating point vector blends.
168defm : SKLWriteResPair<WriteFVarBlend, [SKLPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000169
170// FMA Scheduling helper class.
171// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
172
173// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000174def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
175def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
176def : WriteRes<WriteVecMove, [SKLPort015]>;
177
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000178defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000179defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
181defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000182defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000184defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000185defm : SKLWriteResPair<WriteBlend, [SKLPort15], 1>; // Vector blends.
186defm : SKLWriteResPair<WriteVarBlend, [SKLPort5], 2, [2]>; // Vector variable blends.
187defm : SKLWriteResPair<WriteMPSAD, [SKLPort0, SKLPort5], 6, [1, 2]>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000188defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000189
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000191defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
192defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
193defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000194
195// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000197// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000198def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
199 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000200 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000201 let ResourceCycles = [3];
202}
203def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000204 let Latency = 16;
205 let NumMicroOps = 4;
206 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000207}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000208
209// Packed Compare Explicit Length Strings, Return Mask
210def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
211 let Latency = 19;
212 let NumMicroOps = 9;
213 let ResourceCycles = [4,3,1,1];
214}
215def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
216 let Latency = 25;
217 let NumMicroOps = 10;
218 let ResourceCycles = [4,3,1,1,1];
219}
220
221// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000222def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000223 let Latency = 10;
224 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000225 let ResourceCycles = [3];
226}
227def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000228 let Latency = 16;
229 let NumMicroOps = 4;
230 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000232
233// Packed Compare Explicit Length Strings, Return Index
234def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
235 let Latency = 18;
236 let NumMicroOps = 8;
237 let ResourceCycles = [4,3,1];
238}
239def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
240 let Latency = 24;
241 let NumMicroOps = 9;
242 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000243}
244
Simon Pilgrima2f26782018-03-27 20:38:54 +0000245// MOVMSK Instructions.
246def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
247def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
248def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
249
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000250// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000251def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
252 let Latency = 4;
253 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000254 let ResourceCycles = [1];
255}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
257 let Latency = 10;
258 let NumMicroOps = 2;
259 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000260}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261
262def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
263 let Latency = 8;
264 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265 let ResourceCycles = [2];
266}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000268 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000269 let NumMicroOps = 3;
270 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000272
273def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
274 let Latency = 20;
275 let NumMicroOps = 11;
276 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000278def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
279 let Latency = 25;
280 let NumMicroOps = 11;
281 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000282}
283
284// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000285def : WriteRes<WriteCLMul, [SKLPort5]> {
286 let Latency = 6;
287 let NumMicroOps = 1;
288 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000289}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000290def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
291 let Latency = 12;
292 let NumMicroOps = 2;
293 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000294}
295
296// Catch-all for expensive system instructions.
297def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
298
299// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000300defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000301defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000302defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000303defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000304defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305
306// Old microcoded instructions that nobody use.
307def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
308
309// Fence instructions.
310def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
311
312// Nop, not very useful expect it provides a model for nops!
313def : WriteRes<WriteNop, []>;
314
315////////////////////////////////////////////////////////////////////////////////
316// Horizontal add/sub instructions.
317////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000318
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000319defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
320defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000321
322// Remaining instrs.
323
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000324def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000325 let Latency = 1;
326 let NumMicroOps = 1;
327 let ResourceCycles = [1];
328}
Craig Topperfc179c62018-03-22 04:23:41 +0000329def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
330 "MMX_PADDSWirr",
331 "MMX_PADDUSBirr",
332 "MMX_PADDUSWirr",
333 "MMX_PAVGBirr",
334 "MMX_PAVGWirr",
335 "MMX_PCMPEQBirr",
336 "MMX_PCMPEQDirr",
337 "MMX_PCMPEQWirr",
338 "MMX_PCMPGTBirr",
339 "MMX_PCMPGTDirr",
340 "MMX_PCMPGTWirr",
341 "MMX_PMAXSWirr",
342 "MMX_PMAXUBirr",
343 "MMX_PMINSWirr",
344 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000345 "MMX_PSUBSBirr",
346 "MMX_PSUBSWirr",
347 "MMX_PSUBUSBirr",
348 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000349
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000350def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000351 let Latency = 1;
352 let NumMicroOps = 1;
353 let ResourceCycles = [1];
354}
Craig Topperfc179c62018-03-22 04:23:41 +0000355def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
356 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000357 "MMX_MOVD64rr",
358 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000359 "UCOM_FPr",
360 "UCOM_Fr",
Craig Topperfc179c62018-03-22 04:23:41 +0000361 "VBROADCASTSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000362 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000363 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000364 "(V?)PACKSSDW(Y?)rr",
365 "(V?)PACKSSWB(Y?)rr",
366 "(V?)PACKUSDW(Y?)rr",
367 "(V?)PACKUSWB(Y?)rr",
368 "(V?)PALIGNR(Y?)rri",
369 "(V?)PBLENDW(Y?)rri",
Craig Topperfc179c62018-03-22 04:23:41 +0000370 "VPBROADCASTDrr",
371 "VPBROADCASTQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000372 "(V?)PMOVSXBDrr",
373 "(V?)PMOVSXBQrr",
374 "(V?)PMOVSXBWrr",
375 "(V?)PMOVSXDQrr",
376 "(V?)PMOVSXWDrr",
377 "(V?)PMOVSXWQrr",
378 "(V?)PMOVZXBDrr",
379 "(V?)PMOVZXBQrr",
380 "(V?)PMOVZXBWrr",
381 "(V?)PMOVZXDQrr",
382 "(V?)PMOVZXWDrr",
383 "(V?)PMOVZXWQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000384 "(V?)PSHUFD(Y?)ri",
385 "(V?)PSHUFHW(Y?)ri",
386 "(V?)PSHUFLW(Y?)ri",
387 "(V?)PSLLDQ(Y?)ri",
388 "(V?)PSRLDQ(Y?)ri",
389 "(V?)PUNPCKHBW(Y?)rr",
390 "(V?)PUNPCKHDQ(Y?)rr",
391 "(V?)PUNPCKHQDQ(Y?)rr",
392 "(V?)PUNPCKHWD(Y?)rr",
393 "(V?)PUNPCKLBW(Y?)rr",
394 "(V?)PUNPCKLDQ(Y?)rr",
395 "(V?)PUNPCKLQDQ(Y?)rr",
Simon Pilgrim21935242018-04-21 14:56:56 +0000396 "(V?)PUNPCKLWD(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000397
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000398def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000399 let Latency = 1;
400 let NumMicroOps = 1;
401 let ResourceCycles = [1];
402}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000403def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000404
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000405def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000406 let Latency = 1;
407 let NumMicroOps = 1;
408 let ResourceCycles = [1];
409}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000410def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
411 "(V?)PABSD(Y?)rr",
412 "(V?)PABSW(Y?)rr",
413 "(V?)PADDSB(Y?)rr",
414 "(V?)PADDSW(Y?)rr",
415 "(V?)PADDUSB(Y?)rr",
416 "(V?)PADDUSW(Y?)rr",
417 "(V?)PAVGB(Y?)rr",
418 "(V?)PAVGW(Y?)rr",
419 "(V?)PCMPEQB(Y?)rr",
420 "(V?)PCMPEQD(Y?)rr",
421 "(V?)PCMPEQQ(Y?)rr",
422 "(V?)PCMPEQW(Y?)rr",
423 "(V?)PCMPGTB(Y?)rr",
424 "(V?)PCMPGTD(Y?)rr",
425 "(V?)PCMPGTW(Y?)rr",
426 "(V?)PMAXSB(Y?)rr",
427 "(V?)PMAXSD(Y?)rr",
428 "(V?)PMAXSW(Y?)rr",
429 "(V?)PMAXUB(Y?)rr",
430 "(V?)PMAXUD(Y?)rr",
431 "(V?)PMAXUW(Y?)rr",
432 "(V?)PMINSB(Y?)rr",
433 "(V?)PMINSD(Y?)rr",
434 "(V?)PMINSW(Y?)rr",
435 "(V?)PMINUB(Y?)rr",
436 "(V?)PMINUD(Y?)rr",
437 "(V?)PMINUW(Y?)rr",
438 "(V?)PSIGNB(Y?)rr",
439 "(V?)PSIGND(Y?)rr",
440 "(V?)PSIGNW(Y?)rr",
441 "(V?)PSLLD(Y?)ri",
442 "(V?)PSLLQ(Y?)ri",
443 "VPSLLVD(Y?)rr",
444 "VPSLLVQ(Y?)rr",
445 "(V?)PSLLW(Y?)ri",
446 "(V?)PSRAD(Y?)ri",
447 "VPSRAVD(Y?)rr",
448 "(V?)PSRAW(Y?)ri",
449 "(V?)PSRLD(Y?)ri",
450 "(V?)PSRLQ(Y?)ri",
451 "VPSRLVD(Y?)rr",
452 "VPSRLVQ(Y?)rr",
453 "(V?)PSRLW(Y?)ri",
454 "(V?)PSUBSB(Y?)rr",
455 "(V?)PSUBSW(Y?)rr",
456 "(V?)PSUBUSB(Y?)rr",
457 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000458
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000459def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000460 let Latency = 1;
461 let NumMicroOps = 1;
462 let ResourceCycles = [1];
463}
Craig Topperfc179c62018-03-22 04:23:41 +0000464def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
465 "FNOP",
466 "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000467 "MMX_PABS(B|D|W)rr",
468 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000469 "MMX_PANDNirr",
470 "MMX_PANDirr",
471 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000472 "MMX_PSIGN(B|D|W)rr",
473 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000474 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000475
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000476def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000477 let Latency = 1;
478 let NumMicroOps = 1;
479 let ResourceCycles = [1];
480}
Craig Topperfbe31322018-04-05 21:56:19 +0000481def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000482def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
483 "ADC(16|32|64)i",
484 "ADC(8|16|32|64)rr",
485 "ADCX(32|64)rr",
486 "ADOX(32|64)rr",
487 "BT(16|32|64)ri8",
488 "BT(16|32|64)rr",
489 "BTC(16|32|64)ri8",
490 "BTC(16|32|64)rr",
491 "BTR(16|32|64)ri8",
492 "BTR(16|32|64)rr",
493 "BTS(16|32|64)ri8",
494 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000495 "CLAC",
Craig Topperfc179c62018-03-22 04:23:41 +0000496 "RORX(32|64)ri",
497 "SAR(8|16|32|64)r1",
498 "SAR(8|16|32|64)ri",
499 "SARX(32|64)rr",
500 "SBB(16|32|64)ri",
501 "SBB(16|32|64)i",
502 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000503 "SHL(8|16|32|64)r1",
504 "SHL(8|16|32|64)ri",
505 "SHLX(32|64)rr",
506 "SHR(8|16|32|64)r1",
507 "SHR(8|16|32|64)ri",
508 "SHRX(32|64)rr",
509 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000510
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000511def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
512 let Latency = 1;
513 let NumMicroOps = 1;
514 let ResourceCycles = [1];
515}
Craig Topperfc179c62018-03-22 04:23:41 +0000516def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
517 "BLSI(32|64)rr",
518 "BLSMSK(32|64)rr",
519 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000520 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000521
522def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
523 let Latency = 1;
524 let NumMicroOps = 1;
525 let ResourceCycles = [1];
526}
Simon Pilgrim21935242018-04-21 14:56:56 +0000527def: InstRW<[SKLWriteResGroup9], (instregex "(V?)MOVAPD(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000528 "(V?)MOVAPS(Y?)rr",
529 "(V?)MOVDQA(Y?)rr",
530 "(V?)MOVDQU(Y?)rr",
531 "(V?)MOVPQI2QIrr",
Craig Topper15fef892018-03-25 23:40:56 +0000532 "(V?)MOVUPD(Y?)rr",
533 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000534 "(V?)MOVZPQILo2PQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000535 "(V?)PADDB(Y?)rr",
536 "(V?)PADDD(Y?)rr",
537 "(V?)PADDQ(Y?)rr",
538 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000539 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000540 "(V?)PSUBB(Y?)rr",
541 "(V?)PSUBD(Y?)rr",
542 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000543 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000544
545def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
546 let Latency = 1;
547 let NumMicroOps = 1;
548 let ResourceCycles = [1];
549}
Craig Topperfbe31322018-04-05 21:56:19 +0000550def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000551def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000552 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000553 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000554 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000555 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000556 "SGDT64m",
557 "SIDT64m",
558 "SLDT64m",
559 "SMSW16m",
560 "STC",
561 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000562 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000563
564def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000565 let Latency = 1;
566 let NumMicroOps = 2;
567 let ResourceCycles = [1,1];
568}
Craig Topperfc179c62018-03-22 04:23:41 +0000569def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
570 "MMX_MOVD64from64rm",
571 "MMX_MOVD64mr",
572 "MMX_MOVNTQmr",
573 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000574 "MOVNTI_64mr",
575 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000576 "ST_FP32m",
577 "ST_FP64m",
578 "ST_FP80m",
579 "VEXTRACTF128mr",
580 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000581 "(V?)MOVAPDYmr",
582 "(V?)MOVAPS(Y?)mr",
583 "(V?)MOVDQA(Y?)mr",
584 "(V?)MOVDQU(Y?)mr",
585 "(V?)MOVHPDmr",
586 "(V?)MOVHPSmr",
587 "(V?)MOVLPDmr",
588 "(V?)MOVLPSmr",
589 "(V?)MOVNTDQ(Y?)mr",
590 "(V?)MOVNTPD(Y?)mr",
591 "(V?)MOVNTPS(Y?)mr",
592 "(V?)MOVPDI2DImr",
593 "(V?)MOVPQI2QImr",
594 "(V?)MOVPQIto64mr",
595 "(V?)MOVSDmr",
596 "(V?)MOVSSmr",
597 "(V?)MOVUPD(Y?)mr",
598 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000599 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000600
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000601def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000602 let Latency = 2;
603 let NumMicroOps = 1;
604 let ResourceCycles = [1];
605}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000606def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000607 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000608 "(V?)MOVPDI2DIrr",
609 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000610 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000611 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000612
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000613def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000614 let Latency = 2;
615 let NumMicroOps = 2;
616 let ResourceCycles = [2];
617}
Craig Topperfc179c62018-03-22 04:23:41 +0000618def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
619 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000620 "(V?)PINSRBrr",
621 "(V?)PINSRDrr",
622 "(V?)PINSRQrr",
623 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000624
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000625def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000626 let Latency = 2;
627 let NumMicroOps = 2;
628 let ResourceCycles = [2];
629}
Craig Topperfc179c62018-03-22 04:23:41 +0000630def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
631 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000632
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000633def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000634 let Latency = 2;
635 let NumMicroOps = 2;
636 let ResourceCycles = [2];
637}
Craig Topperfc179c62018-03-22 04:23:41 +0000638def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
639 "ROL(8|16|32|64)r1",
640 "ROL(8|16|32|64)ri",
641 "ROR(8|16|32|64)r1",
642 "ROR(8|16|32|64)ri",
643 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000644
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000645def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000646 let Latency = 2;
647 let NumMicroOps = 2;
648 let ResourceCycles = [2];
649}
Craig Topperfc179c62018-03-22 04:23:41 +0000650def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
651 "BLENDVPSrr0",
652 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000653 "VBLENDVPD(Y?)rr",
654 "VBLENDVPS(Y?)rr",
655 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000656
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000657def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000658 let Latency = 2;
659 let NumMicroOps = 2;
660 let ResourceCycles = [2];
661}
Craig Topperfc179c62018-03-22 04:23:41 +0000662def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
663 "WAIT",
664 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000665
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000666def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000667 let Latency = 2;
668 let NumMicroOps = 2;
669 let ResourceCycles = [1,1];
670}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000671def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
672 "VMASKMOVPS(Y?)mr",
673 "VPMASKMOVD(Y?)mr",
674 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000675
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000676def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000677 let Latency = 2;
678 let NumMicroOps = 2;
679 let ResourceCycles = [1,1];
680}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000681def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
682 "(V?)PSLLQrr",
683 "(V?)PSLLWrr",
684 "(V?)PSRADrr",
685 "(V?)PSRAWrr",
686 "(V?)PSRLDrr",
687 "(V?)PSRLQrr",
688 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000689
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000690def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000691 let Latency = 2;
692 let NumMicroOps = 2;
693 let ResourceCycles = [1,1];
694}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000695def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000696
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000697def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000698 let Latency = 2;
699 let NumMicroOps = 2;
700 let ResourceCycles = [1,1];
701}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000702def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000703
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000704def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000705 let Latency = 2;
706 let NumMicroOps = 2;
707 let ResourceCycles = [1,1];
708}
Craig Topper498875f2018-04-04 17:54:19 +0000709def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
710
711def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
712 let Latency = 1;
713 let NumMicroOps = 1;
714 let ResourceCycles = [1];
715}
716def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000717
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000718def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000719 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000720 let NumMicroOps = 2;
721 let ResourceCycles = [1,1];
722}
Craig Topper2d451e72018-03-18 08:38:06 +0000723def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000724def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000725def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
726 "ADC8ri",
727 "SBB8i8",
728 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000729
730def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
731 let Latency = 2;
732 let NumMicroOps = 3;
733 let ResourceCycles = [1,1,1];
734}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000735def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
736 "(V?)PEXTRBmr",
737 "(V?)PEXTRDmr",
738 "(V?)PEXTRQmr",
739 "(V?)PEXTRWmr",
740 "(V?)STMXCSR")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000741
742def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
743 let Latency = 2;
744 let NumMicroOps = 3;
745 let ResourceCycles = [1,1,1];
746}
747def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
748
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000749def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
750 let Latency = 2;
751 let NumMicroOps = 3;
752 let ResourceCycles = [1,1,1];
753}
754def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
755
756def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
757 let Latency = 2;
758 let NumMicroOps = 3;
759 let ResourceCycles = [1,1,1];
760}
Craig Topper2d451e72018-03-18 08:38:06 +0000761def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000762def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
763 "PUSH64i8",
764 "STOSB",
765 "STOSL",
766 "STOSQ",
767 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000768
769def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
770 let Latency = 3;
771 let NumMicroOps = 1;
772 let ResourceCycles = [1];
773}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000774def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000775 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000776 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000777 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000778
Clement Courbet327fac42018-03-07 08:14:02 +0000779def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000780 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000781 let NumMicroOps = 2;
782 let ResourceCycles = [1,1];
783}
Clement Courbet327fac42018-03-07 08:14:02 +0000784def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000785
786def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
787 let Latency = 3;
788 let NumMicroOps = 1;
789 let ResourceCycles = [1];
790}
Craig Topperfc179c62018-03-22 04:23:41 +0000791def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
792 "ADD_FST0r",
793 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000794 "SUBR_FPrST0",
795 "SUBR_FST0r",
796 "SUBR_FrST0",
797 "SUB_FPrST0",
798 "SUB_FST0r",
799 "SUB_FrST0",
800 "VBROADCASTSDYrr",
801 "VBROADCASTSSYrr",
802 "VEXTRACTF128rr",
803 "VEXTRACTI128rr",
804 "VINSERTF128rr",
805 "VINSERTI128rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000806 "VPBROADCASTB(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000807 "VPBROADCASTDYrr",
808 "VPBROADCASTQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000809 "VPBROADCASTW(Y?)rr",
810 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000811 "VPERM2F128rr",
812 "VPERM2I128rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000813 "VPERMPDYri",
Craig Topperfc179c62018-03-22 04:23:41 +0000814 "VPERMQYri",
815 "VPMOVSXBDYrr",
816 "VPMOVSXBQYrr",
817 "VPMOVSXBWYrr",
818 "VPMOVSXDQYrr",
819 "VPMOVSXWDYrr",
820 "VPMOVSXWQYrr",
821 "VPMOVZXBDYrr",
822 "VPMOVZXBQYrr",
823 "VPMOVZXBWYrr",
824 "VPMOVZXDQYrr",
825 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000826 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000827
828def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
829 let Latency = 3;
830 let NumMicroOps = 2;
831 let ResourceCycles = [1,1];
832}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000833def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
834 "(V?)EXTRACTPSrr",
835 "(V?)PEXTRBrr",
836 "(V?)PEXTRDrr",
837 "(V?)PEXTRQrr",
838 "(V?)PEXTRWrr",
839 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000840
841def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
842 let Latency = 3;
843 let NumMicroOps = 2;
844 let ResourceCycles = [1,1];
845}
846def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
847
848def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
849 let Latency = 3;
850 let NumMicroOps = 3;
851 let ResourceCycles = [3];
852}
Craig Topperfc179c62018-03-22 04:23:41 +0000853def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
854 "ROR(8|16|32|64)rCL",
855 "SAR(8|16|32|64)rCL",
856 "SHL(8|16|32|64)rCL",
857 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000858
859def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000860 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000861 let NumMicroOps = 3;
862 let ResourceCycles = [3];
863}
Craig Topperb5f26592018-04-19 18:00:17 +0000864def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
865 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
866 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000867
868def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
869 let Latency = 3;
870 let NumMicroOps = 3;
871 let ResourceCycles = [1,2];
872}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000873def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000874
875def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
876 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000877 let NumMicroOps = 3;
878 let ResourceCycles = [2,1];
879}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000880def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
881 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000882
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000883def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
884 let Latency = 3;
885 let NumMicroOps = 3;
886 let ResourceCycles = [2,1];
887}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000888def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000889
890def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
891 let Latency = 3;
892 let NumMicroOps = 3;
893 let ResourceCycles = [2,1];
894}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000895def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
896 "(V?)PHADDW(Y?)rr",
897 "(V?)PHSUBD(Y?)rr",
898 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000899
900def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
901 let Latency = 3;
902 let NumMicroOps = 3;
903 let ResourceCycles = [2,1];
904}
Craig Topperfc179c62018-03-22 04:23:41 +0000905def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
906 "MMX_PACKSSWBirr",
907 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000908
909def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
910 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000911 let NumMicroOps = 3;
912 let ResourceCycles = [1,2];
913}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000914def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000915
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000916def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
917 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000918 let NumMicroOps = 3;
919 let ResourceCycles = [1,2];
920}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000921def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000922
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000923def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
924 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000925 let NumMicroOps = 3;
926 let ResourceCycles = [1,2];
927}
Craig Topperfc179c62018-03-22 04:23:41 +0000928def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
929 "RCL(8|16|32|64)ri",
930 "RCR(8|16|32|64)r1",
931 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000932
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000933def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
934 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000935 let NumMicroOps = 3;
936 let ResourceCycles = [1,1,1];
937}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000938def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000939
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000940def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
941 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000942 let NumMicroOps = 4;
943 let ResourceCycles = [1,1,2];
944}
Craig Topperf4cd9082018-01-19 05:47:32 +0000945def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000946
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000947def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
948 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000949 let NumMicroOps = 4;
950 let ResourceCycles = [1,1,1,1];
951}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000952def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000953
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000954def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
955 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000956 let NumMicroOps = 4;
957 let ResourceCycles = [1,1,1,1];
958}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000959def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000960
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000961def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000962 let Latency = 4;
963 let NumMicroOps = 1;
964 let ResourceCycles = [1];
965}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000966def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000967 "MMX_PMADDWDirr",
968 "MMX_PMULHRSWrr",
969 "MMX_PMULHUWirr",
970 "MMX_PMULHWirr",
971 "MMX_PMULLWirr",
972 "MMX_PMULUDQirr",
973 "MUL_FPrST0",
974 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000975 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000976
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000977def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000978 let Latency = 4;
979 let NumMicroOps = 1;
980 let ResourceCycles = [1];
981}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000982def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
983 "(V?)ADDPS(Y?)rr",
984 "(V?)ADDSDrr",
985 "(V?)ADDSSrr",
986 "(V?)ADDSUBPD(Y?)rr",
987 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000988 "(V?)CVTDQ2PS(Y?)rr",
989 "(V?)CVTPS2DQ(Y?)rr",
990 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000991 "(V?)MULPD(Y?)rr",
992 "(V?)MULPS(Y?)rr",
993 "(V?)MULSDrr",
994 "(V?)MULSSrr",
995 "(V?)PHMINPOSUWrr",
996 "(V?)PMADDUBSW(Y?)rr",
997 "(V?)PMADDWD(Y?)rr",
998 "(V?)PMULDQ(Y?)rr",
999 "(V?)PMULHRSW(Y?)rr",
1000 "(V?)PMULHUW(Y?)rr",
1001 "(V?)PMULHW(Y?)rr",
1002 "(V?)PMULLW(Y?)rr",
1003 "(V?)PMULUDQ(Y?)rr",
1004 "(V?)SUBPD(Y?)rr",
1005 "(V?)SUBPS(Y?)rr",
1006 "(V?)SUBSDrr",
1007 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001009def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001010 let Latency = 4;
1011 let NumMicroOps = 2;
1012 let ResourceCycles = [2];
1013}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001014def: InstRW<[SKLWriteResGroup50], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001015
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001016def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001017 let Latency = 4;
1018 let NumMicroOps = 2;
1019 let ResourceCycles = [1,1];
1020}
Craig Topperf846e2d2018-04-19 05:34:05 +00001021def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001022
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001023def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1024 let Latency = 4;
1025 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001026 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001027}
Craig Topperfc179c62018-03-22 04:23:41 +00001028def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001029
1030def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001031 let Latency = 4;
1032 let NumMicroOps = 2;
1033 let ResourceCycles = [1,1];
1034}
Craig Topperfc179c62018-03-22 04:23:41 +00001035def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1036 "VPSLLQYrr",
1037 "VPSLLWYrr",
1038 "VPSRADYrr",
1039 "VPSRAWYrr",
1040 "VPSRLDYrr",
1041 "VPSRLQYrr",
1042 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001043
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001044def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001045 let Latency = 4;
1046 let NumMicroOps = 3;
1047 let ResourceCycles = [1,1,1];
1048}
Craig Topperfc179c62018-03-22 04:23:41 +00001049def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1050 "ISTT_FP32m",
1051 "ISTT_FP64m",
1052 "IST_F16m",
1053 "IST_F32m",
1054 "IST_FP16m",
1055 "IST_FP32m",
1056 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001057
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001058def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001059 let Latency = 4;
1060 let NumMicroOps = 4;
1061 let ResourceCycles = [4];
1062}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001063def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001064
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001065def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001066 let Latency = 4;
1067 let NumMicroOps = 4;
1068 let ResourceCycles = [1,3];
1069}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001070def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001071
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001072def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001073 let Latency = 4;
1074 let NumMicroOps = 4;
1075 let ResourceCycles = [1,3];
1076}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001077def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001078
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001079def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001080 let Latency = 4;
1081 let NumMicroOps = 4;
1082 let ResourceCycles = [1,1,2];
1083}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001084def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001085
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001086def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1087 let Latency = 5;
1088 let NumMicroOps = 1;
1089 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001090}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001091def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001092 "MOVSX(16|32|64)rm32",
1093 "MOVSX(16|32|64)rm8",
1094 "MOVZX(16|32|64)rm16",
1095 "MOVZX(16|32|64)rm8",
1096 "PREFETCHNTA",
1097 "PREFETCHT0",
1098 "PREFETCHT1",
1099 "PREFETCHT2",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001100 "(V?)MOV64toPQIrm",
1101 "(V?)MOVDDUPrm",
1102 "(V?)MOVDI2PDIrm",
1103 "(V?)MOVQI2PQIrm",
1104 "(V?)MOVSDrm",
1105 "(V?)MOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001106
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001107def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001108 let Latency = 5;
1109 let NumMicroOps = 2;
1110 let ResourceCycles = [1,1];
1111}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001112def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1113 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001114
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001115def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001116 let Latency = 5;
1117 let NumMicroOps = 2;
1118 let ResourceCycles = [1,1];
1119}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001120def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001121 "MMX_CVTPS2PIirr",
1122 "MMX_CVTTPD2PIirr",
1123 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001124 "(V?)CVTPD2DQrr",
1125 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001126 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001127 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001128 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001129 "(V?)CVTSD2SSrr",
1130 "(V?)CVTSI642SDrr",
1131 "(V?)CVTSI2SDrr",
1132 "(V?)CVTSI2SSrr",
1133 "(V?)CVTSS2SDrr",
1134 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001135
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001136def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001137 let Latency = 5;
1138 let NumMicroOps = 3;
1139 let ResourceCycles = [1,1,1];
1140}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001141def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001142
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001143def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001144 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001145 let NumMicroOps = 3;
1146 let ResourceCycles = [1,1,1];
1147}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001148def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001149
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001150def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001151 let Latency = 5;
1152 let NumMicroOps = 5;
1153 let ResourceCycles = [1,4];
1154}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001155def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001156
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001157def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001158 let Latency = 5;
1159 let NumMicroOps = 5;
1160 let ResourceCycles = [2,3];
1161}
Craig Topper13a16502018-03-19 00:56:09 +00001162def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001163
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001164def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001165 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001166 let NumMicroOps = 6;
1167 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001168}
Craig Topperfc179c62018-03-22 04:23:41 +00001169def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1170 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001171
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001172def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1173 let Latency = 6;
1174 let NumMicroOps = 1;
1175 let ResourceCycles = [1];
1176}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001177def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
1178 "(V?)LDDQUrm",
1179 "(V?)MOVAPDrm",
1180 "(V?)MOVAPSrm",
1181 "(V?)MOVDQArm",
1182 "(V?)MOVDQUrm",
1183 "(V?)MOVNTDQArm",
1184 "(V?)MOVSHDUPrm",
1185 "(V?)MOVSLDUPrm",
1186 "(V?)MOVUPDrm",
1187 "(V?)MOVUPSrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001188 "VPBROADCASTDrm",
1189 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001190
1191def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001192 let Latency = 6;
1193 let NumMicroOps = 2;
1194 let ResourceCycles = [2];
1195}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001196def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001197
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001198def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001199 let Latency = 6;
1200 let NumMicroOps = 2;
1201 let ResourceCycles = [1,1];
1202}
Craig Topperfc179c62018-03-22 04:23:41 +00001203def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1204 "MMX_PADDSWirm",
1205 "MMX_PADDUSBirm",
1206 "MMX_PADDUSWirm",
1207 "MMX_PAVGBirm",
1208 "MMX_PAVGWirm",
1209 "MMX_PCMPEQBirm",
1210 "MMX_PCMPEQDirm",
1211 "MMX_PCMPEQWirm",
1212 "MMX_PCMPGTBirm",
1213 "MMX_PCMPGTDirm",
1214 "MMX_PCMPGTWirm",
1215 "MMX_PMAXSWirm",
1216 "MMX_PMAXUBirm",
1217 "MMX_PMINSWirm",
1218 "MMX_PMINUBirm",
1219 "MMX_PSLLDrm",
1220 "MMX_PSLLQrm",
1221 "MMX_PSLLWrm",
1222 "MMX_PSRADrm",
1223 "MMX_PSRAWrm",
1224 "MMX_PSRLDrm",
1225 "MMX_PSRLQrm",
1226 "MMX_PSRLWrm",
1227 "MMX_PSUBSBirm",
1228 "MMX_PSUBSWirm",
1229 "MMX_PSUBUSBirm",
1230 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001231
Craig Topper58afb4e2018-03-22 21:10:07 +00001232def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001233 let Latency = 6;
1234 let NumMicroOps = 2;
1235 let ResourceCycles = [1,1];
1236}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001237def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1238 "(V?)CVTSD2SIrr",
1239 "(V?)CVTSS2SI64rr",
1240 "(V?)CVTSS2SIrr",
1241 "(V?)CVTTSD2SI64rr",
1242 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001243
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001244def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1245 let Latency = 6;
1246 let NumMicroOps = 2;
1247 let ResourceCycles = [1,1];
1248}
Craig Topperfc179c62018-03-22 04:23:41 +00001249def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1250 "MMX_PINSRWrm",
1251 "MMX_PSHUFBrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001252 "MMX_PUNPCKHBWirm",
1253 "MMX_PUNPCKHDQirm",
1254 "MMX_PUNPCKHWDirm",
1255 "MMX_PUNPCKLBWirm",
1256 "MMX_PUNPCKLDQirm",
1257 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001258 "(V?)MOVHPDrm",
1259 "(V?)MOVHPSrm",
1260 "(V?)MOVLPDrm",
1261 "(V?)MOVLPSrm",
1262 "(V?)PINSRBrm",
1263 "(V?)PINSRDrm",
1264 "(V?)PINSRQrm",
1265 "(V?)PINSRWrm",
1266 "(V?)PMOVSXBDrm",
1267 "(V?)PMOVSXBQrm",
1268 "(V?)PMOVSXBWrm",
1269 "(V?)PMOVSXDQrm",
1270 "(V?)PMOVSXWDrm",
1271 "(V?)PMOVSXWQrm",
1272 "(V?)PMOVZXBDrm",
1273 "(V?)PMOVZXBQrm",
1274 "(V?)PMOVZXBWrm",
1275 "(V?)PMOVZXDQrm",
1276 "(V?)PMOVZXWDrm",
1277 "(V?)PMOVZXWQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001278
1279def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1280 let Latency = 6;
1281 let NumMicroOps = 2;
1282 let ResourceCycles = [1,1];
1283}
Craig Topperfc179c62018-03-22 04:23:41 +00001284def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1285 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001286
1287def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1288 let Latency = 6;
1289 let NumMicroOps = 2;
1290 let ResourceCycles = [1,1];
1291}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001292def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1293 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001294 "MMX_PANDNirm",
1295 "MMX_PANDirm",
1296 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001297 "MMX_PSIGN(B|D|W)rm",
1298 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001299 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001300
1301def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1302 let Latency = 6;
1303 let NumMicroOps = 2;
1304 let ResourceCycles = [1,1];
1305}
Craig Topperc50570f2018-04-06 17:12:18 +00001306def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001307 "RORX(32|64)mi",
1308 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001309 "SHLX(32|64)rm",
1310 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001311def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1312 ADCX32rm, ADCX64rm,
1313 ADOX32rm, ADOX64rm,
1314 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001315
1316def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1317 let Latency = 6;
1318 let NumMicroOps = 2;
1319 let ResourceCycles = [1,1];
1320}
Craig Topperfc179c62018-03-22 04:23:41 +00001321def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1322 "BLSI(32|64)rm",
1323 "BLSMSK(32|64)rm",
1324 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001325 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001326
1327def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1328 let Latency = 6;
1329 let NumMicroOps = 2;
1330 let ResourceCycles = [1,1];
1331}
Craig Topper2d451e72018-03-18 08:38:06 +00001332def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001333def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001334
1335def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001336 let Latency = 6;
1337 let NumMicroOps = 3;
1338 let ResourceCycles = [2,1];
1339}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001340def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1341 "(V?)HADDPS(Y?)rr",
1342 "(V?)HSUBPD(Y?)rr",
1343 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001344
Craig Topper58afb4e2018-03-22 21:10:07 +00001345def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001346 let Latency = 6;
1347 let NumMicroOps = 3;
1348 let ResourceCycles = [2,1];
1349}
Craig Topperfc179c62018-03-22 04:23:41 +00001350def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001351
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001352def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001353 let Latency = 6;
1354 let NumMicroOps = 4;
1355 let ResourceCycles = [1,2,1];
1356}
Craig Topperfc179c62018-03-22 04:23:41 +00001357def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1358 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001359
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001360def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001361 let Latency = 6;
1362 let NumMicroOps = 4;
1363 let ResourceCycles = [1,1,1,1];
1364}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001365def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001366
Craig Topper58afb4e2018-03-22 21:10:07 +00001367def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001368 let Latency = 6;
1369 let NumMicroOps = 4;
1370 let ResourceCycles = [1,1,1,1];
1371}
1372def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1373
1374def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1375 let Latency = 6;
1376 let NumMicroOps = 4;
1377 let ResourceCycles = [1,1,1,1];
1378}
Craig Topperfc179c62018-03-22 04:23:41 +00001379def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1380 "BTR(16|32|64)mi8",
1381 "BTS(16|32|64)mi8",
1382 "SAR(8|16|32|64)m1",
1383 "SAR(8|16|32|64)mi",
1384 "SHL(8|16|32|64)m1",
1385 "SHL(8|16|32|64)mi",
1386 "SHR(8|16|32|64)m1",
1387 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001388
1389def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1390 let Latency = 6;
1391 let NumMicroOps = 4;
1392 let ResourceCycles = [1,1,1,1];
1393}
Craig Topperf0d04262018-04-06 16:16:48 +00001394def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1395 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001396
1397def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001398 let Latency = 6;
1399 let NumMicroOps = 6;
1400 let ResourceCycles = [1,5];
1401}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001402def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001403
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001404def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1405 let Latency = 7;
1406 let NumMicroOps = 1;
1407 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001408}
Craig Topperfc179c62018-03-22 04:23:41 +00001409def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1410 "LD_F64m",
1411 "LD_F80m",
1412 "VBROADCASTF128",
1413 "VBROADCASTI128",
1414 "VBROADCASTSDYrm",
1415 "VBROADCASTSSYrm",
1416 "VLDDQUYrm",
1417 "VMOVAPDYrm",
1418 "VMOVAPSYrm",
1419 "VMOVDDUPYrm",
1420 "VMOVDQAYrm",
1421 "VMOVDQUYrm",
1422 "VMOVNTDQAYrm",
1423 "VMOVSHDUPYrm",
1424 "VMOVSLDUPYrm",
1425 "VMOVUPDYrm",
1426 "VMOVUPSYrm",
1427 "VPBROADCASTDYrm",
1428 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001429
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001430def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001431 let Latency = 7;
1432 let NumMicroOps = 2;
1433 let ResourceCycles = [1,1];
1434}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001435def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001436
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001437def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1438 let Latency = 7;
1439 let NumMicroOps = 2;
1440 let ResourceCycles = [1,1];
1441}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001442def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1443 "(V?)PACKSSDWrm",
1444 "(V?)PACKSSWBrm",
1445 "(V?)PACKUSDWrm",
1446 "(V?)PACKUSWBrm",
1447 "(V?)PALIGNRrmi",
1448 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001449 "VPBROADCASTBrm",
1450 "VPBROADCASTWrm",
1451 "VPERMILPDmi",
1452 "VPERMILPDrm",
1453 "VPERMILPSmi",
1454 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001455 "(V?)PSHUFBrm",
1456 "(V?)PSHUFDmi",
1457 "(V?)PSHUFHWmi",
1458 "(V?)PSHUFLWmi",
1459 "(V?)PUNPCKHBWrm",
1460 "(V?)PUNPCKHDQrm",
1461 "(V?)PUNPCKHQDQrm",
1462 "(V?)PUNPCKHWDrm",
1463 "(V?)PUNPCKLBWrm",
1464 "(V?)PUNPCKLDQrm",
1465 "(V?)PUNPCKLQDQrm",
1466 "(V?)PUNPCKLWDrm",
1467 "(V?)SHUFPDrmi",
1468 "(V?)SHUFPSrmi",
1469 "(V?)UNPCKHPDrm",
1470 "(V?)UNPCKHPSrm",
1471 "(V?)UNPCKLPDrm",
1472 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001473
Craig Topper58afb4e2018-03-22 21:10:07 +00001474def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001475 let Latency = 7;
1476 let NumMicroOps = 2;
1477 let ResourceCycles = [1,1];
1478}
Craig Topperfc179c62018-03-22 04:23:41 +00001479def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1480 "VCVTPD2PSYrr",
1481 "VCVTPH2PSYrr",
1482 "VCVTPS2PDYrr",
1483 "VCVTPS2PHYrr",
1484 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001485
1486def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1487 let Latency = 7;
1488 let NumMicroOps = 2;
1489 let ResourceCycles = [1,1];
1490}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001491def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1492 "(V?)PABSDrm",
1493 "(V?)PABSWrm",
1494 "(V?)PADDSBrm",
1495 "(V?)PADDSWrm",
1496 "(V?)PADDUSBrm",
1497 "(V?)PADDUSWrm",
1498 "(V?)PAVGBrm",
1499 "(V?)PAVGWrm",
1500 "(V?)PCMPEQBrm",
1501 "(V?)PCMPEQDrm",
1502 "(V?)PCMPEQQrm",
1503 "(V?)PCMPEQWrm",
1504 "(V?)PCMPGTBrm",
1505 "(V?)PCMPGTDrm",
1506 "(V?)PCMPGTWrm",
1507 "(V?)PMAXSBrm",
1508 "(V?)PMAXSDrm",
1509 "(V?)PMAXSWrm",
1510 "(V?)PMAXUBrm",
1511 "(V?)PMAXUDrm",
1512 "(V?)PMAXUWrm",
1513 "(V?)PMINSBrm",
1514 "(V?)PMINSDrm",
1515 "(V?)PMINSWrm",
1516 "(V?)PMINUBrm",
1517 "(V?)PMINUDrm",
1518 "(V?)PMINUWrm",
1519 "(V?)PSIGNBrm",
1520 "(V?)PSIGNDrm",
1521 "(V?)PSIGNWrm",
1522 "(V?)PSLLDrm",
1523 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001524 "VPSLLVDrm",
1525 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001526 "(V?)PSLLWrm",
1527 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001528 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001529 "(V?)PSRAWrm",
1530 "(V?)PSRLDrm",
1531 "(V?)PSRLQrm",
1532 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001533 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001534 "(V?)PSRLWrm",
1535 "(V?)PSUBSBrm",
1536 "(V?)PSUBSWrm",
1537 "(V?)PSUBUSBrm",
1538 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001539
1540def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1541 let Latency = 7;
1542 let NumMicroOps = 2;
1543 let ResourceCycles = [1,1];
1544}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001545def: InstRW<[SKLWriteResGroup91], (instregex "(V?)BLENDPDrmi",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001546 "(V?)BLENDPSrmi",
1547 "(V?)INSERTF128rm",
1548 "(V?)INSERTI128rm",
1549 "(V?)MASKMOVPDrm",
1550 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001551 "(V?)PADDBrm",
1552 "(V?)PADDDrm",
1553 "(V?)PADDQrm",
1554 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001555 "(V?)PBLENDDrmi",
1556 "(V?)PMASKMOVDrm",
1557 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001558 "(V?)PSUBBrm",
1559 "(V?)PSUBDrm",
1560 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001561 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001562
1563def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1564 let Latency = 7;
1565 let NumMicroOps = 3;
1566 let ResourceCycles = [2,1];
1567}
Craig Topperfc179c62018-03-22 04:23:41 +00001568def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1569 "MMX_PACKSSWBirm",
1570 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001571
1572def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1573 let Latency = 7;
1574 let NumMicroOps = 3;
1575 let ResourceCycles = [1,2];
1576}
Craig Topperf4cd9082018-01-19 05:47:32 +00001577def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001578
1579def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1580 let Latency = 7;
1581 let NumMicroOps = 3;
1582 let ResourceCycles = [1,2];
1583}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001584def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1585 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001586
Craig Topper58afb4e2018-03-22 21:10:07 +00001587def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001588 let Latency = 7;
1589 let NumMicroOps = 3;
1590 let ResourceCycles = [1,1,1];
1591}
Craig Topperfc179c62018-03-22 04:23:41 +00001592def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1593 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001594
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001595def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001596 let Latency = 7;
1597 let NumMicroOps = 3;
1598 let ResourceCycles = [1,1,1];
1599}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001600def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001601
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001602def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001603 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001604 let NumMicroOps = 3;
1605 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001606}
Craig Topperfc179c62018-03-22 04:23:41 +00001607def: InstRW<[SKLWriteResGroup97], (instregex "(V?)LDMXCSR")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001608
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001609def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001610 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001611 let NumMicroOps = 3;
1612 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001613}
Craig Topperfc179c62018-03-22 04:23:41 +00001614def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1615 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001616
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001617def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1618 let Latency = 7;
1619 let NumMicroOps = 5;
1620 let ResourceCycles = [1,1,1,2];
1621}
Craig Topperfc179c62018-03-22 04:23:41 +00001622def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1623 "ROL(8|16|32|64)mi",
1624 "ROR(8|16|32|64)m1",
1625 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001626
1627def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1628 let Latency = 7;
1629 let NumMicroOps = 5;
1630 let ResourceCycles = [1,1,1,2];
1631}
Craig Topper13a16502018-03-19 00:56:09 +00001632def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001633
1634def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1635 let Latency = 7;
1636 let NumMicroOps = 5;
1637 let ResourceCycles = [1,1,1,1,1];
1638}
Craig Topperfc179c62018-03-22 04:23:41 +00001639def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1640 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001641
1642def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001643 let Latency = 7;
1644 let NumMicroOps = 7;
1645 let ResourceCycles = [1,3,1,2];
1646}
Craig Topper2d451e72018-03-18 08:38:06 +00001647def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001648
Craig Topper58afb4e2018-03-22 21:10:07 +00001649def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001650 let Latency = 8;
1651 let NumMicroOps = 2;
1652 let ResourceCycles = [2];
1653}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001654def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1655 "(V?)ROUNDPS(Y?)r",
1656 "(V?)ROUNDSDr",
1657 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001658
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001659def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001660 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001661 let NumMicroOps = 2;
1662 let ResourceCycles = [1,1];
1663}
Craig Topperfc179c62018-03-22 04:23:41 +00001664def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1665 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001666
1667def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1668 let Latency = 8;
1669 let NumMicroOps = 2;
1670 let ResourceCycles = [1,1];
1671}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001672def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1673 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001674
1675def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001676 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001677 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001678 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001679}
Craig Topperf846e2d2018-04-19 05:34:05 +00001680def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001681
Craig Topperf846e2d2018-04-19 05:34:05 +00001682def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1683 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001684 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001685 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001686}
Craig Topperfc179c62018-03-22 04:23:41 +00001687def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001688
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001689def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1690 let Latency = 8;
1691 let NumMicroOps = 2;
1692 let ResourceCycles = [1,1];
1693}
Craig Topperfc179c62018-03-22 04:23:41 +00001694def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1695 "FCOM64m",
1696 "FCOMP32m",
1697 "FCOMP64m",
1698 "MMX_PSADBWirm",
1699 "VPACKSSDWYrm",
1700 "VPACKSSWBYrm",
1701 "VPACKUSDWYrm",
1702 "VPACKUSWBYrm",
1703 "VPALIGNRYrmi",
1704 "VPBLENDWYrmi",
1705 "VPBROADCASTBYrm",
1706 "VPBROADCASTWYrm",
1707 "VPERMILPDYmi",
1708 "VPERMILPDYrm",
1709 "VPERMILPSYmi",
1710 "VPERMILPSYrm",
1711 "VPMOVSXBDYrm",
1712 "VPMOVSXBQYrm",
1713 "VPMOVSXWQYrm",
1714 "VPSHUFBYrm",
1715 "VPSHUFDYmi",
1716 "VPSHUFHWYmi",
1717 "VPSHUFLWYmi",
1718 "VPUNPCKHBWYrm",
1719 "VPUNPCKHDQYrm",
1720 "VPUNPCKHQDQYrm",
1721 "VPUNPCKHWDYrm",
1722 "VPUNPCKLBWYrm",
1723 "VPUNPCKLDQYrm",
1724 "VPUNPCKLQDQYrm",
1725 "VPUNPCKLWDYrm",
1726 "VSHUFPDYrmi",
1727 "VSHUFPSYrmi",
1728 "VUNPCKHPDYrm",
1729 "VUNPCKHPSYrm",
1730 "VUNPCKLPDYrm",
1731 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001732
1733def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1734 let Latency = 8;
1735 let NumMicroOps = 2;
1736 let ResourceCycles = [1,1];
1737}
Craig Topperfc179c62018-03-22 04:23:41 +00001738def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1739 "VPABSDYrm",
1740 "VPABSWYrm",
1741 "VPADDSBYrm",
1742 "VPADDSWYrm",
1743 "VPADDUSBYrm",
1744 "VPADDUSWYrm",
1745 "VPAVGBYrm",
1746 "VPAVGWYrm",
1747 "VPCMPEQBYrm",
1748 "VPCMPEQDYrm",
1749 "VPCMPEQQYrm",
1750 "VPCMPEQWYrm",
1751 "VPCMPGTBYrm",
1752 "VPCMPGTDYrm",
1753 "VPCMPGTWYrm",
1754 "VPMAXSBYrm",
1755 "VPMAXSDYrm",
1756 "VPMAXSWYrm",
1757 "VPMAXUBYrm",
1758 "VPMAXUDYrm",
1759 "VPMAXUWYrm",
1760 "VPMINSBYrm",
1761 "VPMINSDYrm",
1762 "VPMINSWYrm",
1763 "VPMINUBYrm",
1764 "VPMINUDYrm",
1765 "VPMINUWYrm",
1766 "VPSIGNBYrm",
1767 "VPSIGNDYrm",
1768 "VPSIGNWYrm",
1769 "VPSLLDYrm",
1770 "VPSLLQYrm",
1771 "VPSLLVDYrm",
1772 "VPSLLVQYrm",
1773 "VPSLLWYrm",
1774 "VPSRADYrm",
1775 "VPSRAVDYrm",
1776 "VPSRAWYrm",
1777 "VPSRLDYrm",
1778 "VPSRLQYrm",
1779 "VPSRLVDYrm",
1780 "VPSRLVQYrm",
1781 "VPSRLWYrm",
1782 "VPSUBSBYrm",
1783 "VPSUBSWYrm",
1784 "VPSUBUSBYrm",
1785 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001786
1787def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1788 let Latency = 8;
1789 let NumMicroOps = 2;
1790 let ResourceCycles = [1,1];
1791}
Craig Topperfc179c62018-03-22 04:23:41 +00001792def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1793 "VANDNPSYrm",
1794 "VANDPDYrm",
1795 "VANDPSYrm",
1796 "VBLENDPDYrmi",
1797 "VBLENDPSYrmi",
1798 "VMASKMOVPDYrm",
1799 "VMASKMOVPSYrm",
1800 "VORPDYrm",
1801 "VORPSYrm",
1802 "VPADDBYrm",
1803 "VPADDDYrm",
1804 "VPADDQYrm",
1805 "VPADDWYrm",
1806 "VPANDNYrm",
1807 "VPANDYrm",
1808 "VPBLENDDYrmi",
1809 "VPMASKMOVDYrm",
1810 "VPMASKMOVQYrm",
1811 "VPORYrm",
1812 "VPSUBBYrm",
1813 "VPSUBDYrm",
1814 "VPSUBQYrm",
1815 "VPSUBWYrm",
1816 "VPXORYrm",
1817 "VXORPDYrm",
1818 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001819
1820def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001821 let Latency = 8;
1822 let NumMicroOps = 3;
1823 let ResourceCycles = [1,2];
1824}
Craig Topperfc179c62018-03-22 04:23:41 +00001825def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
1826 "BLENDVPSrm0",
1827 "PBLENDVBrm0",
1828 "VBLENDVPDrm",
1829 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001830 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001831
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001832def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1833 let Latency = 8;
1834 let NumMicroOps = 4;
1835 let ResourceCycles = [1,2,1];
1836}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001837def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001838
1839def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1840 let Latency = 8;
1841 let NumMicroOps = 4;
1842 let ResourceCycles = [2,1,1];
1843}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001844def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001845
Craig Topper58afb4e2018-03-22 21:10:07 +00001846def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001847 let Latency = 8;
1848 let NumMicroOps = 4;
1849 let ResourceCycles = [1,1,1,1];
1850}
1851def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1852
1853def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1854 let Latency = 8;
1855 let NumMicroOps = 5;
1856 let ResourceCycles = [1,1,3];
1857}
Craig Topper13a16502018-03-19 00:56:09 +00001858def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001859
1860def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1861 let Latency = 8;
1862 let NumMicroOps = 5;
1863 let ResourceCycles = [1,1,1,2];
1864}
Craig Topperfc179c62018-03-22 04:23:41 +00001865def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1866 "RCL(8|16|32|64)mi",
1867 "RCR(8|16|32|64)m1",
1868 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001869
1870def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1871 let Latency = 8;
1872 let NumMicroOps = 6;
1873 let ResourceCycles = [1,1,1,3];
1874}
Craig Topperfc179c62018-03-22 04:23:41 +00001875def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1876 "SAR(8|16|32|64)mCL",
1877 "SHL(8|16|32|64)mCL",
1878 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001879
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001880def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1881 let Latency = 8;
1882 let NumMicroOps = 6;
1883 let ResourceCycles = [1,1,1,2,1];
1884}
Craig Topper9f834812018-04-01 21:54:24 +00001885def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001886 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001887 "SBB(8|16|32|64)mi")>;
1888def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1889 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001890
1891def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1892 let Latency = 9;
1893 let NumMicroOps = 2;
1894 let ResourceCycles = [1,1];
1895}
Craig Topperfc179c62018-03-22 04:23:41 +00001896def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1897 "MMX_PMADDUBSWrm",
1898 "MMX_PMADDWDirm",
1899 "MMX_PMULHRSWrm",
1900 "MMX_PMULHUWirm",
1901 "MMX_PMULHWirm",
1902 "MMX_PMULLWirm",
1903 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001904 "(V?)RCPSSm",
1905 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001906 "VTESTPDYrm",
1907 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001908
1909def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1910 let Latency = 9;
1911 let NumMicroOps = 2;
1912 let ResourceCycles = [1,1];
1913}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001914def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001915 "VPMOVSXBWYrm",
1916 "VPMOVSXDQYrm",
1917 "VPMOVSXWDYrm",
1918 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001919 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001920
1921def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1922 let Latency = 9;
1923 let NumMicroOps = 2;
1924 let ResourceCycles = [1,1];
1925}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001926def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1927 "(V?)ADDSSrm",
1928 "(V?)CMPSDrm",
1929 "(V?)CMPSSrm",
1930 "(V?)MAX(C?)SDrm",
1931 "(V?)MAX(C?)SSrm",
1932 "(V?)MIN(C?)SDrm",
1933 "(V?)MIN(C?)SSrm",
1934 "(V?)MULSDrm",
1935 "(V?)MULSSrm",
1936 "(V?)SUBSDrm",
1937 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001938def: InstRW<[SKLWriteResGroup122],
1939 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001940
Craig Topper58afb4e2018-03-22 21:10:07 +00001941def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001942 let Latency = 9;
1943 let NumMicroOps = 2;
1944 let ResourceCycles = [1,1];
1945}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001946def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001947 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001948 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001949 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001950
Craig Topper58afb4e2018-03-22 21:10:07 +00001951def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001952 let Latency = 9;
1953 let NumMicroOps = 3;
1954 let ResourceCycles = [1,2];
1955}
Craig Topperfc179c62018-03-22 04:23:41 +00001956def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001957
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001958def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1959 let Latency = 9;
1960 let NumMicroOps = 3;
1961 let ResourceCycles = [1,2];
1962}
Craig Topperfc179c62018-03-22 04:23:41 +00001963def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1964 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001965
1966def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1967 let Latency = 9;
1968 let NumMicroOps = 3;
1969 let ResourceCycles = [1,1,1];
1970}
Craig Topperfc179c62018-03-22 04:23:41 +00001971def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001972
1973def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1974 let Latency = 9;
1975 let NumMicroOps = 3;
1976 let ResourceCycles = [1,1,1];
1977}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001978def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001979
1980def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001981 let Latency = 9;
1982 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001983 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001984}
Craig Topperfc179c62018-03-22 04:23:41 +00001985def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1986 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001987
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001988def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1989 let Latency = 9;
1990 let NumMicroOps = 4;
1991 let ResourceCycles = [2,1,1];
1992}
Craig Topperfc179c62018-03-22 04:23:41 +00001993def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1994 "(V?)PHADDWrm",
1995 "(V?)PHSUBDrm",
1996 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001997
1998def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1999 let Latency = 9;
2000 let NumMicroOps = 4;
2001 let ResourceCycles = [1,1,1,1];
2002}
Craig Topperfc179c62018-03-22 04:23:41 +00002003def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
2004 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002005
2006def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2007 let Latency = 9;
2008 let NumMicroOps = 5;
2009 let ResourceCycles = [1,2,1,1];
2010}
Craig Topperfc179c62018-03-22 04:23:41 +00002011def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
2012 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002013
2014def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2015 let Latency = 10;
2016 let NumMicroOps = 2;
2017 let ResourceCycles = [1,1];
2018}
Simon Pilgrim7684e052018-03-22 13:18:08 +00002019def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002020 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002021
2022def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2023 let Latency = 10;
2024 let NumMicroOps = 2;
2025 let ResourceCycles = [1,1];
2026}
Craig Topperfc179c62018-03-22 04:23:41 +00002027def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
2028 "ADD_F64m",
2029 "ILD_F16m",
2030 "ILD_F32m",
2031 "ILD_F64m",
2032 "SUBR_F32m",
2033 "SUBR_F64m",
2034 "SUB_F32m",
2035 "SUB_F64m",
2036 "VPCMPGTQYrm",
2037 "VPERM2F128rm",
2038 "VPERM2I128rm",
2039 "VPERMDYrm",
2040 "VPERMPDYmi",
2041 "VPERMPSYrm",
2042 "VPERMQYmi",
2043 "VPMOVZXBDYrm",
2044 "VPMOVZXBQYrm",
2045 "VPMOVZXBWYrm",
2046 "VPMOVZXDQYrm",
2047 "VPMOVZXWQYrm",
2048 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002049
2050def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2051 let Latency = 10;
2052 let NumMicroOps = 2;
2053 let ResourceCycles = [1,1];
2054}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002055def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
2056 "(V?)ADDPSrm",
2057 "(V?)ADDSUBPDrm",
2058 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002059 "(V?)CVTDQ2PSrm",
2060 "(V?)CVTPH2PSYrm",
2061 "(V?)CVTPS2DQrm",
2062 "(V?)CVTSS2SDrm",
2063 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002064 "(V?)MULPDrm",
2065 "(V?)MULPSrm",
2066 "(V?)PHMINPOSUWrm",
2067 "(V?)PMADDUBSWrm",
2068 "(V?)PMADDWDrm",
2069 "(V?)PMULDQrm",
2070 "(V?)PMULHRSWrm",
2071 "(V?)PMULHUWrm",
2072 "(V?)PMULHWrm",
2073 "(V?)PMULLWrm",
2074 "(V?)PMULUDQrm",
2075 "(V?)SUBPDrm",
2076 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00002077def: InstRW<[SKLWriteResGroup134],
2078 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002079
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002080def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2081 let Latency = 10;
2082 let NumMicroOps = 3;
2083 let ResourceCycles = [2,1];
2084}
Craig Topperfc179c62018-03-22 04:23:41 +00002085def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002086
2087def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2088 let Latency = 10;
2089 let NumMicroOps = 3;
2090 let ResourceCycles = [1,1,1];
2091}
Craig Topperfc179c62018-03-22 04:23:41 +00002092def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2093 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002094
Craig Topper58afb4e2018-03-22 21:10:07 +00002095def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002096 let Latency = 10;
2097 let NumMicroOps = 3;
2098 let ResourceCycles = [1,1,1];
2099}
Craig Topperfc179c62018-03-22 04:23:41 +00002100def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002101
2102def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002103 let Latency = 10;
2104 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002105 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002106}
Craig Topperfc179c62018-03-22 04:23:41 +00002107def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2108 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002109
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002110def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2111 let Latency = 10;
2112 let NumMicroOps = 4;
2113 let ResourceCycles = [2,1,1];
2114}
Craig Topperfc179c62018-03-22 04:23:41 +00002115def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2116 "VPHADDWYrm",
2117 "VPHSUBDYrm",
2118 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002119
2120def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002121 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002122 let NumMicroOps = 4;
2123 let ResourceCycles = [1,1,1,1];
2124}
Craig Topperf846e2d2018-04-19 05:34:05 +00002125def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002126
2127def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2128 let Latency = 10;
2129 let NumMicroOps = 8;
2130 let ResourceCycles = [1,1,1,1,1,3];
2131}
Craig Topper13a16502018-03-19 00:56:09 +00002132def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002133
2134def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002135 let Latency = 10;
2136 let NumMicroOps = 10;
2137 let ResourceCycles = [9,1];
2138}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002139def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002140
Craig Topper8104f262018-04-02 05:33:28 +00002141def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002142 let Latency = 11;
2143 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002144 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002145}
Craig Topper8104f262018-04-02 05:33:28 +00002146def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002147 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002148
Craig Topper8104f262018-04-02 05:33:28 +00002149def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2150 let Latency = 11;
2151 let NumMicroOps = 1;
2152 let ResourceCycles = [1,5];
2153}
2154def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
2155
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002156def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002157 let Latency = 11;
2158 let NumMicroOps = 2;
2159 let ResourceCycles = [1,1];
2160}
Craig Topperfc179c62018-03-22 04:23:41 +00002161def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2162 "MUL_F64m",
2163 "VRCPPSYm",
2164 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002165
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002166def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2167 let Latency = 11;
2168 let NumMicroOps = 2;
2169 let ResourceCycles = [1,1];
2170}
Craig Topperfc179c62018-03-22 04:23:41 +00002171def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2172 "VADDPSYrm",
2173 "VADDSUBPDYrm",
2174 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002175 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002176 "VCMPPSYrmi",
2177 "VCVTDQ2PSYrm",
2178 "VCVTPS2DQYrm",
2179 "VCVTPS2PDYrm",
2180 "VCVTTPS2DQYrm",
2181 "VMAX(C?)PDYrm",
2182 "VMAX(C?)PSYrm",
2183 "VMIN(C?)PDYrm",
2184 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002185 "VMULPDYrm",
2186 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002187 "VPMADDUBSWYrm",
2188 "VPMADDWDYrm",
2189 "VPMULDQYrm",
2190 "VPMULHRSWYrm",
2191 "VPMULHUWYrm",
2192 "VPMULHWYrm",
2193 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002194 "VPMULUDQYrm",
2195 "VSUBPDYrm",
2196 "VSUBPSYrm")>;
2197def: InstRW<[SKLWriteResGroup147],
2198 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002199
2200def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2201 let Latency = 11;
2202 let NumMicroOps = 3;
2203 let ResourceCycles = [2,1];
2204}
Craig Topperfc179c62018-03-22 04:23:41 +00002205def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2206 "FICOM32m",
2207 "FICOMP16m",
2208 "FICOMP32m",
2209 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002210
2211def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2212 let Latency = 11;
2213 let NumMicroOps = 3;
2214 let ResourceCycles = [1,1,1];
2215}
Craig Topperfc179c62018-03-22 04:23:41 +00002216def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002217
Craig Topper58afb4e2018-03-22 21:10:07 +00002218def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002219 let Latency = 11;
2220 let NumMicroOps = 3;
2221 let ResourceCycles = [1,1,1];
2222}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002223def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2224 "(V?)CVTSD2SIrm",
2225 "(V?)CVTSS2SI64rm",
2226 "(V?)CVTSS2SIrm",
2227 "(V?)CVTTSD2SI64rm",
2228 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002229 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002230 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002231
Craig Topper58afb4e2018-03-22 21:10:07 +00002232def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002233 let Latency = 11;
2234 let NumMicroOps = 3;
2235 let ResourceCycles = [1,1,1];
2236}
Craig Topperfc179c62018-03-22 04:23:41 +00002237def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2238 "CVTPD2PSrm",
2239 "CVTTPD2DQrm",
2240 "MMX_CVTPD2PIirm",
2241 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002242
2243def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2244 let Latency = 11;
2245 let NumMicroOps = 6;
2246 let ResourceCycles = [1,1,1,2,1];
2247}
Craig Topperfc179c62018-03-22 04:23:41 +00002248def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2249 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002250
2251def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002252 let Latency = 11;
2253 let NumMicroOps = 7;
2254 let ResourceCycles = [2,3,2];
2255}
Craig Topperfc179c62018-03-22 04:23:41 +00002256def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2257 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002258
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002259def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002260 let Latency = 11;
2261 let NumMicroOps = 9;
2262 let ResourceCycles = [1,5,1,2];
2263}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002264def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002265
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002266def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002267 let Latency = 11;
2268 let NumMicroOps = 11;
2269 let ResourceCycles = [2,9];
2270}
Craig Topperfc179c62018-03-22 04:23:41 +00002271def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002272
Craig Topper8104f262018-04-02 05:33:28 +00002273def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002274 let Latency = 12;
2275 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002276 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002277}
Craig Topper8104f262018-04-02 05:33:28 +00002278def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002279 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002280
Craig Topper8104f262018-04-02 05:33:28 +00002281def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2282 let Latency = 12;
2283 let NumMicroOps = 1;
2284 let ResourceCycles = [1,6];
2285}
2286def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2287
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002288def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2289 let Latency = 12;
2290 let NumMicroOps = 4;
2291 let ResourceCycles = [2,1,1];
2292}
Craig Topperfc179c62018-03-22 04:23:41 +00002293def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2294 "(V?)HADDPSrm",
2295 "(V?)HSUBPDrm",
2296 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002297
Craig Topper58afb4e2018-03-22 21:10:07 +00002298def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002299 let Latency = 12;
2300 let NumMicroOps = 4;
2301 let ResourceCycles = [1,1,1,1];
2302}
2303def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2304
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002305def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002306 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002307 let NumMicroOps = 3;
2308 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002309}
Craig Topperfc179c62018-03-22 04:23:41 +00002310def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2311 "ADD_FI32m",
2312 "SUBR_FI16m",
2313 "SUBR_FI32m",
2314 "SUB_FI16m",
2315 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002316
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002317def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2318 let Latency = 13;
2319 let NumMicroOps = 3;
2320 let ResourceCycles = [1,1,1];
2321}
2322def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2323
Craig Topper58afb4e2018-03-22 21:10:07 +00002324def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002325 let Latency = 13;
2326 let NumMicroOps = 4;
2327 let ResourceCycles = [1,3];
2328}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002329def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002330
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002331def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002332 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002333 let NumMicroOps = 4;
2334 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002335}
Craig Topperfc179c62018-03-22 04:23:41 +00002336def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2337 "VHADDPSYrm",
2338 "VHSUBPDYrm",
2339 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002340
Craig Topper8104f262018-04-02 05:33:28 +00002341def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002342 let Latency = 14;
2343 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002344 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002345}
Craig Topper8104f262018-04-02 05:33:28 +00002346def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002347 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002348
Craig Topper8104f262018-04-02 05:33:28 +00002349def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2350 let Latency = 14;
2351 let NumMicroOps = 1;
2352 let ResourceCycles = [1,5];
2353}
2354def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2355
Craig Topper58afb4e2018-03-22 21:10:07 +00002356def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002357 let Latency = 14;
2358 let NumMicroOps = 3;
2359 let ResourceCycles = [1,2];
2360}
Craig Topperfc179c62018-03-22 04:23:41 +00002361def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2362def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2363def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2364def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002365
2366def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2367 let Latency = 14;
2368 let NumMicroOps = 3;
2369 let ResourceCycles = [1,1,1];
2370}
Craig Topperfc179c62018-03-22 04:23:41 +00002371def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2372 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002373
2374def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002375 let Latency = 14;
2376 let NumMicroOps = 10;
2377 let ResourceCycles = [2,4,1,3];
2378}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002379def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002380
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002381def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002382 let Latency = 15;
2383 let NumMicroOps = 1;
2384 let ResourceCycles = [1];
2385}
Craig Topperfc179c62018-03-22 04:23:41 +00002386def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2387 "DIVR_FST0r",
2388 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002389
Craig Topper58afb4e2018-03-22 21:10:07 +00002390def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002391 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002392 let NumMicroOps = 3;
2393 let ResourceCycles = [1,2];
2394}
Craig Topper40d3b322018-03-22 21:55:20 +00002395def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2396 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002397
Craig Topperd25f1ac2018-03-20 23:39:48 +00002398def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2399 let Latency = 17;
2400 let NumMicroOps = 3;
2401 let ResourceCycles = [1,2];
2402}
2403def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2404
Craig Topper58afb4e2018-03-22 21:10:07 +00002405def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002406 let Latency = 15;
2407 let NumMicroOps = 4;
2408 let ResourceCycles = [1,1,2];
2409}
Craig Topperfc179c62018-03-22 04:23:41 +00002410def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002411
2412def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2413 let Latency = 15;
2414 let NumMicroOps = 10;
2415 let ResourceCycles = [1,1,1,5,1,1];
2416}
Craig Topper13a16502018-03-19 00:56:09 +00002417def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002418
Craig Topper8104f262018-04-02 05:33:28 +00002419def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002420 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002421 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002422 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002423}
Craig Topperfc179c62018-03-22 04:23:41 +00002424def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002425
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002426def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2427 let Latency = 16;
2428 let NumMicroOps = 14;
2429 let ResourceCycles = [1,1,1,4,2,5];
2430}
2431def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2432
2433def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002434 let Latency = 16;
2435 let NumMicroOps = 16;
2436 let ResourceCycles = [16];
2437}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002438def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002439
Craig Topper8104f262018-04-02 05:33:28 +00002440def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002441 let Latency = 17;
2442 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002443 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002444}
Craig Topper8104f262018-04-02 05:33:28 +00002445def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2446
2447def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2448 let Latency = 17;
2449 let NumMicroOps = 2;
2450 let ResourceCycles = [1,1,3];
2451}
2452def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002453
2454def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002455 let Latency = 17;
2456 let NumMicroOps = 15;
2457 let ResourceCycles = [2,1,2,4,2,4];
2458}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002459def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002460
Craig Topper8104f262018-04-02 05:33:28 +00002461def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002462 let Latency = 18;
2463 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002464 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002465}
Craig Topper8104f262018-04-02 05:33:28 +00002466def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002467 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002468
Craig Topper8104f262018-04-02 05:33:28 +00002469def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2470 let Latency = 18;
2471 let NumMicroOps = 1;
2472 let ResourceCycles = [1,12];
2473}
2474def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2475
2476def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002477 let Latency = 18;
2478 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002479 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002480}
Craig Topper8104f262018-04-02 05:33:28 +00002481def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2482
2483def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2484 let Latency = 18;
2485 let NumMicroOps = 2;
2486 let ResourceCycles = [1,1,3];
2487}
2488def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002489
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002490def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002491 let Latency = 18;
2492 let NumMicroOps = 8;
2493 let ResourceCycles = [1,1,1,5];
2494}
Craig Topperfc179c62018-03-22 04:23:41 +00002495def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002496
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002497def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002498 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002499 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002500 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002501}
Craig Topper13a16502018-03-19 00:56:09 +00002502def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002503
Craig Topper8104f262018-04-02 05:33:28 +00002504def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002505 let Latency = 19;
2506 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002507 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002508}
Craig Topper8104f262018-04-02 05:33:28 +00002509def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2510
2511def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2512 let Latency = 19;
2513 let NumMicroOps = 2;
2514 let ResourceCycles = [1,1,6];
2515}
2516def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002517
Craig Topper58afb4e2018-03-22 21:10:07 +00002518def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002519 let Latency = 19;
2520 let NumMicroOps = 5;
2521 let ResourceCycles = [1,1,3];
2522}
Craig Topperfc179c62018-03-22 04:23:41 +00002523def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002524
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002525def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002526 let Latency = 20;
2527 let NumMicroOps = 1;
2528 let ResourceCycles = [1];
2529}
Craig Topperfc179c62018-03-22 04:23:41 +00002530def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2531 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002532 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002533
Craig Topper8104f262018-04-02 05:33:28 +00002534def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002535 let Latency = 20;
2536 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002537 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002538}
Craig Topperfc179c62018-03-22 04:23:41 +00002539def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002540
Craig Topper58afb4e2018-03-22 21:10:07 +00002541def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002542 let Latency = 20;
2543 let NumMicroOps = 5;
2544 let ResourceCycles = [1,1,3];
2545}
2546def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2547
2548def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2549 let Latency = 20;
2550 let NumMicroOps = 8;
2551 let ResourceCycles = [1,1,1,1,1,1,2];
2552}
Craig Topperfc179c62018-03-22 04:23:41 +00002553def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2554 "INSL",
2555 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002556
2557def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002558 let Latency = 20;
2559 let NumMicroOps = 10;
2560 let ResourceCycles = [1,2,7];
2561}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002562def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002563
Craig Topper8104f262018-04-02 05:33:28 +00002564def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002565 let Latency = 21;
2566 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002567 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002568}
2569def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2570
2571def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2572 let Latency = 22;
2573 let NumMicroOps = 2;
2574 let ResourceCycles = [1,1];
2575}
Craig Topperfc179c62018-03-22 04:23:41 +00002576def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2577 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002578
2579def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2580 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002581 let NumMicroOps = 5;
2582 let ResourceCycles = [1,2,1,1];
2583}
Craig Topper17a31182017-12-16 18:35:29 +00002584def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2585 VGATHERDPDrm,
2586 VGATHERQPDrm,
2587 VGATHERQPSrm,
2588 VPGATHERDDrm,
2589 VPGATHERDQrm,
2590 VPGATHERQDrm,
2591 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002592
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002593def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2594 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002595 let NumMicroOps = 5;
2596 let ResourceCycles = [1,2,1,1];
2597}
Craig Topper17a31182017-12-16 18:35:29 +00002598def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2599 VGATHERQPDYrm,
2600 VGATHERQPSYrm,
2601 VPGATHERDDYrm,
2602 VPGATHERDQYrm,
2603 VPGATHERQDYrm,
2604 VPGATHERQQYrm,
2605 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002606
Craig Topper8104f262018-04-02 05:33:28 +00002607def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002608 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002609 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002610 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002611}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002612def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002613
2614def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2615 let Latency = 23;
2616 let NumMicroOps = 19;
2617 let ResourceCycles = [2,1,4,1,1,4,6];
2618}
2619def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2620
Craig Topper8104f262018-04-02 05:33:28 +00002621def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002622 let Latency = 24;
2623 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002624 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002625}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002626def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002627
Craig Topper8104f262018-04-02 05:33:28 +00002628def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002629 let Latency = 25;
2630 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002631 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002632}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002633def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002634
2635def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2636 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002637 let NumMicroOps = 3;
2638 let ResourceCycles = [1,1,1];
2639}
Craig Topperfc179c62018-03-22 04:23:41 +00002640def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2641 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002642
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002643def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2644 let Latency = 27;
2645 let NumMicroOps = 2;
2646 let ResourceCycles = [1,1];
2647}
Craig Topperfc179c62018-03-22 04:23:41 +00002648def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2649 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002650
2651def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2652 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002653 let NumMicroOps = 8;
2654 let ResourceCycles = [2,4,1,1];
2655}
Craig Topper13a16502018-03-19 00:56:09 +00002656def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002657
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002658def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002659 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002660 let NumMicroOps = 3;
2661 let ResourceCycles = [1,1,1];
2662}
Craig Topperfc179c62018-03-22 04:23:41 +00002663def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2664 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002665
2666def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2667 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002668 let NumMicroOps = 23;
2669 let ResourceCycles = [1,5,3,4,10];
2670}
Craig Topperfc179c62018-03-22 04:23:41 +00002671def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2672 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002673
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002674def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2675 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002676 let NumMicroOps = 23;
2677 let ResourceCycles = [1,5,2,1,4,10];
2678}
Craig Topperfc179c62018-03-22 04:23:41 +00002679def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2680 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002681
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002682def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2683 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002684 let NumMicroOps = 31;
2685 let ResourceCycles = [1,8,1,21];
2686}
Craig Topper391c6f92017-12-10 01:24:08 +00002687def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002688
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002689def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2690 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002691 let NumMicroOps = 18;
2692 let ResourceCycles = [1,1,2,3,1,1,1,8];
2693}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002694def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002695
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002696def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2697 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002698 let NumMicroOps = 39;
2699 let ResourceCycles = [1,10,1,1,26];
2700}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002701def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002702
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002703def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002704 let Latency = 42;
2705 let NumMicroOps = 22;
2706 let ResourceCycles = [2,20];
2707}
Craig Topper2d451e72018-03-18 08:38:06 +00002708def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002709
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002710def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2711 let Latency = 42;
2712 let NumMicroOps = 40;
2713 let ResourceCycles = [1,11,1,1,26];
2714}
Craig Topper391c6f92017-12-10 01:24:08 +00002715def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002716
2717def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2718 let Latency = 46;
2719 let NumMicroOps = 44;
2720 let ResourceCycles = [1,11,1,1,30];
2721}
2722def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2723
2724def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2725 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002726 let NumMicroOps = 64;
2727 let ResourceCycles = [2,8,5,10,39];
2728}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002729def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002730
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002731def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2732 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002733 let NumMicroOps = 88;
2734 let ResourceCycles = [4,4,31,1,2,1,45];
2735}
Craig Topper2d451e72018-03-18 08:38:06 +00002736def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002737
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002738def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2739 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002740 let NumMicroOps = 90;
2741 let ResourceCycles = [4,2,33,1,2,1,47];
2742}
Craig Topper2d451e72018-03-18 08:38:06 +00002743def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002744
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002745def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002746 let Latency = 75;
2747 let NumMicroOps = 15;
2748 let ResourceCycles = [6,3,6];
2749}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002750def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002751
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002752def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002753 let Latency = 76;
2754 let NumMicroOps = 32;
2755 let ResourceCycles = [7,2,8,3,1,11];
2756}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002757def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002758
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002759def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002760 let Latency = 102;
2761 let NumMicroOps = 66;
2762 let ResourceCycles = [4,2,4,8,14,34];
2763}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002764def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002765
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002766def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2767 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002768 let NumMicroOps = 100;
2769 let ResourceCycles = [9,1,11,16,1,11,21,30];
2770}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002771def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002772
2773} // SchedModel