blob: 8345cc12087e5cebe482842503cb30feb6048260 [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : SKLWriteResPair<WriteCMOV, [SKLPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [SKLPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [SKLPort06,SKLPort4,SKLPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
125defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
126defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
127defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
134defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
135
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteMove, [SKLPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
145// Branches don't produce values, so they have no latency, but they still
146// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000148
149// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000150def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
151def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
152def : WriteRes<WriteFMove, [SKLPort015]>;
153
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
156defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000157defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
158defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
159defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000160defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4>; // Floating point reciprocal estimate.
161defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4>; // Floating point reciprocal square root estimate.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
164defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000167defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1>; // Floating point vector blends.
168defm : SKLWriteResPair<WriteFVarBlend, [SKLPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000169
170// FMA Scheduling helper class.
171// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
172
173// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000174def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
175def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
176def : WriteRes<WriteVecMove, [SKLPort015]>;
177
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000178defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000179defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
181defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000182defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000184defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000185defm : SKLWriteResPair<WriteBlend, [SKLPort15], 1>; // Vector blends.
186defm : SKLWriteResPair<WriteVarBlend, [SKLPort5], 2, [2]>; // Vector variable blends.
187defm : SKLWriteResPair<WriteMPSAD, [SKLPort0, SKLPort5], 6, [1, 2]>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000188defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000189
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000191defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
192defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
193defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000194
195// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000197// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000198def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
199 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000200 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000201 let ResourceCycles = [3];
202}
203def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000204 let Latency = 16;
205 let NumMicroOps = 4;
206 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000207}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000208
209// Packed Compare Explicit Length Strings, Return Mask
210def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
211 let Latency = 19;
212 let NumMicroOps = 9;
213 let ResourceCycles = [4,3,1,1];
214}
215def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
216 let Latency = 25;
217 let NumMicroOps = 10;
218 let ResourceCycles = [4,3,1,1,1];
219}
220
221// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000222def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000223 let Latency = 10;
224 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000225 let ResourceCycles = [3];
226}
227def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000228 let Latency = 16;
229 let NumMicroOps = 4;
230 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000232
233// Packed Compare Explicit Length Strings, Return Index
234def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
235 let Latency = 18;
236 let NumMicroOps = 8;
237 let ResourceCycles = [4,3,1];
238}
239def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
240 let Latency = 24;
241 let NumMicroOps = 9;
242 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000243}
244
Simon Pilgrima2f26782018-03-27 20:38:54 +0000245// MOVMSK Instructions.
246def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
247def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
248def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
249
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000250// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000251def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
252 let Latency = 4;
253 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000254 let ResourceCycles = [1];
255}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
257 let Latency = 10;
258 let NumMicroOps = 2;
259 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000260}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261
262def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
263 let Latency = 8;
264 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265 let ResourceCycles = [2];
266}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000268 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000269 let NumMicroOps = 3;
270 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000272
273def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
274 let Latency = 20;
275 let NumMicroOps = 11;
276 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000278def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
279 let Latency = 25;
280 let NumMicroOps = 11;
281 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000282}
283
284// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000285def : WriteRes<WriteCLMul, [SKLPort5]> {
286 let Latency = 6;
287 let NumMicroOps = 1;
288 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000289}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000290def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
291 let Latency = 12;
292 let NumMicroOps = 2;
293 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000294}
295
296// Catch-all for expensive system instructions.
297def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
298
299// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000300defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000301defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000302defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000303defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000304defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305
306// Old microcoded instructions that nobody use.
307def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
308
309// Fence instructions.
310def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
311
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",
Craig Topperfc179c62018-03-22 04:23:41 +0000365 "VBROADCASTSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000366 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000367 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000368 "(V?)PBLENDW(Y?)rri",
Craig Topperfc179c62018-03-22 04:23:41 +0000369 "VPBROADCASTDrr",
370 "VPBROADCASTQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000371 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000372 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000373
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000374def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000375 let Latency = 1;
376 let NumMicroOps = 1;
377 let ResourceCycles = [1];
378}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000379def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000380
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000381def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000382 let Latency = 1;
383 let NumMicroOps = 1;
384 let ResourceCycles = [1];
385}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000386def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
387 "(V?)PABSD(Y?)rr",
388 "(V?)PABSW(Y?)rr",
389 "(V?)PADDSB(Y?)rr",
390 "(V?)PADDSW(Y?)rr",
391 "(V?)PADDUSB(Y?)rr",
392 "(V?)PADDUSW(Y?)rr",
393 "(V?)PAVGB(Y?)rr",
394 "(V?)PAVGW(Y?)rr",
395 "(V?)PCMPEQB(Y?)rr",
396 "(V?)PCMPEQD(Y?)rr",
397 "(V?)PCMPEQQ(Y?)rr",
398 "(V?)PCMPEQW(Y?)rr",
399 "(V?)PCMPGTB(Y?)rr",
400 "(V?)PCMPGTD(Y?)rr",
401 "(V?)PCMPGTW(Y?)rr",
402 "(V?)PMAXSB(Y?)rr",
403 "(V?)PMAXSD(Y?)rr",
404 "(V?)PMAXSW(Y?)rr",
405 "(V?)PMAXUB(Y?)rr",
406 "(V?)PMAXUD(Y?)rr",
407 "(V?)PMAXUW(Y?)rr",
408 "(V?)PMINSB(Y?)rr",
409 "(V?)PMINSD(Y?)rr",
410 "(V?)PMINSW(Y?)rr",
411 "(V?)PMINUB(Y?)rr",
412 "(V?)PMINUD(Y?)rr",
413 "(V?)PMINUW(Y?)rr",
414 "(V?)PSIGNB(Y?)rr",
415 "(V?)PSIGND(Y?)rr",
416 "(V?)PSIGNW(Y?)rr",
417 "(V?)PSLLD(Y?)ri",
418 "(V?)PSLLQ(Y?)ri",
419 "VPSLLVD(Y?)rr",
420 "VPSLLVQ(Y?)rr",
421 "(V?)PSLLW(Y?)ri",
422 "(V?)PSRAD(Y?)ri",
423 "VPSRAVD(Y?)rr",
424 "(V?)PSRAW(Y?)ri",
425 "(V?)PSRLD(Y?)ri",
426 "(V?)PSRLQ(Y?)ri",
427 "VPSRLVD(Y?)rr",
428 "VPSRLVQ(Y?)rr",
429 "(V?)PSRLW(Y?)ri",
430 "(V?)PSUBSB(Y?)rr",
431 "(V?)PSUBSW(Y?)rr",
432 "(V?)PSUBUSB(Y?)rr",
433 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000434
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000435def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000436 let Latency = 1;
437 let NumMicroOps = 1;
438 let ResourceCycles = [1];
439}
Craig Topperfc179c62018-03-22 04:23:41 +0000440def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
441 "FNOP",
442 "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000443 "MMX_PABS(B|D|W)rr",
444 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000445 "MMX_PANDNirr",
446 "MMX_PANDirr",
447 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000448 "MMX_PSIGN(B|D|W)rr",
449 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000450 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000451
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000452def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000453 let Latency = 1;
454 let NumMicroOps = 1;
455 let ResourceCycles = [1];
456}
Craig Topperfbe31322018-04-05 21:56:19 +0000457def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000458def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
459 "ADC(16|32|64)i",
460 "ADC(8|16|32|64)rr",
461 "ADCX(32|64)rr",
462 "ADOX(32|64)rr",
463 "BT(16|32|64)ri8",
464 "BT(16|32|64)rr",
465 "BTC(16|32|64)ri8",
466 "BTC(16|32|64)rr",
467 "BTR(16|32|64)ri8",
468 "BTR(16|32|64)rr",
469 "BTS(16|32|64)ri8",
470 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000471 "CLAC",
Craig Topperfc179c62018-03-22 04:23:41 +0000472 "RORX(32|64)ri",
473 "SAR(8|16|32|64)r1",
474 "SAR(8|16|32|64)ri",
475 "SARX(32|64)rr",
476 "SBB(16|32|64)ri",
477 "SBB(16|32|64)i",
478 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000479 "SHL(8|16|32|64)r1",
480 "SHL(8|16|32|64)ri",
481 "SHLX(32|64)rr",
482 "SHR(8|16|32|64)r1",
483 "SHR(8|16|32|64)ri",
484 "SHRX(32|64)rr",
485 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000486
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000487def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
488 let Latency = 1;
489 let NumMicroOps = 1;
490 let ResourceCycles = [1];
491}
Craig Topperfc179c62018-03-22 04:23:41 +0000492def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
493 "BLSI(32|64)rr",
494 "BLSMSK(32|64)rr",
495 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000496 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000497
498def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
499 let Latency = 1;
500 let NumMicroOps = 1;
501 let ResourceCycles = [1];
502}
Simon Pilgrim21935242018-04-21 14:56:56 +0000503def: InstRW<[SKLWriteResGroup9], (instregex "(V?)MOVAPD(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000504 "(V?)MOVAPS(Y?)rr",
505 "(V?)MOVDQA(Y?)rr",
506 "(V?)MOVDQU(Y?)rr",
507 "(V?)MOVPQI2QIrr",
Craig Topper15fef892018-03-25 23:40:56 +0000508 "(V?)MOVUPD(Y?)rr",
509 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000510 "(V?)MOVZPQILo2PQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000511 "(V?)PADDB(Y?)rr",
512 "(V?)PADDD(Y?)rr",
513 "(V?)PADDQ(Y?)rr",
514 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000515 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000516 "(V?)PSUBB(Y?)rr",
517 "(V?)PSUBD(Y?)rr",
518 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000519 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000520
521def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
522 let Latency = 1;
523 let NumMicroOps = 1;
524 let ResourceCycles = [1];
525}
Craig Topperfbe31322018-04-05 21:56:19 +0000526def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000527def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000528 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000529 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000530 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000531 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000532 "SGDT64m",
533 "SIDT64m",
534 "SLDT64m",
535 "SMSW16m",
536 "STC",
537 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000538 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000539
540def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000541 let Latency = 1;
542 let NumMicroOps = 2;
543 let ResourceCycles = [1,1];
544}
Craig Topperfc179c62018-03-22 04:23:41 +0000545def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
546 "MMX_MOVD64from64rm",
547 "MMX_MOVD64mr",
548 "MMX_MOVNTQmr",
549 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000550 "MOVNTI_64mr",
551 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000552 "ST_FP32m",
553 "ST_FP64m",
554 "ST_FP80m",
555 "VEXTRACTF128mr",
556 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000557 "(V?)MOVAPDYmr",
558 "(V?)MOVAPS(Y?)mr",
559 "(V?)MOVDQA(Y?)mr",
560 "(V?)MOVDQU(Y?)mr",
561 "(V?)MOVHPDmr",
562 "(V?)MOVHPSmr",
563 "(V?)MOVLPDmr",
564 "(V?)MOVLPSmr",
565 "(V?)MOVNTDQ(Y?)mr",
566 "(V?)MOVNTPD(Y?)mr",
567 "(V?)MOVNTPS(Y?)mr",
568 "(V?)MOVPDI2DImr",
569 "(V?)MOVPQI2QImr",
570 "(V?)MOVPQIto64mr",
571 "(V?)MOVSDmr",
572 "(V?)MOVSSmr",
573 "(V?)MOVUPD(Y?)mr",
574 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000575 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000576
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000577def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000578 let Latency = 2;
579 let NumMicroOps = 1;
580 let ResourceCycles = [1];
581}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000582def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000583 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000584 "(V?)MOVPDI2DIrr",
585 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000586 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000587 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000588
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000589def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000590 let Latency = 2;
591 let NumMicroOps = 2;
592 let ResourceCycles = [2];
593}
Craig Topperfc179c62018-03-22 04:23:41 +0000594def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
595 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000596 "(V?)PINSRBrr",
597 "(V?)PINSRDrr",
598 "(V?)PINSRQrr",
599 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000600
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000601def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000602 let Latency = 2;
603 let NumMicroOps = 2;
604 let ResourceCycles = [2];
605}
Craig Topperfc179c62018-03-22 04:23:41 +0000606def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
607 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000608
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000609def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000610 let Latency = 2;
611 let NumMicroOps = 2;
612 let ResourceCycles = [2];
613}
Craig Topperfc179c62018-03-22 04:23:41 +0000614def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
615 "ROL(8|16|32|64)r1",
616 "ROL(8|16|32|64)ri",
617 "ROR(8|16|32|64)r1",
618 "ROR(8|16|32|64)ri",
619 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000620
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000621def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000622 let Latency = 2;
623 let NumMicroOps = 2;
624 let ResourceCycles = [2];
625}
Craig Topperfc179c62018-03-22 04:23:41 +0000626def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
627 "BLENDVPSrr0",
628 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000629 "VBLENDVPD(Y?)rr",
630 "VBLENDVPS(Y?)rr",
631 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000632
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000633def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000634 let Latency = 2;
635 let NumMicroOps = 2;
636 let ResourceCycles = [2];
637}
Craig Topperfc179c62018-03-22 04:23:41 +0000638def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
639 "WAIT",
640 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000641
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000642def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000643 let Latency = 2;
644 let NumMicroOps = 2;
645 let ResourceCycles = [1,1];
646}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000647def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
648 "VMASKMOVPS(Y?)mr",
649 "VPMASKMOVD(Y?)mr",
650 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000651
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000652def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000653 let Latency = 2;
654 let NumMicroOps = 2;
655 let ResourceCycles = [1,1];
656}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000657def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
658 "(V?)PSLLQrr",
659 "(V?)PSLLWrr",
660 "(V?)PSRADrr",
661 "(V?)PSRAWrr",
662 "(V?)PSRLDrr",
663 "(V?)PSRLQrr",
664 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000665
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000666def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000667 let Latency = 2;
668 let NumMicroOps = 2;
669 let ResourceCycles = [1,1];
670}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000671def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000672
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000673def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000674 let Latency = 2;
675 let NumMicroOps = 2;
676 let ResourceCycles = [1,1];
677}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000678def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000679
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000680def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000681 let Latency = 2;
682 let NumMicroOps = 2;
683 let ResourceCycles = [1,1];
684}
Craig Topper498875f2018-04-04 17:54:19 +0000685def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
686
687def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
688 let Latency = 1;
689 let NumMicroOps = 1;
690 let ResourceCycles = [1];
691}
692def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000693
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000694def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000695 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000696 let NumMicroOps = 2;
697 let ResourceCycles = [1,1];
698}
Craig Topper2d451e72018-03-18 08:38:06 +0000699def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000700def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000701def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
702 "ADC8ri",
703 "SBB8i8",
704 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000705
706def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
707 let Latency = 2;
708 let NumMicroOps = 3;
709 let ResourceCycles = [1,1,1];
710}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000711def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
712 "(V?)PEXTRBmr",
713 "(V?)PEXTRDmr",
714 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000715 "(V?)PEXTRWmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000716
717def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
718 let Latency = 2;
719 let NumMicroOps = 3;
720 let ResourceCycles = [1,1,1];
721}
722def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
723
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000724def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
725 let Latency = 2;
726 let NumMicroOps = 3;
727 let ResourceCycles = [1,1,1];
728}
729def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
730
731def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
732 let Latency = 2;
733 let NumMicroOps = 3;
734 let ResourceCycles = [1,1,1];
735}
Craig Topper2d451e72018-03-18 08:38:06 +0000736def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000737def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
738 "PUSH64i8",
739 "STOSB",
740 "STOSL",
741 "STOSQ",
742 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000743
744def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
745 let Latency = 3;
746 let NumMicroOps = 1;
747 let ResourceCycles = [1];
748}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000749def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000750 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000751 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000752 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000753
Clement Courbet327fac42018-03-07 08:14:02 +0000754def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000755 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000756 let NumMicroOps = 2;
757 let ResourceCycles = [1,1];
758}
Clement Courbet327fac42018-03-07 08:14:02 +0000759def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000760
761def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
762 let Latency = 3;
763 let NumMicroOps = 1;
764 let ResourceCycles = [1];
765}
Craig Topperfc179c62018-03-22 04:23:41 +0000766def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
767 "ADD_FST0r",
768 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000769 "SUBR_FPrST0",
770 "SUBR_FST0r",
771 "SUBR_FrST0",
772 "SUB_FPrST0",
773 "SUB_FST0r",
774 "SUB_FrST0",
775 "VBROADCASTSDYrr",
776 "VBROADCASTSSYrr",
777 "VEXTRACTF128rr",
778 "VEXTRACTI128rr",
779 "VINSERTF128rr",
780 "VINSERTI128rr",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000781 "VPBROADCASTBrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000782 "VPBROADCASTDYrr",
783 "VPBROADCASTQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000784 "VPBROADCASTW(Y?)rr",
785 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000786 "VPERM2F128rr",
787 "VPERM2I128rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000788 "VPERMPDYri",
Craig Topperfc179c62018-03-22 04:23:41 +0000789 "VPERMQYri",
790 "VPMOVSXBDYrr",
791 "VPMOVSXBQYrr",
792 "VPMOVSXBWYrr",
793 "VPMOVSXDQYrr",
794 "VPMOVSXWDYrr",
795 "VPMOVSXWQYrr",
796 "VPMOVZXBDYrr",
797 "VPMOVZXBQYrr",
798 "VPMOVZXBWYrr",
799 "VPMOVZXDQYrr",
800 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000801 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000802
803def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
804 let Latency = 3;
805 let NumMicroOps = 2;
806 let ResourceCycles = [1,1];
807}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000808def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
809 "(V?)EXTRACTPSrr",
810 "(V?)PEXTRBrr",
811 "(V?)PEXTRDrr",
812 "(V?)PEXTRQrr",
813 "(V?)PEXTRWrr",
814 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000815
816def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
817 let Latency = 3;
818 let NumMicroOps = 2;
819 let ResourceCycles = [1,1];
820}
821def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
822
823def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
824 let Latency = 3;
825 let NumMicroOps = 3;
826 let ResourceCycles = [3];
827}
Craig Topperfc179c62018-03-22 04:23:41 +0000828def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
829 "ROR(8|16|32|64)rCL",
830 "SAR(8|16|32|64)rCL",
831 "SHL(8|16|32|64)rCL",
832 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000833
834def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000835 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000836 let NumMicroOps = 3;
837 let ResourceCycles = [3];
838}
Craig Topperb5f26592018-04-19 18:00:17 +0000839def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
840 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
841 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000842
843def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
844 let Latency = 3;
845 let NumMicroOps = 3;
846 let ResourceCycles = [1,2];
847}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000848def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000849
850def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
851 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000852 let NumMicroOps = 3;
853 let ResourceCycles = [2,1];
854}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000855def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
856 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000857
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000858def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
859 let Latency = 3;
860 let NumMicroOps = 3;
861 let ResourceCycles = [2,1];
862}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000863def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000864
865def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
866 let Latency = 3;
867 let NumMicroOps = 3;
868 let ResourceCycles = [2,1];
869}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000870def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
871 "(V?)PHADDW(Y?)rr",
872 "(V?)PHSUBD(Y?)rr",
873 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000874
875def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
876 let Latency = 3;
877 let NumMicroOps = 3;
878 let ResourceCycles = [2,1];
879}
Craig Topperfc179c62018-03-22 04:23:41 +0000880def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
881 "MMX_PACKSSWBirr",
882 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000883
884def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
885 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000886 let NumMicroOps = 3;
887 let ResourceCycles = [1,2];
888}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000889def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000890
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000891def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
892 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000893 let NumMicroOps = 3;
894 let ResourceCycles = [1,2];
895}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000896def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000897
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000898def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
899 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000900 let NumMicroOps = 3;
901 let ResourceCycles = [1,2];
902}
Craig Topperfc179c62018-03-22 04:23:41 +0000903def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
904 "RCL(8|16|32|64)ri",
905 "RCR(8|16|32|64)r1",
906 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000907
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000908def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
909 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000910 let NumMicroOps = 3;
911 let ResourceCycles = [1,1,1];
912}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000913def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000914
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000915def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
916 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000917 let NumMicroOps = 4;
918 let ResourceCycles = [1,1,2];
919}
Craig Topperf4cd9082018-01-19 05:47:32 +0000920def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000921
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000922def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
923 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000924 let NumMicroOps = 4;
925 let ResourceCycles = [1,1,1,1];
926}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000927def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000928
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000929def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
930 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000931 let NumMicroOps = 4;
932 let ResourceCycles = [1,1,1,1];
933}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000934def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000935
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000936def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000937 let Latency = 4;
938 let NumMicroOps = 1;
939 let ResourceCycles = [1];
940}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000941def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000942 "MMX_PMADDWDirr",
943 "MMX_PMULHRSWrr",
944 "MMX_PMULHUWirr",
945 "MMX_PMULHWirr",
946 "MMX_PMULLWirr",
947 "MMX_PMULUDQirr",
948 "MUL_FPrST0",
949 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000950 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000951
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000952def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000953 let Latency = 4;
954 let NumMicroOps = 1;
955 let ResourceCycles = [1];
956}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000957def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
958 "(V?)ADDPS(Y?)rr",
959 "(V?)ADDSDrr",
960 "(V?)ADDSSrr",
961 "(V?)ADDSUBPD(Y?)rr",
962 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000963 "(V?)CVTDQ2PS(Y?)rr",
964 "(V?)CVTPS2DQ(Y?)rr",
965 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000966 "(V?)MULPD(Y?)rr",
967 "(V?)MULPS(Y?)rr",
968 "(V?)MULSDrr",
969 "(V?)MULSSrr",
970 "(V?)PHMINPOSUWrr",
971 "(V?)PMADDUBSW(Y?)rr",
972 "(V?)PMADDWD(Y?)rr",
973 "(V?)PMULDQ(Y?)rr",
974 "(V?)PMULHRSW(Y?)rr",
975 "(V?)PMULHUW(Y?)rr",
976 "(V?)PMULHW(Y?)rr",
977 "(V?)PMULLW(Y?)rr",
978 "(V?)PMULUDQ(Y?)rr",
979 "(V?)SUBPD(Y?)rr",
980 "(V?)SUBPS(Y?)rr",
981 "(V?)SUBSDrr",
982 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000983
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000984def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000985 let Latency = 4;
986 let NumMicroOps = 2;
987 let ResourceCycles = [2];
988}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000989def: InstRW<[SKLWriteResGroup50], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000990
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000991def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000992 let Latency = 4;
993 let NumMicroOps = 2;
994 let ResourceCycles = [1,1];
995}
Craig Topperf846e2d2018-04-19 05:34:05 +0000996def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000997
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000998def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
999 let Latency = 4;
1000 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001001 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001002}
Craig Topperfc179c62018-03-22 04:23:41 +00001003def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001004
1005def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001006 let Latency = 4;
1007 let NumMicroOps = 2;
1008 let ResourceCycles = [1,1];
1009}
Craig Topperfc179c62018-03-22 04:23:41 +00001010def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1011 "VPSLLQYrr",
1012 "VPSLLWYrr",
1013 "VPSRADYrr",
1014 "VPSRAWYrr",
1015 "VPSRLDYrr",
1016 "VPSRLQYrr",
1017 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001018
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001019def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001020 let Latency = 4;
1021 let NumMicroOps = 3;
1022 let ResourceCycles = [1,1,1];
1023}
Craig Topperfc179c62018-03-22 04:23:41 +00001024def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1025 "ISTT_FP32m",
1026 "ISTT_FP64m",
1027 "IST_F16m",
1028 "IST_F32m",
1029 "IST_FP16m",
1030 "IST_FP32m",
1031 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001032
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001033def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001034 let Latency = 4;
1035 let NumMicroOps = 4;
1036 let ResourceCycles = [4];
1037}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001038def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001039
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001040def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001041 let Latency = 4;
1042 let NumMicroOps = 4;
1043 let ResourceCycles = [1,3];
1044}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001045def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001046
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001047def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001048 let Latency = 4;
1049 let NumMicroOps = 4;
1050 let ResourceCycles = [1,3];
1051}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001052def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001053
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001054def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001055 let Latency = 4;
1056 let NumMicroOps = 4;
1057 let ResourceCycles = [1,1,2];
1058}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001059def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001060
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001061def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1062 let Latency = 5;
1063 let NumMicroOps = 1;
1064 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001066def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001067 "MOVSX(16|32|64)rm32",
1068 "MOVSX(16|32|64)rm8",
1069 "MOVZX(16|32|64)rm16",
1070 "MOVZX(16|32|64)rm8",
1071 "PREFETCHNTA",
1072 "PREFETCHT0",
1073 "PREFETCHT1",
1074 "PREFETCHT2",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001075 "(V?)MOV64toPQIrm",
1076 "(V?)MOVDDUPrm",
1077 "(V?)MOVDI2PDIrm",
1078 "(V?)MOVQI2PQIrm",
1079 "(V?)MOVSDrm",
1080 "(V?)MOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001081
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001082def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001083 let Latency = 5;
1084 let NumMicroOps = 2;
1085 let ResourceCycles = [1,1];
1086}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001087def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1088 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001089
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001090def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001091 let Latency = 5;
1092 let NumMicroOps = 2;
1093 let ResourceCycles = [1,1];
1094}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001095def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001096 "MMX_CVTPS2PIirr",
1097 "MMX_CVTTPD2PIirr",
1098 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001099 "(V?)CVTPD2DQrr",
1100 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001101 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001102 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001103 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001104 "(V?)CVTSD2SSrr",
1105 "(V?)CVTSI642SDrr",
1106 "(V?)CVTSI2SDrr",
1107 "(V?)CVTSI2SSrr",
1108 "(V?)CVTSS2SDrr",
1109 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001110
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001111def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001112 let Latency = 5;
1113 let NumMicroOps = 3;
1114 let ResourceCycles = [1,1,1];
1115}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001116def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001117
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001118def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001119 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001120 let NumMicroOps = 3;
1121 let ResourceCycles = [1,1,1];
1122}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001123def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001124
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001125def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001126 let Latency = 5;
1127 let NumMicroOps = 5;
1128 let ResourceCycles = [1,4];
1129}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001130def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001131
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001132def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001133 let Latency = 5;
1134 let NumMicroOps = 5;
1135 let ResourceCycles = [2,3];
1136}
Craig Topper13a16502018-03-19 00:56:09 +00001137def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001138
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001139def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001140 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001141 let NumMicroOps = 6;
1142 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001143}
Craig Topperfc179c62018-03-22 04:23:41 +00001144def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1145 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001146
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001147def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1148 let Latency = 6;
1149 let NumMicroOps = 1;
1150 let ResourceCycles = [1];
1151}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001152def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
1153 "(V?)LDDQUrm",
1154 "(V?)MOVAPDrm",
1155 "(V?)MOVAPSrm",
1156 "(V?)MOVDQArm",
1157 "(V?)MOVDQUrm",
1158 "(V?)MOVNTDQArm",
1159 "(V?)MOVSHDUPrm",
1160 "(V?)MOVSLDUPrm",
1161 "(V?)MOVUPDrm",
1162 "(V?)MOVUPSrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001163 "VPBROADCASTDrm",
1164 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001165
1166def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001167 let Latency = 6;
1168 let NumMicroOps = 2;
1169 let ResourceCycles = [2];
1170}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001171def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001172
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001173def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001174 let Latency = 6;
1175 let NumMicroOps = 2;
1176 let ResourceCycles = [1,1];
1177}
Craig Topperfc179c62018-03-22 04:23:41 +00001178def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1179 "MMX_PADDSWirm",
1180 "MMX_PADDUSBirm",
1181 "MMX_PADDUSWirm",
1182 "MMX_PAVGBirm",
1183 "MMX_PAVGWirm",
1184 "MMX_PCMPEQBirm",
1185 "MMX_PCMPEQDirm",
1186 "MMX_PCMPEQWirm",
1187 "MMX_PCMPGTBirm",
1188 "MMX_PCMPGTDirm",
1189 "MMX_PCMPGTWirm",
1190 "MMX_PMAXSWirm",
1191 "MMX_PMAXUBirm",
1192 "MMX_PMINSWirm",
1193 "MMX_PMINUBirm",
1194 "MMX_PSLLDrm",
1195 "MMX_PSLLQrm",
1196 "MMX_PSLLWrm",
1197 "MMX_PSRADrm",
1198 "MMX_PSRAWrm",
1199 "MMX_PSRLDrm",
1200 "MMX_PSRLQrm",
1201 "MMX_PSRLWrm",
1202 "MMX_PSUBSBirm",
1203 "MMX_PSUBSWirm",
1204 "MMX_PSUBUSBirm",
1205 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001206
Craig Topper58afb4e2018-03-22 21:10:07 +00001207def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001208 let Latency = 6;
1209 let NumMicroOps = 2;
1210 let ResourceCycles = [1,1];
1211}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001212def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1213 "(V?)CVTSD2SIrr",
1214 "(V?)CVTSS2SI64rr",
1215 "(V?)CVTSS2SIrr",
1216 "(V?)CVTTSD2SI64rr",
1217 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001218
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001219def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1220 let Latency = 6;
1221 let NumMicroOps = 2;
1222 let ResourceCycles = [1,1];
1223}
Craig Topperfc179c62018-03-22 04:23:41 +00001224def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1225 "MMX_PINSRWrm",
1226 "MMX_PSHUFBrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001227 "MMX_PUNPCKHBWirm",
1228 "MMX_PUNPCKHDQirm",
1229 "MMX_PUNPCKHWDirm",
1230 "MMX_PUNPCKLBWirm",
1231 "MMX_PUNPCKLDQirm",
1232 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001233 "(V?)MOVHPDrm",
1234 "(V?)MOVHPSrm",
1235 "(V?)MOVLPDrm",
1236 "(V?)MOVLPSrm",
1237 "(V?)PINSRBrm",
1238 "(V?)PINSRDrm",
1239 "(V?)PINSRQrm",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001240 "(V?)PINSRWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001241
1242def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1243 let Latency = 6;
1244 let NumMicroOps = 2;
1245 let ResourceCycles = [1,1];
1246}
Craig Topperfc179c62018-03-22 04:23:41 +00001247def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1248 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001249
1250def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1251 let Latency = 6;
1252 let NumMicroOps = 2;
1253 let ResourceCycles = [1,1];
1254}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001255def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1256 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001257 "MMX_PANDNirm",
1258 "MMX_PANDirm",
1259 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001260 "MMX_PSIGN(B|D|W)rm",
1261 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001262 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001263
1264def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1265 let Latency = 6;
1266 let NumMicroOps = 2;
1267 let ResourceCycles = [1,1];
1268}
Craig Topperc50570f2018-04-06 17:12:18 +00001269def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001270 "RORX(32|64)mi",
1271 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001272 "SHLX(32|64)rm",
1273 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001274def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1275 ADCX32rm, ADCX64rm,
1276 ADOX32rm, ADOX64rm,
1277 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001278
1279def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1280 let Latency = 6;
1281 let NumMicroOps = 2;
1282 let ResourceCycles = [1,1];
1283}
Craig Topperfc179c62018-03-22 04:23:41 +00001284def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1285 "BLSI(32|64)rm",
1286 "BLSMSK(32|64)rm",
1287 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001288 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001289
1290def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1291 let Latency = 6;
1292 let NumMicroOps = 2;
1293 let ResourceCycles = [1,1];
1294}
Craig Topper2d451e72018-03-18 08:38:06 +00001295def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001296def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001297
1298def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001299 let Latency = 6;
1300 let NumMicroOps = 3;
1301 let ResourceCycles = [2,1];
1302}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001303def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1304 "(V?)HADDPS(Y?)rr",
1305 "(V?)HSUBPD(Y?)rr",
1306 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001307
Craig Topper58afb4e2018-03-22 21:10:07 +00001308def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001309 let Latency = 6;
1310 let NumMicroOps = 3;
1311 let ResourceCycles = [2,1];
1312}
Craig Topperfc179c62018-03-22 04:23:41 +00001313def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001314
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001315def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001316 let Latency = 6;
1317 let NumMicroOps = 4;
1318 let ResourceCycles = [1,2,1];
1319}
Craig Topperfc179c62018-03-22 04:23:41 +00001320def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1321 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001322
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001323def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001324 let Latency = 6;
1325 let NumMicroOps = 4;
1326 let ResourceCycles = [1,1,1,1];
1327}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001328def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001329
Craig Topper58afb4e2018-03-22 21:10:07 +00001330def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001331 let Latency = 6;
1332 let NumMicroOps = 4;
1333 let ResourceCycles = [1,1,1,1];
1334}
1335def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1336
1337def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1338 let Latency = 6;
1339 let NumMicroOps = 4;
1340 let ResourceCycles = [1,1,1,1];
1341}
Craig Topperfc179c62018-03-22 04:23:41 +00001342def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1343 "BTR(16|32|64)mi8",
1344 "BTS(16|32|64)mi8",
1345 "SAR(8|16|32|64)m1",
1346 "SAR(8|16|32|64)mi",
1347 "SHL(8|16|32|64)m1",
1348 "SHL(8|16|32|64)mi",
1349 "SHR(8|16|32|64)m1",
1350 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001351
1352def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1353 let Latency = 6;
1354 let NumMicroOps = 4;
1355 let ResourceCycles = [1,1,1,1];
1356}
Craig Topperf0d04262018-04-06 16:16:48 +00001357def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1358 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001359
1360def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001361 let Latency = 6;
1362 let NumMicroOps = 6;
1363 let ResourceCycles = [1,5];
1364}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001365def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001366
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001367def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1368 let Latency = 7;
1369 let NumMicroOps = 1;
1370 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001371}
Craig Topperfc179c62018-03-22 04:23:41 +00001372def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1373 "LD_F64m",
1374 "LD_F80m",
1375 "VBROADCASTF128",
1376 "VBROADCASTI128",
1377 "VBROADCASTSDYrm",
1378 "VBROADCASTSSYrm",
1379 "VLDDQUYrm",
1380 "VMOVAPDYrm",
1381 "VMOVAPSYrm",
1382 "VMOVDDUPYrm",
1383 "VMOVDQAYrm",
1384 "VMOVDQUYrm",
1385 "VMOVNTDQAYrm",
1386 "VMOVSHDUPYrm",
1387 "VMOVSLDUPYrm",
1388 "VMOVUPDYrm",
1389 "VMOVUPSYrm",
1390 "VPBROADCASTDYrm",
1391 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001392
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001393def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001394 let Latency = 7;
1395 let NumMicroOps = 2;
1396 let ResourceCycles = [1,1];
1397}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001398def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001399
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001400def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1401 let Latency = 7;
1402 let NumMicroOps = 2;
1403 let ResourceCycles = [1,1];
1404}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001405def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1406 "(V?)PACKSSDWrm",
1407 "(V?)PACKSSWBrm",
1408 "(V?)PACKUSDWrm",
1409 "(V?)PACKUSWBrm",
1410 "(V?)PALIGNRrmi",
1411 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001412 "VPBROADCASTBrm",
1413 "VPBROADCASTWrm",
1414 "VPERMILPDmi",
1415 "VPERMILPDrm",
1416 "VPERMILPSmi",
1417 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001418 "(V?)PSHUFBrm",
1419 "(V?)PSHUFDmi",
1420 "(V?)PSHUFHWmi",
1421 "(V?)PSHUFLWmi",
1422 "(V?)PUNPCKHBWrm",
1423 "(V?)PUNPCKHDQrm",
1424 "(V?)PUNPCKHQDQrm",
1425 "(V?)PUNPCKHWDrm",
1426 "(V?)PUNPCKLBWrm",
1427 "(V?)PUNPCKLDQrm",
1428 "(V?)PUNPCKLQDQrm",
1429 "(V?)PUNPCKLWDrm",
1430 "(V?)SHUFPDrmi",
1431 "(V?)SHUFPSrmi",
1432 "(V?)UNPCKHPDrm",
1433 "(V?)UNPCKHPSrm",
1434 "(V?)UNPCKLPDrm",
1435 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001436
Craig Topper58afb4e2018-03-22 21:10:07 +00001437def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001438 let Latency = 7;
1439 let NumMicroOps = 2;
1440 let ResourceCycles = [1,1];
1441}
Craig Topperfc179c62018-03-22 04:23:41 +00001442def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1443 "VCVTPD2PSYrr",
1444 "VCVTPH2PSYrr",
1445 "VCVTPS2PDYrr",
1446 "VCVTPS2PHYrr",
1447 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001448
1449def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1450 let Latency = 7;
1451 let NumMicroOps = 2;
1452 let ResourceCycles = [1,1];
1453}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001454def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1455 "(V?)PABSDrm",
1456 "(V?)PABSWrm",
1457 "(V?)PADDSBrm",
1458 "(V?)PADDSWrm",
1459 "(V?)PADDUSBrm",
1460 "(V?)PADDUSWrm",
1461 "(V?)PAVGBrm",
1462 "(V?)PAVGWrm",
1463 "(V?)PCMPEQBrm",
1464 "(V?)PCMPEQDrm",
1465 "(V?)PCMPEQQrm",
1466 "(V?)PCMPEQWrm",
1467 "(V?)PCMPGTBrm",
1468 "(V?)PCMPGTDrm",
1469 "(V?)PCMPGTWrm",
1470 "(V?)PMAXSBrm",
1471 "(V?)PMAXSDrm",
1472 "(V?)PMAXSWrm",
1473 "(V?)PMAXUBrm",
1474 "(V?)PMAXUDrm",
1475 "(V?)PMAXUWrm",
1476 "(V?)PMINSBrm",
1477 "(V?)PMINSDrm",
1478 "(V?)PMINSWrm",
1479 "(V?)PMINUBrm",
1480 "(V?)PMINUDrm",
1481 "(V?)PMINUWrm",
1482 "(V?)PSIGNBrm",
1483 "(V?)PSIGNDrm",
1484 "(V?)PSIGNWrm",
1485 "(V?)PSLLDrm",
1486 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001487 "VPSLLVDrm",
1488 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001489 "(V?)PSLLWrm",
1490 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001491 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001492 "(V?)PSRAWrm",
1493 "(V?)PSRLDrm",
1494 "(V?)PSRLQrm",
1495 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001496 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001497 "(V?)PSRLWrm",
1498 "(V?)PSUBSBrm",
1499 "(V?)PSUBSWrm",
1500 "(V?)PSUBUSBrm",
1501 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001502
1503def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1504 let Latency = 7;
1505 let NumMicroOps = 2;
1506 let ResourceCycles = [1,1];
1507}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001508def: InstRW<[SKLWriteResGroup91], (instregex "(V?)BLENDPDrmi",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001509 "(V?)BLENDPSrmi",
1510 "(V?)INSERTF128rm",
1511 "(V?)INSERTI128rm",
1512 "(V?)MASKMOVPDrm",
1513 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001514 "(V?)PADDBrm",
1515 "(V?)PADDDrm",
1516 "(V?)PADDQrm",
1517 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001518 "(V?)PBLENDDrmi",
1519 "(V?)PMASKMOVDrm",
1520 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001521 "(V?)PSUBBrm",
1522 "(V?)PSUBDrm",
1523 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001524 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001525
1526def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1527 let Latency = 7;
1528 let NumMicroOps = 3;
1529 let ResourceCycles = [2,1];
1530}
Craig Topperfc179c62018-03-22 04:23:41 +00001531def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1532 "MMX_PACKSSWBirm",
1533 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001534
1535def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1536 let Latency = 7;
1537 let NumMicroOps = 3;
1538 let ResourceCycles = [1,2];
1539}
Craig Topperf4cd9082018-01-19 05:47:32 +00001540def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001541
1542def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1543 let Latency = 7;
1544 let NumMicroOps = 3;
1545 let ResourceCycles = [1,2];
1546}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001547def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1548 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001549
Craig Topper58afb4e2018-03-22 21:10:07 +00001550def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001551 let Latency = 7;
1552 let NumMicroOps = 3;
1553 let ResourceCycles = [1,1,1];
1554}
Craig Topperfc179c62018-03-22 04:23:41 +00001555def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1556 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001557
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001558def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001559 let Latency = 7;
1560 let NumMicroOps = 3;
1561 let ResourceCycles = [1,1,1];
1562}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001563def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001564
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001565def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001566 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001567 let NumMicroOps = 3;
1568 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001569}
Craig Topperfc179c62018-03-22 04:23:41 +00001570def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1571 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001572
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001573def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1574 let Latency = 7;
1575 let NumMicroOps = 5;
1576 let ResourceCycles = [1,1,1,2];
1577}
Craig Topperfc179c62018-03-22 04:23:41 +00001578def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1579 "ROL(8|16|32|64)mi",
1580 "ROR(8|16|32|64)m1",
1581 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001582
1583def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1584 let Latency = 7;
1585 let NumMicroOps = 5;
1586 let ResourceCycles = [1,1,1,2];
1587}
Craig Topper13a16502018-03-19 00:56:09 +00001588def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001589
1590def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1591 let Latency = 7;
1592 let NumMicroOps = 5;
1593 let ResourceCycles = [1,1,1,1,1];
1594}
Craig Topperfc179c62018-03-22 04:23:41 +00001595def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1596 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001597
1598def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001599 let Latency = 7;
1600 let NumMicroOps = 7;
1601 let ResourceCycles = [1,3,1,2];
1602}
Craig Topper2d451e72018-03-18 08:38:06 +00001603def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001604
Craig Topper58afb4e2018-03-22 21:10:07 +00001605def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001606 let Latency = 8;
1607 let NumMicroOps = 2;
1608 let ResourceCycles = [2];
1609}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001610def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1611 "(V?)ROUNDPS(Y?)r",
1612 "(V?)ROUNDSDr",
1613 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001614
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001615def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001616 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001617 let NumMicroOps = 2;
1618 let ResourceCycles = [1,1];
1619}
Craig Topperfc179c62018-03-22 04:23:41 +00001620def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1621 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001622
1623def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1624 let Latency = 8;
1625 let NumMicroOps = 2;
1626 let ResourceCycles = [1,1];
1627}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001628def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1629 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001630
1631def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001632 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001633 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001634 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001635}
Craig Topperf846e2d2018-04-19 05:34:05 +00001636def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001637
Craig Topperf846e2d2018-04-19 05:34:05 +00001638def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1639 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001640 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001641 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001642}
Craig Topperfc179c62018-03-22 04:23:41 +00001643def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001644
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001645def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1646 let Latency = 8;
1647 let NumMicroOps = 2;
1648 let ResourceCycles = [1,1];
1649}
Craig Topperfc179c62018-03-22 04:23:41 +00001650def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1651 "FCOM64m",
1652 "FCOMP32m",
1653 "FCOMP64m",
1654 "MMX_PSADBWirm",
1655 "VPACKSSDWYrm",
1656 "VPACKSSWBYrm",
1657 "VPACKUSDWYrm",
1658 "VPACKUSWBYrm",
1659 "VPALIGNRYrmi",
1660 "VPBLENDWYrmi",
1661 "VPBROADCASTBYrm",
1662 "VPBROADCASTWYrm",
1663 "VPERMILPDYmi",
1664 "VPERMILPDYrm",
1665 "VPERMILPSYmi",
1666 "VPERMILPSYrm",
1667 "VPMOVSXBDYrm",
1668 "VPMOVSXBQYrm",
1669 "VPMOVSXWQYrm",
1670 "VPSHUFBYrm",
1671 "VPSHUFDYmi",
1672 "VPSHUFHWYmi",
1673 "VPSHUFLWYmi",
1674 "VPUNPCKHBWYrm",
1675 "VPUNPCKHDQYrm",
1676 "VPUNPCKHQDQYrm",
1677 "VPUNPCKHWDYrm",
1678 "VPUNPCKLBWYrm",
1679 "VPUNPCKLDQYrm",
1680 "VPUNPCKLQDQYrm",
1681 "VPUNPCKLWDYrm",
1682 "VSHUFPDYrmi",
1683 "VSHUFPSYrmi",
1684 "VUNPCKHPDYrm",
1685 "VUNPCKHPSYrm",
1686 "VUNPCKLPDYrm",
1687 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001688
1689def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1690 let Latency = 8;
1691 let NumMicroOps = 2;
1692 let ResourceCycles = [1,1];
1693}
Craig Topperfc179c62018-03-22 04:23:41 +00001694def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1695 "VPABSDYrm",
1696 "VPABSWYrm",
1697 "VPADDSBYrm",
1698 "VPADDSWYrm",
1699 "VPADDUSBYrm",
1700 "VPADDUSWYrm",
1701 "VPAVGBYrm",
1702 "VPAVGWYrm",
1703 "VPCMPEQBYrm",
1704 "VPCMPEQDYrm",
1705 "VPCMPEQQYrm",
1706 "VPCMPEQWYrm",
1707 "VPCMPGTBYrm",
1708 "VPCMPGTDYrm",
1709 "VPCMPGTWYrm",
1710 "VPMAXSBYrm",
1711 "VPMAXSDYrm",
1712 "VPMAXSWYrm",
1713 "VPMAXUBYrm",
1714 "VPMAXUDYrm",
1715 "VPMAXUWYrm",
1716 "VPMINSBYrm",
1717 "VPMINSDYrm",
1718 "VPMINSWYrm",
1719 "VPMINUBYrm",
1720 "VPMINUDYrm",
1721 "VPMINUWYrm",
1722 "VPSIGNBYrm",
1723 "VPSIGNDYrm",
1724 "VPSIGNWYrm",
1725 "VPSLLDYrm",
1726 "VPSLLQYrm",
1727 "VPSLLVDYrm",
1728 "VPSLLVQYrm",
1729 "VPSLLWYrm",
1730 "VPSRADYrm",
1731 "VPSRAVDYrm",
1732 "VPSRAWYrm",
1733 "VPSRLDYrm",
1734 "VPSRLQYrm",
1735 "VPSRLVDYrm",
1736 "VPSRLVQYrm",
1737 "VPSRLWYrm",
1738 "VPSUBSBYrm",
1739 "VPSUBSWYrm",
1740 "VPSUBUSBYrm",
1741 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001742
1743def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1744 let Latency = 8;
1745 let NumMicroOps = 2;
1746 let ResourceCycles = [1,1];
1747}
Craig Topperfc179c62018-03-22 04:23:41 +00001748def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1749 "VANDNPSYrm",
1750 "VANDPDYrm",
1751 "VANDPSYrm",
1752 "VBLENDPDYrmi",
1753 "VBLENDPSYrmi",
1754 "VMASKMOVPDYrm",
1755 "VMASKMOVPSYrm",
1756 "VORPDYrm",
1757 "VORPSYrm",
1758 "VPADDBYrm",
1759 "VPADDDYrm",
1760 "VPADDQYrm",
1761 "VPADDWYrm",
1762 "VPANDNYrm",
1763 "VPANDYrm",
1764 "VPBLENDDYrmi",
1765 "VPMASKMOVDYrm",
1766 "VPMASKMOVQYrm",
1767 "VPORYrm",
1768 "VPSUBBYrm",
1769 "VPSUBDYrm",
1770 "VPSUBQYrm",
1771 "VPSUBWYrm",
1772 "VPXORYrm",
1773 "VXORPDYrm",
1774 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001775
1776def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001777 let Latency = 8;
1778 let NumMicroOps = 3;
1779 let ResourceCycles = [1,2];
1780}
Craig Topperfc179c62018-03-22 04:23:41 +00001781def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
1782 "BLENDVPSrm0",
1783 "PBLENDVBrm0",
1784 "VBLENDVPDrm",
1785 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001786 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001787
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001788def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1789 let Latency = 8;
1790 let NumMicroOps = 4;
1791 let ResourceCycles = [1,2,1];
1792}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001793def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001794
1795def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1796 let Latency = 8;
1797 let NumMicroOps = 4;
1798 let ResourceCycles = [2,1,1];
1799}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001800def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001801
Craig Topper58afb4e2018-03-22 21:10:07 +00001802def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001803 let Latency = 8;
1804 let NumMicroOps = 4;
1805 let ResourceCycles = [1,1,1,1];
1806}
1807def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1808
1809def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1810 let Latency = 8;
1811 let NumMicroOps = 5;
1812 let ResourceCycles = [1,1,3];
1813}
Craig Topper13a16502018-03-19 00:56:09 +00001814def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001815
1816def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1817 let Latency = 8;
1818 let NumMicroOps = 5;
1819 let ResourceCycles = [1,1,1,2];
1820}
Craig Topperfc179c62018-03-22 04:23:41 +00001821def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1822 "RCL(8|16|32|64)mi",
1823 "RCR(8|16|32|64)m1",
1824 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001825
1826def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1827 let Latency = 8;
1828 let NumMicroOps = 6;
1829 let ResourceCycles = [1,1,1,3];
1830}
Craig Topperfc179c62018-03-22 04:23:41 +00001831def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1832 "SAR(8|16|32|64)mCL",
1833 "SHL(8|16|32|64)mCL",
1834 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001835
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001836def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1837 let Latency = 8;
1838 let NumMicroOps = 6;
1839 let ResourceCycles = [1,1,1,2,1];
1840}
Craig Topper9f834812018-04-01 21:54:24 +00001841def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001842 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001843 "SBB(8|16|32|64)mi")>;
1844def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1845 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001846
1847def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1848 let Latency = 9;
1849 let NumMicroOps = 2;
1850 let ResourceCycles = [1,1];
1851}
Craig Topperfc179c62018-03-22 04:23:41 +00001852def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1853 "MMX_PMADDUBSWrm",
1854 "MMX_PMADDWDirm",
1855 "MMX_PMULHRSWrm",
1856 "MMX_PMULHUWirm",
1857 "MMX_PMULHWirm",
1858 "MMX_PMULLWirm",
1859 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001860 "(V?)RCPSSm",
1861 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001862 "VTESTPDYrm",
1863 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001864
1865def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1866 let Latency = 9;
1867 let NumMicroOps = 2;
1868 let ResourceCycles = [1,1];
1869}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001870def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001871 "VPMOVSXBWYrm",
1872 "VPMOVSXDQYrm",
1873 "VPMOVSXWDYrm",
1874 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001875 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001876
1877def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1878 let Latency = 9;
1879 let NumMicroOps = 2;
1880 let ResourceCycles = [1,1];
1881}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001882def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1883 "(V?)ADDSSrm",
1884 "(V?)CMPSDrm",
1885 "(V?)CMPSSrm",
1886 "(V?)MAX(C?)SDrm",
1887 "(V?)MAX(C?)SSrm",
1888 "(V?)MIN(C?)SDrm",
1889 "(V?)MIN(C?)SSrm",
1890 "(V?)MULSDrm",
1891 "(V?)MULSSrm",
1892 "(V?)SUBSDrm",
1893 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001894def: InstRW<[SKLWriteResGroup122],
1895 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001896
Craig Topper58afb4e2018-03-22 21:10:07 +00001897def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001898 let Latency = 9;
1899 let NumMicroOps = 2;
1900 let ResourceCycles = [1,1];
1901}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001902def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001903 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001904 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001905 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001906
Craig Topper58afb4e2018-03-22 21:10:07 +00001907def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001908 let Latency = 9;
1909 let NumMicroOps = 3;
1910 let ResourceCycles = [1,2];
1911}
Craig Topperfc179c62018-03-22 04:23:41 +00001912def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001913
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001914def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1915 let Latency = 9;
1916 let NumMicroOps = 3;
1917 let ResourceCycles = [1,2];
1918}
Craig Topperfc179c62018-03-22 04:23:41 +00001919def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1920 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001921
1922def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1923 let Latency = 9;
1924 let NumMicroOps = 3;
1925 let ResourceCycles = [1,1,1];
1926}
Craig Topperfc179c62018-03-22 04:23:41 +00001927def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001928
1929def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1930 let Latency = 9;
1931 let NumMicroOps = 3;
1932 let ResourceCycles = [1,1,1];
1933}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001934def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001935
1936def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001937 let Latency = 9;
1938 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001939 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001940}
Craig Topperfc179c62018-03-22 04:23:41 +00001941def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1942 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001943
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001944def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1945 let Latency = 9;
1946 let NumMicroOps = 4;
1947 let ResourceCycles = [2,1,1];
1948}
Craig Topperfc179c62018-03-22 04:23:41 +00001949def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1950 "(V?)PHADDWrm",
1951 "(V?)PHSUBDrm",
1952 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001953
1954def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1955 let Latency = 9;
1956 let NumMicroOps = 4;
1957 let ResourceCycles = [1,1,1,1];
1958}
Craig Topperfc179c62018-03-22 04:23:41 +00001959def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1960 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001961
1962def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1963 let Latency = 9;
1964 let NumMicroOps = 5;
1965 let ResourceCycles = [1,2,1,1];
1966}
Craig Topperfc179c62018-03-22 04:23:41 +00001967def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1968 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001969
1970def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1971 let Latency = 10;
1972 let NumMicroOps = 2;
1973 let ResourceCycles = [1,1];
1974}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001975def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001976 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001977
1978def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1979 let Latency = 10;
1980 let NumMicroOps = 2;
1981 let ResourceCycles = [1,1];
1982}
Craig Topperfc179c62018-03-22 04:23:41 +00001983def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1984 "ADD_F64m",
1985 "ILD_F16m",
1986 "ILD_F32m",
1987 "ILD_F64m",
1988 "SUBR_F32m",
1989 "SUBR_F64m",
1990 "SUB_F32m",
1991 "SUB_F64m",
1992 "VPCMPGTQYrm",
1993 "VPERM2F128rm",
1994 "VPERM2I128rm",
1995 "VPERMDYrm",
1996 "VPERMPDYmi",
1997 "VPERMPSYrm",
1998 "VPERMQYmi",
1999 "VPMOVZXBDYrm",
2000 "VPMOVZXBQYrm",
2001 "VPMOVZXBWYrm",
2002 "VPMOVZXDQYrm",
2003 "VPMOVZXWQYrm",
2004 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002005
2006def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2007 let Latency = 10;
2008 let NumMicroOps = 2;
2009 let ResourceCycles = [1,1];
2010}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002011def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
2012 "(V?)ADDPSrm",
2013 "(V?)ADDSUBPDrm",
2014 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002015 "(V?)CVTDQ2PSrm",
2016 "(V?)CVTPH2PSYrm",
2017 "(V?)CVTPS2DQrm",
2018 "(V?)CVTSS2SDrm",
2019 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002020 "(V?)MULPDrm",
2021 "(V?)MULPSrm",
2022 "(V?)PHMINPOSUWrm",
2023 "(V?)PMADDUBSWrm",
2024 "(V?)PMADDWDrm",
2025 "(V?)PMULDQrm",
2026 "(V?)PMULHRSWrm",
2027 "(V?)PMULHUWrm",
2028 "(V?)PMULHWrm",
2029 "(V?)PMULLWrm",
2030 "(V?)PMULUDQrm",
2031 "(V?)SUBPDrm",
2032 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00002033def: InstRW<[SKLWriteResGroup134],
2034 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002035
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002036def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2037 let Latency = 10;
2038 let NumMicroOps = 3;
2039 let ResourceCycles = [2,1];
2040}
Craig Topperfc179c62018-03-22 04:23:41 +00002041def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002042
2043def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2044 let Latency = 10;
2045 let NumMicroOps = 3;
2046 let ResourceCycles = [1,1,1];
2047}
Craig Topperfc179c62018-03-22 04:23:41 +00002048def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2049 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002050
Craig Topper58afb4e2018-03-22 21:10:07 +00002051def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002052 let Latency = 10;
2053 let NumMicroOps = 3;
2054 let ResourceCycles = [1,1,1];
2055}
Craig Topperfc179c62018-03-22 04:23:41 +00002056def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002057
2058def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002059 let Latency = 10;
2060 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002061 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002062}
Craig Topperfc179c62018-03-22 04:23:41 +00002063def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2064 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002065
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002066def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2067 let Latency = 10;
2068 let NumMicroOps = 4;
2069 let ResourceCycles = [2,1,1];
2070}
Craig Topperfc179c62018-03-22 04:23:41 +00002071def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2072 "VPHADDWYrm",
2073 "VPHSUBDYrm",
2074 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002075
2076def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002077 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002078 let NumMicroOps = 4;
2079 let ResourceCycles = [1,1,1,1];
2080}
Craig Topperf846e2d2018-04-19 05:34:05 +00002081def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002082
2083def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2084 let Latency = 10;
2085 let NumMicroOps = 8;
2086 let ResourceCycles = [1,1,1,1,1,3];
2087}
Craig Topper13a16502018-03-19 00:56:09 +00002088def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002089
2090def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002091 let Latency = 10;
2092 let NumMicroOps = 10;
2093 let ResourceCycles = [9,1];
2094}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002095def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002096
Craig Topper8104f262018-04-02 05:33:28 +00002097def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002098 let Latency = 11;
2099 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002100 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002101}
Craig Topper8104f262018-04-02 05:33:28 +00002102def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002103 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002104
Craig Topper8104f262018-04-02 05:33:28 +00002105def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2106 let Latency = 11;
2107 let NumMicroOps = 1;
2108 let ResourceCycles = [1,5];
2109}
2110def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
2111
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002112def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002113 let Latency = 11;
2114 let NumMicroOps = 2;
2115 let ResourceCycles = [1,1];
2116}
Craig Topperfc179c62018-03-22 04:23:41 +00002117def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2118 "MUL_F64m",
2119 "VRCPPSYm",
2120 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002121
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002122def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2123 let Latency = 11;
2124 let NumMicroOps = 2;
2125 let ResourceCycles = [1,1];
2126}
Craig Topperfc179c62018-03-22 04:23:41 +00002127def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2128 "VADDPSYrm",
2129 "VADDSUBPDYrm",
2130 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002131 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002132 "VCMPPSYrmi",
2133 "VCVTDQ2PSYrm",
2134 "VCVTPS2DQYrm",
2135 "VCVTPS2PDYrm",
2136 "VCVTTPS2DQYrm",
2137 "VMAX(C?)PDYrm",
2138 "VMAX(C?)PSYrm",
2139 "VMIN(C?)PDYrm",
2140 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002141 "VMULPDYrm",
2142 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002143 "VPMADDUBSWYrm",
2144 "VPMADDWDYrm",
2145 "VPMULDQYrm",
2146 "VPMULHRSWYrm",
2147 "VPMULHUWYrm",
2148 "VPMULHWYrm",
2149 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002150 "VPMULUDQYrm",
2151 "VSUBPDYrm",
2152 "VSUBPSYrm")>;
2153def: InstRW<[SKLWriteResGroup147],
2154 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002155
2156def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2157 let Latency = 11;
2158 let NumMicroOps = 3;
2159 let ResourceCycles = [2,1];
2160}
Craig Topperfc179c62018-03-22 04:23:41 +00002161def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2162 "FICOM32m",
2163 "FICOMP16m",
2164 "FICOMP32m",
2165 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002166
2167def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2168 let Latency = 11;
2169 let NumMicroOps = 3;
2170 let ResourceCycles = [1,1,1];
2171}
Craig Topperfc179c62018-03-22 04:23:41 +00002172def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002173
Craig Topper58afb4e2018-03-22 21:10:07 +00002174def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002175 let Latency = 11;
2176 let NumMicroOps = 3;
2177 let ResourceCycles = [1,1,1];
2178}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002179def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2180 "(V?)CVTSD2SIrm",
2181 "(V?)CVTSS2SI64rm",
2182 "(V?)CVTSS2SIrm",
2183 "(V?)CVTTSD2SI64rm",
2184 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002185 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002186 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002187
Craig Topper58afb4e2018-03-22 21:10:07 +00002188def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002189 let Latency = 11;
2190 let NumMicroOps = 3;
2191 let ResourceCycles = [1,1,1];
2192}
Craig Topperfc179c62018-03-22 04:23:41 +00002193def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2194 "CVTPD2PSrm",
2195 "CVTTPD2DQrm",
2196 "MMX_CVTPD2PIirm",
2197 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002198
2199def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2200 let Latency = 11;
2201 let NumMicroOps = 6;
2202 let ResourceCycles = [1,1,1,2,1];
2203}
Craig Topperfc179c62018-03-22 04:23:41 +00002204def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2205 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002206
2207def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002208 let Latency = 11;
2209 let NumMicroOps = 7;
2210 let ResourceCycles = [2,3,2];
2211}
Craig Topperfc179c62018-03-22 04:23:41 +00002212def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2213 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002214
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002215def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002216 let Latency = 11;
2217 let NumMicroOps = 9;
2218 let ResourceCycles = [1,5,1,2];
2219}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002220def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002221
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002222def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002223 let Latency = 11;
2224 let NumMicroOps = 11;
2225 let ResourceCycles = [2,9];
2226}
Craig Topperfc179c62018-03-22 04:23:41 +00002227def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002228
Craig Topper8104f262018-04-02 05:33:28 +00002229def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002230 let Latency = 12;
2231 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002232 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002233}
Craig Topper8104f262018-04-02 05:33:28 +00002234def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002235 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002236
Craig Topper8104f262018-04-02 05:33:28 +00002237def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2238 let Latency = 12;
2239 let NumMicroOps = 1;
2240 let ResourceCycles = [1,6];
2241}
2242def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2243
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002244def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2245 let Latency = 12;
2246 let NumMicroOps = 4;
2247 let ResourceCycles = [2,1,1];
2248}
Craig Topperfc179c62018-03-22 04:23:41 +00002249def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2250 "(V?)HADDPSrm",
2251 "(V?)HSUBPDrm",
2252 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002253
Craig Topper58afb4e2018-03-22 21:10:07 +00002254def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002255 let Latency = 12;
2256 let NumMicroOps = 4;
2257 let ResourceCycles = [1,1,1,1];
2258}
2259def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2260
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002261def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002262 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002263 let NumMicroOps = 3;
2264 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002265}
Craig Topperfc179c62018-03-22 04:23:41 +00002266def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2267 "ADD_FI32m",
2268 "SUBR_FI16m",
2269 "SUBR_FI32m",
2270 "SUB_FI16m",
2271 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002272
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002273def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2274 let Latency = 13;
2275 let NumMicroOps = 3;
2276 let ResourceCycles = [1,1,1];
2277}
2278def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2279
Craig Topper58afb4e2018-03-22 21:10:07 +00002280def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002281 let Latency = 13;
2282 let NumMicroOps = 4;
2283 let ResourceCycles = [1,3];
2284}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002285def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002286
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002287def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002288 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002289 let NumMicroOps = 4;
2290 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002291}
Craig Topperfc179c62018-03-22 04:23:41 +00002292def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2293 "VHADDPSYrm",
2294 "VHSUBPDYrm",
2295 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002296
Craig Topper8104f262018-04-02 05:33:28 +00002297def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002298 let Latency = 14;
2299 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002300 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002301}
Craig Topper8104f262018-04-02 05:33:28 +00002302def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002303 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002304
Craig Topper8104f262018-04-02 05:33:28 +00002305def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2306 let Latency = 14;
2307 let NumMicroOps = 1;
2308 let ResourceCycles = [1,5];
2309}
2310def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2311
Craig Topper58afb4e2018-03-22 21:10:07 +00002312def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002313 let Latency = 14;
2314 let NumMicroOps = 3;
2315 let ResourceCycles = [1,2];
2316}
Craig Topperfc179c62018-03-22 04:23:41 +00002317def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2318def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2319def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2320def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002321
2322def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2323 let Latency = 14;
2324 let NumMicroOps = 3;
2325 let ResourceCycles = [1,1,1];
2326}
Craig Topperfc179c62018-03-22 04:23:41 +00002327def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2328 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002329
2330def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002331 let Latency = 14;
2332 let NumMicroOps = 10;
2333 let ResourceCycles = [2,4,1,3];
2334}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002335def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002336
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002337def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002338 let Latency = 15;
2339 let NumMicroOps = 1;
2340 let ResourceCycles = [1];
2341}
Craig Topperfc179c62018-03-22 04:23:41 +00002342def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2343 "DIVR_FST0r",
2344 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002345
Craig Topper58afb4e2018-03-22 21:10:07 +00002346def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002347 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002348 let NumMicroOps = 3;
2349 let ResourceCycles = [1,2];
2350}
Craig Topper40d3b322018-03-22 21:55:20 +00002351def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2352 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002353
Craig Topperd25f1ac2018-03-20 23:39:48 +00002354def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2355 let Latency = 17;
2356 let NumMicroOps = 3;
2357 let ResourceCycles = [1,2];
2358}
2359def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2360
Craig Topper58afb4e2018-03-22 21:10:07 +00002361def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002362 let Latency = 15;
2363 let NumMicroOps = 4;
2364 let ResourceCycles = [1,1,2];
2365}
Craig Topperfc179c62018-03-22 04:23:41 +00002366def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002367
2368def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2369 let Latency = 15;
2370 let NumMicroOps = 10;
2371 let ResourceCycles = [1,1,1,5,1,1];
2372}
Craig Topper13a16502018-03-19 00:56:09 +00002373def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002374
Craig Topper8104f262018-04-02 05:33:28 +00002375def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002376 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002377 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002378 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002379}
Craig Topperfc179c62018-03-22 04:23:41 +00002380def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002381
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002382def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2383 let Latency = 16;
2384 let NumMicroOps = 14;
2385 let ResourceCycles = [1,1,1,4,2,5];
2386}
2387def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2388
2389def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002390 let Latency = 16;
2391 let NumMicroOps = 16;
2392 let ResourceCycles = [16];
2393}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002394def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002395
Craig Topper8104f262018-04-02 05:33:28 +00002396def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002397 let Latency = 17;
2398 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002399 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002400}
Craig Topper8104f262018-04-02 05:33:28 +00002401def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2402
2403def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2404 let Latency = 17;
2405 let NumMicroOps = 2;
2406 let ResourceCycles = [1,1,3];
2407}
2408def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002409
2410def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002411 let Latency = 17;
2412 let NumMicroOps = 15;
2413 let ResourceCycles = [2,1,2,4,2,4];
2414}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002415def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002416
Craig Topper8104f262018-04-02 05:33:28 +00002417def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002418 let Latency = 18;
2419 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002420 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002421}
Craig Topper8104f262018-04-02 05:33:28 +00002422def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002423 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002424
Craig Topper8104f262018-04-02 05:33:28 +00002425def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2426 let Latency = 18;
2427 let NumMicroOps = 1;
2428 let ResourceCycles = [1,12];
2429}
2430def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2431
2432def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002433 let Latency = 18;
2434 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002435 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002436}
Craig Topper8104f262018-04-02 05:33:28 +00002437def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2438
2439def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2440 let Latency = 18;
2441 let NumMicroOps = 2;
2442 let ResourceCycles = [1,1,3];
2443}
2444def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002445
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002446def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002447 let Latency = 18;
2448 let NumMicroOps = 8;
2449 let ResourceCycles = [1,1,1,5];
2450}
Craig Topperfc179c62018-03-22 04:23:41 +00002451def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002452
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002453def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002454 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002455 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002456 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002457}
Craig Topper13a16502018-03-19 00:56:09 +00002458def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002459
Craig Topper8104f262018-04-02 05:33:28 +00002460def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002461 let Latency = 19;
2462 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002463 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002464}
Craig Topper8104f262018-04-02 05:33:28 +00002465def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2466
2467def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2468 let Latency = 19;
2469 let NumMicroOps = 2;
2470 let ResourceCycles = [1,1,6];
2471}
2472def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002473
Craig Topper58afb4e2018-03-22 21:10:07 +00002474def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002475 let Latency = 19;
2476 let NumMicroOps = 5;
2477 let ResourceCycles = [1,1,3];
2478}
Craig Topperfc179c62018-03-22 04:23:41 +00002479def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002480
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002481def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002482 let Latency = 20;
2483 let NumMicroOps = 1;
2484 let ResourceCycles = [1];
2485}
Craig Topperfc179c62018-03-22 04:23:41 +00002486def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2487 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002488 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002489
Craig Topper8104f262018-04-02 05:33:28 +00002490def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002491 let Latency = 20;
2492 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002493 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002494}
Craig Topperfc179c62018-03-22 04:23:41 +00002495def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002496
Craig Topper58afb4e2018-03-22 21:10:07 +00002497def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002498 let Latency = 20;
2499 let NumMicroOps = 5;
2500 let ResourceCycles = [1,1,3];
2501}
2502def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2503
2504def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2505 let Latency = 20;
2506 let NumMicroOps = 8;
2507 let ResourceCycles = [1,1,1,1,1,1,2];
2508}
Craig Topperfc179c62018-03-22 04:23:41 +00002509def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2510 "INSL",
2511 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002512
2513def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002514 let Latency = 20;
2515 let NumMicroOps = 10;
2516 let ResourceCycles = [1,2,7];
2517}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002518def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002519
Craig Topper8104f262018-04-02 05:33:28 +00002520def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002521 let Latency = 21;
2522 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002523 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002524}
2525def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2526
2527def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2528 let Latency = 22;
2529 let NumMicroOps = 2;
2530 let ResourceCycles = [1,1];
2531}
Craig Topperfc179c62018-03-22 04:23:41 +00002532def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2533 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002534
2535def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2536 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002537 let NumMicroOps = 5;
2538 let ResourceCycles = [1,2,1,1];
2539}
Craig Topper17a31182017-12-16 18:35:29 +00002540def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2541 VGATHERDPDrm,
2542 VGATHERQPDrm,
2543 VGATHERQPSrm,
2544 VPGATHERDDrm,
2545 VPGATHERDQrm,
2546 VPGATHERQDrm,
2547 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002548
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002549def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2550 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002551 let NumMicroOps = 5;
2552 let ResourceCycles = [1,2,1,1];
2553}
Craig Topper17a31182017-12-16 18:35:29 +00002554def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2555 VGATHERQPDYrm,
2556 VGATHERQPSYrm,
2557 VPGATHERDDYrm,
2558 VPGATHERDQYrm,
2559 VPGATHERQDYrm,
2560 VPGATHERQQYrm,
2561 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002562
Craig Topper8104f262018-04-02 05:33:28 +00002563def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002564 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002565 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002566 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002567}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002568def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002569
2570def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2571 let Latency = 23;
2572 let NumMicroOps = 19;
2573 let ResourceCycles = [2,1,4,1,1,4,6];
2574}
2575def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2576
Craig Topper8104f262018-04-02 05:33:28 +00002577def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002578 let Latency = 24;
2579 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002580 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002581}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002582def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002583
Craig Topper8104f262018-04-02 05:33:28 +00002584def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002585 let Latency = 25;
2586 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002587 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002588}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002589def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002590
2591def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2592 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002593 let NumMicroOps = 3;
2594 let ResourceCycles = [1,1,1];
2595}
Craig Topperfc179c62018-03-22 04:23:41 +00002596def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2597 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002598
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002599def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2600 let Latency = 27;
2601 let NumMicroOps = 2;
2602 let ResourceCycles = [1,1];
2603}
Craig Topperfc179c62018-03-22 04:23:41 +00002604def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2605 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002606
2607def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2608 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002609 let NumMicroOps = 8;
2610 let ResourceCycles = [2,4,1,1];
2611}
Craig Topper13a16502018-03-19 00:56:09 +00002612def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002613
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002614def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002615 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002616 let NumMicroOps = 3;
2617 let ResourceCycles = [1,1,1];
2618}
Craig Topperfc179c62018-03-22 04:23:41 +00002619def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2620 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002621
2622def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2623 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002624 let NumMicroOps = 23;
2625 let ResourceCycles = [1,5,3,4,10];
2626}
Craig Topperfc179c62018-03-22 04:23:41 +00002627def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2628 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002629
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002630def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2631 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002632 let NumMicroOps = 23;
2633 let ResourceCycles = [1,5,2,1,4,10];
2634}
Craig Topperfc179c62018-03-22 04:23:41 +00002635def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2636 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002637
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002638def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2639 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002640 let NumMicroOps = 31;
2641 let ResourceCycles = [1,8,1,21];
2642}
Craig Topper391c6f92017-12-10 01:24:08 +00002643def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002644
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002645def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2646 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002647 let NumMicroOps = 18;
2648 let ResourceCycles = [1,1,2,3,1,1,1,8];
2649}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002650def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002651
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002652def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2653 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002654 let NumMicroOps = 39;
2655 let ResourceCycles = [1,10,1,1,26];
2656}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002657def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002658
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002659def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002660 let Latency = 42;
2661 let NumMicroOps = 22;
2662 let ResourceCycles = [2,20];
2663}
Craig Topper2d451e72018-03-18 08:38:06 +00002664def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002665
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002666def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2667 let Latency = 42;
2668 let NumMicroOps = 40;
2669 let ResourceCycles = [1,11,1,1,26];
2670}
Craig Topper391c6f92017-12-10 01:24:08 +00002671def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002672
2673def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2674 let Latency = 46;
2675 let NumMicroOps = 44;
2676 let ResourceCycles = [1,11,1,1,30];
2677}
2678def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2679
2680def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2681 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002682 let NumMicroOps = 64;
2683 let ResourceCycles = [2,8,5,10,39];
2684}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002685def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002686
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002687def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2688 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002689 let NumMicroOps = 88;
2690 let ResourceCycles = [4,4,31,1,2,1,45];
2691}
Craig Topper2d451e72018-03-18 08:38:06 +00002692def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002693
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002694def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2695 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002696 let NumMicroOps = 90;
2697 let ResourceCycles = [4,2,33,1,2,1,47];
2698}
Craig Topper2d451e72018-03-18 08:38:06 +00002699def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002700
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002701def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002702 let Latency = 75;
2703 let NumMicroOps = 15;
2704 let ResourceCycles = [6,3,6];
2705}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002706def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002707
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002708def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002709 let Latency = 76;
2710 let NumMicroOps = 32;
2711 let ResourceCycles = [7,2,8,3,1,11];
2712}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002713def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002714
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002715def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002716 let Latency = 102;
2717 let NumMicroOps = 66;
2718 let ResourceCycles = [4,2,4,8,14,34];
2719}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002720def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002721
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002722def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2723 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002724 let NumMicroOps = 100;
2725 let ResourceCycles = [9,1,11,16,1,11,21,30];
2726}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002727def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002728
2729} // SchedModel