blob: 0baf0f7da110559997cc9ca9e7e00251f08d1fd2 [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?)PACKSSDW(Y?)rr",
369 "(V?)PACKSSWB(Y?)rr",
370 "(V?)PACKUSDW(Y?)rr",
371 "(V?)PACKUSWB(Y?)rr",
372 "(V?)PALIGNR(Y?)rri",
373 "(V?)PBLENDW(Y?)rri",
Craig Topperfc179c62018-03-22 04:23:41 +0000374 "VPBROADCASTDrr",
375 "VPBROADCASTQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000376 "(V?)PMOVSXBDrr",
377 "(V?)PMOVSXBQrr",
378 "(V?)PMOVSXBWrr",
379 "(V?)PMOVSXDQrr",
380 "(V?)PMOVSXWDrr",
381 "(V?)PMOVSXWQrr",
382 "(V?)PMOVZXBDrr",
383 "(V?)PMOVZXBQrr",
384 "(V?)PMOVZXBWrr",
385 "(V?)PMOVZXDQrr",
386 "(V?)PMOVZXWDrr",
387 "(V?)PMOVZXWQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000388 "(V?)PSHUFD(Y?)ri",
389 "(V?)PSHUFHW(Y?)ri",
390 "(V?)PSHUFLW(Y?)ri",
391 "(V?)PSLLDQ(Y?)ri",
392 "(V?)PSRLDQ(Y?)ri",
393 "(V?)PUNPCKHBW(Y?)rr",
394 "(V?)PUNPCKHDQ(Y?)rr",
395 "(V?)PUNPCKHQDQ(Y?)rr",
396 "(V?)PUNPCKHWD(Y?)rr",
397 "(V?)PUNPCKLBW(Y?)rr",
398 "(V?)PUNPCKLDQ(Y?)rr",
399 "(V?)PUNPCKLQDQ(Y?)rr",
Simon Pilgrim21935242018-04-21 14:56:56 +0000400 "(V?)PUNPCKLWD(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000401
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000402def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000403 let Latency = 1;
404 let NumMicroOps = 1;
405 let ResourceCycles = [1];
406}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000407def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000408
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000409def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000410 let Latency = 1;
411 let NumMicroOps = 1;
412 let ResourceCycles = [1];
413}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000414def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
415 "(V?)PABSD(Y?)rr",
416 "(V?)PABSW(Y?)rr",
417 "(V?)PADDSB(Y?)rr",
418 "(V?)PADDSW(Y?)rr",
419 "(V?)PADDUSB(Y?)rr",
420 "(V?)PADDUSW(Y?)rr",
421 "(V?)PAVGB(Y?)rr",
422 "(V?)PAVGW(Y?)rr",
423 "(V?)PCMPEQB(Y?)rr",
424 "(V?)PCMPEQD(Y?)rr",
425 "(V?)PCMPEQQ(Y?)rr",
426 "(V?)PCMPEQW(Y?)rr",
427 "(V?)PCMPGTB(Y?)rr",
428 "(V?)PCMPGTD(Y?)rr",
429 "(V?)PCMPGTW(Y?)rr",
430 "(V?)PMAXSB(Y?)rr",
431 "(V?)PMAXSD(Y?)rr",
432 "(V?)PMAXSW(Y?)rr",
433 "(V?)PMAXUB(Y?)rr",
434 "(V?)PMAXUD(Y?)rr",
435 "(V?)PMAXUW(Y?)rr",
436 "(V?)PMINSB(Y?)rr",
437 "(V?)PMINSD(Y?)rr",
438 "(V?)PMINSW(Y?)rr",
439 "(V?)PMINUB(Y?)rr",
440 "(V?)PMINUD(Y?)rr",
441 "(V?)PMINUW(Y?)rr",
442 "(V?)PSIGNB(Y?)rr",
443 "(V?)PSIGND(Y?)rr",
444 "(V?)PSIGNW(Y?)rr",
445 "(V?)PSLLD(Y?)ri",
446 "(V?)PSLLQ(Y?)ri",
447 "VPSLLVD(Y?)rr",
448 "VPSLLVQ(Y?)rr",
449 "(V?)PSLLW(Y?)ri",
450 "(V?)PSRAD(Y?)ri",
451 "VPSRAVD(Y?)rr",
452 "(V?)PSRAW(Y?)ri",
453 "(V?)PSRLD(Y?)ri",
454 "(V?)PSRLQ(Y?)ri",
455 "VPSRLVD(Y?)rr",
456 "VPSRLVQ(Y?)rr",
457 "(V?)PSRLW(Y?)ri",
458 "(V?)PSUBSB(Y?)rr",
459 "(V?)PSUBSW(Y?)rr",
460 "(V?)PSUBUSB(Y?)rr",
461 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000462
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000463def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000464 let Latency = 1;
465 let NumMicroOps = 1;
466 let ResourceCycles = [1];
467}
Craig Topperfc179c62018-03-22 04:23:41 +0000468def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
469 "FNOP",
470 "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000471 "MMX_PABS(B|D|W)rr",
472 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000473 "MMX_PANDNirr",
474 "MMX_PANDirr",
475 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000476 "MMX_PSIGN(B|D|W)rr",
477 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000478 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000479
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000480def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000481 let Latency = 1;
482 let NumMicroOps = 1;
483 let ResourceCycles = [1];
484}
Craig Topperfbe31322018-04-05 21:56:19 +0000485def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000486def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
487 "ADC(16|32|64)i",
488 "ADC(8|16|32|64)rr",
489 "ADCX(32|64)rr",
490 "ADOX(32|64)rr",
491 "BT(16|32|64)ri8",
492 "BT(16|32|64)rr",
493 "BTC(16|32|64)ri8",
494 "BTC(16|32|64)rr",
495 "BTR(16|32|64)ri8",
496 "BTR(16|32|64)rr",
497 "BTS(16|32|64)ri8",
498 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000499 "CLAC",
Craig Topperfc179c62018-03-22 04:23:41 +0000500 "RORX(32|64)ri",
501 "SAR(8|16|32|64)r1",
502 "SAR(8|16|32|64)ri",
503 "SARX(32|64)rr",
504 "SBB(16|32|64)ri",
505 "SBB(16|32|64)i",
506 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000507 "SHL(8|16|32|64)r1",
508 "SHL(8|16|32|64)ri",
509 "SHLX(32|64)rr",
510 "SHR(8|16|32|64)r1",
511 "SHR(8|16|32|64)ri",
512 "SHRX(32|64)rr",
513 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000514
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000515def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
516 let Latency = 1;
517 let NumMicroOps = 1;
518 let ResourceCycles = [1];
519}
Craig Topperfc179c62018-03-22 04:23:41 +0000520def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
521 "BLSI(32|64)rr",
522 "BLSMSK(32|64)rr",
523 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000524 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000525
526def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
527 let Latency = 1;
528 let NumMicroOps = 1;
529 let ResourceCycles = [1];
530}
Simon Pilgrim21935242018-04-21 14:56:56 +0000531def: InstRW<[SKLWriteResGroup9], (instregex "(V?)MOVAPD(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000532 "(V?)MOVAPS(Y?)rr",
533 "(V?)MOVDQA(Y?)rr",
534 "(V?)MOVDQU(Y?)rr",
535 "(V?)MOVPQI2QIrr",
Craig Topper15fef892018-03-25 23:40:56 +0000536 "(V?)MOVUPD(Y?)rr",
537 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000538 "(V?)MOVZPQILo2PQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000539 "(V?)PADDB(Y?)rr",
540 "(V?)PADDD(Y?)rr",
541 "(V?)PADDQ(Y?)rr",
542 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000543 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000544 "(V?)PSUBB(Y?)rr",
545 "(V?)PSUBD(Y?)rr",
546 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000547 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000548
549def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
550 let Latency = 1;
551 let NumMicroOps = 1;
552 let ResourceCycles = [1];
553}
Craig Topperfbe31322018-04-05 21:56:19 +0000554def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000555def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000556 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000557 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000558 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000559 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000560 "SGDT64m",
561 "SIDT64m",
562 "SLDT64m",
563 "SMSW16m",
564 "STC",
565 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000566 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000567
568def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000569 let Latency = 1;
570 let NumMicroOps = 2;
571 let ResourceCycles = [1,1];
572}
Craig Topperfc179c62018-03-22 04:23:41 +0000573def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
574 "MMX_MOVD64from64rm",
575 "MMX_MOVD64mr",
576 "MMX_MOVNTQmr",
577 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000578 "MOVNTI_64mr",
579 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000580 "ST_FP32m",
581 "ST_FP64m",
582 "ST_FP80m",
583 "VEXTRACTF128mr",
584 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000585 "(V?)MOVAPDYmr",
586 "(V?)MOVAPS(Y?)mr",
587 "(V?)MOVDQA(Y?)mr",
588 "(V?)MOVDQU(Y?)mr",
589 "(V?)MOVHPDmr",
590 "(V?)MOVHPSmr",
591 "(V?)MOVLPDmr",
592 "(V?)MOVLPSmr",
593 "(V?)MOVNTDQ(Y?)mr",
594 "(V?)MOVNTPD(Y?)mr",
595 "(V?)MOVNTPS(Y?)mr",
596 "(V?)MOVPDI2DImr",
597 "(V?)MOVPQI2QImr",
598 "(V?)MOVPQIto64mr",
599 "(V?)MOVSDmr",
600 "(V?)MOVSSmr",
601 "(V?)MOVUPD(Y?)mr",
602 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000603 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000604
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000605def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000606 let Latency = 2;
607 let NumMicroOps = 1;
608 let ResourceCycles = [1];
609}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000610def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000611 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000612 "(V?)MOVPDI2DIrr",
613 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000614 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000615 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000616
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000617def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000618 let Latency = 2;
619 let NumMicroOps = 2;
620 let ResourceCycles = [2];
621}
Craig Topperfc179c62018-03-22 04:23:41 +0000622def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
623 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000624 "(V?)PINSRBrr",
625 "(V?)PINSRDrr",
626 "(V?)PINSRQrr",
627 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000628
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000629def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000630 let Latency = 2;
631 let NumMicroOps = 2;
632 let ResourceCycles = [2];
633}
Craig Topperfc179c62018-03-22 04:23:41 +0000634def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
635 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000636
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000637def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000638 let Latency = 2;
639 let NumMicroOps = 2;
640 let ResourceCycles = [2];
641}
Craig Topperfc179c62018-03-22 04:23:41 +0000642def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
643 "ROL(8|16|32|64)r1",
644 "ROL(8|16|32|64)ri",
645 "ROR(8|16|32|64)r1",
646 "ROR(8|16|32|64)ri",
647 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000648
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000649def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000650 let Latency = 2;
651 let NumMicroOps = 2;
652 let ResourceCycles = [2];
653}
Craig Topperfc179c62018-03-22 04:23:41 +0000654def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
655 "BLENDVPSrr0",
656 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000657 "VBLENDVPD(Y?)rr",
658 "VBLENDVPS(Y?)rr",
659 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000660
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000661def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000662 let Latency = 2;
663 let NumMicroOps = 2;
664 let ResourceCycles = [2];
665}
Craig Topperfc179c62018-03-22 04:23:41 +0000666def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
667 "WAIT",
668 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000669
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000670def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000671 let Latency = 2;
672 let NumMicroOps = 2;
673 let ResourceCycles = [1,1];
674}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000675def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
676 "VMASKMOVPS(Y?)mr",
677 "VPMASKMOVD(Y?)mr",
678 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000679
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000680def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000681 let Latency = 2;
682 let NumMicroOps = 2;
683 let ResourceCycles = [1,1];
684}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000685def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
686 "(V?)PSLLQrr",
687 "(V?)PSLLWrr",
688 "(V?)PSRADrr",
689 "(V?)PSRAWrr",
690 "(V?)PSRLDrr",
691 "(V?)PSRLQrr",
692 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000693
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000694def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000695 let Latency = 2;
696 let NumMicroOps = 2;
697 let ResourceCycles = [1,1];
698}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000699def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000700
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000701def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000702 let Latency = 2;
703 let NumMicroOps = 2;
704 let ResourceCycles = [1,1];
705}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000706def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000707
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000708def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000709 let Latency = 2;
710 let NumMicroOps = 2;
711 let ResourceCycles = [1,1];
712}
Craig Topper498875f2018-04-04 17:54:19 +0000713def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
714
715def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
716 let Latency = 1;
717 let NumMicroOps = 1;
718 let ResourceCycles = [1];
719}
720def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000721
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000722def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000723 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000724 let NumMicroOps = 2;
725 let ResourceCycles = [1,1];
726}
Craig Topper2d451e72018-03-18 08:38:06 +0000727def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000728def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000729def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
730 "ADC8ri",
731 "SBB8i8",
732 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000733
734def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
735 let Latency = 2;
736 let NumMicroOps = 3;
737 let ResourceCycles = [1,1,1];
738}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000739def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
740 "(V?)PEXTRBmr",
741 "(V?)PEXTRDmr",
742 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000743 "(V?)PEXTRWmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000744
745def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
746 let Latency = 2;
747 let NumMicroOps = 3;
748 let ResourceCycles = [1,1,1];
749}
750def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
751
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000752def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
753 let Latency = 2;
754 let NumMicroOps = 3;
755 let ResourceCycles = [1,1,1];
756}
757def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
758
759def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
760 let Latency = 2;
761 let NumMicroOps = 3;
762 let ResourceCycles = [1,1,1];
763}
Craig Topper2d451e72018-03-18 08:38:06 +0000764def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000765def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
766 "PUSH64i8",
767 "STOSB",
768 "STOSL",
769 "STOSQ",
770 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000771
772def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
773 let Latency = 3;
774 let NumMicroOps = 1;
775 let ResourceCycles = [1];
776}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000777def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000778 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000779 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000780 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000781
Clement Courbet327fac42018-03-07 08:14:02 +0000782def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000783 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000784 let NumMicroOps = 2;
785 let ResourceCycles = [1,1];
786}
Clement Courbet327fac42018-03-07 08:14:02 +0000787def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000788
789def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
790 let Latency = 3;
791 let NumMicroOps = 1;
792 let ResourceCycles = [1];
793}
Craig Topperfc179c62018-03-22 04:23:41 +0000794def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
795 "ADD_FST0r",
796 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000797 "SUBR_FPrST0",
798 "SUBR_FST0r",
799 "SUBR_FrST0",
800 "SUB_FPrST0",
801 "SUB_FST0r",
802 "SUB_FrST0",
803 "VBROADCASTSDYrr",
804 "VBROADCASTSSYrr",
805 "VEXTRACTF128rr",
806 "VEXTRACTI128rr",
807 "VINSERTF128rr",
808 "VINSERTI128rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000809 "VPBROADCASTB(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000810 "VPBROADCASTDYrr",
811 "VPBROADCASTQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000812 "VPBROADCASTW(Y?)rr",
813 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000814 "VPERM2F128rr",
815 "VPERM2I128rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000816 "VPERMPDYri",
Craig Topperfc179c62018-03-22 04:23:41 +0000817 "VPERMQYri",
818 "VPMOVSXBDYrr",
819 "VPMOVSXBQYrr",
820 "VPMOVSXBWYrr",
821 "VPMOVSXDQYrr",
822 "VPMOVSXWDYrr",
823 "VPMOVSXWQYrr",
824 "VPMOVZXBDYrr",
825 "VPMOVZXBQYrr",
826 "VPMOVZXBWYrr",
827 "VPMOVZXDQYrr",
828 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000829 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000830
831def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
832 let Latency = 3;
833 let NumMicroOps = 2;
834 let ResourceCycles = [1,1];
835}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000836def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
837 "(V?)EXTRACTPSrr",
838 "(V?)PEXTRBrr",
839 "(V?)PEXTRDrr",
840 "(V?)PEXTRQrr",
841 "(V?)PEXTRWrr",
842 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000843
844def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
845 let Latency = 3;
846 let NumMicroOps = 2;
847 let ResourceCycles = [1,1];
848}
849def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
850
851def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
852 let Latency = 3;
853 let NumMicroOps = 3;
854 let ResourceCycles = [3];
855}
Craig Topperfc179c62018-03-22 04:23:41 +0000856def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
857 "ROR(8|16|32|64)rCL",
858 "SAR(8|16|32|64)rCL",
859 "SHL(8|16|32|64)rCL",
860 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000861
862def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000863 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000864 let NumMicroOps = 3;
865 let ResourceCycles = [3];
866}
Craig Topperb5f26592018-04-19 18:00:17 +0000867def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
868 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
869 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000870
871def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
872 let Latency = 3;
873 let NumMicroOps = 3;
874 let ResourceCycles = [1,2];
875}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000876def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000877
878def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
879 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000880 let NumMicroOps = 3;
881 let ResourceCycles = [2,1];
882}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000883def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
884 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000885
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000886def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
887 let Latency = 3;
888 let NumMicroOps = 3;
889 let ResourceCycles = [2,1];
890}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000891def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000892
893def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
894 let Latency = 3;
895 let NumMicroOps = 3;
896 let ResourceCycles = [2,1];
897}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000898def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
899 "(V?)PHADDW(Y?)rr",
900 "(V?)PHSUBD(Y?)rr",
901 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000902
903def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
904 let Latency = 3;
905 let NumMicroOps = 3;
906 let ResourceCycles = [2,1];
907}
Craig Topperfc179c62018-03-22 04:23:41 +0000908def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
909 "MMX_PACKSSWBirr",
910 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000911
912def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
913 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000914 let NumMicroOps = 3;
915 let ResourceCycles = [1,2];
916}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000917def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000918
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000919def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
920 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000921 let NumMicroOps = 3;
922 let ResourceCycles = [1,2];
923}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000924def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000925
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000926def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
927 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000928 let NumMicroOps = 3;
929 let ResourceCycles = [1,2];
930}
Craig Topperfc179c62018-03-22 04:23:41 +0000931def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
932 "RCL(8|16|32|64)ri",
933 "RCR(8|16|32|64)r1",
934 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000935
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000936def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
937 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000938 let NumMicroOps = 3;
939 let ResourceCycles = [1,1,1];
940}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000941def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000942
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000943def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
944 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000945 let NumMicroOps = 4;
946 let ResourceCycles = [1,1,2];
947}
Craig Topperf4cd9082018-01-19 05:47:32 +0000948def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000949
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000950def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
951 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000952 let NumMicroOps = 4;
953 let ResourceCycles = [1,1,1,1];
954}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000955def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000956
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000957def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
958 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000959 let NumMicroOps = 4;
960 let ResourceCycles = [1,1,1,1];
961}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000962def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000963
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000964def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000965 let Latency = 4;
966 let NumMicroOps = 1;
967 let ResourceCycles = [1];
968}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000969def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000970 "MMX_PMADDWDirr",
971 "MMX_PMULHRSWrr",
972 "MMX_PMULHUWirr",
973 "MMX_PMULHWirr",
974 "MMX_PMULLWirr",
975 "MMX_PMULUDQirr",
976 "MUL_FPrST0",
977 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000978 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000979
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000980def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000981 let Latency = 4;
982 let NumMicroOps = 1;
983 let ResourceCycles = [1];
984}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000985def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
986 "(V?)ADDPS(Y?)rr",
987 "(V?)ADDSDrr",
988 "(V?)ADDSSrr",
989 "(V?)ADDSUBPD(Y?)rr",
990 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000991 "(V?)CVTDQ2PS(Y?)rr",
992 "(V?)CVTPS2DQ(Y?)rr",
993 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000994 "(V?)MULPD(Y?)rr",
995 "(V?)MULPS(Y?)rr",
996 "(V?)MULSDrr",
997 "(V?)MULSSrr",
998 "(V?)PHMINPOSUWrr",
999 "(V?)PMADDUBSW(Y?)rr",
1000 "(V?)PMADDWD(Y?)rr",
1001 "(V?)PMULDQ(Y?)rr",
1002 "(V?)PMULHRSW(Y?)rr",
1003 "(V?)PMULHUW(Y?)rr",
1004 "(V?)PMULHW(Y?)rr",
1005 "(V?)PMULLW(Y?)rr",
1006 "(V?)PMULUDQ(Y?)rr",
1007 "(V?)SUBPD(Y?)rr",
1008 "(V?)SUBPS(Y?)rr",
1009 "(V?)SUBSDrr",
1010 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001011
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001012def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001013 let Latency = 4;
1014 let NumMicroOps = 2;
1015 let ResourceCycles = [2];
1016}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001017def: InstRW<[SKLWriteResGroup50], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001018
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001019def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001020 let Latency = 4;
1021 let NumMicroOps = 2;
1022 let ResourceCycles = [1,1];
1023}
Craig Topperf846e2d2018-04-19 05:34:05 +00001024def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001025
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001026def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1027 let Latency = 4;
1028 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001029 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001030}
Craig Topperfc179c62018-03-22 04:23:41 +00001031def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001032
1033def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001034 let Latency = 4;
1035 let NumMicroOps = 2;
1036 let ResourceCycles = [1,1];
1037}
Craig Topperfc179c62018-03-22 04:23:41 +00001038def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1039 "VPSLLQYrr",
1040 "VPSLLWYrr",
1041 "VPSRADYrr",
1042 "VPSRAWYrr",
1043 "VPSRLDYrr",
1044 "VPSRLQYrr",
1045 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001046
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001047def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001048 let Latency = 4;
1049 let NumMicroOps = 3;
1050 let ResourceCycles = [1,1,1];
1051}
Craig Topperfc179c62018-03-22 04:23:41 +00001052def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1053 "ISTT_FP32m",
1054 "ISTT_FP64m",
1055 "IST_F16m",
1056 "IST_F32m",
1057 "IST_FP16m",
1058 "IST_FP32m",
1059 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001060
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001061def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001062 let Latency = 4;
1063 let NumMicroOps = 4;
1064 let ResourceCycles = [4];
1065}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001066def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001067
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001068def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001069 let Latency = 4;
1070 let NumMicroOps = 4;
1071 let ResourceCycles = [1,3];
1072}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001073def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001074
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001075def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001076 let Latency = 4;
1077 let NumMicroOps = 4;
1078 let ResourceCycles = [1,3];
1079}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001080def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001081
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001082def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001083 let Latency = 4;
1084 let NumMicroOps = 4;
1085 let ResourceCycles = [1,1,2];
1086}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001087def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001088
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001089def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1090 let Latency = 5;
1091 let NumMicroOps = 1;
1092 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001093}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001094def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001095 "MOVSX(16|32|64)rm32",
1096 "MOVSX(16|32|64)rm8",
1097 "MOVZX(16|32|64)rm16",
1098 "MOVZX(16|32|64)rm8",
1099 "PREFETCHNTA",
1100 "PREFETCHT0",
1101 "PREFETCHT1",
1102 "PREFETCHT2",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001103 "(V?)MOV64toPQIrm",
1104 "(V?)MOVDDUPrm",
1105 "(V?)MOVDI2PDIrm",
1106 "(V?)MOVQI2PQIrm",
1107 "(V?)MOVSDrm",
1108 "(V?)MOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001109
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001110def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001111 let Latency = 5;
1112 let NumMicroOps = 2;
1113 let ResourceCycles = [1,1];
1114}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001115def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1116 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001117
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001118def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001119 let Latency = 5;
1120 let NumMicroOps = 2;
1121 let ResourceCycles = [1,1];
1122}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001123def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001124 "MMX_CVTPS2PIirr",
1125 "MMX_CVTTPD2PIirr",
1126 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001127 "(V?)CVTPD2DQrr",
1128 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001129 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001130 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001131 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001132 "(V?)CVTSD2SSrr",
1133 "(V?)CVTSI642SDrr",
1134 "(V?)CVTSI2SDrr",
1135 "(V?)CVTSI2SSrr",
1136 "(V?)CVTSS2SDrr",
1137 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001138
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001139def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001140 let Latency = 5;
1141 let NumMicroOps = 3;
1142 let ResourceCycles = [1,1,1];
1143}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001144def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001145
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001146def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001147 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001148 let NumMicroOps = 3;
1149 let ResourceCycles = [1,1,1];
1150}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001151def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001152
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001153def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001154 let Latency = 5;
1155 let NumMicroOps = 5;
1156 let ResourceCycles = [1,4];
1157}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001158def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001159
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001160def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001161 let Latency = 5;
1162 let NumMicroOps = 5;
1163 let ResourceCycles = [2,3];
1164}
Craig Topper13a16502018-03-19 00:56:09 +00001165def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001166
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001167def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001168 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001169 let NumMicroOps = 6;
1170 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001171}
Craig Topperfc179c62018-03-22 04:23:41 +00001172def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1173 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001174
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001175def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1176 let Latency = 6;
1177 let NumMicroOps = 1;
1178 let ResourceCycles = [1];
1179}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001180def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
1181 "(V?)LDDQUrm",
1182 "(V?)MOVAPDrm",
1183 "(V?)MOVAPSrm",
1184 "(V?)MOVDQArm",
1185 "(V?)MOVDQUrm",
1186 "(V?)MOVNTDQArm",
1187 "(V?)MOVSHDUPrm",
1188 "(V?)MOVSLDUPrm",
1189 "(V?)MOVUPDrm",
1190 "(V?)MOVUPSrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001191 "VPBROADCASTDrm",
1192 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001193
1194def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001195 let Latency = 6;
1196 let NumMicroOps = 2;
1197 let ResourceCycles = [2];
1198}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001199def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001200
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001201def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001202 let Latency = 6;
1203 let NumMicroOps = 2;
1204 let ResourceCycles = [1,1];
1205}
Craig Topperfc179c62018-03-22 04:23:41 +00001206def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1207 "MMX_PADDSWirm",
1208 "MMX_PADDUSBirm",
1209 "MMX_PADDUSWirm",
1210 "MMX_PAVGBirm",
1211 "MMX_PAVGWirm",
1212 "MMX_PCMPEQBirm",
1213 "MMX_PCMPEQDirm",
1214 "MMX_PCMPEQWirm",
1215 "MMX_PCMPGTBirm",
1216 "MMX_PCMPGTDirm",
1217 "MMX_PCMPGTWirm",
1218 "MMX_PMAXSWirm",
1219 "MMX_PMAXUBirm",
1220 "MMX_PMINSWirm",
1221 "MMX_PMINUBirm",
1222 "MMX_PSLLDrm",
1223 "MMX_PSLLQrm",
1224 "MMX_PSLLWrm",
1225 "MMX_PSRADrm",
1226 "MMX_PSRAWrm",
1227 "MMX_PSRLDrm",
1228 "MMX_PSRLQrm",
1229 "MMX_PSRLWrm",
1230 "MMX_PSUBSBirm",
1231 "MMX_PSUBSWirm",
1232 "MMX_PSUBUSBirm",
1233 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001234
Craig Topper58afb4e2018-03-22 21:10:07 +00001235def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001236 let Latency = 6;
1237 let NumMicroOps = 2;
1238 let ResourceCycles = [1,1];
1239}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001240def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1241 "(V?)CVTSD2SIrr",
1242 "(V?)CVTSS2SI64rr",
1243 "(V?)CVTSS2SIrr",
1244 "(V?)CVTTSD2SI64rr",
1245 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001246
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001247def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1248 let Latency = 6;
1249 let NumMicroOps = 2;
1250 let ResourceCycles = [1,1];
1251}
Craig Topperfc179c62018-03-22 04:23:41 +00001252def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1253 "MMX_PINSRWrm",
1254 "MMX_PSHUFBrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001255 "MMX_PUNPCKHBWirm",
1256 "MMX_PUNPCKHDQirm",
1257 "MMX_PUNPCKHWDirm",
1258 "MMX_PUNPCKLBWirm",
1259 "MMX_PUNPCKLDQirm",
1260 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001261 "(V?)MOVHPDrm",
1262 "(V?)MOVHPSrm",
1263 "(V?)MOVLPDrm",
1264 "(V?)MOVLPSrm",
1265 "(V?)PINSRBrm",
1266 "(V?)PINSRDrm",
1267 "(V?)PINSRQrm",
1268 "(V?)PINSRWrm",
1269 "(V?)PMOVSXBDrm",
1270 "(V?)PMOVSXBQrm",
1271 "(V?)PMOVSXBWrm",
1272 "(V?)PMOVSXDQrm",
1273 "(V?)PMOVSXWDrm",
1274 "(V?)PMOVSXWQrm",
1275 "(V?)PMOVZXBDrm",
1276 "(V?)PMOVZXBQrm",
1277 "(V?)PMOVZXBWrm",
1278 "(V?)PMOVZXDQrm",
1279 "(V?)PMOVZXWDrm",
1280 "(V?)PMOVZXWQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001281
1282def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1283 let Latency = 6;
1284 let NumMicroOps = 2;
1285 let ResourceCycles = [1,1];
1286}
Craig Topperfc179c62018-03-22 04:23:41 +00001287def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1288 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001289
1290def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1291 let Latency = 6;
1292 let NumMicroOps = 2;
1293 let ResourceCycles = [1,1];
1294}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001295def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1296 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001297 "MMX_PANDNirm",
1298 "MMX_PANDirm",
1299 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001300 "MMX_PSIGN(B|D|W)rm",
1301 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001302 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001303
1304def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1305 let Latency = 6;
1306 let NumMicroOps = 2;
1307 let ResourceCycles = [1,1];
1308}
Craig Topperc50570f2018-04-06 17:12:18 +00001309def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001310 "RORX(32|64)mi",
1311 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001312 "SHLX(32|64)rm",
1313 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001314def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1315 ADCX32rm, ADCX64rm,
1316 ADOX32rm, ADOX64rm,
1317 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001318
1319def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1320 let Latency = 6;
1321 let NumMicroOps = 2;
1322 let ResourceCycles = [1,1];
1323}
Craig Topperfc179c62018-03-22 04:23:41 +00001324def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1325 "BLSI(32|64)rm",
1326 "BLSMSK(32|64)rm",
1327 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001328 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001329
1330def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1331 let Latency = 6;
1332 let NumMicroOps = 2;
1333 let ResourceCycles = [1,1];
1334}
Craig Topper2d451e72018-03-18 08:38:06 +00001335def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001336def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001337
1338def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001339 let Latency = 6;
1340 let NumMicroOps = 3;
1341 let ResourceCycles = [2,1];
1342}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001343def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1344 "(V?)HADDPS(Y?)rr",
1345 "(V?)HSUBPD(Y?)rr",
1346 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001347
Craig Topper58afb4e2018-03-22 21:10:07 +00001348def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001349 let Latency = 6;
1350 let NumMicroOps = 3;
1351 let ResourceCycles = [2,1];
1352}
Craig Topperfc179c62018-03-22 04:23:41 +00001353def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001354
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001355def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001356 let Latency = 6;
1357 let NumMicroOps = 4;
1358 let ResourceCycles = [1,2,1];
1359}
Craig Topperfc179c62018-03-22 04:23:41 +00001360def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1361 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001362
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001363def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001364 let Latency = 6;
1365 let NumMicroOps = 4;
1366 let ResourceCycles = [1,1,1,1];
1367}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001368def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001369
Craig Topper58afb4e2018-03-22 21:10:07 +00001370def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001371 let Latency = 6;
1372 let NumMicroOps = 4;
1373 let ResourceCycles = [1,1,1,1];
1374}
1375def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1376
1377def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1378 let Latency = 6;
1379 let NumMicroOps = 4;
1380 let ResourceCycles = [1,1,1,1];
1381}
Craig Topperfc179c62018-03-22 04:23:41 +00001382def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1383 "BTR(16|32|64)mi8",
1384 "BTS(16|32|64)mi8",
1385 "SAR(8|16|32|64)m1",
1386 "SAR(8|16|32|64)mi",
1387 "SHL(8|16|32|64)m1",
1388 "SHL(8|16|32|64)mi",
1389 "SHR(8|16|32|64)m1",
1390 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001391
1392def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1393 let Latency = 6;
1394 let NumMicroOps = 4;
1395 let ResourceCycles = [1,1,1,1];
1396}
Craig Topperf0d04262018-04-06 16:16:48 +00001397def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1398 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001399
1400def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001401 let Latency = 6;
1402 let NumMicroOps = 6;
1403 let ResourceCycles = [1,5];
1404}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001405def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001406
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001407def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1408 let Latency = 7;
1409 let NumMicroOps = 1;
1410 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001411}
Craig Topperfc179c62018-03-22 04:23:41 +00001412def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1413 "LD_F64m",
1414 "LD_F80m",
1415 "VBROADCASTF128",
1416 "VBROADCASTI128",
1417 "VBROADCASTSDYrm",
1418 "VBROADCASTSSYrm",
1419 "VLDDQUYrm",
1420 "VMOVAPDYrm",
1421 "VMOVAPSYrm",
1422 "VMOVDDUPYrm",
1423 "VMOVDQAYrm",
1424 "VMOVDQUYrm",
1425 "VMOVNTDQAYrm",
1426 "VMOVSHDUPYrm",
1427 "VMOVSLDUPYrm",
1428 "VMOVUPDYrm",
1429 "VMOVUPSYrm",
1430 "VPBROADCASTDYrm",
1431 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001432
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001433def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001434 let Latency = 7;
1435 let NumMicroOps = 2;
1436 let ResourceCycles = [1,1];
1437}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001438def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001439
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001440def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1441 let Latency = 7;
1442 let NumMicroOps = 2;
1443 let ResourceCycles = [1,1];
1444}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001445def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1446 "(V?)PACKSSDWrm",
1447 "(V?)PACKSSWBrm",
1448 "(V?)PACKUSDWrm",
1449 "(V?)PACKUSWBrm",
1450 "(V?)PALIGNRrmi",
1451 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001452 "VPBROADCASTBrm",
1453 "VPBROADCASTWrm",
1454 "VPERMILPDmi",
1455 "VPERMILPDrm",
1456 "VPERMILPSmi",
1457 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001458 "(V?)PSHUFBrm",
1459 "(V?)PSHUFDmi",
1460 "(V?)PSHUFHWmi",
1461 "(V?)PSHUFLWmi",
1462 "(V?)PUNPCKHBWrm",
1463 "(V?)PUNPCKHDQrm",
1464 "(V?)PUNPCKHQDQrm",
1465 "(V?)PUNPCKHWDrm",
1466 "(V?)PUNPCKLBWrm",
1467 "(V?)PUNPCKLDQrm",
1468 "(V?)PUNPCKLQDQrm",
1469 "(V?)PUNPCKLWDrm",
1470 "(V?)SHUFPDrmi",
1471 "(V?)SHUFPSrmi",
1472 "(V?)UNPCKHPDrm",
1473 "(V?)UNPCKHPSrm",
1474 "(V?)UNPCKLPDrm",
1475 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001476
Craig Topper58afb4e2018-03-22 21:10:07 +00001477def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001478 let Latency = 7;
1479 let NumMicroOps = 2;
1480 let ResourceCycles = [1,1];
1481}
Craig Topperfc179c62018-03-22 04:23:41 +00001482def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1483 "VCVTPD2PSYrr",
1484 "VCVTPH2PSYrr",
1485 "VCVTPS2PDYrr",
1486 "VCVTPS2PHYrr",
1487 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001488
1489def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1490 let Latency = 7;
1491 let NumMicroOps = 2;
1492 let ResourceCycles = [1,1];
1493}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001494def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1495 "(V?)PABSDrm",
1496 "(V?)PABSWrm",
1497 "(V?)PADDSBrm",
1498 "(V?)PADDSWrm",
1499 "(V?)PADDUSBrm",
1500 "(V?)PADDUSWrm",
1501 "(V?)PAVGBrm",
1502 "(V?)PAVGWrm",
1503 "(V?)PCMPEQBrm",
1504 "(V?)PCMPEQDrm",
1505 "(V?)PCMPEQQrm",
1506 "(V?)PCMPEQWrm",
1507 "(V?)PCMPGTBrm",
1508 "(V?)PCMPGTDrm",
1509 "(V?)PCMPGTWrm",
1510 "(V?)PMAXSBrm",
1511 "(V?)PMAXSDrm",
1512 "(V?)PMAXSWrm",
1513 "(V?)PMAXUBrm",
1514 "(V?)PMAXUDrm",
1515 "(V?)PMAXUWrm",
1516 "(V?)PMINSBrm",
1517 "(V?)PMINSDrm",
1518 "(V?)PMINSWrm",
1519 "(V?)PMINUBrm",
1520 "(V?)PMINUDrm",
1521 "(V?)PMINUWrm",
1522 "(V?)PSIGNBrm",
1523 "(V?)PSIGNDrm",
1524 "(V?)PSIGNWrm",
1525 "(V?)PSLLDrm",
1526 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001527 "VPSLLVDrm",
1528 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001529 "(V?)PSLLWrm",
1530 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001531 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001532 "(V?)PSRAWrm",
1533 "(V?)PSRLDrm",
1534 "(V?)PSRLQrm",
1535 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001536 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001537 "(V?)PSRLWrm",
1538 "(V?)PSUBSBrm",
1539 "(V?)PSUBSWrm",
1540 "(V?)PSUBUSBrm",
1541 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001542
1543def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1544 let Latency = 7;
1545 let NumMicroOps = 2;
1546 let ResourceCycles = [1,1];
1547}
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001548def: InstRW<[SKLWriteResGroup91], (instregex "(V?)BLENDPDrmi",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001549 "(V?)BLENDPSrmi",
1550 "(V?)INSERTF128rm",
1551 "(V?)INSERTI128rm",
1552 "(V?)MASKMOVPDrm",
1553 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001554 "(V?)PADDBrm",
1555 "(V?)PADDDrm",
1556 "(V?)PADDQrm",
1557 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001558 "(V?)PBLENDDrmi",
1559 "(V?)PMASKMOVDrm",
1560 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001561 "(V?)PSUBBrm",
1562 "(V?)PSUBDrm",
1563 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001564 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001565
1566def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1567 let Latency = 7;
1568 let NumMicroOps = 3;
1569 let ResourceCycles = [2,1];
1570}
Craig Topperfc179c62018-03-22 04:23:41 +00001571def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1572 "MMX_PACKSSWBirm",
1573 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001574
1575def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1576 let Latency = 7;
1577 let NumMicroOps = 3;
1578 let ResourceCycles = [1,2];
1579}
Craig Topperf4cd9082018-01-19 05:47:32 +00001580def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001581
1582def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1583 let Latency = 7;
1584 let NumMicroOps = 3;
1585 let ResourceCycles = [1,2];
1586}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001587def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1588 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001589
Craig Topper58afb4e2018-03-22 21:10:07 +00001590def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001591 let Latency = 7;
1592 let NumMicroOps = 3;
1593 let ResourceCycles = [1,1,1];
1594}
Craig Topperfc179c62018-03-22 04:23:41 +00001595def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1596 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001597
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001598def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001599 let Latency = 7;
1600 let NumMicroOps = 3;
1601 let ResourceCycles = [1,1,1];
1602}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001603def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001604
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001605def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001606 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001607 let NumMicroOps = 3;
1608 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001609}
Craig Topperfc179c62018-03-22 04:23:41 +00001610def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1611 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001612
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001613def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1614 let Latency = 7;
1615 let NumMicroOps = 5;
1616 let ResourceCycles = [1,1,1,2];
1617}
Craig Topperfc179c62018-03-22 04:23:41 +00001618def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1619 "ROL(8|16|32|64)mi",
1620 "ROR(8|16|32|64)m1",
1621 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001622
1623def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1624 let Latency = 7;
1625 let NumMicroOps = 5;
1626 let ResourceCycles = [1,1,1,2];
1627}
Craig Topper13a16502018-03-19 00:56:09 +00001628def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001629
1630def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1631 let Latency = 7;
1632 let NumMicroOps = 5;
1633 let ResourceCycles = [1,1,1,1,1];
1634}
Craig Topperfc179c62018-03-22 04:23:41 +00001635def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1636 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001637
1638def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001639 let Latency = 7;
1640 let NumMicroOps = 7;
1641 let ResourceCycles = [1,3,1,2];
1642}
Craig Topper2d451e72018-03-18 08:38:06 +00001643def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001644
Craig Topper58afb4e2018-03-22 21:10:07 +00001645def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001646 let Latency = 8;
1647 let NumMicroOps = 2;
1648 let ResourceCycles = [2];
1649}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001650def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1651 "(V?)ROUNDPS(Y?)r",
1652 "(V?)ROUNDSDr",
1653 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001654
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001655def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001656 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001657 let NumMicroOps = 2;
1658 let ResourceCycles = [1,1];
1659}
Craig Topperfc179c62018-03-22 04:23:41 +00001660def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1661 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001662
1663def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1664 let Latency = 8;
1665 let NumMicroOps = 2;
1666 let ResourceCycles = [1,1];
1667}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001668def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1669 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001670
1671def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001672 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001673 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001674 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001675}
Craig Topperf846e2d2018-04-19 05:34:05 +00001676def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001677
Craig Topperf846e2d2018-04-19 05:34:05 +00001678def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1679 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001680 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001681 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001682}
Craig Topperfc179c62018-03-22 04:23:41 +00001683def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001684
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001685def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1686 let Latency = 8;
1687 let NumMicroOps = 2;
1688 let ResourceCycles = [1,1];
1689}
Craig Topperfc179c62018-03-22 04:23:41 +00001690def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1691 "FCOM64m",
1692 "FCOMP32m",
1693 "FCOMP64m",
1694 "MMX_PSADBWirm",
1695 "VPACKSSDWYrm",
1696 "VPACKSSWBYrm",
1697 "VPACKUSDWYrm",
1698 "VPACKUSWBYrm",
1699 "VPALIGNRYrmi",
1700 "VPBLENDWYrmi",
1701 "VPBROADCASTBYrm",
1702 "VPBROADCASTWYrm",
1703 "VPERMILPDYmi",
1704 "VPERMILPDYrm",
1705 "VPERMILPSYmi",
1706 "VPERMILPSYrm",
1707 "VPMOVSXBDYrm",
1708 "VPMOVSXBQYrm",
1709 "VPMOVSXWQYrm",
1710 "VPSHUFBYrm",
1711 "VPSHUFDYmi",
1712 "VPSHUFHWYmi",
1713 "VPSHUFLWYmi",
1714 "VPUNPCKHBWYrm",
1715 "VPUNPCKHDQYrm",
1716 "VPUNPCKHQDQYrm",
1717 "VPUNPCKHWDYrm",
1718 "VPUNPCKLBWYrm",
1719 "VPUNPCKLDQYrm",
1720 "VPUNPCKLQDQYrm",
1721 "VPUNPCKLWDYrm",
1722 "VSHUFPDYrmi",
1723 "VSHUFPSYrmi",
1724 "VUNPCKHPDYrm",
1725 "VUNPCKHPSYrm",
1726 "VUNPCKLPDYrm",
1727 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001728
1729def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1730 let Latency = 8;
1731 let NumMicroOps = 2;
1732 let ResourceCycles = [1,1];
1733}
Craig Topperfc179c62018-03-22 04:23:41 +00001734def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1735 "VPABSDYrm",
1736 "VPABSWYrm",
1737 "VPADDSBYrm",
1738 "VPADDSWYrm",
1739 "VPADDUSBYrm",
1740 "VPADDUSWYrm",
1741 "VPAVGBYrm",
1742 "VPAVGWYrm",
1743 "VPCMPEQBYrm",
1744 "VPCMPEQDYrm",
1745 "VPCMPEQQYrm",
1746 "VPCMPEQWYrm",
1747 "VPCMPGTBYrm",
1748 "VPCMPGTDYrm",
1749 "VPCMPGTWYrm",
1750 "VPMAXSBYrm",
1751 "VPMAXSDYrm",
1752 "VPMAXSWYrm",
1753 "VPMAXUBYrm",
1754 "VPMAXUDYrm",
1755 "VPMAXUWYrm",
1756 "VPMINSBYrm",
1757 "VPMINSDYrm",
1758 "VPMINSWYrm",
1759 "VPMINUBYrm",
1760 "VPMINUDYrm",
1761 "VPMINUWYrm",
1762 "VPSIGNBYrm",
1763 "VPSIGNDYrm",
1764 "VPSIGNWYrm",
1765 "VPSLLDYrm",
1766 "VPSLLQYrm",
1767 "VPSLLVDYrm",
1768 "VPSLLVQYrm",
1769 "VPSLLWYrm",
1770 "VPSRADYrm",
1771 "VPSRAVDYrm",
1772 "VPSRAWYrm",
1773 "VPSRLDYrm",
1774 "VPSRLQYrm",
1775 "VPSRLVDYrm",
1776 "VPSRLVQYrm",
1777 "VPSRLWYrm",
1778 "VPSUBSBYrm",
1779 "VPSUBSWYrm",
1780 "VPSUBUSBYrm",
1781 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001782
1783def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1784 let Latency = 8;
1785 let NumMicroOps = 2;
1786 let ResourceCycles = [1,1];
1787}
Craig Topperfc179c62018-03-22 04:23:41 +00001788def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1789 "VANDNPSYrm",
1790 "VANDPDYrm",
1791 "VANDPSYrm",
1792 "VBLENDPDYrmi",
1793 "VBLENDPSYrmi",
1794 "VMASKMOVPDYrm",
1795 "VMASKMOVPSYrm",
1796 "VORPDYrm",
1797 "VORPSYrm",
1798 "VPADDBYrm",
1799 "VPADDDYrm",
1800 "VPADDQYrm",
1801 "VPADDWYrm",
1802 "VPANDNYrm",
1803 "VPANDYrm",
1804 "VPBLENDDYrmi",
1805 "VPMASKMOVDYrm",
1806 "VPMASKMOVQYrm",
1807 "VPORYrm",
1808 "VPSUBBYrm",
1809 "VPSUBDYrm",
1810 "VPSUBQYrm",
1811 "VPSUBWYrm",
1812 "VPXORYrm",
1813 "VXORPDYrm",
1814 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001815
1816def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001817 let Latency = 8;
1818 let NumMicroOps = 3;
1819 let ResourceCycles = [1,2];
1820}
Craig Topperfc179c62018-03-22 04:23:41 +00001821def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
1822 "BLENDVPSrm0",
1823 "PBLENDVBrm0",
1824 "VBLENDVPDrm",
1825 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001826 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001827
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001828def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1829 let Latency = 8;
1830 let NumMicroOps = 4;
1831 let ResourceCycles = [1,2,1];
1832}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001833def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001834
1835def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1836 let Latency = 8;
1837 let NumMicroOps = 4;
1838 let ResourceCycles = [2,1,1];
1839}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001840def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001841
Craig Topper58afb4e2018-03-22 21:10:07 +00001842def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001843 let Latency = 8;
1844 let NumMicroOps = 4;
1845 let ResourceCycles = [1,1,1,1];
1846}
1847def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1848
1849def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1850 let Latency = 8;
1851 let NumMicroOps = 5;
1852 let ResourceCycles = [1,1,3];
1853}
Craig Topper13a16502018-03-19 00:56:09 +00001854def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001855
1856def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1857 let Latency = 8;
1858 let NumMicroOps = 5;
1859 let ResourceCycles = [1,1,1,2];
1860}
Craig Topperfc179c62018-03-22 04:23:41 +00001861def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1862 "RCL(8|16|32|64)mi",
1863 "RCR(8|16|32|64)m1",
1864 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001865
1866def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1867 let Latency = 8;
1868 let NumMicroOps = 6;
1869 let ResourceCycles = [1,1,1,3];
1870}
Craig Topperfc179c62018-03-22 04:23:41 +00001871def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1872 "SAR(8|16|32|64)mCL",
1873 "SHL(8|16|32|64)mCL",
1874 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001875
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001876def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1877 let Latency = 8;
1878 let NumMicroOps = 6;
1879 let ResourceCycles = [1,1,1,2,1];
1880}
Craig Topper9f834812018-04-01 21:54:24 +00001881def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001882 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001883 "SBB(8|16|32|64)mi")>;
1884def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1885 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001886
1887def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1888 let Latency = 9;
1889 let NumMicroOps = 2;
1890 let ResourceCycles = [1,1];
1891}
Craig Topperfc179c62018-03-22 04:23:41 +00001892def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1893 "MMX_PMADDUBSWrm",
1894 "MMX_PMADDWDirm",
1895 "MMX_PMULHRSWrm",
1896 "MMX_PMULHUWirm",
1897 "MMX_PMULHWirm",
1898 "MMX_PMULLWirm",
1899 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001900 "(V?)RCPSSm",
1901 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001902 "VTESTPDYrm",
1903 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001904
1905def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1906 let Latency = 9;
1907 let NumMicroOps = 2;
1908 let ResourceCycles = [1,1];
1909}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001910def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001911 "VPMOVSXBWYrm",
1912 "VPMOVSXDQYrm",
1913 "VPMOVSXWDYrm",
1914 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001915 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001916
1917def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1918 let Latency = 9;
1919 let NumMicroOps = 2;
1920 let ResourceCycles = [1,1];
1921}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001922def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1923 "(V?)ADDSSrm",
1924 "(V?)CMPSDrm",
1925 "(V?)CMPSSrm",
1926 "(V?)MAX(C?)SDrm",
1927 "(V?)MAX(C?)SSrm",
1928 "(V?)MIN(C?)SDrm",
1929 "(V?)MIN(C?)SSrm",
1930 "(V?)MULSDrm",
1931 "(V?)MULSSrm",
1932 "(V?)SUBSDrm",
1933 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001934def: InstRW<[SKLWriteResGroup122],
1935 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001936
Craig Topper58afb4e2018-03-22 21:10:07 +00001937def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001938 let Latency = 9;
1939 let NumMicroOps = 2;
1940 let ResourceCycles = [1,1];
1941}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001942def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001943 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001944 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001945 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001946
Craig Topper58afb4e2018-03-22 21:10:07 +00001947def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001948 let Latency = 9;
1949 let NumMicroOps = 3;
1950 let ResourceCycles = [1,2];
1951}
Craig Topperfc179c62018-03-22 04:23:41 +00001952def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001953
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001954def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1955 let Latency = 9;
1956 let NumMicroOps = 3;
1957 let ResourceCycles = [1,2];
1958}
Craig Topperfc179c62018-03-22 04:23:41 +00001959def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1960 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001961
1962def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1963 let Latency = 9;
1964 let NumMicroOps = 3;
1965 let ResourceCycles = [1,1,1];
1966}
Craig Topperfc179c62018-03-22 04:23:41 +00001967def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001968
1969def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1970 let Latency = 9;
1971 let NumMicroOps = 3;
1972 let ResourceCycles = [1,1,1];
1973}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001974def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001975
1976def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001977 let Latency = 9;
1978 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001979 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001980}
Craig Topperfc179c62018-03-22 04:23:41 +00001981def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1982 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001983
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001984def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1985 let Latency = 9;
1986 let NumMicroOps = 4;
1987 let ResourceCycles = [2,1,1];
1988}
Craig Topperfc179c62018-03-22 04:23:41 +00001989def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1990 "(V?)PHADDWrm",
1991 "(V?)PHSUBDrm",
1992 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001993
1994def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1995 let Latency = 9;
1996 let NumMicroOps = 4;
1997 let ResourceCycles = [1,1,1,1];
1998}
Craig Topperfc179c62018-03-22 04:23:41 +00001999def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
2000 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002001
2002def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2003 let Latency = 9;
2004 let NumMicroOps = 5;
2005 let ResourceCycles = [1,2,1,1];
2006}
Craig Topperfc179c62018-03-22 04:23:41 +00002007def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
2008 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002009
2010def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2011 let Latency = 10;
2012 let NumMicroOps = 2;
2013 let ResourceCycles = [1,1];
2014}
Simon Pilgrim7684e052018-03-22 13:18:08 +00002015def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002016 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002017
2018def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2019 let Latency = 10;
2020 let NumMicroOps = 2;
2021 let ResourceCycles = [1,1];
2022}
Craig Topperfc179c62018-03-22 04:23:41 +00002023def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
2024 "ADD_F64m",
2025 "ILD_F16m",
2026 "ILD_F32m",
2027 "ILD_F64m",
2028 "SUBR_F32m",
2029 "SUBR_F64m",
2030 "SUB_F32m",
2031 "SUB_F64m",
2032 "VPCMPGTQYrm",
2033 "VPERM2F128rm",
2034 "VPERM2I128rm",
2035 "VPERMDYrm",
2036 "VPERMPDYmi",
2037 "VPERMPSYrm",
2038 "VPERMQYmi",
2039 "VPMOVZXBDYrm",
2040 "VPMOVZXBQYrm",
2041 "VPMOVZXBWYrm",
2042 "VPMOVZXDQYrm",
2043 "VPMOVZXWQYrm",
2044 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002045
2046def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2047 let Latency = 10;
2048 let NumMicroOps = 2;
2049 let ResourceCycles = [1,1];
2050}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002051def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
2052 "(V?)ADDPSrm",
2053 "(V?)ADDSUBPDrm",
2054 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002055 "(V?)CVTDQ2PSrm",
2056 "(V?)CVTPH2PSYrm",
2057 "(V?)CVTPS2DQrm",
2058 "(V?)CVTSS2SDrm",
2059 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002060 "(V?)MULPDrm",
2061 "(V?)MULPSrm",
2062 "(V?)PHMINPOSUWrm",
2063 "(V?)PMADDUBSWrm",
2064 "(V?)PMADDWDrm",
2065 "(V?)PMULDQrm",
2066 "(V?)PMULHRSWrm",
2067 "(V?)PMULHUWrm",
2068 "(V?)PMULHWrm",
2069 "(V?)PMULLWrm",
2070 "(V?)PMULUDQrm",
2071 "(V?)SUBPDrm",
2072 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00002073def: InstRW<[SKLWriteResGroup134],
2074 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002075
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002076def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2077 let Latency = 10;
2078 let NumMicroOps = 3;
2079 let ResourceCycles = [2,1];
2080}
Craig Topperfc179c62018-03-22 04:23:41 +00002081def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002082
2083def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2084 let Latency = 10;
2085 let NumMicroOps = 3;
2086 let ResourceCycles = [1,1,1];
2087}
Craig Topperfc179c62018-03-22 04:23:41 +00002088def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2089 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002090
Craig Topper58afb4e2018-03-22 21:10:07 +00002091def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002092 let Latency = 10;
2093 let NumMicroOps = 3;
2094 let ResourceCycles = [1,1,1];
2095}
Craig Topperfc179c62018-03-22 04:23:41 +00002096def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002097
2098def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002099 let Latency = 10;
2100 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002101 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002102}
Craig Topperfc179c62018-03-22 04:23:41 +00002103def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2104 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002105
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002106def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2107 let Latency = 10;
2108 let NumMicroOps = 4;
2109 let ResourceCycles = [2,1,1];
2110}
Craig Topperfc179c62018-03-22 04:23:41 +00002111def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2112 "VPHADDWYrm",
2113 "VPHSUBDYrm",
2114 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002115
2116def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002117 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002118 let NumMicroOps = 4;
2119 let ResourceCycles = [1,1,1,1];
2120}
Craig Topperf846e2d2018-04-19 05:34:05 +00002121def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002122
2123def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2124 let Latency = 10;
2125 let NumMicroOps = 8;
2126 let ResourceCycles = [1,1,1,1,1,3];
2127}
Craig Topper13a16502018-03-19 00:56:09 +00002128def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002129
2130def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002131 let Latency = 10;
2132 let NumMicroOps = 10;
2133 let ResourceCycles = [9,1];
2134}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002135def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002136
Craig Topper8104f262018-04-02 05:33:28 +00002137def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002138 let Latency = 11;
2139 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002140 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002141}
Craig Topper8104f262018-04-02 05:33:28 +00002142def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002143 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002144
Craig Topper8104f262018-04-02 05:33:28 +00002145def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2146 let Latency = 11;
2147 let NumMicroOps = 1;
2148 let ResourceCycles = [1,5];
2149}
2150def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
2151
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002152def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002153 let Latency = 11;
2154 let NumMicroOps = 2;
2155 let ResourceCycles = [1,1];
2156}
Craig Topperfc179c62018-03-22 04:23:41 +00002157def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2158 "MUL_F64m",
2159 "VRCPPSYm",
2160 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002161
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002162def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2163 let Latency = 11;
2164 let NumMicroOps = 2;
2165 let ResourceCycles = [1,1];
2166}
Craig Topperfc179c62018-03-22 04:23:41 +00002167def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2168 "VADDPSYrm",
2169 "VADDSUBPDYrm",
2170 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002171 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002172 "VCMPPSYrmi",
2173 "VCVTDQ2PSYrm",
2174 "VCVTPS2DQYrm",
2175 "VCVTPS2PDYrm",
2176 "VCVTTPS2DQYrm",
2177 "VMAX(C?)PDYrm",
2178 "VMAX(C?)PSYrm",
2179 "VMIN(C?)PDYrm",
2180 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002181 "VMULPDYrm",
2182 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002183 "VPMADDUBSWYrm",
2184 "VPMADDWDYrm",
2185 "VPMULDQYrm",
2186 "VPMULHRSWYrm",
2187 "VPMULHUWYrm",
2188 "VPMULHWYrm",
2189 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002190 "VPMULUDQYrm",
2191 "VSUBPDYrm",
2192 "VSUBPSYrm")>;
2193def: InstRW<[SKLWriteResGroup147],
2194 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002195
2196def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2197 let Latency = 11;
2198 let NumMicroOps = 3;
2199 let ResourceCycles = [2,1];
2200}
Craig Topperfc179c62018-03-22 04:23:41 +00002201def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2202 "FICOM32m",
2203 "FICOMP16m",
2204 "FICOMP32m",
2205 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002206
2207def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2208 let Latency = 11;
2209 let NumMicroOps = 3;
2210 let ResourceCycles = [1,1,1];
2211}
Craig Topperfc179c62018-03-22 04:23:41 +00002212def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002213
Craig Topper58afb4e2018-03-22 21:10:07 +00002214def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002215 let Latency = 11;
2216 let NumMicroOps = 3;
2217 let ResourceCycles = [1,1,1];
2218}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002219def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2220 "(V?)CVTSD2SIrm",
2221 "(V?)CVTSS2SI64rm",
2222 "(V?)CVTSS2SIrm",
2223 "(V?)CVTTSD2SI64rm",
2224 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002225 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002226 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002227
Craig Topper58afb4e2018-03-22 21:10:07 +00002228def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002229 let Latency = 11;
2230 let NumMicroOps = 3;
2231 let ResourceCycles = [1,1,1];
2232}
Craig Topperfc179c62018-03-22 04:23:41 +00002233def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2234 "CVTPD2PSrm",
2235 "CVTTPD2DQrm",
2236 "MMX_CVTPD2PIirm",
2237 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002238
2239def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2240 let Latency = 11;
2241 let NumMicroOps = 6;
2242 let ResourceCycles = [1,1,1,2,1];
2243}
Craig Topperfc179c62018-03-22 04:23:41 +00002244def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2245 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002246
2247def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002248 let Latency = 11;
2249 let NumMicroOps = 7;
2250 let ResourceCycles = [2,3,2];
2251}
Craig Topperfc179c62018-03-22 04:23:41 +00002252def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2253 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002254
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002255def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002256 let Latency = 11;
2257 let NumMicroOps = 9;
2258 let ResourceCycles = [1,5,1,2];
2259}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002260def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002261
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002262def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002263 let Latency = 11;
2264 let NumMicroOps = 11;
2265 let ResourceCycles = [2,9];
2266}
Craig Topperfc179c62018-03-22 04:23:41 +00002267def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002268
Craig Topper8104f262018-04-02 05:33:28 +00002269def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002270 let Latency = 12;
2271 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002272 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002273}
Craig Topper8104f262018-04-02 05:33:28 +00002274def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002275 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002276
Craig Topper8104f262018-04-02 05:33:28 +00002277def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2278 let Latency = 12;
2279 let NumMicroOps = 1;
2280 let ResourceCycles = [1,6];
2281}
2282def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2283
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002284def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2285 let Latency = 12;
2286 let NumMicroOps = 4;
2287 let ResourceCycles = [2,1,1];
2288}
Craig Topperfc179c62018-03-22 04:23:41 +00002289def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2290 "(V?)HADDPSrm",
2291 "(V?)HSUBPDrm",
2292 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002293
Craig Topper58afb4e2018-03-22 21:10:07 +00002294def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002295 let Latency = 12;
2296 let NumMicroOps = 4;
2297 let ResourceCycles = [1,1,1,1];
2298}
2299def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2300
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002301def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002302 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002303 let NumMicroOps = 3;
2304 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002305}
Craig Topperfc179c62018-03-22 04:23:41 +00002306def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2307 "ADD_FI32m",
2308 "SUBR_FI16m",
2309 "SUBR_FI32m",
2310 "SUB_FI16m",
2311 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002312
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002313def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2314 let Latency = 13;
2315 let NumMicroOps = 3;
2316 let ResourceCycles = [1,1,1];
2317}
2318def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2319
Craig Topper58afb4e2018-03-22 21:10:07 +00002320def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002321 let Latency = 13;
2322 let NumMicroOps = 4;
2323 let ResourceCycles = [1,3];
2324}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002325def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002326
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002327def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002328 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002329 let NumMicroOps = 4;
2330 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002331}
Craig Topperfc179c62018-03-22 04:23:41 +00002332def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2333 "VHADDPSYrm",
2334 "VHSUBPDYrm",
2335 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002336
Craig Topper8104f262018-04-02 05:33:28 +00002337def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002338 let Latency = 14;
2339 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002340 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002341}
Craig Topper8104f262018-04-02 05:33:28 +00002342def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002343 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002344
Craig Topper8104f262018-04-02 05:33:28 +00002345def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2346 let Latency = 14;
2347 let NumMicroOps = 1;
2348 let ResourceCycles = [1,5];
2349}
2350def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2351
Craig Topper58afb4e2018-03-22 21:10:07 +00002352def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002353 let Latency = 14;
2354 let NumMicroOps = 3;
2355 let ResourceCycles = [1,2];
2356}
Craig Topperfc179c62018-03-22 04:23:41 +00002357def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2358def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2359def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2360def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002361
2362def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2363 let Latency = 14;
2364 let NumMicroOps = 3;
2365 let ResourceCycles = [1,1,1];
2366}
Craig Topperfc179c62018-03-22 04:23:41 +00002367def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2368 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002369
2370def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002371 let Latency = 14;
2372 let NumMicroOps = 10;
2373 let ResourceCycles = [2,4,1,3];
2374}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002375def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002376
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002377def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002378 let Latency = 15;
2379 let NumMicroOps = 1;
2380 let ResourceCycles = [1];
2381}
Craig Topperfc179c62018-03-22 04:23:41 +00002382def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2383 "DIVR_FST0r",
2384 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002385
Craig Topper58afb4e2018-03-22 21:10:07 +00002386def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002387 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002388 let NumMicroOps = 3;
2389 let ResourceCycles = [1,2];
2390}
Craig Topper40d3b322018-03-22 21:55:20 +00002391def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2392 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002393
Craig Topperd25f1ac2018-03-20 23:39:48 +00002394def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2395 let Latency = 17;
2396 let NumMicroOps = 3;
2397 let ResourceCycles = [1,2];
2398}
2399def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2400
Craig Topper58afb4e2018-03-22 21:10:07 +00002401def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002402 let Latency = 15;
2403 let NumMicroOps = 4;
2404 let ResourceCycles = [1,1,2];
2405}
Craig Topperfc179c62018-03-22 04:23:41 +00002406def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002407
2408def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2409 let Latency = 15;
2410 let NumMicroOps = 10;
2411 let ResourceCycles = [1,1,1,5,1,1];
2412}
Craig Topper13a16502018-03-19 00:56:09 +00002413def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002414
Craig Topper8104f262018-04-02 05:33:28 +00002415def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002416 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002417 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002418 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002419}
Craig Topperfc179c62018-03-22 04:23:41 +00002420def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002421
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002422def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2423 let Latency = 16;
2424 let NumMicroOps = 14;
2425 let ResourceCycles = [1,1,1,4,2,5];
2426}
2427def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2428
2429def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002430 let Latency = 16;
2431 let NumMicroOps = 16;
2432 let ResourceCycles = [16];
2433}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002434def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002435
Craig Topper8104f262018-04-02 05:33:28 +00002436def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002437 let Latency = 17;
2438 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002439 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002440}
Craig Topper8104f262018-04-02 05:33:28 +00002441def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2442
2443def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2444 let Latency = 17;
2445 let NumMicroOps = 2;
2446 let ResourceCycles = [1,1,3];
2447}
2448def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002449
2450def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002451 let Latency = 17;
2452 let NumMicroOps = 15;
2453 let ResourceCycles = [2,1,2,4,2,4];
2454}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002455def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002456
Craig Topper8104f262018-04-02 05:33:28 +00002457def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002458 let Latency = 18;
2459 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002460 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002461}
Craig Topper8104f262018-04-02 05:33:28 +00002462def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002463 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002464
Craig Topper8104f262018-04-02 05:33:28 +00002465def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2466 let Latency = 18;
2467 let NumMicroOps = 1;
2468 let ResourceCycles = [1,12];
2469}
2470def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2471
2472def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002473 let Latency = 18;
2474 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002475 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476}
Craig Topper8104f262018-04-02 05:33:28 +00002477def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2478
2479def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2480 let Latency = 18;
2481 let NumMicroOps = 2;
2482 let ResourceCycles = [1,1,3];
2483}
2484def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002485
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002486def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002487 let Latency = 18;
2488 let NumMicroOps = 8;
2489 let ResourceCycles = [1,1,1,5];
2490}
Craig Topperfc179c62018-03-22 04:23:41 +00002491def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002492
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002493def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002494 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002495 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002496 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002497}
Craig Topper13a16502018-03-19 00:56:09 +00002498def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002499
Craig Topper8104f262018-04-02 05:33:28 +00002500def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002501 let Latency = 19;
2502 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002503 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002504}
Craig Topper8104f262018-04-02 05:33:28 +00002505def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2506
2507def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2508 let Latency = 19;
2509 let NumMicroOps = 2;
2510 let ResourceCycles = [1,1,6];
2511}
2512def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002513
Craig Topper58afb4e2018-03-22 21:10:07 +00002514def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002515 let Latency = 19;
2516 let NumMicroOps = 5;
2517 let ResourceCycles = [1,1,3];
2518}
Craig Topperfc179c62018-03-22 04:23:41 +00002519def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002520
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002521def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002522 let Latency = 20;
2523 let NumMicroOps = 1;
2524 let ResourceCycles = [1];
2525}
Craig Topperfc179c62018-03-22 04:23:41 +00002526def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2527 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002528 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002529
Craig Topper8104f262018-04-02 05:33:28 +00002530def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002531 let Latency = 20;
2532 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002533 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002534}
Craig Topperfc179c62018-03-22 04:23:41 +00002535def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002536
Craig Topper58afb4e2018-03-22 21:10:07 +00002537def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002538 let Latency = 20;
2539 let NumMicroOps = 5;
2540 let ResourceCycles = [1,1,3];
2541}
2542def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2543
2544def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2545 let Latency = 20;
2546 let NumMicroOps = 8;
2547 let ResourceCycles = [1,1,1,1,1,1,2];
2548}
Craig Topperfc179c62018-03-22 04:23:41 +00002549def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2550 "INSL",
2551 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002552
2553def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002554 let Latency = 20;
2555 let NumMicroOps = 10;
2556 let ResourceCycles = [1,2,7];
2557}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002558def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002559
Craig Topper8104f262018-04-02 05:33:28 +00002560def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002561 let Latency = 21;
2562 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002563 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002564}
2565def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2566
2567def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2568 let Latency = 22;
2569 let NumMicroOps = 2;
2570 let ResourceCycles = [1,1];
2571}
Craig Topperfc179c62018-03-22 04:23:41 +00002572def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2573 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002574
2575def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2576 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002577 let NumMicroOps = 5;
2578 let ResourceCycles = [1,2,1,1];
2579}
Craig Topper17a31182017-12-16 18:35:29 +00002580def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2581 VGATHERDPDrm,
2582 VGATHERQPDrm,
2583 VGATHERQPSrm,
2584 VPGATHERDDrm,
2585 VPGATHERDQrm,
2586 VPGATHERQDrm,
2587 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002588
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002589def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2590 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002591 let NumMicroOps = 5;
2592 let ResourceCycles = [1,2,1,1];
2593}
Craig Topper17a31182017-12-16 18:35:29 +00002594def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2595 VGATHERQPDYrm,
2596 VGATHERQPSYrm,
2597 VPGATHERDDYrm,
2598 VPGATHERDQYrm,
2599 VPGATHERQDYrm,
2600 VPGATHERQQYrm,
2601 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002602
Craig Topper8104f262018-04-02 05:33:28 +00002603def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002604 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002605 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002606 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002607}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002608def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002609
2610def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2611 let Latency = 23;
2612 let NumMicroOps = 19;
2613 let ResourceCycles = [2,1,4,1,1,4,6];
2614}
2615def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2616
Craig Topper8104f262018-04-02 05:33:28 +00002617def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002618 let Latency = 24;
2619 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002620 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002621}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002622def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002623
Craig Topper8104f262018-04-02 05:33:28 +00002624def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002625 let Latency = 25;
2626 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002627 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002628}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002629def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002630
2631def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2632 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002633 let NumMicroOps = 3;
2634 let ResourceCycles = [1,1,1];
2635}
Craig Topperfc179c62018-03-22 04:23:41 +00002636def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2637 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002638
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002639def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2640 let Latency = 27;
2641 let NumMicroOps = 2;
2642 let ResourceCycles = [1,1];
2643}
Craig Topperfc179c62018-03-22 04:23:41 +00002644def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2645 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002646
2647def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2648 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002649 let NumMicroOps = 8;
2650 let ResourceCycles = [2,4,1,1];
2651}
Craig Topper13a16502018-03-19 00:56:09 +00002652def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002653
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002654def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002655 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002656 let NumMicroOps = 3;
2657 let ResourceCycles = [1,1,1];
2658}
Craig Topperfc179c62018-03-22 04:23:41 +00002659def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2660 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002661
2662def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2663 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002664 let NumMicroOps = 23;
2665 let ResourceCycles = [1,5,3,4,10];
2666}
Craig Topperfc179c62018-03-22 04:23:41 +00002667def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2668 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002669
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002670def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2671 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002672 let NumMicroOps = 23;
2673 let ResourceCycles = [1,5,2,1,4,10];
2674}
Craig Topperfc179c62018-03-22 04:23:41 +00002675def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2676 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002677
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002678def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2679 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002680 let NumMicroOps = 31;
2681 let ResourceCycles = [1,8,1,21];
2682}
Craig Topper391c6f92017-12-10 01:24:08 +00002683def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002684
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002685def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2686 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002687 let NumMicroOps = 18;
2688 let ResourceCycles = [1,1,2,3,1,1,1,8];
2689}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002690def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002691
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002692def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2693 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002694 let NumMicroOps = 39;
2695 let ResourceCycles = [1,10,1,1,26];
2696}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002697def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002698
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002699def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002700 let Latency = 42;
2701 let NumMicroOps = 22;
2702 let ResourceCycles = [2,20];
2703}
Craig Topper2d451e72018-03-18 08:38:06 +00002704def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002705
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002706def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2707 let Latency = 42;
2708 let NumMicroOps = 40;
2709 let ResourceCycles = [1,11,1,1,26];
2710}
Craig Topper391c6f92017-12-10 01:24:08 +00002711def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002712
2713def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2714 let Latency = 46;
2715 let NumMicroOps = 44;
2716 let ResourceCycles = [1,11,1,1,30];
2717}
2718def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2719
2720def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2721 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002722 let NumMicroOps = 64;
2723 let ResourceCycles = [2,8,5,10,39];
2724}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002725def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002726
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002727def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2728 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002729 let NumMicroOps = 88;
2730 let ResourceCycles = [4,4,31,1,2,1,45];
2731}
Craig Topper2d451e72018-03-18 08:38:06 +00002732def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002733
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002734def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2735 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002736 let NumMicroOps = 90;
2737 let ResourceCycles = [4,2,33,1,2,1,47];
2738}
Craig Topper2d451e72018-03-18 08:38:06 +00002739def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002740
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002741def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002742 let Latency = 75;
2743 let NumMicroOps = 15;
2744 let ResourceCycles = [6,3,6];
2745}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002746def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002747
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002748def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002749 let Latency = 76;
2750 let NumMicroOps = 32;
2751 let ResourceCycles = [7,2,8,3,1,11];
2752}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002753def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002754
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002755def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002756 let Latency = 102;
2757 let NumMicroOps = 66;
2758 let ResourceCycles = [4,2,4,8,14,34];
2759}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002760def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002761
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002762def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2763 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002764 let NumMicroOps = 100;
2765 let ResourceCycles = [9,1,11,16,1,11,21,30];
2766}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002767def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002768
2769} // SchedModel