blob: 9b1603bc8231d9e12300ec7148998da8abbe2ecb [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : SKLWriteResPair<WriteCMOV, [SKLPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [SKLPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [SKLPort06,SKLPort4,SKLPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
125defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
126defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
127defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
134defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
135
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteMove, [SKLPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
145// Branches don't produce values, so they have no latency, but they still
146// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000148
149// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000150def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
151def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
152def : WriteRes<WriteFMove, [SKLPort015]>;
153
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
156defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000157defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
158defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
159defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000160defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4>; // Floating point reciprocal estimate.
161defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4>; // Floating point reciprocal square root estimate.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
164defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000167defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000168defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // 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.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000186defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000187defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000188defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000189
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000191defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
192defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
193defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000194
195// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000197// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000198def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
199 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000200 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000201 let ResourceCycles = [3];
202}
203def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000204 let Latency = 16;
205 let NumMicroOps = 4;
206 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000207}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000208
209// Packed Compare Explicit Length Strings, Return Mask
210def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
211 let Latency = 19;
212 let NumMicroOps = 9;
213 let ResourceCycles = [4,3,1,1];
214}
215def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
216 let Latency = 25;
217 let NumMicroOps = 10;
218 let ResourceCycles = [4,3,1,1,1];
219}
220
221// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000222def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000223 let Latency = 10;
224 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000225 let ResourceCycles = [3];
226}
227def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000228 let Latency = 16;
229 let NumMicroOps = 4;
230 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000232
233// Packed Compare Explicit Length Strings, Return Index
234def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
235 let Latency = 18;
236 let NumMicroOps = 8;
237 let ResourceCycles = [4,3,1];
238}
239def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
240 let Latency = 24;
241 let NumMicroOps = 9;
242 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000243}
244
Simon Pilgrima2f26782018-03-27 20:38:54 +0000245// MOVMSK Instructions.
246def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
247def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
248def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
249
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000250// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000251def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
252 let Latency = 4;
253 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000254 let ResourceCycles = [1];
255}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
257 let Latency = 10;
258 let NumMicroOps = 2;
259 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000260}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261
262def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
263 let Latency = 8;
264 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265 let ResourceCycles = [2];
266}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000268 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000269 let NumMicroOps = 3;
270 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000272
273def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
274 let Latency = 20;
275 let NumMicroOps = 11;
276 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000278def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
279 let Latency = 25;
280 let NumMicroOps = 11;
281 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000282}
283
284// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000285def : WriteRes<WriteCLMul, [SKLPort5]> {
286 let Latency = 6;
287 let NumMicroOps = 1;
288 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000289}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000290def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
291 let Latency = 12;
292 let NumMicroOps = 2;
293 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000294}
295
296// Catch-all for expensive system instructions.
297def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
298
299// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000300defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000301defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000302defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000303defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000304defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305
306// Old microcoded instructions that nobody use.
307def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
308
309// Fence instructions.
310def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
311
Craig Topper05242bf2018-04-21 18:07:36 +0000312// Load/store MXCSR.
313def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
314def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
315
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000316// Nop, not very useful expect it provides a model for nops!
317def : WriteRes<WriteNop, []>;
318
319////////////////////////////////////////////////////////////////////////////////
320// Horizontal add/sub instructions.
321////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000322
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000323defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
324defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000325
326// Remaining instrs.
327
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000328def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000329 let Latency = 1;
330 let NumMicroOps = 1;
331 let ResourceCycles = [1];
332}
Craig Topperfc179c62018-03-22 04:23:41 +0000333def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
334 "MMX_PADDSWirr",
335 "MMX_PADDUSBirr",
336 "MMX_PADDUSWirr",
337 "MMX_PAVGBirr",
338 "MMX_PAVGWirr",
339 "MMX_PCMPEQBirr",
340 "MMX_PCMPEQDirr",
341 "MMX_PCMPEQWirr",
342 "MMX_PCMPGTBirr",
343 "MMX_PCMPGTDirr",
344 "MMX_PCMPGTWirr",
345 "MMX_PMAXSWirr",
346 "MMX_PMAXUBirr",
347 "MMX_PMINSWirr",
348 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000349 "MMX_PSUBSBirr",
350 "MMX_PSUBSWirr",
351 "MMX_PSUBUSBirr",
352 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000353
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000354def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000355 let Latency = 1;
356 let NumMicroOps = 1;
357 let ResourceCycles = [1];
358}
Craig Topperfc179c62018-03-22 04:23:41 +0000359def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
360 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000361 "MMX_MOVD64rr",
362 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000363 "UCOM_FPr",
364 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000365 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000366 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000367 "(V?)PBLENDW(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000368 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000369 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000370
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000371def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000372 let Latency = 1;
373 let NumMicroOps = 1;
374 let ResourceCycles = [1];
375}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000376def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000377
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000378def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000379 let Latency = 1;
380 let NumMicroOps = 1;
381 let ResourceCycles = [1];
382}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000383def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
384 "(V?)PABSD(Y?)rr",
385 "(V?)PABSW(Y?)rr",
386 "(V?)PADDSB(Y?)rr",
387 "(V?)PADDSW(Y?)rr",
388 "(V?)PADDUSB(Y?)rr",
389 "(V?)PADDUSW(Y?)rr",
390 "(V?)PAVGB(Y?)rr",
391 "(V?)PAVGW(Y?)rr",
392 "(V?)PCMPEQB(Y?)rr",
393 "(V?)PCMPEQD(Y?)rr",
394 "(V?)PCMPEQQ(Y?)rr",
395 "(V?)PCMPEQW(Y?)rr",
396 "(V?)PCMPGTB(Y?)rr",
397 "(V?)PCMPGTD(Y?)rr",
398 "(V?)PCMPGTW(Y?)rr",
399 "(V?)PMAXSB(Y?)rr",
400 "(V?)PMAXSD(Y?)rr",
401 "(V?)PMAXSW(Y?)rr",
402 "(V?)PMAXUB(Y?)rr",
403 "(V?)PMAXUD(Y?)rr",
404 "(V?)PMAXUW(Y?)rr",
405 "(V?)PMINSB(Y?)rr",
406 "(V?)PMINSD(Y?)rr",
407 "(V?)PMINSW(Y?)rr",
408 "(V?)PMINUB(Y?)rr",
409 "(V?)PMINUD(Y?)rr",
410 "(V?)PMINUW(Y?)rr",
411 "(V?)PSIGNB(Y?)rr",
412 "(V?)PSIGND(Y?)rr",
413 "(V?)PSIGNW(Y?)rr",
414 "(V?)PSLLD(Y?)ri",
415 "(V?)PSLLQ(Y?)ri",
416 "VPSLLVD(Y?)rr",
417 "VPSLLVQ(Y?)rr",
418 "(V?)PSLLW(Y?)ri",
419 "(V?)PSRAD(Y?)ri",
420 "VPSRAVD(Y?)rr",
421 "(V?)PSRAW(Y?)ri",
422 "(V?)PSRLD(Y?)ri",
423 "(V?)PSRLQ(Y?)ri",
424 "VPSRLVD(Y?)rr",
425 "VPSRLVQ(Y?)rr",
426 "(V?)PSRLW(Y?)ri",
427 "(V?)PSUBSB(Y?)rr",
428 "(V?)PSUBSW(Y?)rr",
429 "(V?)PSUBUSB(Y?)rr",
430 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000431
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000432def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000433 let Latency = 1;
434 let NumMicroOps = 1;
435 let ResourceCycles = [1];
436}
Craig Topperfc179c62018-03-22 04:23:41 +0000437def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
438 "FNOP",
439 "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000440 "MMX_PABS(B|D|W)rr",
441 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000442 "MMX_PANDNirr",
443 "MMX_PANDirr",
444 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000445 "MMX_PSIGN(B|D|W)rr",
446 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000447 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000448
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000449def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000450 let Latency = 1;
451 let NumMicroOps = 1;
452 let ResourceCycles = [1];
453}
Craig Topperfbe31322018-04-05 21:56:19 +0000454def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000455def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
456 "ADC(16|32|64)i",
457 "ADC(8|16|32|64)rr",
458 "ADCX(32|64)rr",
459 "ADOX(32|64)rr",
460 "BT(16|32|64)ri8",
461 "BT(16|32|64)rr",
462 "BTC(16|32|64)ri8",
463 "BTC(16|32|64)rr",
464 "BTR(16|32|64)ri8",
465 "BTR(16|32|64)rr",
466 "BTS(16|32|64)ri8",
467 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000468 "CLAC",
Craig Topperfc179c62018-03-22 04:23:41 +0000469 "RORX(32|64)ri",
470 "SAR(8|16|32|64)r1",
471 "SAR(8|16|32|64)ri",
472 "SARX(32|64)rr",
473 "SBB(16|32|64)ri",
474 "SBB(16|32|64)i",
475 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000476 "SHL(8|16|32|64)r1",
477 "SHL(8|16|32|64)ri",
478 "SHLX(32|64)rr",
479 "SHR(8|16|32|64)r1",
480 "SHR(8|16|32|64)ri",
481 "SHRX(32|64)rr",
482 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000483
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000484def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
485 let Latency = 1;
486 let NumMicroOps = 1;
487 let ResourceCycles = [1];
488}
Craig Topperfc179c62018-03-22 04:23:41 +0000489def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
490 "BLSI(32|64)rr",
491 "BLSMSK(32|64)rr",
492 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000493 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000494
495def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
496 let Latency = 1;
497 let NumMicroOps = 1;
498 let ResourceCycles = [1];
499}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000500def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000501 "(V?)PADDD(Y?)rr",
502 "(V?)PADDQ(Y?)rr",
503 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000504 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000505 "(V?)PSUBB(Y?)rr",
506 "(V?)PSUBD(Y?)rr",
507 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000508 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000509
510def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
511 let Latency = 1;
512 let NumMicroOps = 1;
513 let ResourceCycles = [1];
514}
Craig Topperfbe31322018-04-05 21:56:19 +0000515def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000516def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000517 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000518 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000519 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000520 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000521 "SGDT64m",
522 "SIDT64m",
523 "SLDT64m",
524 "SMSW16m",
525 "STC",
526 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000527 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000528
529def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000530 let Latency = 1;
531 let NumMicroOps = 2;
532 let ResourceCycles = [1,1];
533}
Craig Topperfc179c62018-03-22 04:23:41 +0000534def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
535 "MMX_MOVD64from64rm",
536 "MMX_MOVD64mr",
537 "MMX_MOVNTQmr",
538 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000539 "MOVNTI_64mr",
540 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000541 "ST_FP32m",
542 "ST_FP64m",
543 "ST_FP80m",
544 "VEXTRACTF128mr",
545 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000546 "(V?)MOVAPDYmr",
547 "(V?)MOVAPS(Y?)mr",
548 "(V?)MOVDQA(Y?)mr",
549 "(V?)MOVDQU(Y?)mr",
550 "(V?)MOVHPDmr",
551 "(V?)MOVHPSmr",
552 "(V?)MOVLPDmr",
553 "(V?)MOVLPSmr",
554 "(V?)MOVNTDQ(Y?)mr",
555 "(V?)MOVNTPD(Y?)mr",
556 "(V?)MOVNTPS(Y?)mr",
557 "(V?)MOVPDI2DImr",
558 "(V?)MOVPQI2QImr",
559 "(V?)MOVPQIto64mr",
560 "(V?)MOVSDmr",
561 "(V?)MOVSSmr",
562 "(V?)MOVUPD(Y?)mr",
563 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000564 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000565
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000566def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000567 let Latency = 2;
568 let NumMicroOps = 1;
569 let ResourceCycles = [1];
570}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000571def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000572 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000573 "(V?)MOVPDI2DIrr",
574 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000575 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000576 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000577
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000578def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000579 let Latency = 2;
580 let NumMicroOps = 2;
581 let ResourceCycles = [2];
582}
Craig Topperfc179c62018-03-22 04:23:41 +0000583def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
584 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000585 "(V?)PINSRBrr",
586 "(V?)PINSRDrr",
587 "(V?)PINSRQrr",
588 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000589
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000590def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000591 let Latency = 2;
592 let NumMicroOps = 2;
593 let ResourceCycles = [2];
594}
Craig Topperfc179c62018-03-22 04:23:41 +0000595def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
596 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000597
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000598def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000599 let Latency = 2;
600 let NumMicroOps = 2;
601 let ResourceCycles = [2];
602}
Craig Topperfc179c62018-03-22 04:23:41 +0000603def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
604 "ROL(8|16|32|64)r1",
605 "ROL(8|16|32|64)ri",
606 "ROR(8|16|32|64)r1",
607 "ROR(8|16|32|64)ri",
608 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000609
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000610def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000611 let Latency = 2;
612 let NumMicroOps = 2;
613 let ResourceCycles = [2];
614}
Craig Topperfc179c62018-03-22 04:23:41 +0000615def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
616 "WAIT",
617 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000618
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000619def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000620 let Latency = 2;
621 let NumMicroOps = 2;
622 let ResourceCycles = [1,1];
623}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000624def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
625 "VMASKMOVPS(Y?)mr",
626 "VPMASKMOVD(Y?)mr",
627 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000628
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000629def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000630 let Latency = 2;
631 let NumMicroOps = 2;
632 let ResourceCycles = [1,1];
633}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000634def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
635 "(V?)PSLLQrr",
636 "(V?)PSLLWrr",
637 "(V?)PSRADrr",
638 "(V?)PSRAWrr",
639 "(V?)PSRLDrr",
640 "(V?)PSRLQrr",
641 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000642
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000643def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000644 let Latency = 2;
645 let NumMicroOps = 2;
646 let ResourceCycles = [1,1];
647}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000648def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000649
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000650def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000651 let Latency = 2;
652 let NumMicroOps = 2;
653 let ResourceCycles = [1,1];
654}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000655def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000656
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000657def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000658 let Latency = 2;
659 let NumMicroOps = 2;
660 let ResourceCycles = [1,1];
661}
Craig Topper498875f2018-04-04 17:54:19 +0000662def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
663
664def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
665 let Latency = 1;
666 let NumMicroOps = 1;
667 let ResourceCycles = [1];
668}
669def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000670
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000671def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000672 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000673 let NumMicroOps = 2;
674 let ResourceCycles = [1,1];
675}
Craig Topper2d451e72018-03-18 08:38:06 +0000676def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000677def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000678def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
679 "ADC8ri",
680 "SBB8i8",
681 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000682
683def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
684 let Latency = 2;
685 let NumMicroOps = 3;
686 let ResourceCycles = [1,1,1];
687}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000688def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
689 "(V?)PEXTRBmr",
690 "(V?)PEXTRDmr",
691 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000692 "(V?)PEXTRWmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000693
694def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
695 let Latency = 2;
696 let NumMicroOps = 3;
697 let ResourceCycles = [1,1,1];
698}
699def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
700
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000701def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
702 let Latency = 2;
703 let NumMicroOps = 3;
704 let ResourceCycles = [1,1,1];
705}
706def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
707
708def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
709 let Latency = 2;
710 let NumMicroOps = 3;
711 let ResourceCycles = [1,1,1];
712}
Craig Topper2d451e72018-03-18 08:38:06 +0000713def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000714def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
715 "PUSH64i8",
716 "STOSB",
717 "STOSL",
718 "STOSQ",
719 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000720
721def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
722 let Latency = 3;
723 let NumMicroOps = 1;
724 let ResourceCycles = [1];
725}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000726def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000727 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000728 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000729 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000730
Clement Courbet327fac42018-03-07 08:14:02 +0000731def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000732 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000733 let NumMicroOps = 2;
734 let ResourceCycles = [1,1];
735}
Clement Courbet327fac42018-03-07 08:14:02 +0000736def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000737
738def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
739 let Latency = 3;
740 let NumMicroOps = 1;
741 let ResourceCycles = [1];
742}
Craig Topperfc179c62018-03-22 04:23:41 +0000743def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
744 "ADD_FST0r",
745 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000746 "SUBR_FPrST0",
747 "SUBR_FST0r",
748 "SUBR_FrST0",
749 "SUB_FPrST0",
750 "SUB_FST0r",
751 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000752 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000753 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000754 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000755 "VPMOVSXBDYrr",
756 "VPMOVSXBQYrr",
757 "VPMOVSXBWYrr",
758 "VPMOVSXDQYrr",
759 "VPMOVSXWDYrr",
760 "VPMOVSXWQYrr",
761 "VPMOVZXBDYrr",
762 "VPMOVZXBQYrr",
763 "VPMOVZXBWYrr",
764 "VPMOVZXDQYrr",
765 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000766 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000767
768def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
769 let Latency = 3;
770 let NumMicroOps = 2;
771 let ResourceCycles = [1,1];
772}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000773def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
774 "(V?)EXTRACTPSrr",
775 "(V?)PEXTRBrr",
776 "(V?)PEXTRDrr",
777 "(V?)PEXTRQrr",
778 "(V?)PEXTRWrr",
779 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000780
781def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
782 let Latency = 3;
783 let NumMicroOps = 2;
784 let ResourceCycles = [1,1];
785}
786def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
787
788def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
789 let Latency = 3;
790 let NumMicroOps = 3;
791 let ResourceCycles = [3];
792}
Craig Topperfc179c62018-03-22 04:23:41 +0000793def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
794 "ROR(8|16|32|64)rCL",
795 "SAR(8|16|32|64)rCL",
796 "SHL(8|16|32|64)rCL",
797 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000798
799def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000800 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000801 let NumMicroOps = 3;
802 let ResourceCycles = [3];
803}
Craig Topperb5f26592018-04-19 18:00:17 +0000804def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
805 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
806 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000807
808def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
809 let Latency = 3;
810 let NumMicroOps = 3;
811 let ResourceCycles = [1,2];
812}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000813def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000814
815def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
816 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000817 let NumMicroOps = 3;
818 let ResourceCycles = [2,1];
819}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000820def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
821 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000822
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000823def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
824 let Latency = 3;
825 let NumMicroOps = 3;
826 let ResourceCycles = [2,1];
827}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000828def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000829
830def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
831 let Latency = 3;
832 let NumMicroOps = 3;
833 let ResourceCycles = [2,1];
834}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000835def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
836 "(V?)PHADDW(Y?)rr",
837 "(V?)PHSUBD(Y?)rr",
838 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000839
840def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
841 let Latency = 3;
842 let NumMicroOps = 3;
843 let ResourceCycles = [2,1];
844}
Craig Topperfc179c62018-03-22 04:23:41 +0000845def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
846 "MMX_PACKSSWBirr",
847 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000848
849def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
850 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000851 let NumMicroOps = 3;
852 let ResourceCycles = [1,2];
853}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000854def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000855
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000856def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
857 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000858 let NumMicroOps = 3;
859 let ResourceCycles = [1,2];
860}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000861def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000862
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000863def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
864 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000865 let NumMicroOps = 3;
866 let ResourceCycles = [1,2];
867}
Craig Topperfc179c62018-03-22 04:23:41 +0000868def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
869 "RCL(8|16|32|64)ri",
870 "RCR(8|16|32|64)r1",
871 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000872
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000873def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
874 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000875 let NumMicroOps = 3;
876 let ResourceCycles = [1,1,1];
877}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000878def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000879
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000880def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
881 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000882 let NumMicroOps = 4;
883 let ResourceCycles = [1,1,2];
884}
Craig Topperf4cd9082018-01-19 05:47:32 +0000885def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000886
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000887def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
888 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000889 let NumMicroOps = 4;
890 let ResourceCycles = [1,1,1,1];
891}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000892def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000893
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000894def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
895 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000896 let NumMicroOps = 4;
897 let ResourceCycles = [1,1,1,1];
898}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000899def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000900
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000901def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000902 let Latency = 4;
903 let NumMicroOps = 1;
904 let ResourceCycles = [1];
905}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000906def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000907 "MMX_PMADDWDirr",
908 "MMX_PMULHRSWrr",
909 "MMX_PMULHUWirr",
910 "MMX_PMULHWirr",
911 "MMX_PMULLWirr",
912 "MMX_PMULUDQirr",
913 "MUL_FPrST0",
914 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000915 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000916
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000917def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000918 let Latency = 4;
919 let NumMicroOps = 1;
920 let ResourceCycles = [1];
921}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000922def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
923 "(V?)ADDPS(Y?)rr",
924 "(V?)ADDSDrr",
925 "(V?)ADDSSrr",
926 "(V?)ADDSUBPD(Y?)rr",
927 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000928 "(V?)CVTDQ2PS(Y?)rr",
929 "(V?)CVTPS2DQ(Y?)rr",
930 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000931 "(V?)MULPD(Y?)rr",
932 "(V?)MULPS(Y?)rr",
933 "(V?)MULSDrr",
934 "(V?)MULSSrr",
935 "(V?)PHMINPOSUWrr",
936 "(V?)PMADDUBSW(Y?)rr",
937 "(V?)PMADDWD(Y?)rr",
938 "(V?)PMULDQ(Y?)rr",
939 "(V?)PMULHRSW(Y?)rr",
940 "(V?)PMULHUW(Y?)rr",
941 "(V?)PMULHW(Y?)rr",
942 "(V?)PMULLW(Y?)rr",
943 "(V?)PMULUDQ(Y?)rr",
944 "(V?)SUBPD(Y?)rr",
945 "(V?)SUBPS(Y?)rr",
946 "(V?)SUBSDrr",
947 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000948
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000949def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000950 let Latency = 4;
951 let NumMicroOps = 2;
952 let ResourceCycles = [1,1];
953}
Craig Topperf846e2d2018-04-19 05:34:05 +0000954def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000955
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000956def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
957 let Latency = 4;
958 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000959 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000960}
Craig Topperfc179c62018-03-22 04:23:41 +0000961def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000962
963def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000964 let Latency = 4;
965 let NumMicroOps = 2;
966 let ResourceCycles = [1,1];
967}
Craig Topperfc179c62018-03-22 04:23:41 +0000968def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
969 "VPSLLQYrr",
970 "VPSLLWYrr",
971 "VPSRADYrr",
972 "VPSRAWYrr",
973 "VPSRLDYrr",
974 "VPSRLQYrr",
975 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000976
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000977def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000978 let Latency = 4;
979 let NumMicroOps = 3;
980 let ResourceCycles = [1,1,1];
981}
Craig Topperfc179c62018-03-22 04:23:41 +0000982def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
983 "ISTT_FP32m",
984 "ISTT_FP64m",
985 "IST_F16m",
986 "IST_F32m",
987 "IST_FP16m",
988 "IST_FP32m",
989 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000990
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000991def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000992 let Latency = 4;
993 let NumMicroOps = 4;
994 let ResourceCycles = [4];
995}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000996def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000997
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000998def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000999 let Latency = 4;
1000 let NumMicroOps = 4;
1001 let ResourceCycles = [1,3];
1002}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001003def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001004
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001005def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001006 let Latency = 4;
1007 let NumMicroOps = 4;
1008 let ResourceCycles = [1,3];
1009}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001010def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001011
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001012def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001013 let Latency = 4;
1014 let NumMicroOps = 4;
1015 let ResourceCycles = [1,1,2];
1016}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001017def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001018
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001019def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1020 let Latency = 5;
1021 let NumMicroOps = 1;
1022 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001023}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001024def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001025 "MOVSX(16|32|64)rm32",
1026 "MOVSX(16|32|64)rm8",
1027 "MOVZX(16|32|64)rm16",
1028 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001029 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001030
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001031def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001032 let Latency = 5;
1033 let NumMicroOps = 2;
1034 let ResourceCycles = [1,1];
1035}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001036def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1037 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001038
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001039def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001040 let Latency = 5;
1041 let NumMicroOps = 2;
1042 let ResourceCycles = [1,1];
1043}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001044def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001045 "MMX_CVTPS2PIirr",
1046 "MMX_CVTTPD2PIirr",
1047 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001048 "(V?)CVTPD2DQrr",
1049 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001050 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001051 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001052 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001053 "(V?)CVTSD2SSrr",
1054 "(V?)CVTSI642SDrr",
1055 "(V?)CVTSI2SDrr",
1056 "(V?)CVTSI2SSrr",
1057 "(V?)CVTSS2SDrr",
1058 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001059
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001060def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001061 let Latency = 5;
1062 let NumMicroOps = 3;
1063 let ResourceCycles = [1,1,1];
1064}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001065def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001066
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001067def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001068 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001069 let NumMicroOps = 3;
1070 let ResourceCycles = [1,1,1];
1071}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001072def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001073
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001074def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001075 let Latency = 5;
1076 let NumMicroOps = 5;
1077 let ResourceCycles = [1,4];
1078}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001079def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001080
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001081def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001082 let Latency = 5;
1083 let NumMicroOps = 5;
1084 let ResourceCycles = [2,3];
1085}
Craig Topper13a16502018-03-19 00:56:09 +00001086def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001087
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001088def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001089 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001090 let NumMicroOps = 6;
1091 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001092}
Craig Topperfc179c62018-03-22 04:23:41 +00001093def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1094 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001095
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001096def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1097 let Latency = 6;
1098 let NumMicroOps = 1;
1099 let ResourceCycles = [1];
1100}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001101def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001102 "(V?)MOVSHDUPrm",
1103 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001104 "VPBROADCASTDrm",
1105 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001106
1107def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001108 let Latency = 6;
1109 let NumMicroOps = 2;
1110 let ResourceCycles = [2];
1111}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001112def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001113
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001114def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001115 let Latency = 6;
1116 let NumMicroOps = 2;
1117 let ResourceCycles = [1,1];
1118}
Craig Topperfc179c62018-03-22 04:23:41 +00001119def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1120 "MMX_PADDSWirm",
1121 "MMX_PADDUSBirm",
1122 "MMX_PADDUSWirm",
1123 "MMX_PAVGBirm",
1124 "MMX_PAVGWirm",
1125 "MMX_PCMPEQBirm",
1126 "MMX_PCMPEQDirm",
1127 "MMX_PCMPEQWirm",
1128 "MMX_PCMPGTBirm",
1129 "MMX_PCMPGTDirm",
1130 "MMX_PCMPGTWirm",
1131 "MMX_PMAXSWirm",
1132 "MMX_PMAXUBirm",
1133 "MMX_PMINSWirm",
1134 "MMX_PMINUBirm",
1135 "MMX_PSLLDrm",
1136 "MMX_PSLLQrm",
1137 "MMX_PSLLWrm",
1138 "MMX_PSRADrm",
1139 "MMX_PSRAWrm",
1140 "MMX_PSRLDrm",
1141 "MMX_PSRLQrm",
1142 "MMX_PSRLWrm",
1143 "MMX_PSUBSBirm",
1144 "MMX_PSUBSWirm",
1145 "MMX_PSUBUSBirm",
1146 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001147
Craig Topper58afb4e2018-03-22 21:10:07 +00001148def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001149 let Latency = 6;
1150 let NumMicroOps = 2;
1151 let ResourceCycles = [1,1];
1152}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001153def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1154 "(V?)CVTSD2SIrr",
1155 "(V?)CVTSS2SI64rr",
1156 "(V?)CVTSS2SIrr",
1157 "(V?)CVTTSD2SI64rr",
1158 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001159
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001160def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1161 let Latency = 6;
1162 let NumMicroOps = 2;
1163 let ResourceCycles = [1,1];
1164}
Craig Topperfc179c62018-03-22 04:23:41 +00001165def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1166 "MMX_PINSRWrm",
1167 "MMX_PSHUFBrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001168 "MMX_PUNPCKHBWirm",
1169 "MMX_PUNPCKHDQirm",
1170 "MMX_PUNPCKHWDirm",
1171 "MMX_PUNPCKLBWirm",
1172 "MMX_PUNPCKLDQirm",
1173 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001174 "(V?)MOVHPDrm",
1175 "(V?)MOVHPSrm",
1176 "(V?)MOVLPDrm",
1177 "(V?)MOVLPSrm",
1178 "(V?)PINSRBrm",
1179 "(V?)PINSRDrm",
1180 "(V?)PINSRQrm",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001181 "(V?)PINSRWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001182
1183def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1184 let Latency = 6;
1185 let NumMicroOps = 2;
1186 let ResourceCycles = [1,1];
1187}
Craig Topperfc179c62018-03-22 04:23:41 +00001188def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1189 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001190
1191def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1192 let Latency = 6;
1193 let NumMicroOps = 2;
1194 let ResourceCycles = [1,1];
1195}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001196def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1197 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001198 "MMX_PANDNirm",
1199 "MMX_PANDirm",
1200 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001201 "MMX_PSIGN(B|D|W)rm",
1202 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001203 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001204
1205def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1206 let Latency = 6;
1207 let NumMicroOps = 2;
1208 let ResourceCycles = [1,1];
1209}
Craig Topperc50570f2018-04-06 17:12:18 +00001210def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001211 "RORX(32|64)mi",
1212 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001213 "SHLX(32|64)rm",
1214 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001215def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1216 ADCX32rm, ADCX64rm,
1217 ADOX32rm, ADOX64rm,
1218 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001219
1220def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1221 let Latency = 6;
1222 let NumMicroOps = 2;
1223 let ResourceCycles = [1,1];
1224}
Craig Topperfc179c62018-03-22 04:23:41 +00001225def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1226 "BLSI(32|64)rm",
1227 "BLSMSK(32|64)rm",
1228 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001229 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001230
1231def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1232 let Latency = 6;
1233 let NumMicroOps = 2;
1234 let ResourceCycles = [1,1];
1235}
Craig Topper2d451e72018-03-18 08:38:06 +00001236def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001237def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001238
1239def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001240 let Latency = 6;
1241 let NumMicroOps = 3;
1242 let ResourceCycles = [2,1];
1243}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001244def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1245 "(V?)HADDPS(Y?)rr",
1246 "(V?)HSUBPD(Y?)rr",
1247 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001248
Craig Topper58afb4e2018-03-22 21:10:07 +00001249def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001250 let Latency = 6;
1251 let NumMicroOps = 3;
1252 let ResourceCycles = [2,1];
1253}
Craig Topperfc179c62018-03-22 04:23:41 +00001254def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001255
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001256def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001257 let Latency = 6;
1258 let NumMicroOps = 4;
1259 let ResourceCycles = [1,2,1];
1260}
Craig Topperfc179c62018-03-22 04:23:41 +00001261def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1262 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001263
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001264def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001265 let Latency = 6;
1266 let NumMicroOps = 4;
1267 let ResourceCycles = [1,1,1,1];
1268}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001269def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001270
Craig Topper58afb4e2018-03-22 21:10:07 +00001271def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001272 let Latency = 6;
1273 let NumMicroOps = 4;
1274 let ResourceCycles = [1,1,1,1];
1275}
1276def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1277
1278def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1279 let Latency = 6;
1280 let NumMicroOps = 4;
1281 let ResourceCycles = [1,1,1,1];
1282}
Craig Topperfc179c62018-03-22 04:23:41 +00001283def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1284 "BTR(16|32|64)mi8",
1285 "BTS(16|32|64)mi8",
1286 "SAR(8|16|32|64)m1",
1287 "SAR(8|16|32|64)mi",
1288 "SHL(8|16|32|64)m1",
1289 "SHL(8|16|32|64)mi",
1290 "SHR(8|16|32|64)m1",
1291 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001292
1293def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1294 let Latency = 6;
1295 let NumMicroOps = 4;
1296 let ResourceCycles = [1,1,1,1];
1297}
Craig Topperf0d04262018-04-06 16:16:48 +00001298def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1299 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001300
1301def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001302 let Latency = 6;
1303 let NumMicroOps = 6;
1304 let ResourceCycles = [1,5];
1305}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001306def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001307
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001308def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1309 let Latency = 7;
1310 let NumMicroOps = 1;
1311 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001312}
Craig Topperfc179c62018-03-22 04:23:41 +00001313def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1314 "LD_F64m",
1315 "LD_F80m",
1316 "VBROADCASTF128",
1317 "VBROADCASTI128",
1318 "VBROADCASTSDYrm",
1319 "VBROADCASTSSYrm",
1320 "VLDDQUYrm",
1321 "VMOVAPDYrm",
1322 "VMOVAPSYrm",
1323 "VMOVDDUPYrm",
1324 "VMOVDQAYrm",
1325 "VMOVDQUYrm",
1326 "VMOVNTDQAYrm",
1327 "VMOVSHDUPYrm",
1328 "VMOVSLDUPYrm",
1329 "VMOVUPDYrm",
1330 "VMOVUPSYrm",
1331 "VPBROADCASTDYrm",
1332 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001333
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001334def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001335 let Latency = 7;
1336 let NumMicroOps = 2;
1337 let ResourceCycles = [1,1];
1338}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001339def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001340
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001341def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1342 let Latency = 7;
1343 let NumMicroOps = 2;
1344 let ResourceCycles = [1,1];
1345}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001346def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1347 "(V?)PACKSSDWrm",
1348 "(V?)PACKSSWBrm",
1349 "(V?)PACKUSDWrm",
1350 "(V?)PACKUSWBrm",
1351 "(V?)PALIGNRrmi",
1352 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001353 "VPBROADCASTBrm",
1354 "VPBROADCASTWrm",
1355 "VPERMILPDmi",
1356 "VPERMILPDrm",
1357 "VPERMILPSmi",
1358 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001359 "(V?)PSHUFBrm",
1360 "(V?)PSHUFDmi",
1361 "(V?)PSHUFHWmi",
1362 "(V?)PSHUFLWmi",
1363 "(V?)PUNPCKHBWrm",
1364 "(V?)PUNPCKHDQrm",
1365 "(V?)PUNPCKHQDQrm",
1366 "(V?)PUNPCKHWDrm",
1367 "(V?)PUNPCKLBWrm",
1368 "(V?)PUNPCKLDQrm",
1369 "(V?)PUNPCKLQDQrm",
1370 "(V?)PUNPCKLWDrm",
1371 "(V?)SHUFPDrmi",
1372 "(V?)SHUFPSrmi",
1373 "(V?)UNPCKHPDrm",
1374 "(V?)UNPCKHPSrm",
1375 "(V?)UNPCKLPDrm",
1376 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001377
Craig Topper58afb4e2018-03-22 21:10:07 +00001378def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001379 let Latency = 7;
1380 let NumMicroOps = 2;
1381 let ResourceCycles = [1,1];
1382}
Craig Topperfc179c62018-03-22 04:23:41 +00001383def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1384 "VCVTPD2PSYrr",
1385 "VCVTPH2PSYrr",
1386 "VCVTPS2PDYrr",
1387 "VCVTPS2PHYrr",
1388 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001389
1390def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1391 let Latency = 7;
1392 let NumMicroOps = 2;
1393 let ResourceCycles = [1,1];
1394}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001395def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1396 "(V?)PABSDrm",
1397 "(V?)PABSWrm",
1398 "(V?)PADDSBrm",
1399 "(V?)PADDSWrm",
1400 "(V?)PADDUSBrm",
1401 "(V?)PADDUSWrm",
1402 "(V?)PAVGBrm",
1403 "(V?)PAVGWrm",
1404 "(V?)PCMPEQBrm",
1405 "(V?)PCMPEQDrm",
1406 "(V?)PCMPEQQrm",
1407 "(V?)PCMPEQWrm",
1408 "(V?)PCMPGTBrm",
1409 "(V?)PCMPGTDrm",
1410 "(V?)PCMPGTWrm",
1411 "(V?)PMAXSBrm",
1412 "(V?)PMAXSDrm",
1413 "(V?)PMAXSWrm",
1414 "(V?)PMAXUBrm",
1415 "(V?)PMAXUDrm",
1416 "(V?)PMAXUWrm",
1417 "(V?)PMINSBrm",
1418 "(V?)PMINSDrm",
1419 "(V?)PMINSWrm",
1420 "(V?)PMINUBrm",
1421 "(V?)PMINUDrm",
1422 "(V?)PMINUWrm",
1423 "(V?)PSIGNBrm",
1424 "(V?)PSIGNDrm",
1425 "(V?)PSIGNWrm",
1426 "(V?)PSLLDrm",
1427 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001428 "VPSLLVDrm",
1429 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001430 "(V?)PSLLWrm",
1431 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001432 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001433 "(V?)PSRAWrm",
1434 "(V?)PSRLDrm",
1435 "(V?)PSRLQrm",
1436 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001437 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001438 "(V?)PSRLWrm",
1439 "(V?)PSUBSBrm",
1440 "(V?)PSUBSWrm",
1441 "(V?)PSUBUSBrm",
1442 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001443
1444def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1445 let Latency = 7;
1446 let NumMicroOps = 2;
1447 let ResourceCycles = [1,1];
1448}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001449def: InstRW<[SKLWriteResGroup91], (instregex "(V?)BLENDPDrmi",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001450 "(V?)BLENDPSrmi",
1451 "(V?)INSERTF128rm",
1452 "(V?)INSERTI128rm",
1453 "(V?)MASKMOVPDrm",
1454 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001455 "(V?)PADDBrm",
1456 "(V?)PADDDrm",
1457 "(V?)PADDQrm",
1458 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001459 "(V?)PBLENDDrmi",
1460 "(V?)PMASKMOVDrm",
1461 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001462 "(V?)PSUBBrm",
1463 "(V?)PSUBDrm",
1464 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001465 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001466
1467def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1468 let Latency = 7;
1469 let NumMicroOps = 3;
1470 let ResourceCycles = [2,1];
1471}
Craig Topperfc179c62018-03-22 04:23:41 +00001472def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1473 "MMX_PACKSSWBirm",
1474 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001475
1476def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1477 let Latency = 7;
1478 let NumMicroOps = 3;
1479 let ResourceCycles = [1,2];
1480}
Craig Topperf4cd9082018-01-19 05:47:32 +00001481def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001482
1483def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1484 let Latency = 7;
1485 let NumMicroOps = 3;
1486 let ResourceCycles = [1,2];
1487}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001488def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1489 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001490
Craig Topper58afb4e2018-03-22 21:10:07 +00001491def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001492 let Latency = 7;
1493 let NumMicroOps = 3;
1494 let ResourceCycles = [1,1,1];
1495}
Craig Topperfc179c62018-03-22 04:23:41 +00001496def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1497 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001498
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001499def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001500 let Latency = 7;
1501 let NumMicroOps = 3;
1502 let ResourceCycles = [1,1,1];
1503}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001504def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001505
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001506def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001507 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001508 let NumMicroOps = 3;
1509 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001510}
Craig Topperfc179c62018-03-22 04:23:41 +00001511def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1512 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001513
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001514def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1515 let Latency = 7;
1516 let NumMicroOps = 5;
1517 let ResourceCycles = [1,1,1,2];
1518}
Craig Topperfc179c62018-03-22 04:23:41 +00001519def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1520 "ROL(8|16|32|64)mi",
1521 "ROR(8|16|32|64)m1",
1522 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001523
1524def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1525 let Latency = 7;
1526 let NumMicroOps = 5;
1527 let ResourceCycles = [1,1,1,2];
1528}
Craig Topper13a16502018-03-19 00:56:09 +00001529def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001530
1531def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1532 let Latency = 7;
1533 let NumMicroOps = 5;
1534 let ResourceCycles = [1,1,1,1,1];
1535}
Craig Topperfc179c62018-03-22 04:23:41 +00001536def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1537 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001538
1539def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001540 let Latency = 7;
1541 let NumMicroOps = 7;
1542 let ResourceCycles = [1,3,1,2];
1543}
Craig Topper2d451e72018-03-18 08:38:06 +00001544def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001545
Craig Topper58afb4e2018-03-22 21:10:07 +00001546def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001547 let Latency = 8;
1548 let NumMicroOps = 2;
1549 let ResourceCycles = [2];
1550}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001551def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1552 "(V?)ROUNDPS(Y?)r",
1553 "(V?)ROUNDSDr",
1554 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001555
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001556def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001557 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001558 let NumMicroOps = 2;
1559 let ResourceCycles = [1,1];
1560}
Craig Topperfc179c62018-03-22 04:23:41 +00001561def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1562 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001563
1564def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1565 let Latency = 8;
1566 let NumMicroOps = 2;
1567 let ResourceCycles = [1,1];
1568}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001569def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1570 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001571
1572def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001573 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001574 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001575 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001576}
Craig Topperf846e2d2018-04-19 05:34:05 +00001577def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001578
Craig Topperf846e2d2018-04-19 05:34:05 +00001579def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1580 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001581 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001582 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001583}
Craig Topperfc179c62018-03-22 04:23:41 +00001584def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001585
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001586def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1587 let Latency = 8;
1588 let NumMicroOps = 2;
1589 let ResourceCycles = [1,1];
1590}
Craig Topperfc179c62018-03-22 04:23:41 +00001591def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1592 "FCOM64m",
1593 "FCOMP32m",
1594 "FCOMP64m",
1595 "MMX_PSADBWirm",
1596 "VPACKSSDWYrm",
1597 "VPACKSSWBYrm",
1598 "VPACKUSDWYrm",
1599 "VPACKUSWBYrm",
1600 "VPALIGNRYrmi",
1601 "VPBLENDWYrmi",
1602 "VPBROADCASTBYrm",
1603 "VPBROADCASTWYrm",
1604 "VPERMILPDYmi",
1605 "VPERMILPDYrm",
1606 "VPERMILPSYmi",
1607 "VPERMILPSYrm",
1608 "VPMOVSXBDYrm",
1609 "VPMOVSXBQYrm",
1610 "VPMOVSXWQYrm",
1611 "VPSHUFBYrm",
1612 "VPSHUFDYmi",
1613 "VPSHUFHWYmi",
1614 "VPSHUFLWYmi",
1615 "VPUNPCKHBWYrm",
1616 "VPUNPCKHDQYrm",
1617 "VPUNPCKHQDQYrm",
1618 "VPUNPCKHWDYrm",
1619 "VPUNPCKLBWYrm",
1620 "VPUNPCKLDQYrm",
1621 "VPUNPCKLQDQYrm",
1622 "VPUNPCKLWDYrm",
1623 "VSHUFPDYrmi",
1624 "VSHUFPSYrmi",
1625 "VUNPCKHPDYrm",
1626 "VUNPCKHPSYrm",
1627 "VUNPCKLPDYrm",
1628 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001629
1630def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1631 let Latency = 8;
1632 let NumMicroOps = 2;
1633 let ResourceCycles = [1,1];
1634}
Craig Topperfc179c62018-03-22 04:23:41 +00001635def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1636 "VPABSDYrm",
1637 "VPABSWYrm",
1638 "VPADDSBYrm",
1639 "VPADDSWYrm",
1640 "VPADDUSBYrm",
1641 "VPADDUSWYrm",
1642 "VPAVGBYrm",
1643 "VPAVGWYrm",
1644 "VPCMPEQBYrm",
1645 "VPCMPEQDYrm",
1646 "VPCMPEQQYrm",
1647 "VPCMPEQWYrm",
1648 "VPCMPGTBYrm",
1649 "VPCMPGTDYrm",
1650 "VPCMPGTWYrm",
1651 "VPMAXSBYrm",
1652 "VPMAXSDYrm",
1653 "VPMAXSWYrm",
1654 "VPMAXUBYrm",
1655 "VPMAXUDYrm",
1656 "VPMAXUWYrm",
1657 "VPMINSBYrm",
1658 "VPMINSDYrm",
1659 "VPMINSWYrm",
1660 "VPMINUBYrm",
1661 "VPMINUDYrm",
1662 "VPMINUWYrm",
1663 "VPSIGNBYrm",
1664 "VPSIGNDYrm",
1665 "VPSIGNWYrm",
1666 "VPSLLDYrm",
1667 "VPSLLQYrm",
1668 "VPSLLVDYrm",
1669 "VPSLLVQYrm",
1670 "VPSLLWYrm",
1671 "VPSRADYrm",
1672 "VPSRAVDYrm",
1673 "VPSRAWYrm",
1674 "VPSRLDYrm",
1675 "VPSRLQYrm",
1676 "VPSRLVDYrm",
1677 "VPSRLVQYrm",
1678 "VPSRLWYrm",
1679 "VPSUBSBYrm",
1680 "VPSUBSWYrm",
1681 "VPSUBUSBYrm",
1682 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001683
1684def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1685 let Latency = 8;
1686 let NumMicroOps = 2;
1687 let ResourceCycles = [1,1];
1688}
Craig Topperfc179c62018-03-22 04:23:41 +00001689def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1690 "VANDNPSYrm",
1691 "VANDPDYrm",
1692 "VANDPSYrm",
1693 "VBLENDPDYrmi",
1694 "VBLENDPSYrmi",
1695 "VMASKMOVPDYrm",
1696 "VMASKMOVPSYrm",
1697 "VORPDYrm",
1698 "VORPSYrm",
1699 "VPADDBYrm",
1700 "VPADDDYrm",
1701 "VPADDQYrm",
1702 "VPADDWYrm",
1703 "VPANDNYrm",
1704 "VPANDYrm",
1705 "VPBLENDDYrmi",
1706 "VPMASKMOVDYrm",
1707 "VPMASKMOVQYrm",
1708 "VPORYrm",
1709 "VPSUBBYrm",
1710 "VPSUBDYrm",
1711 "VPSUBQYrm",
1712 "VPSUBWYrm",
1713 "VPXORYrm",
1714 "VXORPDYrm",
1715 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001716
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001717def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1718 let Latency = 8;
1719 let NumMicroOps = 4;
1720 let ResourceCycles = [1,2,1];
1721}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001722def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001723
1724def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1725 let Latency = 8;
1726 let NumMicroOps = 4;
1727 let ResourceCycles = [2,1,1];
1728}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001729def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001730
Craig Topper58afb4e2018-03-22 21:10:07 +00001731def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001732 let Latency = 8;
1733 let NumMicroOps = 4;
1734 let ResourceCycles = [1,1,1,1];
1735}
1736def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1737
1738def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1739 let Latency = 8;
1740 let NumMicroOps = 5;
1741 let ResourceCycles = [1,1,3];
1742}
Craig Topper13a16502018-03-19 00:56:09 +00001743def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001744
1745def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1746 let Latency = 8;
1747 let NumMicroOps = 5;
1748 let ResourceCycles = [1,1,1,2];
1749}
Craig Topperfc179c62018-03-22 04:23:41 +00001750def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1751 "RCL(8|16|32|64)mi",
1752 "RCR(8|16|32|64)m1",
1753 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001754
1755def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1756 let Latency = 8;
1757 let NumMicroOps = 6;
1758 let ResourceCycles = [1,1,1,3];
1759}
Craig Topperfc179c62018-03-22 04:23:41 +00001760def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1761 "SAR(8|16|32|64)mCL",
1762 "SHL(8|16|32|64)mCL",
1763 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001764
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001765def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1766 let Latency = 8;
1767 let NumMicroOps = 6;
1768 let ResourceCycles = [1,1,1,2,1];
1769}
Craig Topper9f834812018-04-01 21:54:24 +00001770def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001771 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001772 "SBB(8|16|32|64)mi")>;
1773def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1774 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001775
1776def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1777 let Latency = 9;
1778 let NumMicroOps = 2;
1779 let ResourceCycles = [1,1];
1780}
Craig Topperfc179c62018-03-22 04:23:41 +00001781def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1782 "MMX_PMADDUBSWrm",
1783 "MMX_PMADDWDirm",
1784 "MMX_PMULHRSWrm",
1785 "MMX_PMULHUWirm",
1786 "MMX_PMULHWirm",
1787 "MMX_PMULLWirm",
1788 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001789 "(V?)RCPSSm",
1790 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001791 "VTESTPDYrm",
1792 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001793
1794def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1795 let Latency = 9;
1796 let NumMicroOps = 2;
1797 let ResourceCycles = [1,1];
1798}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001799def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001800 "VPMOVSXBWYrm",
1801 "VPMOVSXDQYrm",
1802 "VPMOVSXWDYrm",
1803 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001804 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001805
1806def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1807 let Latency = 9;
1808 let NumMicroOps = 2;
1809 let ResourceCycles = [1,1];
1810}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001811def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1812 "(V?)ADDSSrm",
1813 "(V?)CMPSDrm",
1814 "(V?)CMPSSrm",
1815 "(V?)MAX(C?)SDrm",
1816 "(V?)MAX(C?)SSrm",
1817 "(V?)MIN(C?)SDrm",
1818 "(V?)MIN(C?)SSrm",
1819 "(V?)MULSDrm",
1820 "(V?)MULSSrm",
1821 "(V?)SUBSDrm",
1822 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001823def: InstRW<[SKLWriteResGroup122],
1824 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001825
Craig Topper58afb4e2018-03-22 21:10:07 +00001826def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001827 let Latency = 9;
1828 let NumMicroOps = 2;
1829 let ResourceCycles = [1,1];
1830}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001831def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001832 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001833 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001834 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001835
Craig Topper58afb4e2018-03-22 21:10:07 +00001836def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001837 let Latency = 9;
1838 let NumMicroOps = 3;
1839 let ResourceCycles = [1,2];
1840}
Craig Topperfc179c62018-03-22 04:23:41 +00001841def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001842
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001843def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1844 let Latency = 9;
1845 let NumMicroOps = 3;
1846 let ResourceCycles = [1,2];
1847}
Craig Topperfc179c62018-03-22 04:23:41 +00001848def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1849 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001850
1851def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1852 let Latency = 9;
1853 let NumMicroOps = 3;
1854 let ResourceCycles = [1,1,1];
1855}
Craig Topperfc179c62018-03-22 04:23:41 +00001856def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001857
1858def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1859 let Latency = 9;
1860 let NumMicroOps = 3;
1861 let ResourceCycles = [1,1,1];
1862}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001863def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001864
1865def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001866 let Latency = 9;
1867 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001868 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001869}
Craig Topperfc179c62018-03-22 04:23:41 +00001870def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1871 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001872
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001873def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1874 let Latency = 9;
1875 let NumMicroOps = 4;
1876 let ResourceCycles = [2,1,1];
1877}
Craig Topperfc179c62018-03-22 04:23:41 +00001878def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1879 "(V?)PHADDWrm",
1880 "(V?)PHSUBDrm",
1881 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001882
1883def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1884 let Latency = 9;
1885 let NumMicroOps = 4;
1886 let ResourceCycles = [1,1,1,1];
1887}
Craig Topperfc179c62018-03-22 04:23:41 +00001888def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1889 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001890
1891def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1892 let Latency = 9;
1893 let NumMicroOps = 5;
1894 let ResourceCycles = [1,2,1,1];
1895}
Craig Topperfc179c62018-03-22 04:23:41 +00001896def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1897 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001898
1899def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1900 let Latency = 10;
1901 let NumMicroOps = 2;
1902 let ResourceCycles = [1,1];
1903}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001904def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001905 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001906
1907def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1908 let Latency = 10;
1909 let NumMicroOps = 2;
1910 let ResourceCycles = [1,1];
1911}
Craig Topperfc179c62018-03-22 04:23:41 +00001912def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1913 "ADD_F64m",
1914 "ILD_F16m",
1915 "ILD_F32m",
1916 "ILD_F64m",
1917 "SUBR_F32m",
1918 "SUBR_F64m",
1919 "SUB_F32m",
1920 "SUB_F64m",
1921 "VPCMPGTQYrm",
1922 "VPERM2F128rm",
1923 "VPERM2I128rm",
1924 "VPERMDYrm",
1925 "VPERMPDYmi",
1926 "VPERMPSYrm",
1927 "VPERMQYmi",
1928 "VPMOVZXBDYrm",
1929 "VPMOVZXBQYrm",
1930 "VPMOVZXBWYrm",
1931 "VPMOVZXDQYrm",
1932 "VPMOVZXWQYrm",
1933 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001934
1935def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1936 let Latency = 10;
1937 let NumMicroOps = 2;
1938 let ResourceCycles = [1,1];
1939}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001940def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1941 "(V?)ADDPSrm",
1942 "(V?)ADDSUBPDrm",
1943 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001944 "(V?)CVTDQ2PSrm",
1945 "(V?)CVTPH2PSYrm",
1946 "(V?)CVTPS2DQrm",
1947 "(V?)CVTSS2SDrm",
1948 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001949 "(V?)MULPDrm",
1950 "(V?)MULPSrm",
1951 "(V?)PHMINPOSUWrm",
1952 "(V?)PMADDUBSWrm",
1953 "(V?)PMADDWDrm",
1954 "(V?)PMULDQrm",
1955 "(V?)PMULHRSWrm",
1956 "(V?)PMULHUWrm",
1957 "(V?)PMULHWrm",
1958 "(V?)PMULLWrm",
1959 "(V?)PMULUDQrm",
1960 "(V?)SUBPDrm",
1961 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001962def: InstRW<[SKLWriteResGroup134],
1963 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001964
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001965def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1966 let Latency = 10;
1967 let NumMicroOps = 3;
1968 let ResourceCycles = [1,1,1];
1969}
Craig Topperfc179c62018-03-22 04:23:41 +00001970def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1971 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001972
Craig Topper58afb4e2018-03-22 21:10:07 +00001973def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001974 let Latency = 10;
1975 let NumMicroOps = 3;
1976 let ResourceCycles = [1,1,1];
1977}
Craig Topperfc179c62018-03-22 04:23:41 +00001978def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001979
1980def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001981 let Latency = 10;
1982 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001983 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001984}
Craig Topperfc179c62018-03-22 04:23:41 +00001985def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1986 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001987
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001988def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1989 let Latency = 10;
1990 let NumMicroOps = 4;
1991 let ResourceCycles = [2,1,1];
1992}
Craig Topperfc179c62018-03-22 04:23:41 +00001993def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1994 "VPHADDWYrm",
1995 "VPHSUBDYrm",
1996 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001997
1998def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001999 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002000 let NumMicroOps = 4;
2001 let ResourceCycles = [1,1,1,1];
2002}
Craig Topperf846e2d2018-04-19 05:34:05 +00002003def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002004
2005def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2006 let Latency = 10;
2007 let NumMicroOps = 8;
2008 let ResourceCycles = [1,1,1,1,1,3];
2009}
Craig Topper13a16502018-03-19 00:56:09 +00002010def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002011
2012def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002013 let Latency = 10;
2014 let NumMicroOps = 10;
2015 let ResourceCycles = [9,1];
2016}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002017def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002018
Craig Topper8104f262018-04-02 05:33:28 +00002019def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002020 let Latency = 11;
2021 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002022 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002023}
Craig Topper8104f262018-04-02 05:33:28 +00002024def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002025 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002026
Craig Topper8104f262018-04-02 05:33:28 +00002027def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2028 let Latency = 11;
2029 let NumMicroOps = 1;
2030 let ResourceCycles = [1,5];
2031}
2032def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
2033
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002034def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002035 let Latency = 11;
2036 let NumMicroOps = 2;
2037 let ResourceCycles = [1,1];
2038}
Craig Topperfc179c62018-03-22 04:23:41 +00002039def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2040 "MUL_F64m",
2041 "VRCPPSYm",
2042 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002043
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002044def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2045 let Latency = 11;
2046 let NumMicroOps = 2;
2047 let ResourceCycles = [1,1];
2048}
Craig Topperfc179c62018-03-22 04:23:41 +00002049def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2050 "VADDPSYrm",
2051 "VADDSUBPDYrm",
2052 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002053 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002054 "VCMPPSYrmi",
2055 "VCVTDQ2PSYrm",
2056 "VCVTPS2DQYrm",
2057 "VCVTPS2PDYrm",
2058 "VCVTTPS2DQYrm",
2059 "VMAX(C?)PDYrm",
2060 "VMAX(C?)PSYrm",
2061 "VMIN(C?)PDYrm",
2062 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002063 "VMULPDYrm",
2064 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002065 "VPMADDUBSWYrm",
2066 "VPMADDWDYrm",
2067 "VPMULDQYrm",
2068 "VPMULHRSWYrm",
2069 "VPMULHUWYrm",
2070 "VPMULHWYrm",
2071 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002072 "VPMULUDQYrm",
2073 "VSUBPDYrm",
2074 "VSUBPSYrm")>;
2075def: InstRW<[SKLWriteResGroup147],
2076 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002077
2078def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2079 let Latency = 11;
2080 let NumMicroOps = 3;
2081 let ResourceCycles = [2,1];
2082}
Craig Topperfc179c62018-03-22 04:23:41 +00002083def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2084 "FICOM32m",
2085 "FICOMP16m",
2086 "FICOMP32m",
2087 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002088
2089def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2090 let Latency = 11;
2091 let NumMicroOps = 3;
2092 let ResourceCycles = [1,1,1];
2093}
Craig Topperfc179c62018-03-22 04:23:41 +00002094def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002095
Craig Topper58afb4e2018-03-22 21:10:07 +00002096def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002097 let Latency = 11;
2098 let NumMicroOps = 3;
2099 let ResourceCycles = [1,1,1];
2100}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002101def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2102 "(V?)CVTSD2SIrm",
2103 "(V?)CVTSS2SI64rm",
2104 "(V?)CVTSS2SIrm",
2105 "(V?)CVTTSD2SI64rm",
2106 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002107 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002108 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002109
Craig Topper58afb4e2018-03-22 21:10:07 +00002110def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002111 let Latency = 11;
2112 let NumMicroOps = 3;
2113 let ResourceCycles = [1,1,1];
2114}
Craig Topperfc179c62018-03-22 04:23:41 +00002115def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2116 "CVTPD2PSrm",
2117 "CVTTPD2DQrm",
2118 "MMX_CVTPD2PIirm",
2119 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002120
2121def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2122 let Latency = 11;
2123 let NumMicroOps = 6;
2124 let ResourceCycles = [1,1,1,2,1];
2125}
Craig Topperfc179c62018-03-22 04:23:41 +00002126def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2127 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002128
2129def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002130 let Latency = 11;
2131 let NumMicroOps = 7;
2132 let ResourceCycles = [2,3,2];
2133}
Craig Topperfc179c62018-03-22 04:23:41 +00002134def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2135 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002136
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002137def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002138 let Latency = 11;
2139 let NumMicroOps = 9;
2140 let ResourceCycles = [1,5,1,2];
2141}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002142def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002143
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002144def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002145 let Latency = 11;
2146 let NumMicroOps = 11;
2147 let ResourceCycles = [2,9];
2148}
Craig Topperfc179c62018-03-22 04:23:41 +00002149def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002150
Craig Topper8104f262018-04-02 05:33:28 +00002151def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002152 let Latency = 12;
2153 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002154 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002155}
Craig Topper8104f262018-04-02 05:33:28 +00002156def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002157 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002158
Craig Topper8104f262018-04-02 05:33:28 +00002159def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2160 let Latency = 12;
2161 let NumMicroOps = 1;
2162 let ResourceCycles = [1,6];
2163}
2164def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2165
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002166def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2167 let Latency = 12;
2168 let NumMicroOps = 4;
2169 let ResourceCycles = [2,1,1];
2170}
Craig Topperfc179c62018-03-22 04:23:41 +00002171def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2172 "(V?)HADDPSrm",
2173 "(V?)HSUBPDrm",
2174 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002175
Craig Topper58afb4e2018-03-22 21:10:07 +00002176def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002177 let Latency = 12;
2178 let NumMicroOps = 4;
2179 let ResourceCycles = [1,1,1,1];
2180}
2181def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2182
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002183def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002184 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002185 let NumMicroOps = 3;
2186 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002187}
Craig Topperfc179c62018-03-22 04:23:41 +00002188def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2189 "ADD_FI32m",
2190 "SUBR_FI16m",
2191 "SUBR_FI32m",
2192 "SUB_FI16m",
2193 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002194
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002195def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2196 let Latency = 13;
2197 let NumMicroOps = 3;
2198 let ResourceCycles = [1,1,1];
2199}
2200def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2201
Craig Topper58afb4e2018-03-22 21:10:07 +00002202def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002203 let Latency = 13;
2204 let NumMicroOps = 4;
2205 let ResourceCycles = [1,3];
2206}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002207def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002208
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002209def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002210 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002211 let NumMicroOps = 4;
2212 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002213}
Craig Topperfc179c62018-03-22 04:23:41 +00002214def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2215 "VHADDPSYrm",
2216 "VHSUBPDYrm",
2217 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002218
Craig Topper8104f262018-04-02 05:33:28 +00002219def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002220 let Latency = 14;
2221 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002222 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002223}
Craig Topper8104f262018-04-02 05:33:28 +00002224def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002225 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002226
Craig Topper8104f262018-04-02 05:33:28 +00002227def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2228 let Latency = 14;
2229 let NumMicroOps = 1;
2230 let ResourceCycles = [1,5];
2231}
2232def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2233
Craig Topper58afb4e2018-03-22 21:10:07 +00002234def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002235 let Latency = 14;
2236 let NumMicroOps = 3;
2237 let ResourceCycles = [1,2];
2238}
Craig Topperfc179c62018-03-22 04:23:41 +00002239def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2240def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2241def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2242def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002243
2244def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2245 let Latency = 14;
2246 let NumMicroOps = 3;
2247 let ResourceCycles = [1,1,1];
2248}
Craig Topperfc179c62018-03-22 04:23:41 +00002249def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2250 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002251
2252def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002253 let Latency = 14;
2254 let NumMicroOps = 10;
2255 let ResourceCycles = [2,4,1,3];
2256}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002257def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002258
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002259def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002260 let Latency = 15;
2261 let NumMicroOps = 1;
2262 let ResourceCycles = [1];
2263}
Craig Topperfc179c62018-03-22 04:23:41 +00002264def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2265 "DIVR_FST0r",
2266 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002267
Craig Topper58afb4e2018-03-22 21:10:07 +00002268def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002269 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002270 let NumMicroOps = 3;
2271 let ResourceCycles = [1,2];
2272}
Craig Topper40d3b322018-03-22 21:55:20 +00002273def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2274 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002275
Craig Topperd25f1ac2018-03-20 23:39:48 +00002276def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2277 let Latency = 17;
2278 let NumMicroOps = 3;
2279 let ResourceCycles = [1,2];
2280}
2281def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2282
Craig Topper58afb4e2018-03-22 21:10:07 +00002283def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002284 let Latency = 15;
2285 let NumMicroOps = 4;
2286 let ResourceCycles = [1,1,2];
2287}
Craig Topperfc179c62018-03-22 04:23:41 +00002288def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002289
2290def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2291 let Latency = 15;
2292 let NumMicroOps = 10;
2293 let ResourceCycles = [1,1,1,5,1,1];
2294}
Craig Topper13a16502018-03-19 00:56:09 +00002295def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002296
Craig Topper8104f262018-04-02 05:33:28 +00002297def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002298 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002299 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002300 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002301}
Craig Topperfc179c62018-03-22 04:23:41 +00002302def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002303
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002304def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2305 let Latency = 16;
2306 let NumMicroOps = 14;
2307 let ResourceCycles = [1,1,1,4,2,5];
2308}
2309def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2310
2311def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002312 let Latency = 16;
2313 let NumMicroOps = 16;
2314 let ResourceCycles = [16];
2315}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002316def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002317
Craig Topper8104f262018-04-02 05:33:28 +00002318def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002319 let Latency = 17;
2320 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002321 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002322}
Craig Topper8104f262018-04-02 05:33:28 +00002323def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2324
2325def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2326 let Latency = 17;
2327 let NumMicroOps = 2;
2328 let ResourceCycles = [1,1,3];
2329}
2330def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002331
2332def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002333 let Latency = 17;
2334 let NumMicroOps = 15;
2335 let ResourceCycles = [2,1,2,4,2,4];
2336}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002337def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002338
Craig Topper8104f262018-04-02 05:33:28 +00002339def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002340 let Latency = 18;
2341 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002342 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002343}
Craig Topper8104f262018-04-02 05:33:28 +00002344def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002345 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002346
Craig Topper8104f262018-04-02 05:33:28 +00002347def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2348 let Latency = 18;
2349 let NumMicroOps = 1;
2350 let ResourceCycles = [1,12];
2351}
2352def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2353
2354def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002355 let Latency = 18;
2356 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002357 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002358}
Craig Topper8104f262018-04-02 05:33:28 +00002359def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2360
2361def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2362 let Latency = 18;
2363 let NumMicroOps = 2;
2364 let ResourceCycles = [1,1,3];
2365}
2366def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002367
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002368def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002369 let Latency = 18;
2370 let NumMicroOps = 8;
2371 let ResourceCycles = [1,1,1,5];
2372}
Craig Topperfc179c62018-03-22 04:23:41 +00002373def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002374
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002375def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002376 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002377 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002378 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002379}
Craig Topper13a16502018-03-19 00:56:09 +00002380def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002381
Craig Topper8104f262018-04-02 05:33:28 +00002382def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002383 let Latency = 19;
2384 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002385 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002386}
Craig Topper8104f262018-04-02 05:33:28 +00002387def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2388
2389def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2390 let Latency = 19;
2391 let NumMicroOps = 2;
2392 let ResourceCycles = [1,1,6];
2393}
2394def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002395
Craig Topper58afb4e2018-03-22 21:10:07 +00002396def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002397 let Latency = 19;
2398 let NumMicroOps = 5;
2399 let ResourceCycles = [1,1,3];
2400}
Craig Topperfc179c62018-03-22 04:23:41 +00002401def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002402
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002403def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002404 let Latency = 20;
2405 let NumMicroOps = 1;
2406 let ResourceCycles = [1];
2407}
Craig Topperfc179c62018-03-22 04:23:41 +00002408def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2409 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002410 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002411
Craig Topper8104f262018-04-02 05:33:28 +00002412def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002413 let Latency = 20;
2414 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002415 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002416}
Craig Topperfc179c62018-03-22 04:23:41 +00002417def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002418
Craig Topper58afb4e2018-03-22 21:10:07 +00002419def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002420 let Latency = 20;
2421 let NumMicroOps = 5;
2422 let ResourceCycles = [1,1,3];
2423}
2424def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2425
2426def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2427 let Latency = 20;
2428 let NumMicroOps = 8;
2429 let ResourceCycles = [1,1,1,1,1,1,2];
2430}
Craig Topperfc179c62018-03-22 04:23:41 +00002431def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2432 "INSL",
2433 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002434
2435def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002436 let Latency = 20;
2437 let NumMicroOps = 10;
2438 let ResourceCycles = [1,2,7];
2439}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002440def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002441
Craig Topper8104f262018-04-02 05:33:28 +00002442def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002443 let Latency = 21;
2444 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002445 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002446}
2447def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2448
2449def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2450 let Latency = 22;
2451 let NumMicroOps = 2;
2452 let ResourceCycles = [1,1];
2453}
Craig Topperfc179c62018-03-22 04:23:41 +00002454def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2455 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002456
2457def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2458 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002459 let NumMicroOps = 5;
2460 let ResourceCycles = [1,2,1,1];
2461}
Craig Topper17a31182017-12-16 18:35:29 +00002462def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2463 VGATHERDPDrm,
2464 VGATHERQPDrm,
2465 VGATHERQPSrm,
2466 VPGATHERDDrm,
2467 VPGATHERDQrm,
2468 VPGATHERQDrm,
2469 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002470
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002471def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2472 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002473 let NumMicroOps = 5;
2474 let ResourceCycles = [1,2,1,1];
2475}
Craig Topper17a31182017-12-16 18:35:29 +00002476def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2477 VGATHERQPDYrm,
2478 VGATHERQPSYrm,
2479 VPGATHERDDYrm,
2480 VPGATHERDQYrm,
2481 VPGATHERQDYrm,
2482 VPGATHERQQYrm,
2483 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002484
Craig Topper8104f262018-04-02 05:33:28 +00002485def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002486 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002487 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002488 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002489}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002490def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002491
2492def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2493 let Latency = 23;
2494 let NumMicroOps = 19;
2495 let ResourceCycles = [2,1,4,1,1,4,6];
2496}
2497def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2498
Craig Topper8104f262018-04-02 05:33:28 +00002499def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002500 let Latency = 24;
2501 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002502 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002503}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002504def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002505
Craig Topper8104f262018-04-02 05:33:28 +00002506def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002507 let Latency = 25;
2508 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002509 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002510}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002511def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002512
2513def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2514 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002515 let NumMicroOps = 3;
2516 let ResourceCycles = [1,1,1];
2517}
Craig Topperfc179c62018-03-22 04:23:41 +00002518def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2519 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002520
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002521def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2522 let Latency = 27;
2523 let NumMicroOps = 2;
2524 let ResourceCycles = [1,1];
2525}
Craig Topperfc179c62018-03-22 04:23:41 +00002526def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2527 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002528
2529def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2530 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002531 let NumMicroOps = 8;
2532 let ResourceCycles = [2,4,1,1];
2533}
Craig Topper13a16502018-03-19 00:56:09 +00002534def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002535
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002536def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002537 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002538 let NumMicroOps = 3;
2539 let ResourceCycles = [1,1,1];
2540}
Craig Topperfc179c62018-03-22 04:23:41 +00002541def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2542 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002543
2544def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2545 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002546 let NumMicroOps = 23;
2547 let ResourceCycles = [1,5,3,4,10];
2548}
Craig Topperfc179c62018-03-22 04:23:41 +00002549def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2550 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002551
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002552def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2553 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002554 let NumMicroOps = 23;
2555 let ResourceCycles = [1,5,2,1,4,10];
2556}
Craig Topperfc179c62018-03-22 04:23:41 +00002557def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2558 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002559
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002560def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2561 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002562 let NumMicroOps = 31;
2563 let ResourceCycles = [1,8,1,21];
2564}
Craig Topper391c6f92017-12-10 01:24:08 +00002565def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002566
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002567def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2568 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002569 let NumMicroOps = 18;
2570 let ResourceCycles = [1,1,2,3,1,1,1,8];
2571}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002572def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002573
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002574def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2575 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002576 let NumMicroOps = 39;
2577 let ResourceCycles = [1,10,1,1,26];
2578}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002579def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002580
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002581def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002582 let Latency = 42;
2583 let NumMicroOps = 22;
2584 let ResourceCycles = [2,20];
2585}
Craig Topper2d451e72018-03-18 08:38:06 +00002586def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002587
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002588def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2589 let Latency = 42;
2590 let NumMicroOps = 40;
2591 let ResourceCycles = [1,11,1,1,26];
2592}
Craig Topper391c6f92017-12-10 01:24:08 +00002593def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002594
2595def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2596 let Latency = 46;
2597 let NumMicroOps = 44;
2598 let ResourceCycles = [1,11,1,1,30];
2599}
2600def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2601
2602def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2603 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002604 let NumMicroOps = 64;
2605 let ResourceCycles = [2,8,5,10,39];
2606}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002607def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002608
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002609def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2610 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002611 let NumMicroOps = 88;
2612 let ResourceCycles = [4,4,31,1,2,1,45];
2613}
Craig Topper2d451e72018-03-18 08:38:06 +00002614def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002615
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002616def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2617 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002618 let NumMicroOps = 90;
2619 let ResourceCycles = [4,2,33,1,2,1,47];
2620}
Craig Topper2d451e72018-03-18 08:38:06 +00002621def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002622
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002623def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002624 let Latency = 75;
2625 let NumMicroOps = 15;
2626 let ResourceCycles = [6,3,6];
2627}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002628def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002629
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002630def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002631 let Latency = 76;
2632 let NumMicroOps = 32;
2633 let ResourceCycles = [7,2,8,3,1,11];
2634}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002635def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002636
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002637def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002638 let Latency = 102;
2639 let NumMicroOps = 66;
2640 let ResourceCycles = [4,2,4,8,14,34];
2641}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002642def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002643
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002644def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2645 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002646 let NumMicroOps = 100;
2647 let ResourceCycles = [9,1,11,16,1,11,21,30];
2648}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002649def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002650
2651} // SchedModel