blob: 808033361679d1924e98f98d19dde2cedda26718 [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : SKLWriteResPair<WriteCMOV, [SKLPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [SKLPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [SKLPort06,SKLPort4,SKLPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
125defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
126defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
127defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
134defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
135
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteMove, [SKLPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
145// Branches don't produce values, so they have no latency, but they still
146// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000148
149// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000150def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
151def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
152def : WriteRes<WriteFMove, [SKLPort015]>;
153
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
156defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000157defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
158defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
159defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
160defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 5>; // Floating point reciprocal estimate.
161defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 5>; // Floating point reciprocal square root estimate.
162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
164defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000167defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1>; // Floating point vector blends.
168defm : SKLWriteResPair<WriteFVarBlend, [SKLPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000169
170// FMA Scheduling helper class.
171// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
172
173// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000174def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
175def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
176def : WriteRes<WriteVecMove, [SKLPort015]>;
177
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000178defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000179defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
181defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000182defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000184defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000185defm : SKLWriteResPair<WriteBlend, [SKLPort15], 1>; // Vector blends.
186defm : SKLWriteResPair<WriteVarBlend, [SKLPort5], 2, [2]>; // Vector variable blends.
187defm : SKLWriteResPair<WriteMPSAD, [SKLPort0, SKLPort5], 6, [1, 2]>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000188defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000189
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000191defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
192defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
193defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000194
195// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000197// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000198def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
199 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000200 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000201 let ResourceCycles = [3];
202}
203def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000204 let Latency = 16;
205 let NumMicroOps = 4;
206 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000207}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000208
209// Packed Compare Explicit Length Strings, Return Mask
210def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
211 let Latency = 19;
212 let NumMicroOps = 9;
213 let ResourceCycles = [4,3,1,1];
214}
215def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
216 let Latency = 25;
217 let NumMicroOps = 10;
218 let ResourceCycles = [4,3,1,1,1];
219}
220
221// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000222def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000223 let Latency = 10;
224 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000225 let ResourceCycles = [3];
226}
227def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000228 let Latency = 16;
229 let NumMicroOps = 4;
230 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000232
233// Packed Compare Explicit Length Strings, Return Index
234def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
235 let Latency = 18;
236 let NumMicroOps = 8;
237 let ResourceCycles = [4,3,1];
238}
239def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
240 let Latency = 24;
241 let NumMicroOps = 9;
242 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000243}
244
Simon Pilgrima2f26782018-03-27 20:38:54 +0000245// MOVMSK Instructions.
246def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
247def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
248def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
249
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000250// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000251def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
252 let Latency = 4;
253 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000254 let ResourceCycles = [1];
255}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
257 let Latency = 10;
258 let NumMicroOps = 2;
259 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000260}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261
262def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
263 let Latency = 8;
264 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265 let ResourceCycles = [2];
266}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000268 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000269 let NumMicroOps = 3;
270 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000272
273def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
274 let Latency = 20;
275 let NumMicroOps = 11;
276 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000278def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
279 let Latency = 25;
280 let NumMicroOps = 11;
281 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000282}
283
284// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000285def : WriteRes<WriteCLMul, [SKLPort5]> {
286 let Latency = 6;
287 let NumMicroOps = 1;
288 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000289}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000290def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
291 let Latency = 12;
292 let NumMicroOps = 2;
293 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000294}
295
296// Catch-all for expensive system instructions.
297def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
298
299// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000300defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000301defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000302defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000303defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000304defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305
306// Old microcoded instructions that nobody use.
307def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
308
309// Fence instructions.
310def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
311
312// Nop, not very useful expect it provides a model for nops!
313def : WriteRes<WriteNop, []>;
314
315////////////////////////////////////////////////////////////////////////////////
316// Horizontal add/sub instructions.
317////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000318
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000319defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
320defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000321
322// Remaining instrs.
323
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000324def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000325 let Latency = 1;
326 let NumMicroOps = 1;
327 let ResourceCycles = [1];
328}
Craig Topperfc179c62018-03-22 04:23:41 +0000329def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
330 "MMX_PADDSWirr",
331 "MMX_PADDUSBirr",
332 "MMX_PADDUSWirr",
333 "MMX_PAVGBirr",
334 "MMX_PAVGWirr",
335 "MMX_PCMPEQBirr",
336 "MMX_PCMPEQDirr",
337 "MMX_PCMPEQWirr",
338 "MMX_PCMPGTBirr",
339 "MMX_PCMPGTDirr",
340 "MMX_PCMPGTWirr",
341 "MMX_PMAXSWirr",
342 "MMX_PMAXUBirr",
343 "MMX_PMINSWirr",
344 "MMX_PMINUBirr",
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?)INSERTPSrr",
363 "(V?)MOV64toPQIrr",
364 "(V?)MOVDDUP(Y?)rr",
365 "(V?)MOVDI2PDIrr",
366 "(V?)MOVHLPSrr",
367 "(V?)MOVLHPSrr",
368 "(V?)MOVSDrr",
369 "(V?)MOVSHDUP(Y?)rr",
370 "(V?)MOVSLDUP(Y?)rr",
Craig Topper15fef892018-03-25 23:40:56 +0000371 "(V?)MOVSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000372 "(V?)PACKSSDW(Y?)rr",
373 "(V?)PACKSSWB(Y?)rr",
374 "(V?)PACKUSDW(Y?)rr",
375 "(V?)PACKUSWB(Y?)rr",
376 "(V?)PALIGNR(Y?)rri",
377 "(V?)PBLENDW(Y?)rri",
Craig Topperfc179c62018-03-22 04:23:41 +0000378 "VPBROADCASTDrr",
379 "VPBROADCASTQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000380 "VPERMILPD(Y?)ri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000381 "VPERMILPS(Y?)ri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000382 "(V?)PMOVSXBDrr",
383 "(V?)PMOVSXBQrr",
384 "(V?)PMOVSXBWrr",
385 "(V?)PMOVSXDQrr",
386 "(V?)PMOVSXWDrr",
387 "(V?)PMOVSXWQrr",
388 "(V?)PMOVZXBDrr",
389 "(V?)PMOVZXBQrr",
390 "(V?)PMOVZXBWrr",
391 "(V?)PMOVZXDQrr",
392 "(V?)PMOVZXWDrr",
393 "(V?)PMOVZXWQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000394 "(V?)PSHUFD(Y?)ri",
395 "(V?)PSHUFHW(Y?)ri",
396 "(V?)PSHUFLW(Y?)ri",
397 "(V?)PSLLDQ(Y?)ri",
398 "(V?)PSRLDQ(Y?)ri",
399 "(V?)PUNPCKHBW(Y?)rr",
400 "(V?)PUNPCKHDQ(Y?)rr",
401 "(V?)PUNPCKHQDQ(Y?)rr",
402 "(V?)PUNPCKHWD(Y?)rr",
403 "(V?)PUNPCKLBW(Y?)rr",
404 "(V?)PUNPCKLDQ(Y?)rr",
405 "(V?)PUNPCKLQDQ(Y?)rr",
406 "(V?)PUNPCKLWD(Y?)rr",
407 "(V?)SHUFPD(Y?)rri",
408 "(V?)SHUFPS(Y?)rri",
409 "(V?)UNPCKHPD(Y?)rr",
410 "(V?)UNPCKHPS(Y?)rr",
411 "(V?)UNPCKLPD(Y?)rr",
412 "(V?)UNPCKLPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000413
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000414def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000415 let Latency = 1;
416 let NumMicroOps = 1;
417 let ResourceCycles = [1];
418}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000419def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000420
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000421def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000422 let Latency = 1;
423 let NumMicroOps = 1;
424 let ResourceCycles = [1];
425}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000426def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
427 "(V?)PABSD(Y?)rr",
428 "(V?)PABSW(Y?)rr",
429 "(V?)PADDSB(Y?)rr",
430 "(V?)PADDSW(Y?)rr",
431 "(V?)PADDUSB(Y?)rr",
432 "(V?)PADDUSW(Y?)rr",
433 "(V?)PAVGB(Y?)rr",
434 "(V?)PAVGW(Y?)rr",
435 "(V?)PCMPEQB(Y?)rr",
436 "(V?)PCMPEQD(Y?)rr",
437 "(V?)PCMPEQQ(Y?)rr",
438 "(V?)PCMPEQW(Y?)rr",
439 "(V?)PCMPGTB(Y?)rr",
440 "(V?)PCMPGTD(Y?)rr",
441 "(V?)PCMPGTW(Y?)rr",
442 "(V?)PMAXSB(Y?)rr",
443 "(V?)PMAXSD(Y?)rr",
444 "(V?)PMAXSW(Y?)rr",
445 "(V?)PMAXUB(Y?)rr",
446 "(V?)PMAXUD(Y?)rr",
447 "(V?)PMAXUW(Y?)rr",
448 "(V?)PMINSB(Y?)rr",
449 "(V?)PMINSD(Y?)rr",
450 "(V?)PMINSW(Y?)rr",
451 "(V?)PMINUB(Y?)rr",
452 "(V?)PMINUD(Y?)rr",
453 "(V?)PMINUW(Y?)rr",
454 "(V?)PSIGNB(Y?)rr",
455 "(V?)PSIGND(Y?)rr",
456 "(V?)PSIGNW(Y?)rr",
457 "(V?)PSLLD(Y?)ri",
458 "(V?)PSLLQ(Y?)ri",
459 "VPSLLVD(Y?)rr",
460 "VPSLLVQ(Y?)rr",
461 "(V?)PSLLW(Y?)ri",
462 "(V?)PSRAD(Y?)ri",
463 "VPSRAVD(Y?)rr",
464 "(V?)PSRAW(Y?)ri",
465 "(V?)PSRLD(Y?)ri",
466 "(V?)PSRLQ(Y?)ri",
467 "VPSRLVD(Y?)rr",
468 "VPSRLVQ(Y?)rr",
469 "(V?)PSRLW(Y?)ri",
470 "(V?)PSUBSB(Y?)rr",
471 "(V?)PSUBSW(Y?)rr",
472 "(V?)PSUBUSB(Y?)rr",
473 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000474
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000475def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000476 let Latency = 1;
477 let NumMicroOps = 1;
478 let ResourceCycles = [1];
479}
Craig Topperfc179c62018-03-22 04:23:41 +0000480def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
481 "FNOP",
482 "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000483 "MMX_PABS(B|D|W)rr",
484 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000485 "MMX_PANDNirr",
486 "MMX_PANDirr",
487 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000488 "MMX_PSIGN(B|D|W)rr",
489 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000490 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000491
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000492def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000493 let Latency = 1;
494 let NumMicroOps = 1;
495 let ResourceCycles = [1];
496}
Craig Topperfbe31322018-04-05 21:56:19 +0000497def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000498def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
499 "ADC(16|32|64)i",
500 "ADC(8|16|32|64)rr",
501 "ADCX(32|64)rr",
502 "ADOX(32|64)rr",
503 "BT(16|32|64)ri8",
504 "BT(16|32|64)rr",
505 "BTC(16|32|64)ri8",
506 "BTC(16|32|64)rr",
507 "BTR(16|32|64)ri8",
508 "BTR(16|32|64)rr",
509 "BTS(16|32|64)ri8",
510 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000511 "CLAC",
Craig Topperfc179c62018-03-22 04:23:41 +0000512 "RORX(32|64)ri",
513 "SAR(8|16|32|64)r1",
514 "SAR(8|16|32|64)ri",
515 "SARX(32|64)rr",
516 "SBB(16|32|64)ri",
517 "SBB(16|32|64)i",
518 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000519 "SHL(8|16|32|64)r1",
520 "SHL(8|16|32|64)ri",
521 "SHLX(32|64)rr",
522 "SHR(8|16|32|64)r1",
523 "SHR(8|16|32|64)ri",
524 "SHRX(32|64)rr",
525 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000526
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000527def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
528 let Latency = 1;
529 let NumMicroOps = 1;
530 let ResourceCycles = [1];
531}
Craig Topperfc179c62018-03-22 04:23:41 +0000532def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
533 "BLSI(32|64)rr",
534 "BLSMSK(32|64)rr",
535 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000536 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000537
538def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
539 let Latency = 1;
540 let NumMicroOps = 1;
541 let ResourceCycles = [1];
542}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000543def: InstRW<[SKLWriteResGroup9], (instregex "(V?)BLENDPD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000544 "(V?)BLENDPS(Y?)rri",
545 "(V?)MOVAPD(Y?)rr",
546 "(V?)MOVAPS(Y?)rr",
547 "(V?)MOVDQA(Y?)rr",
548 "(V?)MOVDQU(Y?)rr",
549 "(V?)MOVPQI2QIrr",
Craig Topper15fef892018-03-25 23:40:56 +0000550 "(V?)MOVUPD(Y?)rr",
551 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000552 "(V?)MOVZPQILo2PQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000553 "(V?)PADDB(Y?)rr",
554 "(V?)PADDD(Y?)rr",
555 "(V?)PADDQ(Y?)rr",
556 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000557 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000558 "(V?)PSUBB(Y?)rr",
559 "(V?)PSUBD(Y?)rr",
560 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000561 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000562
563def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
564 let Latency = 1;
565 let NumMicroOps = 1;
566 let ResourceCycles = [1];
567}
Craig Topperfbe31322018-04-05 21:56:19 +0000568def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000569def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000570 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000571 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000572 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000573 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000574 "SGDT64m",
575 "SIDT64m",
576 "SLDT64m",
577 "SMSW16m",
578 "STC",
579 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000580 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000581
582def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000583 let Latency = 1;
584 let NumMicroOps = 2;
585 let ResourceCycles = [1,1];
586}
Craig Topperfc179c62018-03-22 04:23:41 +0000587def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
588 "MMX_MOVD64from64rm",
589 "MMX_MOVD64mr",
590 "MMX_MOVNTQmr",
591 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000592 "MOVNTI_64mr",
593 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000594 "ST_FP32m",
595 "ST_FP64m",
596 "ST_FP80m",
597 "VEXTRACTF128mr",
598 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000599 "(V?)MOVAPDYmr",
600 "(V?)MOVAPS(Y?)mr",
601 "(V?)MOVDQA(Y?)mr",
602 "(V?)MOVDQU(Y?)mr",
603 "(V?)MOVHPDmr",
604 "(V?)MOVHPSmr",
605 "(V?)MOVLPDmr",
606 "(V?)MOVLPSmr",
607 "(V?)MOVNTDQ(Y?)mr",
608 "(V?)MOVNTPD(Y?)mr",
609 "(V?)MOVNTPS(Y?)mr",
610 "(V?)MOVPDI2DImr",
611 "(V?)MOVPQI2QImr",
612 "(V?)MOVPQIto64mr",
613 "(V?)MOVSDmr",
614 "(V?)MOVSSmr",
615 "(V?)MOVUPD(Y?)mr",
616 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000617 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000618
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000619def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000620 let Latency = 2;
621 let NumMicroOps = 1;
622 let ResourceCycles = [1];
623}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000624def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000625 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000626 "(V?)MOVPDI2DIrr",
627 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000628 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000629 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000630
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000631def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000632 let Latency = 2;
633 let NumMicroOps = 2;
634 let ResourceCycles = [2];
635}
Craig Topperfc179c62018-03-22 04:23:41 +0000636def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
637 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000638 "(V?)PINSRBrr",
639 "(V?)PINSRDrr",
640 "(V?)PINSRQrr",
641 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000642
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000643def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000644 let Latency = 2;
645 let NumMicroOps = 2;
646 let ResourceCycles = [2];
647}
Craig Topperfc179c62018-03-22 04:23:41 +0000648def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
649 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000650
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000651def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000652 let Latency = 2;
653 let NumMicroOps = 2;
654 let ResourceCycles = [2];
655}
Craig Topperfc179c62018-03-22 04:23:41 +0000656def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
657 "ROL(8|16|32|64)r1",
658 "ROL(8|16|32|64)ri",
659 "ROR(8|16|32|64)r1",
660 "ROR(8|16|32|64)ri",
661 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000662
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000663def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000664 let Latency = 2;
665 let NumMicroOps = 2;
666 let ResourceCycles = [2];
667}
Craig Topperfc179c62018-03-22 04:23:41 +0000668def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
669 "BLENDVPSrr0",
670 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000671 "VBLENDVPD(Y?)rr",
672 "VBLENDVPS(Y?)rr",
673 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000674
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000675def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000676 let Latency = 2;
677 let NumMicroOps = 2;
678 let ResourceCycles = [2];
679}
Craig Topperfc179c62018-03-22 04:23:41 +0000680def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
681 "WAIT",
682 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000683
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000684def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000685 let Latency = 2;
686 let NumMicroOps = 2;
687 let ResourceCycles = [1,1];
688}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000689def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
690 "VMASKMOVPS(Y?)mr",
691 "VPMASKMOVD(Y?)mr",
692 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000693
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000694def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000695 let Latency = 2;
696 let NumMicroOps = 2;
697 let ResourceCycles = [1,1];
698}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000699def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
700 "(V?)PSLLQrr",
701 "(V?)PSLLWrr",
702 "(V?)PSRADrr",
703 "(V?)PSRAWrr",
704 "(V?)PSRLDrr",
705 "(V?)PSRLQrr",
706 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000707
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000708def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000709 let Latency = 2;
710 let NumMicroOps = 2;
711 let ResourceCycles = [1,1];
712}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000713def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000714
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000715def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000716 let Latency = 2;
717 let NumMicroOps = 2;
718 let ResourceCycles = [1,1];
719}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000720def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000721
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000722def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000723 let Latency = 2;
724 let NumMicroOps = 2;
725 let ResourceCycles = [1,1];
726}
Craig Topper498875f2018-04-04 17:54:19 +0000727def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
728
729def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
730 let Latency = 1;
731 let NumMicroOps = 1;
732 let ResourceCycles = [1];
733}
734def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000735
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000736def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000737 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000738 let NumMicroOps = 2;
739 let ResourceCycles = [1,1];
740}
Craig Topper2d451e72018-03-18 08:38:06 +0000741def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000742def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000743def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
744 "ADC8ri",
745 "SBB8i8",
746 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000747
748def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
749 let Latency = 2;
750 let NumMicroOps = 3;
751 let ResourceCycles = [1,1,1];
752}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000753def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
754 "(V?)PEXTRBmr",
755 "(V?)PEXTRDmr",
756 "(V?)PEXTRQmr",
757 "(V?)PEXTRWmr",
758 "(V?)STMXCSR")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000759
760def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
761 let Latency = 2;
762 let NumMicroOps = 3;
763 let ResourceCycles = [1,1,1];
764}
765def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
766
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000767def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
768 let Latency = 2;
769 let NumMicroOps = 3;
770 let ResourceCycles = [1,1,1];
771}
772def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
773
774def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
775 let Latency = 2;
776 let NumMicroOps = 3;
777 let ResourceCycles = [1,1,1];
778}
Craig Topper2d451e72018-03-18 08:38:06 +0000779def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000780def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
781 "PUSH64i8",
782 "STOSB",
783 "STOSL",
784 "STOSQ",
785 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000786
787def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
788 let Latency = 3;
789 let NumMicroOps = 1;
790 let ResourceCycles = [1];
791}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000792def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000793 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000794 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000795 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000796
Clement Courbet327fac42018-03-07 08:14:02 +0000797def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000798 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000799 let NumMicroOps = 2;
800 let ResourceCycles = [1,1];
801}
Clement Courbet327fac42018-03-07 08:14:02 +0000802def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000803
804def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
805 let Latency = 3;
806 let NumMicroOps = 1;
807 let ResourceCycles = [1];
808}
Craig Topperfc179c62018-03-22 04:23:41 +0000809def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
810 "ADD_FST0r",
811 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000812 "SUBR_FPrST0",
813 "SUBR_FST0r",
814 "SUBR_FrST0",
815 "SUB_FPrST0",
816 "SUB_FST0r",
817 "SUB_FrST0",
818 "VBROADCASTSDYrr",
819 "VBROADCASTSSYrr",
820 "VEXTRACTF128rr",
821 "VEXTRACTI128rr",
822 "VINSERTF128rr",
823 "VINSERTI128rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000824 "VPBROADCASTB(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000825 "VPBROADCASTDYrr",
826 "VPBROADCASTQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000827 "VPBROADCASTW(Y?)rr",
828 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000829 "VPERM2F128rr",
830 "VPERM2I128rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000831 "VPERMPDYri",
Craig Topperfc179c62018-03-22 04:23:41 +0000832 "VPERMQYri",
833 "VPMOVSXBDYrr",
834 "VPMOVSXBQYrr",
835 "VPMOVSXBWYrr",
836 "VPMOVSXDQYrr",
837 "VPMOVSXWDYrr",
838 "VPMOVSXWQYrr",
839 "VPMOVZXBDYrr",
840 "VPMOVZXBQYrr",
841 "VPMOVZXBWYrr",
842 "VPMOVZXDQYrr",
843 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000844 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000845
846def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
847 let Latency = 3;
848 let NumMicroOps = 2;
849 let ResourceCycles = [1,1];
850}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000851def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
852 "(V?)EXTRACTPSrr",
853 "(V?)PEXTRBrr",
854 "(V?)PEXTRDrr",
855 "(V?)PEXTRQrr",
856 "(V?)PEXTRWrr",
857 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000858
859def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
860 let Latency = 3;
861 let NumMicroOps = 2;
862 let ResourceCycles = [1,1];
863}
864def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
865
866def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
867 let Latency = 3;
868 let NumMicroOps = 3;
869 let ResourceCycles = [3];
870}
Craig Topperfc179c62018-03-22 04:23:41 +0000871def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
872 "ROR(8|16|32|64)rCL",
873 "SAR(8|16|32|64)rCL",
874 "SHL(8|16|32|64)rCL",
875 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000876
877def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000878 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000879 let NumMicroOps = 3;
880 let ResourceCycles = [3];
881}
Craig Topperb5f26592018-04-19 18:00:17 +0000882def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
883 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
884 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000885
886def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
887 let Latency = 3;
888 let NumMicroOps = 3;
889 let ResourceCycles = [1,2];
890}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000891def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000892
893def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
894 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000895 let NumMicroOps = 3;
896 let ResourceCycles = [2,1];
897}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000898def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
899 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000900
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000901def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
902 let Latency = 3;
903 let NumMicroOps = 3;
904 let ResourceCycles = [2,1];
905}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000906def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000907
908def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
909 let Latency = 3;
910 let NumMicroOps = 3;
911 let ResourceCycles = [2,1];
912}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000913def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
914 "(V?)PHADDW(Y?)rr",
915 "(V?)PHSUBD(Y?)rr",
916 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000917
918def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
919 let Latency = 3;
920 let NumMicroOps = 3;
921 let ResourceCycles = [2,1];
922}
Craig Topperfc179c62018-03-22 04:23:41 +0000923def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
924 "MMX_PACKSSWBirr",
925 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000926
927def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
928 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000929 let NumMicroOps = 3;
930 let ResourceCycles = [1,2];
931}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000932def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000933
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000934def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
935 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000936 let NumMicroOps = 3;
937 let ResourceCycles = [1,2];
938}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000939def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000940
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000941def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
942 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000943 let NumMicroOps = 3;
944 let ResourceCycles = [1,2];
945}
Craig Topperfc179c62018-03-22 04:23:41 +0000946def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
947 "RCL(8|16|32|64)ri",
948 "RCR(8|16|32|64)r1",
949 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000950
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000951def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
952 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000953 let NumMicroOps = 3;
954 let ResourceCycles = [1,1,1];
955}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000956def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000957
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000958def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
959 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000960 let NumMicroOps = 4;
961 let ResourceCycles = [1,1,2];
962}
Craig Topperf4cd9082018-01-19 05:47:32 +0000963def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000964
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000965def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
966 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000967 let NumMicroOps = 4;
968 let ResourceCycles = [1,1,1,1];
969}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000970def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000971
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000972def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
973 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000974 let NumMicroOps = 4;
975 let ResourceCycles = [1,1,1,1];
976}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000977def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000978
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000979def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000980 let Latency = 4;
981 let NumMicroOps = 1;
982 let ResourceCycles = [1];
983}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000984def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000985 "MMX_PMADDWDirr",
986 "MMX_PMULHRSWrr",
987 "MMX_PMULHUWirr",
988 "MMX_PMULHWirr",
989 "MMX_PMULLWirr",
990 "MMX_PMULUDQirr",
991 "MUL_FPrST0",
992 "MUL_FST0r",
993 "MUL_FrST0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000994 "(V?)RCPPS(Y?)r",
995 "(V?)RCPSSr",
996 "(V?)RSQRTPS(Y?)r",
997 "(V?)RSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000998
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000999def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001000 let Latency = 4;
1001 let NumMicroOps = 1;
1002 let ResourceCycles = [1];
1003}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001004def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
1005 "(V?)ADDPS(Y?)rr",
1006 "(V?)ADDSDrr",
1007 "(V?)ADDSSrr",
1008 "(V?)ADDSUBPD(Y?)rr",
1009 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001010 "(V?)CVTDQ2PS(Y?)rr",
1011 "(V?)CVTPS2DQ(Y?)rr",
1012 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001013 "(V?)MULPD(Y?)rr",
1014 "(V?)MULPS(Y?)rr",
1015 "(V?)MULSDrr",
1016 "(V?)MULSSrr",
1017 "(V?)PHMINPOSUWrr",
1018 "(V?)PMADDUBSW(Y?)rr",
1019 "(V?)PMADDWD(Y?)rr",
1020 "(V?)PMULDQ(Y?)rr",
1021 "(V?)PMULHRSW(Y?)rr",
1022 "(V?)PMULHUW(Y?)rr",
1023 "(V?)PMULHW(Y?)rr",
1024 "(V?)PMULLW(Y?)rr",
1025 "(V?)PMULUDQ(Y?)rr",
1026 "(V?)SUBPD(Y?)rr",
1027 "(V?)SUBPS(Y?)rr",
1028 "(V?)SUBSDrr",
1029 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001030
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001031def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001032 let Latency = 4;
1033 let NumMicroOps = 2;
1034 let ResourceCycles = [2];
1035}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001036def: InstRW<[SKLWriteResGroup50], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001037
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001038def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001039 let Latency = 4;
1040 let NumMicroOps = 2;
1041 let ResourceCycles = [1,1];
1042}
Craig Topperf846e2d2018-04-19 05:34:05 +00001043def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001044
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001045def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1046 let Latency = 4;
1047 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001048 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001049}
Craig Topperfc179c62018-03-22 04:23:41 +00001050def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001051
1052def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001053 let Latency = 4;
1054 let NumMicroOps = 2;
1055 let ResourceCycles = [1,1];
1056}
Craig Topperfc179c62018-03-22 04:23:41 +00001057def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1058 "VPSLLQYrr",
1059 "VPSLLWYrr",
1060 "VPSRADYrr",
1061 "VPSRAWYrr",
1062 "VPSRLDYrr",
1063 "VPSRLQYrr",
1064 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001066def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001067 let Latency = 4;
1068 let NumMicroOps = 3;
1069 let ResourceCycles = [1,1,1];
1070}
Craig Topperfc179c62018-03-22 04:23:41 +00001071def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1072 "ISTT_FP32m",
1073 "ISTT_FP64m",
1074 "IST_F16m",
1075 "IST_F32m",
1076 "IST_FP16m",
1077 "IST_FP32m",
1078 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001079
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001080def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001081 let Latency = 4;
1082 let NumMicroOps = 4;
1083 let ResourceCycles = [4];
1084}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001085def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001086
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001087def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001088 let Latency = 4;
1089 let NumMicroOps = 4;
1090 let ResourceCycles = [1,3];
1091}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001092def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001093
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001094def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001095 let Latency = 4;
1096 let NumMicroOps = 4;
1097 let ResourceCycles = [1,3];
1098}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001099def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001100
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001101def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001102 let Latency = 4;
1103 let NumMicroOps = 4;
1104 let ResourceCycles = [1,1,2];
1105}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001106def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001107
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001108def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1109 let Latency = 5;
1110 let NumMicroOps = 1;
1111 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001112}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001113def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001114 "MOVSX(16|32|64)rm32",
1115 "MOVSX(16|32|64)rm8",
1116 "MOVZX(16|32|64)rm16",
1117 "MOVZX(16|32|64)rm8",
1118 "PREFETCHNTA",
1119 "PREFETCHT0",
1120 "PREFETCHT1",
1121 "PREFETCHT2",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001122 "(V?)MOV64toPQIrm",
1123 "(V?)MOVDDUPrm",
1124 "(V?)MOVDI2PDIrm",
1125 "(V?)MOVQI2PQIrm",
1126 "(V?)MOVSDrm",
1127 "(V?)MOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001128
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001129def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001130 let Latency = 5;
1131 let NumMicroOps = 2;
1132 let ResourceCycles = [1,1];
1133}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001134def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1135 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001136
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001137def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001138 let Latency = 5;
1139 let NumMicroOps = 2;
1140 let ResourceCycles = [1,1];
1141}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001142def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001143 "MMX_CVTPS2PIirr",
1144 "MMX_CVTTPD2PIirr",
1145 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001146 "(V?)CVTPD2DQrr",
1147 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001148 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001149 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001150 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001151 "(V?)CVTSD2SSrr",
1152 "(V?)CVTSI642SDrr",
1153 "(V?)CVTSI2SDrr",
1154 "(V?)CVTSI2SSrr",
1155 "(V?)CVTSS2SDrr",
1156 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001157
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001158def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001159 let Latency = 5;
1160 let NumMicroOps = 3;
1161 let ResourceCycles = [1,1,1];
1162}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001163def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001164
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001165def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001166 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001167 let NumMicroOps = 3;
1168 let ResourceCycles = [1,1,1];
1169}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001170def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001171
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001172def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001173 let Latency = 5;
1174 let NumMicroOps = 5;
1175 let ResourceCycles = [1,4];
1176}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001177def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001178
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001179def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001180 let Latency = 5;
1181 let NumMicroOps = 5;
1182 let ResourceCycles = [2,3];
1183}
Craig Topper13a16502018-03-19 00:56:09 +00001184def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001185
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001186def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001187 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001188 let NumMicroOps = 6;
1189 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001190}
Craig Topperfc179c62018-03-22 04:23:41 +00001191def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1192 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001193
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001194def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1195 let Latency = 6;
1196 let NumMicroOps = 1;
1197 let ResourceCycles = [1];
1198}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001199def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
1200 "(V?)LDDQUrm",
1201 "(V?)MOVAPDrm",
1202 "(V?)MOVAPSrm",
1203 "(V?)MOVDQArm",
1204 "(V?)MOVDQUrm",
1205 "(V?)MOVNTDQArm",
1206 "(V?)MOVSHDUPrm",
1207 "(V?)MOVSLDUPrm",
1208 "(V?)MOVUPDrm",
1209 "(V?)MOVUPSrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001210 "VPBROADCASTDrm",
1211 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001212
1213def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001214 let Latency = 6;
1215 let NumMicroOps = 2;
1216 let ResourceCycles = [2];
1217}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001218def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001219
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001220def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001221 let Latency = 6;
1222 let NumMicroOps = 2;
1223 let ResourceCycles = [1,1];
1224}
Craig Topperfc179c62018-03-22 04:23:41 +00001225def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1226 "MMX_PADDSWirm",
1227 "MMX_PADDUSBirm",
1228 "MMX_PADDUSWirm",
1229 "MMX_PAVGBirm",
1230 "MMX_PAVGWirm",
1231 "MMX_PCMPEQBirm",
1232 "MMX_PCMPEQDirm",
1233 "MMX_PCMPEQWirm",
1234 "MMX_PCMPGTBirm",
1235 "MMX_PCMPGTDirm",
1236 "MMX_PCMPGTWirm",
1237 "MMX_PMAXSWirm",
1238 "MMX_PMAXUBirm",
1239 "MMX_PMINSWirm",
1240 "MMX_PMINUBirm",
1241 "MMX_PSLLDrm",
1242 "MMX_PSLLQrm",
1243 "MMX_PSLLWrm",
1244 "MMX_PSRADrm",
1245 "MMX_PSRAWrm",
1246 "MMX_PSRLDrm",
1247 "MMX_PSRLQrm",
1248 "MMX_PSRLWrm",
1249 "MMX_PSUBSBirm",
1250 "MMX_PSUBSWirm",
1251 "MMX_PSUBUSBirm",
1252 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001253
Craig Topper58afb4e2018-03-22 21:10:07 +00001254def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001255 let Latency = 6;
1256 let NumMicroOps = 2;
1257 let ResourceCycles = [1,1];
1258}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001259def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1260 "(V?)CVTSD2SIrr",
1261 "(V?)CVTSS2SI64rr",
1262 "(V?)CVTSS2SIrr",
1263 "(V?)CVTTSD2SI64rr",
1264 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001265
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001266def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1267 let Latency = 6;
1268 let NumMicroOps = 2;
1269 let ResourceCycles = [1,1];
1270}
Craig Topperfc179c62018-03-22 04:23:41 +00001271def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1272 "MMX_PINSRWrm",
1273 "MMX_PSHUFBrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001274 "MMX_PUNPCKHBWirm",
1275 "MMX_PUNPCKHDQirm",
1276 "MMX_PUNPCKHWDirm",
1277 "MMX_PUNPCKLBWirm",
1278 "MMX_PUNPCKLDQirm",
1279 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001280 "(V?)MOVHPDrm",
1281 "(V?)MOVHPSrm",
1282 "(V?)MOVLPDrm",
1283 "(V?)MOVLPSrm",
1284 "(V?)PINSRBrm",
1285 "(V?)PINSRDrm",
1286 "(V?)PINSRQrm",
1287 "(V?)PINSRWrm",
1288 "(V?)PMOVSXBDrm",
1289 "(V?)PMOVSXBQrm",
1290 "(V?)PMOVSXBWrm",
1291 "(V?)PMOVSXDQrm",
1292 "(V?)PMOVSXWDrm",
1293 "(V?)PMOVSXWQrm",
1294 "(V?)PMOVZXBDrm",
1295 "(V?)PMOVZXBQrm",
1296 "(V?)PMOVZXBWrm",
1297 "(V?)PMOVZXDQrm",
1298 "(V?)PMOVZXWDrm",
1299 "(V?)PMOVZXWQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001300
1301def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1302 let Latency = 6;
1303 let NumMicroOps = 2;
1304 let ResourceCycles = [1,1];
1305}
Craig Topperfc179c62018-03-22 04:23:41 +00001306def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1307 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001308
1309def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1310 let Latency = 6;
1311 let NumMicroOps = 2;
1312 let ResourceCycles = [1,1];
1313}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001314def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1315 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001316 "MMX_PANDNirm",
1317 "MMX_PANDirm",
1318 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001319 "MMX_PSIGN(B|D|W)rm",
1320 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001321 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001322
1323def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1324 let Latency = 6;
1325 let NumMicroOps = 2;
1326 let ResourceCycles = [1,1];
1327}
Craig Topperc50570f2018-04-06 17:12:18 +00001328def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001329 "RORX(32|64)mi",
1330 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001331 "SHLX(32|64)rm",
1332 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001333def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1334 ADCX32rm, ADCX64rm,
1335 ADOX32rm, ADOX64rm,
1336 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001337
1338def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1339 let Latency = 6;
1340 let NumMicroOps = 2;
1341 let ResourceCycles = [1,1];
1342}
Craig Topperfc179c62018-03-22 04:23:41 +00001343def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1344 "BLSI(32|64)rm",
1345 "BLSMSK(32|64)rm",
1346 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001347 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001348
1349def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1350 let Latency = 6;
1351 let NumMicroOps = 2;
1352 let ResourceCycles = [1,1];
1353}
Craig Topper2d451e72018-03-18 08:38:06 +00001354def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001355def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001356
1357def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001358 let Latency = 6;
1359 let NumMicroOps = 3;
1360 let ResourceCycles = [2,1];
1361}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001362def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1363 "(V?)HADDPS(Y?)rr",
1364 "(V?)HSUBPD(Y?)rr",
1365 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001366
Craig Topper58afb4e2018-03-22 21:10:07 +00001367def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001368 let Latency = 6;
1369 let NumMicroOps = 3;
1370 let ResourceCycles = [2,1];
1371}
Craig Topperfc179c62018-03-22 04:23:41 +00001372def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001373
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001374def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001375 let Latency = 6;
1376 let NumMicroOps = 4;
1377 let ResourceCycles = [1,2,1];
1378}
Craig Topperfc179c62018-03-22 04:23:41 +00001379def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1380 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001381
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001382def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001383 let Latency = 6;
1384 let NumMicroOps = 4;
1385 let ResourceCycles = [1,1,1,1];
1386}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001387def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001388
Craig Topper58afb4e2018-03-22 21:10:07 +00001389def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001390 let Latency = 6;
1391 let NumMicroOps = 4;
1392 let ResourceCycles = [1,1,1,1];
1393}
1394def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1395
1396def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1397 let Latency = 6;
1398 let NumMicroOps = 4;
1399 let ResourceCycles = [1,1,1,1];
1400}
Craig Topperfc179c62018-03-22 04:23:41 +00001401def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1402 "BTR(16|32|64)mi8",
1403 "BTS(16|32|64)mi8",
1404 "SAR(8|16|32|64)m1",
1405 "SAR(8|16|32|64)mi",
1406 "SHL(8|16|32|64)m1",
1407 "SHL(8|16|32|64)mi",
1408 "SHR(8|16|32|64)m1",
1409 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001410
1411def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1412 let Latency = 6;
1413 let NumMicroOps = 4;
1414 let ResourceCycles = [1,1,1,1];
1415}
Craig Topperf0d04262018-04-06 16:16:48 +00001416def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1417 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001418
1419def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001420 let Latency = 6;
1421 let NumMicroOps = 6;
1422 let ResourceCycles = [1,5];
1423}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001424def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001425
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001426def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1427 let Latency = 7;
1428 let NumMicroOps = 1;
1429 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001430}
Craig Topperfc179c62018-03-22 04:23:41 +00001431def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1432 "LD_F64m",
1433 "LD_F80m",
1434 "VBROADCASTF128",
1435 "VBROADCASTI128",
1436 "VBROADCASTSDYrm",
1437 "VBROADCASTSSYrm",
1438 "VLDDQUYrm",
1439 "VMOVAPDYrm",
1440 "VMOVAPSYrm",
1441 "VMOVDDUPYrm",
1442 "VMOVDQAYrm",
1443 "VMOVDQUYrm",
1444 "VMOVNTDQAYrm",
1445 "VMOVSHDUPYrm",
1446 "VMOVSLDUPYrm",
1447 "VMOVUPDYrm",
1448 "VMOVUPSYrm",
1449 "VPBROADCASTDYrm",
1450 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001451
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001452def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001453 let Latency = 7;
1454 let NumMicroOps = 2;
1455 let ResourceCycles = [1,1];
1456}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001457def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001458
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001459def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1460 let Latency = 7;
1461 let NumMicroOps = 2;
1462 let ResourceCycles = [1,1];
1463}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001464def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1465 "(V?)PACKSSDWrm",
1466 "(V?)PACKSSWBrm",
1467 "(V?)PACKUSDWrm",
1468 "(V?)PACKUSWBrm",
1469 "(V?)PALIGNRrmi",
1470 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001471 "VPBROADCASTBrm",
1472 "VPBROADCASTWrm",
1473 "VPERMILPDmi",
1474 "VPERMILPDrm",
1475 "VPERMILPSmi",
1476 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001477 "(V?)PSHUFBrm",
1478 "(V?)PSHUFDmi",
1479 "(V?)PSHUFHWmi",
1480 "(V?)PSHUFLWmi",
1481 "(V?)PUNPCKHBWrm",
1482 "(V?)PUNPCKHDQrm",
1483 "(V?)PUNPCKHQDQrm",
1484 "(V?)PUNPCKHWDrm",
1485 "(V?)PUNPCKLBWrm",
1486 "(V?)PUNPCKLDQrm",
1487 "(V?)PUNPCKLQDQrm",
1488 "(V?)PUNPCKLWDrm",
1489 "(V?)SHUFPDrmi",
1490 "(V?)SHUFPSrmi",
1491 "(V?)UNPCKHPDrm",
1492 "(V?)UNPCKHPSrm",
1493 "(V?)UNPCKLPDrm",
1494 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001495
Craig Topper58afb4e2018-03-22 21:10:07 +00001496def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001497 let Latency = 7;
1498 let NumMicroOps = 2;
1499 let ResourceCycles = [1,1];
1500}
Craig Topperfc179c62018-03-22 04:23:41 +00001501def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1502 "VCVTPD2PSYrr",
1503 "VCVTPH2PSYrr",
1504 "VCVTPS2PDYrr",
1505 "VCVTPS2PHYrr",
1506 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001507
1508def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1509 let Latency = 7;
1510 let NumMicroOps = 2;
1511 let ResourceCycles = [1,1];
1512}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001513def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1514 "(V?)PABSDrm",
1515 "(V?)PABSWrm",
1516 "(V?)PADDSBrm",
1517 "(V?)PADDSWrm",
1518 "(V?)PADDUSBrm",
1519 "(V?)PADDUSWrm",
1520 "(V?)PAVGBrm",
1521 "(V?)PAVGWrm",
1522 "(V?)PCMPEQBrm",
1523 "(V?)PCMPEQDrm",
1524 "(V?)PCMPEQQrm",
1525 "(V?)PCMPEQWrm",
1526 "(V?)PCMPGTBrm",
1527 "(V?)PCMPGTDrm",
1528 "(V?)PCMPGTWrm",
1529 "(V?)PMAXSBrm",
1530 "(V?)PMAXSDrm",
1531 "(V?)PMAXSWrm",
1532 "(V?)PMAXUBrm",
1533 "(V?)PMAXUDrm",
1534 "(V?)PMAXUWrm",
1535 "(V?)PMINSBrm",
1536 "(V?)PMINSDrm",
1537 "(V?)PMINSWrm",
1538 "(V?)PMINUBrm",
1539 "(V?)PMINUDrm",
1540 "(V?)PMINUWrm",
1541 "(V?)PSIGNBrm",
1542 "(V?)PSIGNDrm",
1543 "(V?)PSIGNWrm",
1544 "(V?)PSLLDrm",
1545 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001546 "VPSLLVDrm",
1547 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001548 "(V?)PSLLWrm",
1549 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001550 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001551 "(V?)PSRAWrm",
1552 "(V?)PSRLDrm",
1553 "(V?)PSRLQrm",
1554 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001555 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001556 "(V?)PSRLWrm",
1557 "(V?)PSUBSBrm",
1558 "(V?)PSUBSWrm",
1559 "(V?)PSUBUSBrm",
1560 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001561
1562def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1563 let Latency = 7;
1564 let NumMicroOps = 2;
1565 let ResourceCycles = [1,1];
1566}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001567def: InstRW<[SKLWriteResGroup91], (instregex "(V?)BLENDPDrmi",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001568 "(V?)BLENDPSrmi",
1569 "(V?)INSERTF128rm",
1570 "(V?)INSERTI128rm",
1571 "(V?)MASKMOVPDrm",
1572 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001573 "(V?)PADDBrm",
1574 "(V?)PADDDrm",
1575 "(V?)PADDQrm",
1576 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001577 "(V?)PBLENDDrmi",
1578 "(V?)PMASKMOVDrm",
1579 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001580 "(V?)PSUBBrm",
1581 "(V?)PSUBDrm",
1582 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001583 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001584
1585def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1586 let Latency = 7;
1587 let NumMicroOps = 3;
1588 let ResourceCycles = [2,1];
1589}
Craig Topperfc179c62018-03-22 04:23:41 +00001590def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1591 "MMX_PACKSSWBirm",
1592 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001593
1594def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1595 let Latency = 7;
1596 let NumMicroOps = 3;
1597 let ResourceCycles = [1,2];
1598}
Craig Topperf4cd9082018-01-19 05:47:32 +00001599def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001600
1601def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1602 let Latency = 7;
1603 let NumMicroOps = 3;
1604 let ResourceCycles = [1,2];
1605}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001606def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1607 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001608
Craig Topper58afb4e2018-03-22 21:10:07 +00001609def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001610 let Latency = 7;
1611 let NumMicroOps = 3;
1612 let ResourceCycles = [1,1,1];
1613}
Craig Topperfc179c62018-03-22 04:23:41 +00001614def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1615 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001616
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001617def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001618 let Latency = 7;
1619 let NumMicroOps = 3;
1620 let ResourceCycles = [1,1,1];
1621}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001622def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001623
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001624def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001625 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001626 let NumMicroOps = 3;
1627 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001628}
Craig Topperfc179c62018-03-22 04:23:41 +00001629def: InstRW<[SKLWriteResGroup97], (instregex "(V?)LDMXCSR")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001630
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001631def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001632 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001633 let NumMicroOps = 3;
1634 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001635}
Craig Topperfc179c62018-03-22 04:23:41 +00001636def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1637 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001638
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001639def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1640 let Latency = 7;
1641 let NumMicroOps = 5;
1642 let ResourceCycles = [1,1,1,2];
1643}
Craig Topperfc179c62018-03-22 04:23:41 +00001644def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1645 "ROL(8|16|32|64)mi",
1646 "ROR(8|16|32|64)m1",
1647 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001648
1649def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1650 let Latency = 7;
1651 let NumMicroOps = 5;
1652 let ResourceCycles = [1,1,1,2];
1653}
Craig Topper13a16502018-03-19 00:56:09 +00001654def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001655
1656def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1657 let Latency = 7;
1658 let NumMicroOps = 5;
1659 let ResourceCycles = [1,1,1,1,1];
1660}
Craig Topperfc179c62018-03-22 04:23:41 +00001661def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1662 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001663
1664def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001665 let Latency = 7;
1666 let NumMicroOps = 7;
1667 let ResourceCycles = [1,3,1,2];
1668}
Craig Topper2d451e72018-03-18 08:38:06 +00001669def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001670
Craig Topper58afb4e2018-03-22 21:10:07 +00001671def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001672 let Latency = 8;
1673 let NumMicroOps = 2;
1674 let ResourceCycles = [2];
1675}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001676def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1677 "(V?)ROUNDPS(Y?)r",
1678 "(V?)ROUNDSDr",
1679 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001680
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001681def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001682 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001683 let NumMicroOps = 2;
1684 let ResourceCycles = [1,1];
1685}
Craig Topperfc179c62018-03-22 04:23:41 +00001686def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1687 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001688
1689def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1690 let Latency = 8;
1691 let NumMicroOps = 2;
1692 let ResourceCycles = [1,1];
1693}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001694def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1695 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001696
1697def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001698 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001699 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001700 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001701}
Craig Topperf846e2d2018-04-19 05:34:05 +00001702def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001703
Craig Topperf846e2d2018-04-19 05:34:05 +00001704def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1705 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001706 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001707 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001708}
Craig Topperfc179c62018-03-22 04:23:41 +00001709def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001710
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001711def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1712 let Latency = 8;
1713 let NumMicroOps = 2;
1714 let ResourceCycles = [1,1];
1715}
Craig Topperfc179c62018-03-22 04:23:41 +00001716def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1717 "FCOM64m",
1718 "FCOMP32m",
1719 "FCOMP64m",
1720 "MMX_PSADBWirm",
1721 "VPACKSSDWYrm",
1722 "VPACKSSWBYrm",
1723 "VPACKUSDWYrm",
1724 "VPACKUSWBYrm",
1725 "VPALIGNRYrmi",
1726 "VPBLENDWYrmi",
1727 "VPBROADCASTBYrm",
1728 "VPBROADCASTWYrm",
1729 "VPERMILPDYmi",
1730 "VPERMILPDYrm",
1731 "VPERMILPSYmi",
1732 "VPERMILPSYrm",
1733 "VPMOVSXBDYrm",
1734 "VPMOVSXBQYrm",
1735 "VPMOVSXWQYrm",
1736 "VPSHUFBYrm",
1737 "VPSHUFDYmi",
1738 "VPSHUFHWYmi",
1739 "VPSHUFLWYmi",
1740 "VPUNPCKHBWYrm",
1741 "VPUNPCKHDQYrm",
1742 "VPUNPCKHQDQYrm",
1743 "VPUNPCKHWDYrm",
1744 "VPUNPCKLBWYrm",
1745 "VPUNPCKLDQYrm",
1746 "VPUNPCKLQDQYrm",
1747 "VPUNPCKLWDYrm",
1748 "VSHUFPDYrmi",
1749 "VSHUFPSYrmi",
1750 "VUNPCKHPDYrm",
1751 "VUNPCKHPSYrm",
1752 "VUNPCKLPDYrm",
1753 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001754
1755def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1756 let Latency = 8;
1757 let NumMicroOps = 2;
1758 let ResourceCycles = [1,1];
1759}
Craig Topperfc179c62018-03-22 04:23:41 +00001760def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1761 "VPABSDYrm",
1762 "VPABSWYrm",
1763 "VPADDSBYrm",
1764 "VPADDSWYrm",
1765 "VPADDUSBYrm",
1766 "VPADDUSWYrm",
1767 "VPAVGBYrm",
1768 "VPAVGWYrm",
1769 "VPCMPEQBYrm",
1770 "VPCMPEQDYrm",
1771 "VPCMPEQQYrm",
1772 "VPCMPEQWYrm",
1773 "VPCMPGTBYrm",
1774 "VPCMPGTDYrm",
1775 "VPCMPGTWYrm",
1776 "VPMAXSBYrm",
1777 "VPMAXSDYrm",
1778 "VPMAXSWYrm",
1779 "VPMAXUBYrm",
1780 "VPMAXUDYrm",
1781 "VPMAXUWYrm",
1782 "VPMINSBYrm",
1783 "VPMINSDYrm",
1784 "VPMINSWYrm",
1785 "VPMINUBYrm",
1786 "VPMINUDYrm",
1787 "VPMINUWYrm",
1788 "VPSIGNBYrm",
1789 "VPSIGNDYrm",
1790 "VPSIGNWYrm",
1791 "VPSLLDYrm",
1792 "VPSLLQYrm",
1793 "VPSLLVDYrm",
1794 "VPSLLVQYrm",
1795 "VPSLLWYrm",
1796 "VPSRADYrm",
1797 "VPSRAVDYrm",
1798 "VPSRAWYrm",
1799 "VPSRLDYrm",
1800 "VPSRLQYrm",
1801 "VPSRLVDYrm",
1802 "VPSRLVQYrm",
1803 "VPSRLWYrm",
1804 "VPSUBSBYrm",
1805 "VPSUBSWYrm",
1806 "VPSUBUSBYrm",
1807 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001808
1809def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1810 let Latency = 8;
1811 let NumMicroOps = 2;
1812 let ResourceCycles = [1,1];
1813}
Craig Topperfc179c62018-03-22 04:23:41 +00001814def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1815 "VANDNPSYrm",
1816 "VANDPDYrm",
1817 "VANDPSYrm",
1818 "VBLENDPDYrmi",
1819 "VBLENDPSYrmi",
1820 "VMASKMOVPDYrm",
1821 "VMASKMOVPSYrm",
1822 "VORPDYrm",
1823 "VORPSYrm",
1824 "VPADDBYrm",
1825 "VPADDDYrm",
1826 "VPADDQYrm",
1827 "VPADDWYrm",
1828 "VPANDNYrm",
1829 "VPANDYrm",
1830 "VPBLENDDYrmi",
1831 "VPMASKMOVDYrm",
1832 "VPMASKMOVQYrm",
1833 "VPORYrm",
1834 "VPSUBBYrm",
1835 "VPSUBDYrm",
1836 "VPSUBQYrm",
1837 "VPSUBWYrm",
1838 "VPXORYrm",
1839 "VXORPDYrm",
1840 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001841
1842def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001843 let Latency = 8;
1844 let NumMicroOps = 3;
1845 let ResourceCycles = [1,2];
1846}
Craig Topperfc179c62018-03-22 04:23:41 +00001847def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
1848 "BLENDVPSrm0",
1849 "PBLENDVBrm0",
1850 "VBLENDVPDrm",
1851 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001852 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001853
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001854def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1855 let Latency = 8;
1856 let NumMicroOps = 4;
1857 let ResourceCycles = [1,2,1];
1858}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001859def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001860
1861def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1862 let Latency = 8;
1863 let NumMicroOps = 4;
1864 let ResourceCycles = [2,1,1];
1865}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001866def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001867
Craig Topper58afb4e2018-03-22 21:10:07 +00001868def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001869 let Latency = 8;
1870 let NumMicroOps = 4;
1871 let ResourceCycles = [1,1,1,1];
1872}
1873def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1874
1875def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1876 let Latency = 8;
1877 let NumMicroOps = 5;
1878 let ResourceCycles = [1,1,3];
1879}
Craig Topper13a16502018-03-19 00:56:09 +00001880def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001881
1882def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1883 let Latency = 8;
1884 let NumMicroOps = 5;
1885 let ResourceCycles = [1,1,1,2];
1886}
Craig Topperfc179c62018-03-22 04:23:41 +00001887def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1888 "RCL(8|16|32|64)mi",
1889 "RCR(8|16|32|64)m1",
1890 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001891
1892def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1893 let Latency = 8;
1894 let NumMicroOps = 6;
1895 let ResourceCycles = [1,1,1,3];
1896}
Craig Topperfc179c62018-03-22 04:23:41 +00001897def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1898 "SAR(8|16|32|64)mCL",
1899 "SHL(8|16|32|64)mCL",
1900 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001901
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001902def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1903 let Latency = 8;
1904 let NumMicroOps = 6;
1905 let ResourceCycles = [1,1,1,2,1];
1906}
Craig Topper9f834812018-04-01 21:54:24 +00001907def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001908 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001909 "SBB(8|16|32|64)mi")>;
1910def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1911 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001912
1913def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1914 let Latency = 9;
1915 let NumMicroOps = 2;
1916 let ResourceCycles = [1,1];
1917}
Craig Topperfc179c62018-03-22 04:23:41 +00001918def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1919 "MMX_PMADDUBSWrm",
1920 "MMX_PMADDWDirm",
1921 "MMX_PMULHRSWrm",
1922 "MMX_PMULHUWirm",
1923 "MMX_PMULHWirm",
1924 "MMX_PMULLWirm",
1925 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001926 "(V?)RCPSSm",
1927 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001928 "VTESTPDYrm",
1929 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001930
1931def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1932 let Latency = 9;
1933 let NumMicroOps = 2;
1934 let ResourceCycles = [1,1];
1935}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001936def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001937 "VPMOVSXBWYrm",
1938 "VPMOVSXDQYrm",
1939 "VPMOVSXWDYrm",
1940 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001941 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001942
1943def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1944 let Latency = 9;
1945 let NumMicroOps = 2;
1946 let ResourceCycles = [1,1];
1947}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001948def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1949 "(V?)ADDSSrm",
1950 "(V?)CMPSDrm",
1951 "(V?)CMPSSrm",
1952 "(V?)MAX(C?)SDrm",
1953 "(V?)MAX(C?)SSrm",
1954 "(V?)MIN(C?)SDrm",
1955 "(V?)MIN(C?)SSrm",
1956 "(V?)MULSDrm",
1957 "(V?)MULSSrm",
1958 "(V?)SUBSDrm",
1959 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001960def: InstRW<[SKLWriteResGroup122],
1961 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001962
Craig Topper58afb4e2018-03-22 21:10:07 +00001963def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001964 let Latency = 9;
1965 let NumMicroOps = 2;
1966 let ResourceCycles = [1,1];
1967}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001968def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001969 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001970 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001971 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001972
Craig Topper58afb4e2018-03-22 21:10:07 +00001973def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001974 let Latency = 9;
1975 let NumMicroOps = 3;
1976 let ResourceCycles = [1,2];
1977}
Craig Topperfc179c62018-03-22 04:23:41 +00001978def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001979
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001980def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1981 let Latency = 9;
1982 let NumMicroOps = 3;
1983 let ResourceCycles = [1,2];
1984}
Craig Topperfc179c62018-03-22 04:23:41 +00001985def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1986 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001987
1988def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1989 let Latency = 9;
1990 let NumMicroOps = 3;
1991 let ResourceCycles = [1,1,1];
1992}
Craig Topperfc179c62018-03-22 04:23:41 +00001993def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001994
1995def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1996 let Latency = 9;
1997 let NumMicroOps = 3;
1998 let ResourceCycles = [1,1,1];
1999}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002000def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002001
2002def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002003 let Latency = 9;
2004 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002005 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002006}
Craig Topperfc179c62018-03-22 04:23:41 +00002007def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
2008 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002009
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002010def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2011 let Latency = 9;
2012 let NumMicroOps = 4;
2013 let ResourceCycles = [2,1,1];
2014}
Craig Topperfc179c62018-03-22 04:23:41 +00002015def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
2016 "(V?)PHADDWrm",
2017 "(V?)PHSUBDrm",
2018 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002019
2020def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
2021 let Latency = 9;
2022 let NumMicroOps = 4;
2023 let ResourceCycles = [1,1,1,1];
2024}
Craig Topperfc179c62018-03-22 04:23:41 +00002025def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
2026 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002027
2028def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2029 let Latency = 9;
2030 let NumMicroOps = 5;
2031 let ResourceCycles = [1,2,1,1];
2032}
Craig Topperfc179c62018-03-22 04:23:41 +00002033def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
2034 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002035
2036def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2037 let Latency = 10;
2038 let NumMicroOps = 2;
2039 let ResourceCycles = [1,1];
2040}
Simon Pilgrim7684e052018-03-22 13:18:08 +00002041def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002042 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002043
2044def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2045 let Latency = 10;
2046 let NumMicroOps = 2;
2047 let ResourceCycles = [1,1];
2048}
Craig Topperfc179c62018-03-22 04:23:41 +00002049def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
2050 "ADD_F64m",
2051 "ILD_F16m",
2052 "ILD_F32m",
2053 "ILD_F64m",
2054 "SUBR_F32m",
2055 "SUBR_F64m",
2056 "SUB_F32m",
2057 "SUB_F64m",
2058 "VPCMPGTQYrm",
2059 "VPERM2F128rm",
2060 "VPERM2I128rm",
2061 "VPERMDYrm",
2062 "VPERMPDYmi",
2063 "VPERMPSYrm",
2064 "VPERMQYmi",
2065 "VPMOVZXBDYrm",
2066 "VPMOVZXBQYrm",
2067 "VPMOVZXBWYrm",
2068 "VPMOVZXDQYrm",
2069 "VPMOVZXWQYrm",
2070 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002071
2072def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2073 let Latency = 10;
2074 let NumMicroOps = 2;
2075 let ResourceCycles = [1,1];
2076}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002077def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
2078 "(V?)ADDPSrm",
2079 "(V?)ADDSUBPDrm",
2080 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002081 "(V?)CVTDQ2PSrm",
2082 "(V?)CVTPH2PSYrm",
2083 "(V?)CVTPS2DQrm",
2084 "(V?)CVTSS2SDrm",
2085 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002086 "(V?)MULPDrm",
2087 "(V?)MULPSrm",
2088 "(V?)PHMINPOSUWrm",
2089 "(V?)PMADDUBSWrm",
2090 "(V?)PMADDWDrm",
2091 "(V?)PMULDQrm",
2092 "(V?)PMULHRSWrm",
2093 "(V?)PMULHUWrm",
2094 "(V?)PMULHWrm",
2095 "(V?)PMULLWrm",
2096 "(V?)PMULUDQrm",
2097 "(V?)SUBPDrm",
2098 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00002099def: InstRW<[SKLWriteResGroup134],
2100 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002101
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002102def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2103 let Latency = 10;
2104 let NumMicroOps = 3;
2105 let ResourceCycles = [2,1];
2106}
Craig Topperfc179c62018-03-22 04:23:41 +00002107def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002108
2109def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2110 let Latency = 10;
2111 let NumMicroOps = 3;
2112 let ResourceCycles = [1,1,1];
2113}
Craig Topperfc179c62018-03-22 04:23:41 +00002114def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2115 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002116
Craig Topper58afb4e2018-03-22 21:10:07 +00002117def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002118 let Latency = 10;
2119 let NumMicroOps = 3;
2120 let ResourceCycles = [1,1,1];
2121}
Craig Topperfc179c62018-03-22 04:23:41 +00002122def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002123
2124def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002125 let Latency = 10;
2126 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002127 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002128}
Craig Topperfc179c62018-03-22 04:23:41 +00002129def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2130 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002131
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002132def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2133 let Latency = 10;
2134 let NumMicroOps = 4;
2135 let ResourceCycles = [2,1,1];
2136}
Craig Topperfc179c62018-03-22 04:23:41 +00002137def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2138 "VPHADDWYrm",
2139 "VPHSUBDYrm",
2140 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002141
2142def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002143 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002144 let NumMicroOps = 4;
2145 let ResourceCycles = [1,1,1,1];
2146}
Craig Topperf846e2d2018-04-19 05:34:05 +00002147def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002148
2149def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2150 let Latency = 10;
2151 let NumMicroOps = 8;
2152 let ResourceCycles = [1,1,1,1,1,3];
2153}
Craig Topper13a16502018-03-19 00:56:09 +00002154def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002155
2156def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002157 let Latency = 10;
2158 let NumMicroOps = 10;
2159 let ResourceCycles = [9,1];
2160}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002161def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002162
Craig Topper8104f262018-04-02 05:33:28 +00002163def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002164 let Latency = 11;
2165 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002166 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002167}
Craig Topper8104f262018-04-02 05:33:28 +00002168def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002169 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002170
Craig Topper8104f262018-04-02 05:33:28 +00002171def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2172 let Latency = 11;
2173 let NumMicroOps = 1;
2174 let ResourceCycles = [1,5];
2175}
2176def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
2177
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002178def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002179 let Latency = 11;
2180 let NumMicroOps = 2;
2181 let ResourceCycles = [1,1];
2182}
Craig Topperfc179c62018-03-22 04:23:41 +00002183def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2184 "MUL_F64m",
2185 "VRCPPSYm",
2186 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002187
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002188def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2189 let Latency = 11;
2190 let NumMicroOps = 2;
2191 let ResourceCycles = [1,1];
2192}
Craig Topperfc179c62018-03-22 04:23:41 +00002193def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2194 "VADDPSYrm",
2195 "VADDSUBPDYrm",
2196 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002197 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002198 "VCMPPSYrmi",
2199 "VCVTDQ2PSYrm",
2200 "VCVTPS2DQYrm",
2201 "VCVTPS2PDYrm",
2202 "VCVTTPS2DQYrm",
2203 "VMAX(C?)PDYrm",
2204 "VMAX(C?)PSYrm",
2205 "VMIN(C?)PDYrm",
2206 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002207 "VMULPDYrm",
2208 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002209 "VPMADDUBSWYrm",
2210 "VPMADDWDYrm",
2211 "VPMULDQYrm",
2212 "VPMULHRSWYrm",
2213 "VPMULHUWYrm",
2214 "VPMULHWYrm",
2215 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002216 "VPMULUDQYrm",
2217 "VSUBPDYrm",
2218 "VSUBPSYrm")>;
2219def: InstRW<[SKLWriteResGroup147],
2220 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002221
2222def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2223 let Latency = 11;
2224 let NumMicroOps = 3;
2225 let ResourceCycles = [2,1];
2226}
Craig Topperfc179c62018-03-22 04:23:41 +00002227def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2228 "FICOM32m",
2229 "FICOMP16m",
2230 "FICOMP32m",
2231 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002232
2233def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2234 let Latency = 11;
2235 let NumMicroOps = 3;
2236 let ResourceCycles = [1,1,1];
2237}
Craig Topperfc179c62018-03-22 04:23:41 +00002238def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002239
Craig Topper58afb4e2018-03-22 21:10:07 +00002240def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002241 let Latency = 11;
2242 let NumMicroOps = 3;
2243 let ResourceCycles = [1,1,1];
2244}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002245def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2246 "(V?)CVTSD2SIrm",
2247 "(V?)CVTSS2SI64rm",
2248 "(V?)CVTSS2SIrm",
2249 "(V?)CVTTSD2SI64rm",
2250 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002251 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002252 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002253
Craig Topper58afb4e2018-03-22 21:10:07 +00002254def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002255 let Latency = 11;
2256 let NumMicroOps = 3;
2257 let ResourceCycles = [1,1,1];
2258}
Craig Topperfc179c62018-03-22 04:23:41 +00002259def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2260 "CVTPD2PSrm",
2261 "CVTTPD2DQrm",
2262 "MMX_CVTPD2PIirm",
2263 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002264
2265def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2266 let Latency = 11;
2267 let NumMicroOps = 6;
2268 let ResourceCycles = [1,1,1,2,1];
2269}
Craig Topperfc179c62018-03-22 04:23:41 +00002270def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2271 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002272
2273def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002274 let Latency = 11;
2275 let NumMicroOps = 7;
2276 let ResourceCycles = [2,3,2];
2277}
Craig Topperfc179c62018-03-22 04:23:41 +00002278def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2279 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002280
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002281def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002282 let Latency = 11;
2283 let NumMicroOps = 9;
2284 let ResourceCycles = [1,5,1,2];
2285}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002286def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002287
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002288def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002289 let Latency = 11;
2290 let NumMicroOps = 11;
2291 let ResourceCycles = [2,9];
2292}
Craig Topperfc179c62018-03-22 04:23:41 +00002293def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002294
Craig Topper8104f262018-04-02 05:33:28 +00002295def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002296 let Latency = 12;
2297 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002298 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002299}
Craig Topper8104f262018-04-02 05:33:28 +00002300def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002301 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002302
Craig Topper8104f262018-04-02 05:33:28 +00002303def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2304 let Latency = 12;
2305 let NumMicroOps = 1;
2306 let ResourceCycles = [1,6];
2307}
2308def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2309
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002310def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2311 let Latency = 12;
2312 let NumMicroOps = 4;
2313 let ResourceCycles = [2,1,1];
2314}
Craig Topperfc179c62018-03-22 04:23:41 +00002315def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2316 "(V?)HADDPSrm",
2317 "(V?)HSUBPDrm",
2318 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002319
Craig Topper58afb4e2018-03-22 21:10:07 +00002320def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002321 let Latency = 12;
2322 let NumMicroOps = 4;
2323 let ResourceCycles = [1,1,1,1];
2324}
2325def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2326
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002327def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002328 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002329 let NumMicroOps = 3;
2330 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002331}
Craig Topperfc179c62018-03-22 04:23:41 +00002332def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2333 "ADD_FI32m",
2334 "SUBR_FI16m",
2335 "SUBR_FI32m",
2336 "SUB_FI16m",
2337 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002338
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002339def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2340 let Latency = 13;
2341 let NumMicroOps = 3;
2342 let ResourceCycles = [1,1,1];
2343}
2344def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2345
Craig Topper58afb4e2018-03-22 21:10:07 +00002346def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002347 let Latency = 13;
2348 let NumMicroOps = 4;
2349 let ResourceCycles = [1,3];
2350}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002351def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002352
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002353def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002354 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002355 let NumMicroOps = 4;
2356 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002357}
Craig Topperfc179c62018-03-22 04:23:41 +00002358def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2359 "VHADDPSYrm",
2360 "VHSUBPDYrm",
2361 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002362
Craig Topper8104f262018-04-02 05:33:28 +00002363def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002364 let Latency = 14;
2365 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002366 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002367}
Craig Topper8104f262018-04-02 05:33:28 +00002368def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002369 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002370
Craig Topper8104f262018-04-02 05:33:28 +00002371def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2372 let Latency = 14;
2373 let NumMicroOps = 1;
2374 let ResourceCycles = [1,5];
2375}
2376def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2377
Craig Topper58afb4e2018-03-22 21:10:07 +00002378def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002379 let Latency = 14;
2380 let NumMicroOps = 3;
2381 let ResourceCycles = [1,2];
2382}
Craig Topperfc179c62018-03-22 04:23:41 +00002383def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2384def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2385def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2386def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002387
2388def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2389 let Latency = 14;
2390 let NumMicroOps = 3;
2391 let ResourceCycles = [1,1,1];
2392}
Craig Topperfc179c62018-03-22 04:23:41 +00002393def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2394 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002395
2396def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002397 let Latency = 14;
2398 let NumMicroOps = 10;
2399 let ResourceCycles = [2,4,1,3];
2400}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002401def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002402
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002403def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002404 let Latency = 15;
2405 let NumMicroOps = 1;
2406 let ResourceCycles = [1];
2407}
Craig Topperfc179c62018-03-22 04:23:41 +00002408def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2409 "DIVR_FST0r",
2410 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002411
Craig Topper58afb4e2018-03-22 21:10:07 +00002412def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002413 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002414 let NumMicroOps = 3;
2415 let ResourceCycles = [1,2];
2416}
Craig Topper40d3b322018-03-22 21:55:20 +00002417def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2418 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002419
Craig Topperd25f1ac2018-03-20 23:39:48 +00002420def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2421 let Latency = 17;
2422 let NumMicroOps = 3;
2423 let ResourceCycles = [1,2];
2424}
2425def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2426
Craig Topper58afb4e2018-03-22 21:10:07 +00002427def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002428 let Latency = 15;
2429 let NumMicroOps = 4;
2430 let ResourceCycles = [1,1,2];
2431}
Craig Topperfc179c62018-03-22 04:23:41 +00002432def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002433
2434def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2435 let Latency = 15;
2436 let NumMicroOps = 10;
2437 let ResourceCycles = [1,1,1,5,1,1];
2438}
Craig Topper13a16502018-03-19 00:56:09 +00002439def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002440
Craig Topper8104f262018-04-02 05:33:28 +00002441def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002442 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002443 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002444 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002445}
Craig Topperfc179c62018-03-22 04:23:41 +00002446def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002447
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002448def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2449 let Latency = 16;
2450 let NumMicroOps = 14;
2451 let ResourceCycles = [1,1,1,4,2,5];
2452}
2453def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2454
2455def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002456 let Latency = 16;
2457 let NumMicroOps = 16;
2458 let ResourceCycles = [16];
2459}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002460def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002461
Craig Topper8104f262018-04-02 05:33:28 +00002462def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002463 let Latency = 17;
2464 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002465 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002466}
Craig Topper8104f262018-04-02 05:33:28 +00002467def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2468
2469def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2470 let Latency = 17;
2471 let NumMicroOps = 2;
2472 let ResourceCycles = [1,1,3];
2473}
2474def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002475
2476def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002477 let Latency = 17;
2478 let NumMicroOps = 15;
2479 let ResourceCycles = [2,1,2,4,2,4];
2480}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002481def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002482
Craig Topper8104f262018-04-02 05:33:28 +00002483def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002484 let Latency = 18;
2485 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002486 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002487}
Craig Topper8104f262018-04-02 05:33:28 +00002488def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002489 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002490
Craig Topper8104f262018-04-02 05:33:28 +00002491def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2492 let Latency = 18;
2493 let NumMicroOps = 1;
2494 let ResourceCycles = [1,12];
2495}
2496def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2497
2498def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002499 let Latency = 18;
2500 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002501 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002502}
Craig Topper8104f262018-04-02 05:33:28 +00002503def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2504
2505def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2506 let Latency = 18;
2507 let NumMicroOps = 2;
2508 let ResourceCycles = [1,1,3];
2509}
2510def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002511
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002512def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002513 let Latency = 18;
2514 let NumMicroOps = 8;
2515 let ResourceCycles = [1,1,1,5];
2516}
Craig Topperfc179c62018-03-22 04:23:41 +00002517def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002518
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002519def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002520 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002521 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002522 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002523}
Craig Topper13a16502018-03-19 00:56:09 +00002524def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002525
Craig Topper8104f262018-04-02 05:33:28 +00002526def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002527 let Latency = 19;
2528 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002529 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002530}
Craig Topper8104f262018-04-02 05:33:28 +00002531def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2532
2533def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2534 let Latency = 19;
2535 let NumMicroOps = 2;
2536 let ResourceCycles = [1,1,6];
2537}
2538def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002539
Craig Topper58afb4e2018-03-22 21:10:07 +00002540def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002541 let Latency = 19;
2542 let NumMicroOps = 5;
2543 let ResourceCycles = [1,1,3];
2544}
Craig Topperfc179c62018-03-22 04:23:41 +00002545def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002546
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002547def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002548 let Latency = 20;
2549 let NumMicroOps = 1;
2550 let ResourceCycles = [1];
2551}
Craig Topperfc179c62018-03-22 04:23:41 +00002552def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2553 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002554 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002555
Craig Topper8104f262018-04-02 05:33:28 +00002556def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002557 let Latency = 20;
2558 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002559 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002560}
Craig Topperfc179c62018-03-22 04:23:41 +00002561def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002562
Craig Topper58afb4e2018-03-22 21:10:07 +00002563def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002564 let Latency = 20;
2565 let NumMicroOps = 5;
2566 let ResourceCycles = [1,1,3];
2567}
2568def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2569
2570def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2571 let Latency = 20;
2572 let NumMicroOps = 8;
2573 let ResourceCycles = [1,1,1,1,1,1,2];
2574}
Craig Topperfc179c62018-03-22 04:23:41 +00002575def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2576 "INSL",
2577 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002578
2579def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002580 let Latency = 20;
2581 let NumMicroOps = 10;
2582 let ResourceCycles = [1,2,7];
2583}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002584def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002585
Craig Topper8104f262018-04-02 05:33:28 +00002586def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002587 let Latency = 21;
2588 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002589 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002590}
2591def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2592
2593def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2594 let Latency = 22;
2595 let NumMicroOps = 2;
2596 let ResourceCycles = [1,1];
2597}
Craig Topperfc179c62018-03-22 04:23:41 +00002598def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2599 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002600
2601def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2602 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002603 let NumMicroOps = 5;
2604 let ResourceCycles = [1,2,1,1];
2605}
Craig Topper17a31182017-12-16 18:35:29 +00002606def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2607 VGATHERDPDrm,
2608 VGATHERQPDrm,
2609 VGATHERQPSrm,
2610 VPGATHERDDrm,
2611 VPGATHERDQrm,
2612 VPGATHERQDrm,
2613 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002614
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002615def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2616 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002617 let NumMicroOps = 5;
2618 let ResourceCycles = [1,2,1,1];
2619}
Craig Topper17a31182017-12-16 18:35:29 +00002620def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2621 VGATHERQPDYrm,
2622 VGATHERQPSYrm,
2623 VPGATHERDDYrm,
2624 VPGATHERDQYrm,
2625 VPGATHERQDYrm,
2626 VPGATHERQQYrm,
2627 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002628
Craig Topper8104f262018-04-02 05:33:28 +00002629def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002630 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002631 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002632 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002633}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002634def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002635
2636def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2637 let Latency = 23;
2638 let NumMicroOps = 19;
2639 let ResourceCycles = [2,1,4,1,1,4,6];
2640}
2641def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2642
Craig Topper8104f262018-04-02 05:33:28 +00002643def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002644 let Latency = 24;
2645 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002646 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002647}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002648def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002649
Craig Topper8104f262018-04-02 05:33:28 +00002650def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002651 let Latency = 25;
2652 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002653 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002654}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002655def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002656
2657def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2658 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002659 let NumMicroOps = 3;
2660 let ResourceCycles = [1,1,1];
2661}
Craig Topperfc179c62018-03-22 04:23:41 +00002662def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2663 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002664
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002665def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2666 let Latency = 27;
2667 let NumMicroOps = 2;
2668 let ResourceCycles = [1,1];
2669}
Craig Topperfc179c62018-03-22 04:23:41 +00002670def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2671 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002672
2673def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2674 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002675 let NumMicroOps = 8;
2676 let ResourceCycles = [2,4,1,1];
2677}
Craig Topper13a16502018-03-19 00:56:09 +00002678def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002679
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002680def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002681 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002682 let NumMicroOps = 3;
2683 let ResourceCycles = [1,1,1];
2684}
Craig Topperfc179c62018-03-22 04:23:41 +00002685def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2686 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002687
2688def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2689 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002690 let NumMicroOps = 23;
2691 let ResourceCycles = [1,5,3,4,10];
2692}
Craig Topperfc179c62018-03-22 04:23:41 +00002693def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2694 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002695
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002696def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2697 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002698 let NumMicroOps = 23;
2699 let ResourceCycles = [1,5,2,1,4,10];
2700}
Craig Topperfc179c62018-03-22 04:23:41 +00002701def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2702 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002703
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002704def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2705 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002706 let NumMicroOps = 31;
2707 let ResourceCycles = [1,8,1,21];
2708}
Craig Topper391c6f92017-12-10 01:24:08 +00002709def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002710
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002711def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2712 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002713 let NumMicroOps = 18;
2714 let ResourceCycles = [1,1,2,3,1,1,1,8];
2715}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002716def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002717
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002718def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2719 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002720 let NumMicroOps = 39;
2721 let ResourceCycles = [1,10,1,1,26];
2722}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002723def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002724
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002725def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002726 let Latency = 42;
2727 let NumMicroOps = 22;
2728 let ResourceCycles = [2,20];
2729}
Craig Topper2d451e72018-03-18 08:38:06 +00002730def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002731
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002732def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2733 let Latency = 42;
2734 let NumMicroOps = 40;
2735 let ResourceCycles = [1,11,1,1,26];
2736}
Craig Topper391c6f92017-12-10 01:24:08 +00002737def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002738
2739def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2740 let Latency = 46;
2741 let NumMicroOps = 44;
2742 let ResourceCycles = [1,11,1,1,30];
2743}
2744def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2745
2746def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2747 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002748 let NumMicroOps = 64;
2749 let ResourceCycles = [2,8,5,10,39];
2750}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002751def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002752
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002753def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2754 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002755 let NumMicroOps = 88;
2756 let ResourceCycles = [4,4,31,1,2,1,45];
2757}
Craig Topper2d451e72018-03-18 08:38:06 +00002758def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002759
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002760def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2761 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002762 let NumMicroOps = 90;
2763 let ResourceCycles = [4,2,33,1,2,1,47];
2764}
Craig Topper2d451e72018-03-18 08:38:06 +00002765def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002766
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002767def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002768 let Latency = 75;
2769 let NumMicroOps = 15;
2770 let ResourceCycles = [6,3,6];
2771}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002772def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002773
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002774def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002775 let Latency = 76;
2776 let NumMicroOps = 32;
2777 let ResourceCycles = [7,2,8,3,1,11];
2778}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002779def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002780
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002781def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002782 let Latency = 102;
2783 let NumMicroOps = 66;
2784 let ResourceCycles = [4,2,4,8,14,34];
2785}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002786def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002787
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002788def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2789 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002790 let NumMicroOps = 100;
2791 let ResourceCycles = [9,1,11,16,1,11,21,30];
2792}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002793def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002794
2795} // SchedModel