blob: 1665527f7c6b252df739bfb3ccbf18ebc7ed338f [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 Pilgrim06e16542018-04-22 18:35:53 +0000167defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000168defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000169
170// FMA Scheduling helper class.
171// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
172
173// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000174def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
175def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
176def : WriteRes<WriteVecMove, [SKLPort015]>;
177
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000178defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000179defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
181defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000182defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000184defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000185defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000186defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000187defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000188defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000189
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000191defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
192defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
193defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000194
195// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000197// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000198def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
199 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000200 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000201 let ResourceCycles = [3];
202}
203def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000204 let Latency = 16;
205 let NumMicroOps = 4;
206 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000207}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000208
209// Packed Compare Explicit Length Strings, Return Mask
210def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
211 let Latency = 19;
212 let NumMicroOps = 9;
213 let ResourceCycles = [4,3,1,1];
214}
215def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
216 let Latency = 25;
217 let NumMicroOps = 10;
218 let ResourceCycles = [4,3,1,1,1];
219}
220
221// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000222def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000223 let Latency = 10;
224 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000225 let ResourceCycles = [3];
226}
227def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000228 let Latency = 16;
229 let NumMicroOps = 4;
230 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000232
233// Packed Compare Explicit Length Strings, Return Index
234def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
235 let Latency = 18;
236 let NumMicroOps = 8;
237 let ResourceCycles = [4,3,1];
238}
239def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
240 let Latency = 24;
241 let NumMicroOps = 9;
242 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000243}
244
Simon Pilgrima2f26782018-03-27 20:38:54 +0000245// MOVMSK Instructions.
246def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
247def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
248def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
249
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000250// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000251def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
252 let Latency = 4;
253 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000254 let ResourceCycles = [1];
255}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
257 let Latency = 10;
258 let NumMicroOps = 2;
259 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000260}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261
262def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
263 let Latency = 8;
264 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265 let ResourceCycles = [2];
266}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000268 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000269 let NumMicroOps = 3;
270 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000272
273def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
274 let Latency = 20;
275 let NumMicroOps = 11;
276 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000278def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
279 let Latency = 25;
280 let NumMicroOps = 11;
281 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000282}
283
284// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000285def : WriteRes<WriteCLMul, [SKLPort5]> {
286 let Latency = 6;
287 let NumMicroOps = 1;
288 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000289}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000290def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
291 let Latency = 12;
292 let NumMicroOps = 2;
293 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000294}
295
296// Catch-all for expensive system instructions.
297def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
298
299// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000300defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000301defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000302defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000303defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000304defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305
306// Old microcoded instructions that nobody use.
307def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
308
309// Fence instructions.
310def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
311
Craig Topper05242bf2018-04-21 18:07:36 +0000312// Load/store MXCSR.
313def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
314def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
315
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000316// Nop, not very useful expect it provides a model for nops!
317def : WriteRes<WriteNop, []>;
318
319////////////////////////////////////////////////////////////////////////////////
320// Horizontal add/sub instructions.
321////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000322
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000323defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000324defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000325
326// Remaining instrs.
327
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000328def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000329 let Latency = 1;
330 let NumMicroOps = 1;
331 let ResourceCycles = [1];
332}
Craig Topperfc179c62018-03-22 04:23:41 +0000333def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
334 "MMX_PADDSWirr",
335 "MMX_PADDUSBirr",
336 "MMX_PADDUSWirr",
337 "MMX_PAVGBirr",
338 "MMX_PAVGWirr",
339 "MMX_PCMPEQBirr",
340 "MMX_PCMPEQDirr",
341 "MMX_PCMPEQWirr",
342 "MMX_PCMPGTBirr",
343 "MMX_PCMPGTDirr",
344 "MMX_PCMPGTWirr",
345 "MMX_PMAXSWirr",
346 "MMX_PMAXUBirr",
347 "MMX_PMINSWirr",
348 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000349 "MMX_PSUBSBirr",
350 "MMX_PSUBSWirr",
351 "MMX_PSUBUSBirr",
352 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000353
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000354def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000355 let Latency = 1;
356 let NumMicroOps = 1;
357 let ResourceCycles = [1];
358}
Craig Topperfc179c62018-03-22 04:23:41 +0000359def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
360 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000361 "MMX_MOVD64rr",
362 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000363 "UCOM_FPr",
364 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000365 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000366 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000367 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000368 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000369
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000370def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000371 let Latency = 1;
372 let NumMicroOps = 1;
373 let ResourceCycles = [1];
374}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000375def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000376
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000377def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000378 let Latency = 1;
379 let NumMicroOps = 1;
380 let ResourceCycles = [1];
381}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000382def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
383 "(V?)PABSD(Y?)rr",
384 "(V?)PABSW(Y?)rr",
385 "(V?)PADDSB(Y?)rr",
386 "(V?)PADDSW(Y?)rr",
387 "(V?)PADDUSB(Y?)rr",
388 "(V?)PADDUSW(Y?)rr",
389 "(V?)PAVGB(Y?)rr",
390 "(V?)PAVGW(Y?)rr",
391 "(V?)PCMPEQB(Y?)rr",
392 "(V?)PCMPEQD(Y?)rr",
393 "(V?)PCMPEQQ(Y?)rr",
394 "(V?)PCMPEQW(Y?)rr",
395 "(V?)PCMPGTB(Y?)rr",
396 "(V?)PCMPGTD(Y?)rr",
397 "(V?)PCMPGTW(Y?)rr",
398 "(V?)PMAXSB(Y?)rr",
399 "(V?)PMAXSD(Y?)rr",
400 "(V?)PMAXSW(Y?)rr",
401 "(V?)PMAXUB(Y?)rr",
402 "(V?)PMAXUD(Y?)rr",
403 "(V?)PMAXUW(Y?)rr",
404 "(V?)PMINSB(Y?)rr",
405 "(V?)PMINSD(Y?)rr",
406 "(V?)PMINSW(Y?)rr",
407 "(V?)PMINUB(Y?)rr",
408 "(V?)PMINUD(Y?)rr",
409 "(V?)PMINUW(Y?)rr",
410 "(V?)PSIGNB(Y?)rr",
411 "(V?)PSIGND(Y?)rr",
412 "(V?)PSIGNW(Y?)rr",
413 "(V?)PSLLD(Y?)ri",
414 "(V?)PSLLQ(Y?)ri",
415 "VPSLLVD(Y?)rr",
416 "VPSLLVQ(Y?)rr",
417 "(V?)PSLLW(Y?)ri",
418 "(V?)PSRAD(Y?)ri",
419 "VPSRAVD(Y?)rr",
420 "(V?)PSRAW(Y?)ri",
421 "(V?)PSRLD(Y?)ri",
422 "(V?)PSRLQ(Y?)ri",
423 "VPSRLVD(Y?)rr",
424 "VPSRLVQ(Y?)rr",
425 "(V?)PSRLW(Y?)ri",
426 "(V?)PSUBSB(Y?)rr",
427 "(V?)PSUBSW(Y?)rr",
428 "(V?)PSUBUSB(Y?)rr",
429 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000430
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000431def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000432 let Latency = 1;
433 let NumMicroOps = 1;
434 let ResourceCycles = [1];
435}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000436def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
437def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000438 "MMX_PABS(B|D|W)rr",
439 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000440 "MMX_PANDNirr",
441 "MMX_PANDirr",
442 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000443 "MMX_PSIGN(B|D|W)rr",
444 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000445 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000446
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000447def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000448 let Latency = 1;
449 let NumMicroOps = 1;
450 let ResourceCycles = [1];
451}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000452def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000453def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
454 "ADC(16|32|64)i",
455 "ADC(8|16|32|64)rr",
456 "ADCX(32|64)rr",
457 "ADOX(32|64)rr",
458 "BT(16|32|64)ri8",
459 "BT(16|32|64)rr",
460 "BTC(16|32|64)ri8",
461 "BTC(16|32|64)rr",
462 "BTR(16|32|64)ri8",
463 "BTR(16|32|64)rr",
464 "BTS(16|32|64)ri8",
465 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000466 "RORX(32|64)ri",
467 "SAR(8|16|32|64)r1",
468 "SAR(8|16|32|64)ri",
469 "SARX(32|64)rr",
470 "SBB(16|32|64)ri",
471 "SBB(16|32|64)i",
472 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000473 "SHL(8|16|32|64)r1",
474 "SHL(8|16|32|64)ri",
475 "SHLX(32|64)rr",
476 "SHR(8|16|32|64)r1",
477 "SHR(8|16|32|64)ri",
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000478 "SHRX(32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000479
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000480def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
481 let Latency = 1;
482 let NumMicroOps = 1;
483 let ResourceCycles = [1];
484}
Craig Topperfc179c62018-03-22 04:23:41 +0000485def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
486 "BLSI(32|64)rr",
487 "BLSMSK(32|64)rr",
488 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000489 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000490
491def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
492 let Latency = 1;
493 let NumMicroOps = 1;
494 let ResourceCycles = [1];
495}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000496def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000497 "(V?)PADDD(Y?)rr",
498 "(V?)PADDQ(Y?)rr",
499 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000500 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000501 "(V?)PSUBB(Y?)rr",
502 "(V?)PSUBD(Y?)rr",
503 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000504 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000505
506def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
507 let Latency = 1;
508 let NumMicroOps = 1;
509 let ResourceCycles = [1];
510}
Craig Topperfbe31322018-04-05 21:56:19 +0000511def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000512def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000513 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000514 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000515 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000516 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000517 "SGDT64m",
518 "SIDT64m",
519 "SLDT64m",
520 "SMSW16m",
521 "STC",
522 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000523 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000524
525def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000526 let Latency = 1;
527 let NumMicroOps = 2;
528 let ResourceCycles = [1,1];
529}
Craig Topperfc179c62018-03-22 04:23:41 +0000530def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
531 "MMX_MOVD64from64rm",
532 "MMX_MOVD64mr",
533 "MMX_MOVNTQmr",
534 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000535 "MOVNTI_64mr",
536 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000537 "ST_FP32m",
538 "ST_FP64m",
539 "ST_FP80m",
540 "VEXTRACTF128mr",
541 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000542 "(V?)MOVAPDYmr",
543 "(V?)MOVAPS(Y?)mr",
544 "(V?)MOVDQA(Y?)mr",
545 "(V?)MOVDQU(Y?)mr",
546 "(V?)MOVHPDmr",
547 "(V?)MOVHPSmr",
548 "(V?)MOVLPDmr",
549 "(V?)MOVLPSmr",
550 "(V?)MOVNTDQ(Y?)mr",
551 "(V?)MOVNTPD(Y?)mr",
552 "(V?)MOVNTPS(Y?)mr",
553 "(V?)MOVPDI2DImr",
554 "(V?)MOVPQI2QImr",
555 "(V?)MOVPQIto64mr",
556 "(V?)MOVSDmr",
557 "(V?)MOVSSmr",
558 "(V?)MOVUPD(Y?)mr",
559 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000560 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000561
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000562def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000563 let Latency = 2;
564 let NumMicroOps = 1;
565 let ResourceCycles = [1];
566}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000567def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000568 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000569 "(V?)MOVPDI2DIrr",
570 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000571 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000572 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000573
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000574def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000575 let Latency = 2;
576 let NumMicroOps = 2;
577 let ResourceCycles = [2];
578}
Craig Topperfc179c62018-03-22 04:23:41 +0000579def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
580 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000581 "(V?)PINSRBrr",
582 "(V?)PINSRDrr",
583 "(V?)PINSRQrr",
584 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000585
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000586def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000587 let Latency = 2;
588 let NumMicroOps = 2;
589 let ResourceCycles = [2];
590}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000591def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
592def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000593
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000594def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000595 let Latency = 2;
596 let NumMicroOps = 2;
597 let ResourceCycles = [2];
598}
Craig Topperfc179c62018-03-22 04:23:41 +0000599def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
600 "ROL(8|16|32|64)r1",
601 "ROL(8|16|32|64)ri",
602 "ROR(8|16|32|64)r1",
603 "ROR(8|16|32|64)ri",
604 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000605
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000606def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000607 let Latency = 2;
608 let NumMicroOps = 2;
609 let ResourceCycles = [2];
610}
Craig Topperfc179c62018-03-22 04:23:41 +0000611def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
612 "WAIT",
613 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000614
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000615def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000616 let Latency = 2;
617 let NumMicroOps = 2;
618 let ResourceCycles = [1,1];
619}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000620def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
621 "VMASKMOVPS(Y?)mr",
622 "VPMASKMOVD(Y?)mr",
623 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000624
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000625def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000626 let Latency = 2;
627 let NumMicroOps = 2;
628 let ResourceCycles = [1,1];
629}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000630def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
631 "(V?)PSLLQrr",
632 "(V?)PSLLWrr",
633 "(V?)PSRADrr",
634 "(V?)PSRAWrr",
635 "(V?)PSRLDrr",
636 "(V?)PSRLQrr",
637 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000638
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000639def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000640 let Latency = 2;
641 let NumMicroOps = 2;
642 let ResourceCycles = [1,1];
643}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000644def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000645
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000646def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000647 let Latency = 2;
648 let NumMicroOps = 2;
649 let ResourceCycles = [1,1];
650}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000651def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000652
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000653def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000654 let Latency = 2;
655 let NumMicroOps = 2;
656 let ResourceCycles = [1,1];
657}
Craig Topper498875f2018-04-04 17:54:19 +0000658def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
659
660def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
661 let Latency = 1;
662 let NumMicroOps = 1;
663 let ResourceCycles = [1];
664}
665def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000666
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000667def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000668 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000669 let NumMicroOps = 2;
670 let ResourceCycles = [1,1];
671}
Craig Topper2d451e72018-03-18 08:38:06 +0000672def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000673def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000674def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
675 "ADC8ri",
676 "SBB8i8",
677 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000678
679def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
680 let Latency = 2;
681 let NumMicroOps = 3;
682 let ResourceCycles = [1,1,1];
683}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000684def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
685 "(V?)PEXTRBmr",
686 "(V?)PEXTRDmr",
687 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000688 "(V?)PEXTRWmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000689
690def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
691 let Latency = 2;
692 let NumMicroOps = 3;
693 let ResourceCycles = [1,1,1];
694}
695def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
696
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000697def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
698 let Latency = 2;
699 let NumMicroOps = 3;
700 let ResourceCycles = [1,1,1];
701}
702def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
703
704def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
705 let Latency = 2;
706 let NumMicroOps = 3;
707 let ResourceCycles = [1,1,1];
708}
Craig Topper2d451e72018-03-18 08:38:06 +0000709def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000710def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
711 "PUSH64i8",
712 "STOSB",
713 "STOSL",
714 "STOSQ",
715 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000716
717def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
718 let Latency = 3;
719 let NumMicroOps = 1;
720 let ResourceCycles = [1];
721}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000722def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000723 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000724 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000725 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000726
Clement Courbet327fac42018-03-07 08:14:02 +0000727def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000728 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000729 let NumMicroOps = 2;
730 let ResourceCycles = [1,1];
731}
Clement Courbet327fac42018-03-07 08:14:02 +0000732def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000733
734def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
735 let Latency = 3;
736 let NumMicroOps = 1;
737 let ResourceCycles = [1];
738}
Craig Topperfc179c62018-03-22 04:23:41 +0000739def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
740 "ADD_FST0r",
741 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000742 "SUBR_FPrST0",
743 "SUBR_FST0r",
744 "SUBR_FrST0",
745 "SUB_FPrST0",
746 "SUB_FST0r",
747 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000748 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000749 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000750 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000751 "VPMOVSXBDYrr",
752 "VPMOVSXBQYrr",
753 "VPMOVSXBWYrr",
754 "VPMOVSXDQYrr",
755 "VPMOVSXWDYrr",
756 "VPMOVSXWQYrr",
757 "VPMOVZXBDYrr",
758 "VPMOVZXBQYrr",
759 "VPMOVZXBWYrr",
760 "VPMOVZXDQYrr",
761 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000762 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000763
764def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
765 let Latency = 3;
766 let NumMicroOps = 2;
767 let ResourceCycles = [1,1];
768}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000769def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
770 "(V?)EXTRACTPSrr",
771 "(V?)PEXTRBrr",
772 "(V?)PEXTRDrr",
773 "(V?)PEXTRQrr",
774 "(V?)PEXTRWrr",
775 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000776
777def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
778 let Latency = 3;
779 let NumMicroOps = 2;
780 let ResourceCycles = [1,1];
781}
782def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
783
784def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
785 let Latency = 3;
786 let NumMicroOps = 3;
787 let ResourceCycles = [3];
788}
Craig Topperfc179c62018-03-22 04:23:41 +0000789def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
790 "ROR(8|16|32|64)rCL",
791 "SAR(8|16|32|64)rCL",
792 "SHL(8|16|32|64)rCL",
793 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000794
795def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000796 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000797 let NumMicroOps = 3;
798 let ResourceCycles = [3];
799}
Craig Topperb5f26592018-04-19 18:00:17 +0000800def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
801 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
802 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000803
804def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
805 let Latency = 3;
806 let NumMicroOps = 3;
807 let ResourceCycles = [1,2];
808}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000809def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000810
811def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
812 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000813 let NumMicroOps = 3;
814 let ResourceCycles = [2,1];
815}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000816def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
817 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000818
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000819def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
820 let Latency = 3;
821 let NumMicroOps = 3;
822 let ResourceCycles = [2,1];
823}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000824def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000825
826def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
827 let Latency = 3;
828 let NumMicroOps = 3;
829 let ResourceCycles = [2,1];
830}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000831def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
832 "(V?)PHADDW(Y?)rr",
833 "(V?)PHSUBD(Y?)rr",
834 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000835
836def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
837 let Latency = 3;
838 let NumMicroOps = 3;
839 let ResourceCycles = [2,1];
840}
Craig Topperfc179c62018-03-22 04:23:41 +0000841def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
842 "MMX_PACKSSWBirr",
843 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000844
845def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
846 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000847 let NumMicroOps = 3;
848 let ResourceCycles = [1,2];
849}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000850def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000851
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000852def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
853 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000854 let NumMicroOps = 3;
855 let ResourceCycles = [1,2];
856}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000857def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000858
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000859def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
860 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000861 let NumMicroOps = 3;
862 let ResourceCycles = [1,2];
863}
Craig Topperfc179c62018-03-22 04:23:41 +0000864def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
865 "RCL(8|16|32|64)ri",
866 "RCR(8|16|32|64)r1",
867 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000868
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000869def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
870 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000871 let NumMicroOps = 3;
872 let ResourceCycles = [1,1,1];
873}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000874def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000875
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000876def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
877 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000878 let NumMicroOps = 4;
879 let ResourceCycles = [1,1,2];
880}
Craig Topperf4cd9082018-01-19 05:47:32 +0000881def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000882
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000883def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
884 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000885 let NumMicroOps = 4;
886 let ResourceCycles = [1,1,1,1];
887}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000888def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000889
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000890def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
891 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000892 let NumMicroOps = 4;
893 let ResourceCycles = [1,1,1,1];
894}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000895def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000896
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000897def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000898 let Latency = 4;
899 let NumMicroOps = 1;
900 let ResourceCycles = [1];
901}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000902def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000903 "MMX_PMADDWDirr",
904 "MMX_PMULHRSWrr",
905 "MMX_PMULHUWirr",
906 "MMX_PMULHWirr",
907 "MMX_PMULLWirr",
908 "MMX_PMULUDQirr",
909 "MUL_FPrST0",
910 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000911 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000912
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000913def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000914 let Latency = 4;
915 let NumMicroOps = 1;
916 let ResourceCycles = [1];
917}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000918def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
919 "(V?)ADDPS(Y?)rr",
920 "(V?)ADDSDrr",
921 "(V?)ADDSSrr",
922 "(V?)ADDSUBPD(Y?)rr",
923 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000924 "(V?)CVTDQ2PS(Y?)rr",
925 "(V?)CVTPS2DQ(Y?)rr",
926 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000927 "(V?)MULPD(Y?)rr",
928 "(V?)MULPS(Y?)rr",
929 "(V?)MULSDrr",
930 "(V?)MULSSrr",
931 "(V?)PHMINPOSUWrr",
932 "(V?)PMADDUBSW(Y?)rr",
933 "(V?)PMADDWD(Y?)rr",
934 "(V?)PMULDQ(Y?)rr",
935 "(V?)PMULHRSW(Y?)rr",
936 "(V?)PMULHUW(Y?)rr",
937 "(V?)PMULHW(Y?)rr",
938 "(V?)PMULLW(Y?)rr",
939 "(V?)PMULUDQ(Y?)rr",
940 "(V?)SUBPD(Y?)rr",
941 "(V?)SUBPS(Y?)rr",
942 "(V?)SUBSDrr",
943 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000944
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000945def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000946 let Latency = 4;
947 let NumMicroOps = 2;
948 let ResourceCycles = [1,1];
949}
Craig Topperf846e2d2018-04-19 05:34:05 +0000950def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000951
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000952def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
953 let Latency = 4;
954 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000955 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000956}
Craig Topperfc179c62018-03-22 04:23:41 +0000957def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000958
959def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000960 let Latency = 4;
961 let NumMicroOps = 2;
962 let ResourceCycles = [1,1];
963}
Craig Topperfc179c62018-03-22 04:23:41 +0000964def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
965 "VPSLLQYrr",
966 "VPSLLWYrr",
967 "VPSRADYrr",
968 "VPSRAWYrr",
969 "VPSRLDYrr",
970 "VPSRLQYrr",
971 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000972
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000973def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000974 let Latency = 4;
975 let NumMicroOps = 3;
976 let ResourceCycles = [1,1,1];
977}
Craig Topperfc179c62018-03-22 04:23:41 +0000978def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
979 "ISTT_FP32m",
980 "ISTT_FP64m",
981 "IST_F16m",
982 "IST_F32m",
983 "IST_FP16m",
984 "IST_FP32m",
985 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000986
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000987def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000988 let Latency = 4;
989 let NumMicroOps = 4;
990 let ResourceCycles = [4];
991}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000992def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000993
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000994def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000995 let Latency = 4;
996 let NumMicroOps = 4;
997 let ResourceCycles = [1,3];
998}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000999def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001000
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001001def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001002 let Latency = 4;
1003 let NumMicroOps = 4;
1004 let ResourceCycles = [1,3];
1005}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001006def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001007
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001008def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001009 let Latency = 4;
1010 let NumMicroOps = 4;
1011 let ResourceCycles = [1,1,2];
1012}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001013def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001014
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001015def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1016 let Latency = 5;
1017 let NumMicroOps = 1;
1018 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001019}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001020def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001021 "MOVSX(16|32|64)rm32",
1022 "MOVSX(16|32|64)rm8",
1023 "MOVZX(16|32|64)rm16",
1024 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001025 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001026
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001027def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001028 let Latency = 5;
1029 let NumMicroOps = 2;
1030 let ResourceCycles = [1,1];
1031}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001032def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1033 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001034
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001035def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001036 let Latency = 5;
1037 let NumMicroOps = 2;
1038 let ResourceCycles = [1,1];
1039}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001040def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001041 "MMX_CVTPS2PIirr",
1042 "MMX_CVTTPD2PIirr",
1043 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001044 "(V?)CVTPD2DQrr",
1045 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001046 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001047 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001048 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001049 "(V?)CVTSD2SSrr",
1050 "(V?)CVTSI642SDrr",
1051 "(V?)CVTSI2SDrr",
1052 "(V?)CVTSI2SSrr",
1053 "(V?)CVTSS2SDrr",
1054 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001055
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001056def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001057 let Latency = 5;
1058 let NumMicroOps = 3;
1059 let ResourceCycles = [1,1,1];
1060}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001061def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001062
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001063def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001064 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065 let NumMicroOps = 3;
1066 let ResourceCycles = [1,1,1];
1067}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001068def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001069
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001070def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001071 let Latency = 5;
1072 let NumMicroOps = 5;
1073 let ResourceCycles = [1,4];
1074}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001075def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001076
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001077def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001078 let Latency = 5;
1079 let NumMicroOps = 5;
1080 let ResourceCycles = [2,3];
1081}
Craig Topper13a16502018-03-19 00:56:09 +00001082def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001083
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001084def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001085 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001086 let NumMicroOps = 6;
1087 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001088}
Craig Topperfc179c62018-03-22 04:23:41 +00001089def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1090 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001091
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001092def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1093 let Latency = 6;
1094 let NumMicroOps = 1;
1095 let ResourceCycles = [1];
1096}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001097def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001098 "(V?)MOVSHDUPrm",
1099 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001100 "VPBROADCASTDrm",
1101 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001102
1103def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001104 let Latency = 6;
1105 let NumMicroOps = 2;
1106 let ResourceCycles = [2];
1107}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001108def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001109
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001110def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001111 let Latency = 6;
1112 let NumMicroOps = 2;
1113 let ResourceCycles = [1,1];
1114}
Craig Topperfc179c62018-03-22 04:23:41 +00001115def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1116 "MMX_PADDSWirm",
1117 "MMX_PADDUSBirm",
1118 "MMX_PADDUSWirm",
1119 "MMX_PAVGBirm",
1120 "MMX_PAVGWirm",
1121 "MMX_PCMPEQBirm",
1122 "MMX_PCMPEQDirm",
1123 "MMX_PCMPEQWirm",
1124 "MMX_PCMPGTBirm",
1125 "MMX_PCMPGTDirm",
1126 "MMX_PCMPGTWirm",
1127 "MMX_PMAXSWirm",
1128 "MMX_PMAXUBirm",
1129 "MMX_PMINSWirm",
1130 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001131 "MMX_PSUBSBirm",
1132 "MMX_PSUBSWirm",
1133 "MMX_PSUBUSBirm",
1134 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001135
Craig Topper58afb4e2018-03-22 21:10:07 +00001136def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001137 let Latency = 6;
1138 let NumMicroOps = 2;
1139 let ResourceCycles = [1,1];
1140}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001141def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1142 "(V?)CVTSD2SIrr",
1143 "(V?)CVTSS2SI64rr",
1144 "(V?)CVTSS2SIrr",
1145 "(V?)CVTTSD2SI64rr",
1146 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001147
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001148def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1149 let Latency = 6;
1150 let NumMicroOps = 2;
1151 let ResourceCycles = [1,1];
1152}
Simon Pilgrim0a334a82018-04-23 11:57:15 +00001153def: InstRW<[SKLWriteResGroup71], (instregex "(V?)MOVHPDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001154 "(V?)MOVHPSrm",
1155 "(V?)MOVLPDrm",
1156 "(V?)MOVLPSrm",
1157 "(V?)PINSRBrm",
1158 "(V?)PINSRDrm",
1159 "(V?)PINSRQrm",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001160 "(V?)PINSRWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001161
1162def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1163 let Latency = 6;
1164 let NumMicroOps = 2;
1165 let ResourceCycles = [1,1];
1166}
Craig Topperfc179c62018-03-22 04:23:41 +00001167def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1168 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001169
1170def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1171 let Latency = 6;
1172 let NumMicroOps = 2;
1173 let ResourceCycles = [1,1];
1174}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001175def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1176 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001177 "MMX_PANDNirm",
1178 "MMX_PANDirm",
1179 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001180 "MMX_PSIGN(B|D|W)rm",
1181 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001182 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001183
1184def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1185 let Latency = 6;
1186 let NumMicroOps = 2;
1187 let ResourceCycles = [1,1];
1188}
Craig Topperc50570f2018-04-06 17:12:18 +00001189def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001190 "RORX(32|64)mi",
1191 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001192 "SHLX(32|64)rm",
1193 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001194def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1195 ADCX32rm, ADCX64rm,
1196 ADOX32rm, ADOX64rm,
1197 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001198
1199def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1200 let Latency = 6;
1201 let NumMicroOps = 2;
1202 let ResourceCycles = [1,1];
1203}
Craig Topperfc179c62018-03-22 04:23:41 +00001204def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1205 "BLSI(32|64)rm",
1206 "BLSMSK(32|64)rm",
1207 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001208 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001209
1210def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1211 let Latency = 6;
1212 let NumMicroOps = 2;
1213 let ResourceCycles = [1,1];
1214}
Craig Topper2d451e72018-03-18 08:38:06 +00001215def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001216def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001217
Craig Topper58afb4e2018-03-22 21:10:07 +00001218def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001219 let Latency = 6;
1220 let NumMicroOps = 3;
1221 let ResourceCycles = [2,1];
1222}
Craig Topperfc179c62018-03-22 04:23:41 +00001223def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001224
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001225def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001226 let Latency = 6;
1227 let NumMicroOps = 4;
1228 let ResourceCycles = [1,2,1];
1229}
Craig Topperfc179c62018-03-22 04:23:41 +00001230def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1231 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001232
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001233def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001234 let Latency = 6;
1235 let NumMicroOps = 4;
1236 let ResourceCycles = [1,1,1,1];
1237}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001238def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001239
Craig Topper58afb4e2018-03-22 21:10:07 +00001240def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001241 let Latency = 6;
1242 let NumMicroOps = 4;
1243 let ResourceCycles = [1,1,1,1];
1244}
1245def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1246
1247def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1248 let Latency = 6;
1249 let NumMicroOps = 4;
1250 let ResourceCycles = [1,1,1,1];
1251}
Craig Topperfc179c62018-03-22 04:23:41 +00001252def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1253 "BTR(16|32|64)mi8",
1254 "BTS(16|32|64)mi8",
1255 "SAR(8|16|32|64)m1",
1256 "SAR(8|16|32|64)mi",
1257 "SHL(8|16|32|64)m1",
1258 "SHL(8|16|32|64)mi",
1259 "SHR(8|16|32|64)m1",
1260 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001261
1262def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1263 let Latency = 6;
1264 let NumMicroOps = 4;
1265 let ResourceCycles = [1,1,1,1];
1266}
Craig Topperf0d04262018-04-06 16:16:48 +00001267def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1268 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001269
1270def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001271 let Latency = 6;
1272 let NumMicroOps = 6;
1273 let ResourceCycles = [1,5];
1274}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001275def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001276
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001277def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1278 let Latency = 7;
1279 let NumMicroOps = 1;
1280 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001281}
Craig Topperfc179c62018-03-22 04:23:41 +00001282def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1283 "LD_F64m",
1284 "LD_F80m",
1285 "VBROADCASTF128",
1286 "VBROADCASTI128",
1287 "VBROADCASTSDYrm",
1288 "VBROADCASTSSYrm",
1289 "VLDDQUYrm",
1290 "VMOVAPDYrm",
1291 "VMOVAPSYrm",
1292 "VMOVDDUPYrm",
1293 "VMOVDQAYrm",
1294 "VMOVDQUYrm",
1295 "VMOVNTDQAYrm",
1296 "VMOVSHDUPYrm",
1297 "VMOVSLDUPYrm",
1298 "VMOVUPDYrm",
1299 "VMOVUPSYrm",
1300 "VPBROADCASTDYrm",
1301 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001302
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001303def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001304 let Latency = 7;
1305 let NumMicroOps = 2;
1306 let ResourceCycles = [1,1];
1307}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001308def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001309
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001310def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1311 let Latency = 7;
1312 let NumMicroOps = 2;
1313 let ResourceCycles = [1,1];
1314}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001315def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1316 "(V?)PACKSSDWrm",
1317 "(V?)PACKSSWBrm",
1318 "(V?)PACKUSDWrm",
1319 "(V?)PACKUSWBrm",
1320 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001321 "VPBROADCASTBrm",
1322 "VPBROADCASTWrm",
1323 "VPERMILPDmi",
1324 "VPERMILPDrm",
1325 "VPERMILPSmi",
1326 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001327 "(V?)PSHUFBrm",
1328 "(V?)PSHUFDmi",
1329 "(V?)PSHUFHWmi",
1330 "(V?)PSHUFLWmi",
1331 "(V?)PUNPCKHBWrm",
1332 "(V?)PUNPCKHDQrm",
1333 "(V?)PUNPCKHQDQrm",
1334 "(V?)PUNPCKHWDrm",
1335 "(V?)PUNPCKLBWrm",
1336 "(V?)PUNPCKLDQrm",
1337 "(V?)PUNPCKLQDQrm",
1338 "(V?)PUNPCKLWDrm",
1339 "(V?)SHUFPDrmi",
1340 "(V?)SHUFPSrmi",
1341 "(V?)UNPCKHPDrm",
1342 "(V?)UNPCKHPSrm",
1343 "(V?)UNPCKLPDrm",
1344 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001345
Craig Topper58afb4e2018-03-22 21:10:07 +00001346def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001347 let Latency = 7;
1348 let NumMicroOps = 2;
1349 let ResourceCycles = [1,1];
1350}
Craig Topperfc179c62018-03-22 04:23:41 +00001351def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1352 "VCVTPD2PSYrr",
1353 "VCVTPH2PSYrr",
1354 "VCVTPS2PDYrr",
1355 "VCVTPS2PHYrr",
1356 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001357
1358def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1359 let Latency = 7;
1360 let NumMicroOps = 2;
1361 let ResourceCycles = [1,1];
1362}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001363def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1364 "(V?)PABSDrm",
1365 "(V?)PABSWrm",
1366 "(V?)PADDSBrm",
1367 "(V?)PADDSWrm",
1368 "(V?)PADDUSBrm",
1369 "(V?)PADDUSWrm",
1370 "(V?)PAVGBrm",
1371 "(V?)PAVGWrm",
1372 "(V?)PCMPEQBrm",
1373 "(V?)PCMPEQDrm",
1374 "(V?)PCMPEQQrm",
1375 "(V?)PCMPEQWrm",
1376 "(V?)PCMPGTBrm",
1377 "(V?)PCMPGTDrm",
1378 "(V?)PCMPGTWrm",
1379 "(V?)PMAXSBrm",
1380 "(V?)PMAXSDrm",
1381 "(V?)PMAXSWrm",
1382 "(V?)PMAXUBrm",
1383 "(V?)PMAXUDrm",
1384 "(V?)PMAXUWrm",
1385 "(V?)PMINSBrm",
1386 "(V?)PMINSDrm",
1387 "(V?)PMINSWrm",
1388 "(V?)PMINUBrm",
1389 "(V?)PMINUDrm",
1390 "(V?)PMINUWrm",
1391 "(V?)PSIGNBrm",
1392 "(V?)PSIGNDrm",
1393 "(V?)PSIGNWrm",
1394 "(V?)PSLLDrm",
1395 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001396 "VPSLLVDrm",
1397 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001398 "(V?)PSLLWrm",
1399 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001400 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001401 "(V?)PSRAWrm",
1402 "(V?)PSRLDrm",
1403 "(V?)PSRLQrm",
1404 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001405 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001406 "(V?)PSRLWrm",
1407 "(V?)PSUBSBrm",
1408 "(V?)PSUBSWrm",
1409 "(V?)PSUBUSBrm",
1410 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001411
1412def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1413 let Latency = 7;
1414 let NumMicroOps = 2;
1415 let ResourceCycles = [1,1];
1416}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001417def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001418 "(V?)INSERTI128rm",
1419 "(V?)MASKMOVPDrm",
1420 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001421 "(V?)PADDBrm",
1422 "(V?)PADDDrm",
1423 "(V?)PADDQrm",
1424 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001425 "(V?)PBLENDDrmi",
1426 "(V?)PMASKMOVDrm",
1427 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001428 "(V?)PSUBBrm",
1429 "(V?)PSUBDrm",
1430 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001431 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001432
1433def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1434 let Latency = 7;
1435 let NumMicroOps = 3;
1436 let ResourceCycles = [2,1];
1437}
Craig Topperfc179c62018-03-22 04:23:41 +00001438def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1439 "MMX_PACKSSWBirm",
1440 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001441
1442def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1443 let Latency = 7;
1444 let NumMicroOps = 3;
1445 let ResourceCycles = [1,2];
1446}
Craig Topperf4cd9082018-01-19 05:47:32 +00001447def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001448
1449def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1450 let Latency = 7;
1451 let NumMicroOps = 3;
1452 let ResourceCycles = [1,2];
1453}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001454def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1455 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001456
Craig Topper58afb4e2018-03-22 21:10:07 +00001457def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001458 let Latency = 7;
1459 let NumMicroOps = 3;
1460 let ResourceCycles = [1,1,1];
1461}
Craig Topperfc179c62018-03-22 04:23:41 +00001462def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1463 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001464
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001465def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001466 let Latency = 7;
1467 let NumMicroOps = 3;
1468 let ResourceCycles = [1,1,1];
1469}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001470def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001471
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001472def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001473 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001474 let NumMicroOps = 3;
1475 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001476}
Craig Topperfc179c62018-03-22 04:23:41 +00001477def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1478 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001479
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001480def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1481 let Latency = 7;
1482 let NumMicroOps = 5;
1483 let ResourceCycles = [1,1,1,2];
1484}
Craig Topperfc179c62018-03-22 04:23:41 +00001485def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1486 "ROL(8|16|32|64)mi",
1487 "ROR(8|16|32|64)m1",
1488 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001489
1490def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1491 let Latency = 7;
1492 let NumMicroOps = 5;
1493 let ResourceCycles = [1,1,1,2];
1494}
Craig Topper13a16502018-03-19 00:56:09 +00001495def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001496
1497def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1498 let Latency = 7;
1499 let NumMicroOps = 5;
1500 let ResourceCycles = [1,1,1,1,1];
1501}
Craig Topperfc179c62018-03-22 04:23:41 +00001502def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1503 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001504
1505def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001506 let Latency = 7;
1507 let NumMicroOps = 7;
1508 let ResourceCycles = [1,3,1,2];
1509}
Craig Topper2d451e72018-03-18 08:38:06 +00001510def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001511
Craig Topper58afb4e2018-03-22 21:10:07 +00001512def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001513 let Latency = 8;
1514 let NumMicroOps = 2;
1515 let ResourceCycles = [2];
1516}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001517def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1518 "(V?)ROUNDPS(Y?)r",
1519 "(V?)ROUNDSDr",
1520 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001521
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001522def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001523 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001524 let NumMicroOps = 2;
1525 let ResourceCycles = [1,1];
1526}
Craig Topperfc179c62018-03-22 04:23:41 +00001527def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1528 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001529
1530def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1531 let Latency = 8;
1532 let NumMicroOps = 2;
1533 let ResourceCycles = [1,1];
1534}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001535def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1536 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001537
1538def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001539 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001540 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001541 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001542}
Craig Topperf846e2d2018-04-19 05:34:05 +00001543def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001544
Craig Topperf846e2d2018-04-19 05:34:05 +00001545def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1546 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001547 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001548 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001549}
Craig Topperfc179c62018-03-22 04:23:41 +00001550def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001551
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001552def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1553 let Latency = 8;
1554 let NumMicroOps = 2;
1555 let ResourceCycles = [1,1];
1556}
Craig Topperfc179c62018-03-22 04:23:41 +00001557def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1558 "FCOM64m",
1559 "FCOMP32m",
1560 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001561 "VPACKSSDWYrm",
1562 "VPACKSSWBYrm",
1563 "VPACKUSDWYrm",
1564 "VPACKUSWBYrm",
1565 "VPALIGNRYrmi",
1566 "VPBLENDWYrmi",
1567 "VPBROADCASTBYrm",
1568 "VPBROADCASTWYrm",
1569 "VPERMILPDYmi",
1570 "VPERMILPDYrm",
1571 "VPERMILPSYmi",
1572 "VPERMILPSYrm",
1573 "VPMOVSXBDYrm",
1574 "VPMOVSXBQYrm",
1575 "VPMOVSXWQYrm",
1576 "VPSHUFBYrm",
1577 "VPSHUFDYmi",
1578 "VPSHUFHWYmi",
1579 "VPSHUFLWYmi",
1580 "VPUNPCKHBWYrm",
1581 "VPUNPCKHDQYrm",
1582 "VPUNPCKHQDQYrm",
1583 "VPUNPCKHWDYrm",
1584 "VPUNPCKLBWYrm",
1585 "VPUNPCKLDQYrm",
1586 "VPUNPCKLQDQYrm",
1587 "VPUNPCKLWDYrm",
1588 "VSHUFPDYrmi",
1589 "VSHUFPSYrmi",
1590 "VUNPCKHPDYrm",
1591 "VUNPCKHPSYrm",
1592 "VUNPCKLPDYrm",
1593 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001594
1595def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1596 let Latency = 8;
1597 let NumMicroOps = 2;
1598 let ResourceCycles = [1,1];
1599}
Craig Topperfc179c62018-03-22 04:23:41 +00001600def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1601 "VPABSDYrm",
1602 "VPABSWYrm",
1603 "VPADDSBYrm",
1604 "VPADDSWYrm",
1605 "VPADDUSBYrm",
1606 "VPADDUSWYrm",
1607 "VPAVGBYrm",
1608 "VPAVGWYrm",
1609 "VPCMPEQBYrm",
1610 "VPCMPEQDYrm",
1611 "VPCMPEQQYrm",
1612 "VPCMPEQWYrm",
1613 "VPCMPGTBYrm",
1614 "VPCMPGTDYrm",
1615 "VPCMPGTWYrm",
1616 "VPMAXSBYrm",
1617 "VPMAXSDYrm",
1618 "VPMAXSWYrm",
1619 "VPMAXUBYrm",
1620 "VPMAXUDYrm",
1621 "VPMAXUWYrm",
1622 "VPMINSBYrm",
1623 "VPMINSDYrm",
1624 "VPMINSWYrm",
1625 "VPMINUBYrm",
1626 "VPMINUDYrm",
1627 "VPMINUWYrm",
1628 "VPSIGNBYrm",
1629 "VPSIGNDYrm",
1630 "VPSIGNWYrm",
1631 "VPSLLDYrm",
1632 "VPSLLQYrm",
1633 "VPSLLVDYrm",
1634 "VPSLLVQYrm",
1635 "VPSLLWYrm",
1636 "VPSRADYrm",
1637 "VPSRAVDYrm",
1638 "VPSRAWYrm",
1639 "VPSRLDYrm",
1640 "VPSRLQYrm",
1641 "VPSRLVDYrm",
1642 "VPSRLVQYrm",
1643 "VPSRLWYrm",
1644 "VPSUBSBYrm",
1645 "VPSUBSWYrm",
1646 "VPSUBUSBYrm",
1647 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001648
1649def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1650 let Latency = 8;
1651 let NumMicroOps = 2;
1652 let ResourceCycles = [1,1];
1653}
Craig Topperfc179c62018-03-22 04:23:41 +00001654def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1655 "VANDNPSYrm",
1656 "VANDPDYrm",
1657 "VANDPSYrm",
1658 "VBLENDPDYrmi",
1659 "VBLENDPSYrmi",
1660 "VMASKMOVPDYrm",
1661 "VMASKMOVPSYrm",
1662 "VORPDYrm",
1663 "VORPSYrm",
1664 "VPADDBYrm",
1665 "VPADDDYrm",
1666 "VPADDQYrm",
1667 "VPADDWYrm",
1668 "VPANDNYrm",
1669 "VPANDYrm",
1670 "VPBLENDDYrmi",
1671 "VPMASKMOVDYrm",
1672 "VPMASKMOVQYrm",
1673 "VPORYrm",
1674 "VPSUBBYrm",
1675 "VPSUBDYrm",
1676 "VPSUBQYrm",
1677 "VPSUBWYrm",
1678 "VPXORYrm",
1679 "VXORPDYrm",
1680 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001681
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001682def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1683 let Latency = 8;
1684 let NumMicroOps = 4;
1685 let ResourceCycles = [1,2,1];
1686}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001687def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001688
1689def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1690 let Latency = 8;
1691 let NumMicroOps = 4;
1692 let ResourceCycles = [2,1,1];
1693}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001694def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001695
Craig Topper58afb4e2018-03-22 21:10:07 +00001696def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001697 let Latency = 8;
1698 let NumMicroOps = 4;
1699 let ResourceCycles = [1,1,1,1];
1700}
1701def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1702
1703def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1704 let Latency = 8;
1705 let NumMicroOps = 5;
1706 let ResourceCycles = [1,1,3];
1707}
Craig Topper13a16502018-03-19 00:56:09 +00001708def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001709
1710def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1711 let Latency = 8;
1712 let NumMicroOps = 5;
1713 let ResourceCycles = [1,1,1,2];
1714}
Craig Topperfc179c62018-03-22 04:23:41 +00001715def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1716 "RCL(8|16|32|64)mi",
1717 "RCR(8|16|32|64)m1",
1718 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001719
1720def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1721 let Latency = 8;
1722 let NumMicroOps = 6;
1723 let ResourceCycles = [1,1,1,3];
1724}
Craig Topperfc179c62018-03-22 04:23:41 +00001725def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1726 "SAR(8|16|32|64)mCL",
1727 "SHL(8|16|32|64)mCL",
1728 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001729
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001730def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1731 let Latency = 8;
1732 let NumMicroOps = 6;
1733 let ResourceCycles = [1,1,1,2,1];
1734}
Craig Topper9f834812018-04-01 21:54:24 +00001735def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001736 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001737 "SBB(8|16|32|64)mi")>;
1738def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1739 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001740
1741def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1742 let Latency = 9;
1743 let NumMicroOps = 2;
1744 let ResourceCycles = [1,1];
1745}
Craig Topperfc179c62018-03-22 04:23:41 +00001746def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1747 "MMX_PMADDUBSWrm",
1748 "MMX_PMADDWDirm",
1749 "MMX_PMULHRSWrm",
1750 "MMX_PMULHUWirm",
1751 "MMX_PMULHWirm",
1752 "MMX_PMULLWirm",
1753 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001754 "(V?)RCPSSm",
1755 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001756 "VTESTPDYrm",
1757 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001758
1759def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1760 let Latency = 9;
1761 let NumMicroOps = 2;
1762 let ResourceCycles = [1,1];
1763}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001764def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001765 "VPMOVSXBWYrm",
1766 "VPMOVSXDQYrm",
1767 "VPMOVSXWDYrm",
1768 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001769 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001770
1771def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1772 let Latency = 9;
1773 let NumMicroOps = 2;
1774 let ResourceCycles = [1,1];
1775}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001776def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1777 "(V?)ADDSSrm",
1778 "(V?)CMPSDrm",
1779 "(V?)CMPSSrm",
1780 "(V?)MAX(C?)SDrm",
1781 "(V?)MAX(C?)SSrm",
1782 "(V?)MIN(C?)SDrm",
1783 "(V?)MIN(C?)SSrm",
1784 "(V?)MULSDrm",
1785 "(V?)MULSSrm",
1786 "(V?)SUBSDrm",
1787 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001788def: InstRW<[SKLWriteResGroup122],
1789 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001790
Craig Topper58afb4e2018-03-22 21:10:07 +00001791def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001792 let Latency = 9;
1793 let NumMicroOps = 2;
1794 let ResourceCycles = [1,1];
1795}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001796def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001797 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001798 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001799 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001800
Craig Topper58afb4e2018-03-22 21:10:07 +00001801def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001802 let Latency = 9;
1803 let NumMicroOps = 3;
1804 let ResourceCycles = [1,2];
1805}
Craig Topperfc179c62018-03-22 04:23:41 +00001806def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001807
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001808def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1809 let Latency = 9;
1810 let NumMicroOps = 3;
1811 let ResourceCycles = [1,2];
1812}
Craig Topperfc179c62018-03-22 04:23:41 +00001813def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1814 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001815
1816def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1817 let Latency = 9;
1818 let NumMicroOps = 3;
1819 let ResourceCycles = [1,1,1];
1820}
Craig Topperfc179c62018-03-22 04:23:41 +00001821def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001822
1823def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1824 let Latency = 9;
1825 let NumMicroOps = 3;
1826 let ResourceCycles = [1,1,1];
1827}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001828def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001829
1830def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001831 let Latency = 9;
1832 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001833 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001834}
Craig Topperfc179c62018-03-22 04:23:41 +00001835def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1836 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001837
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001838def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1839 let Latency = 9;
1840 let NumMicroOps = 4;
1841 let ResourceCycles = [2,1,1];
1842}
Craig Topperfc179c62018-03-22 04:23:41 +00001843def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1844 "(V?)PHADDWrm",
1845 "(V?)PHSUBDrm",
1846 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001847
1848def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1849 let Latency = 9;
1850 let NumMicroOps = 4;
1851 let ResourceCycles = [1,1,1,1];
1852}
Craig Topperfc179c62018-03-22 04:23:41 +00001853def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1854 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001855
1856def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1857 let Latency = 9;
1858 let NumMicroOps = 5;
1859 let ResourceCycles = [1,2,1,1];
1860}
Craig Topperfc179c62018-03-22 04:23:41 +00001861def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1862 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001863
1864def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1865 let Latency = 10;
1866 let NumMicroOps = 2;
1867 let ResourceCycles = [1,1];
1868}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001869def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001870 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001871
1872def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1873 let Latency = 10;
1874 let NumMicroOps = 2;
1875 let ResourceCycles = [1,1];
1876}
Craig Topperfc179c62018-03-22 04:23:41 +00001877def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1878 "ADD_F64m",
1879 "ILD_F16m",
1880 "ILD_F32m",
1881 "ILD_F64m",
1882 "SUBR_F32m",
1883 "SUBR_F64m",
1884 "SUB_F32m",
1885 "SUB_F64m",
1886 "VPCMPGTQYrm",
1887 "VPERM2F128rm",
1888 "VPERM2I128rm",
1889 "VPERMDYrm",
1890 "VPERMPDYmi",
1891 "VPERMPSYrm",
1892 "VPERMQYmi",
1893 "VPMOVZXBDYrm",
1894 "VPMOVZXBQYrm",
1895 "VPMOVZXBWYrm",
1896 "VPMOVZXDQYrm",
1897 "VPMOVZXWQYrm",
1898 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001899
1900def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1901 let Latency = 10;
1902 let NumMicroOps = 2;
1903 let ResourceCycles = [1,1];
1904}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001905def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1906 "(V?)ADDPSrm",
1907 "(V?)ADDSUBPDrm",
1908 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001909 "(V?)CVTDQ2PSrm",
1910 "(V?)CVTPH2PSYrm",
1911 "(V?)CVTPS2DQrm",
1912 "(V?)CVTSS2SDrm",
1913 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001914 "(V?)MULPDrm",
1915 "(V?)MULPSrm",
1916 "(V?)PHMINPOSUWrm",
1917 "(V?)PMADDUBSWrm",
1918 "(V?)PMADDWDrm",
1919 "(V?)PMULDQrm",
1920 "(V?)PMULHRSWrm",
1921 "(V?)PMULHUWrm",
1922 "(V?)PMULHWrm",
1923 "(V?)PMULLWrm",
1924 "(V?)PMULUDQrm",
1925 "(V?)SUBPDrm",
1926 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001927def: InstRW<[SKLWriteResGroup134],
1928 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001929
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001930def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1931 let Latency = 10;
1932 let NumMicroOps = 3;
1933 let ResourceCycles = [1,1,1];
1934}
Craig Topperfc179c62018-03-22 04:23:41 +00001935def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1936 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001937
Craig Topper58afb4e2018-03-22 21:10:07 +00001938def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001939 let Latency = 10;
1940 let NumMicroOps = 3;
1941 let ResourceCycles = [1,1,1];
1942}
Craig Topperfc179c62018-03-22 04:23:41 +00001943def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001944
1945def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001946 let Latency = 10;
1947 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001948 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001949}
Craig Topperfc179c62018-03-22 04:23:41 +00001950def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1951 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001952
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001953def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1954 let Latency = 10;
1955 let NumMicroOps = 4;
1956 let ResourceCycles = [2,1,1];
1957}
Craig Topperfc179c62018-03-22 04:23:41 +00001958def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1959 "VPHADDWYrm",
1960 "VPHSUBDYrm",
1961 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001962
1963def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001964 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001965 let NumMicroOps = 4;
1966 let ResourceCycles = [1,1,1,1];
1967}
Craig Topperf846e2d2018-04-19 05:34:05 +00001968def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001969
1970def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1971 let Latency = 10;
1972 let NumMicroOps = 8;
1973 let ResourceCycles = [1,1,1,1,1,3];
1974}
Craig Topper13a16502018-03-19 00:56:09 +00001975def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001976
1977def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001978 let Latency = 10;
1979 let NumMicroOps = 10;
1980 let ResourceCycles = [9,1];
1981}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001982def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001983
Craig Topper8104f262018-04-02 05:33:28 +00001984def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001985 let Latency = 11;
1986 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001987 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001988}
Craig Topper8104f262018-04-02 05:33:28 +00001989def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001990 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001991
Craig Topper8104f262018-04-02 05:33:28 +00001992def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1993 let Latency = 11;
1994 let NumMicroOps = 1;
1995 let ResourceCycles = [1,5];
1996}
1997def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1998
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001999def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002000 let Latency = 11;
2001 let NumMicroOps = 2;
2002 let ResourceCycles = [1,1];
2003}
Craig Topperfc179c62018-03-22 04:23:41 +00002004def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2005 "MUL_F64m",
2006 "VRCPPSYm",
2007 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002008
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002009def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2010 let Latency = 11;
2011 let NumMicroOps = 2;
2012 let ResourceCycles = [1,1];
2013}
Craig Topperfc179c62018-03-22 04:23:41 +00002014def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2015 "VADDPSYrm",
2016 "VADDSUBPDYrm",
2017 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002018 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002019 "VCMPPSYrmi",
2020 "VCVTDQ2PSYrm",
2021 "VCVTPS2DQYrm",
2022 "VCVTPS2PDYrm",
2023 "VCVTTPS2DQYrm",
2024 "VMAX(C?)PDYrm",
2025 "VMAX(C?)PSYrm",
2026 "VMIN(C?)PDYrm",
2027 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002028 "VMULPDYrm",
2029 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002030 "VPMADDUBSWYrm",
2031 "VPMADDWDYrm",
2032 "VPMULDQYrm",
2033 "VPMULHRSWYrm",
2034 "VPMULHUWYrm",
2035 "VPMULHWYrm",
2036 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002037 "VPMULUDQYrm",
2038 "VSUBPDYrm",
2039 "VSUBPSYrm")>;
2040def: InstRW<[SKLWriteResGroup147],
2041 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002042
2043def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2044 let Latency = 11;
2045 let NumMicroOps = 3;
2046 let ResourceCycles = [2,1];
2047}
Craig Topperfc179c62018-03-22 04:23:41 +00002048def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2049 "FICOM32m",
2050 "FICOMP16m",
2051 "FICOMP32m",
2052 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002053
2054def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2055 let Latency = 11;
2056 let NumMicroOps = 3;
2057 let ResourceCycles = [1,1,1];
2058}
Craig Topperfc179c62018-03-22 04:23:41 +00002059def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002060
Craig Topper58afb4e2018-03-22 21:10:07 +00002061def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002062 let Latency = 11;
2063 let NumMicroOps = 3;
2064 let ResourceCycles = [1,1,1];
2065}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002066def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2067 "(V?)CVTSD2SIrm",
2068 "(V?)CVTSS2SI64rm",
2069 "(V?)CVTSS2SIrm",
2070 "(V?)CVTTSD2SI64rm",
2071 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002072 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002073 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002074
Craig Topper58afb4e2018-03-22 21:10:07 +00002075def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002076 let Latency = 11;
2077 let NumMicroOps = 3;
2078 let ResourceCycles = [1,1,1];
2079}
Craig Topperfc179c62018-03-22 04:23:41 +00002080def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2081 "CVTPD2PSrm",
2082 "CVTTPD2DQrm",
2083 "MMX_CVTPD2PIirm",
2084 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002085
2086def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2087 let Latency = 11;
2088 let NumMicroOps = 6;
2089 let ResourceCycles = [1,1,1,2,1];
2090}
Craig Topperfc179c62018-03-22 04:23:41 +00002091def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2092 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002093
2094def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002095 let Latency = 11;
2096 let NumMicroOps = 7;
2097 let ResourceCycles = [2,3,2];
2098}
Craig Topperfc179c62018-03-22 04:23:41 +00002099def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2100 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002101
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002102def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002103 let Latency = 11;
2104 let NumMicroOps = 9;
2105 let ResourceCycles = [1,5,1,2];
2106}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002107def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002108
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002109def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002110 let Latency = 11;
2111 let NumMicroOps = 11;
2112 let ResourceCycles = [2,9];
2113}
Craig Topperfc179c62018-03-22 04:23:41 +00002114def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002115
Craig Topper8104f262018-04-02 05:33:28 +00002116def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002117 let Latency = 12;
2118 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002119 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002120}
Craig Topper8104f262018-04-02 05:33:28 +00002121def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002122 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002123
Craig Topper8104f262018-04-02 05:33:28 +00002124def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2125 let Latency = 12;
2126 let NumMicroOps = 1;
2127 let ResourceCycles = [1,6];
2128}
2129def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2130
Craig Topper58afb4e2018-03-22 21:10:07 +00002131def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002132 let Latency = 12;
2133 let NumMicroOps = 4;
2134 let ResourceCycles = [1,1,1,1];
2135}
2136def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2137
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002138def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002139 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002140 let NumMicroOps = 3;
2141 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002142}
Craig Topperfc179c62018-03-22 04:23:41 +00002143def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2144 "ADD_FI32m",
2145 "SUBR_FI16m",
2146 "SUBR_FI32m",
2147 "SUB_FI16m",
2148 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002149
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002150def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2151 let Latency = 13;
2152 let NumMicroOps = 3;
2153 let ResourceCycles = [1,1,1];
2154}
2155def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2156
Craig Topper58afb4e2018-03-22 21:10:07 +00002157def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002158 let Latency = 13;
2159 let NumMicroOps = 4;
2160 let ResourceCycles = [1,3];
2161}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002162def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002163
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002164def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002165 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002166 let NumMicroOps = 4;
2167 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002168}
Craig Topperfc179c62018-03-22 04:23:41 +00002169def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2170 "VHADDPSYrm",
2171 "VHSUBPDYrm",
2172 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002173
Craig Topper8104f262018-04-02 05:33:28 +00002174def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002175 let Latency = 14;
2176 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002177 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002178}
Craig Topper8104f262018-04-02 05:33:28 +00002179def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002180 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002181
Craig Topper8104f262018-04-02 05:33:28 +00002182def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2183 let Latency = 14;
2184 let NumMicroOps = 1;
2185 let ResourceCycles = [1,5];
2186}
2187def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2188
Craig Topper58afb4e2018-03-22 21:10:07 +00002189def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002190 let Latency = 14;
2191 let NumMicroOps = 3;
2192 let ResourceCycles = [1,2];
2193}
Craig Topperfc179c62018-03-22 04:23:41 +00002194def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2195def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2196def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2197def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002198
2199def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2200 let Latency = 14;
2201 let NumMicroOps = 3;
2202 let ResourceCycles = [1,1,1];
2203}
Craig Topperfc179c62018-03-22 04:23:41 +00002204def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2205 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002206
2207def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002208 let Latency = 14;
2209 let NumMicroOps = 10;
2210 let ResourceCycles = [2,4,1,3];
2211}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002212def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002213
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002214def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002215 let Latency = 15;
2216 let NumMicroOps = 1;
2217 let ResourceCycles = [1];
2218}
Craig Topperfc179c62018-03-22 04:23:41 +00002219def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2220 "DIVR_FST0r",
2221 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002222
Craig Topper58afb4e2018-03-22 21:10:07 +00002223def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002224 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002225 let NumMicroOps = 3;
2226 let ResourceCycles = [1,2];
2227}
Craig Topper40d3b322018-03-22 21:55:20 +00002228def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2229 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002230
Craig Topperd25f1ac2018-03-20 23:39:48 +00002231def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2232 let Latency = 17;
2233 let NumMicroOps = 3;
2234 let ResourceCycles = [1,2];
2235}
2236def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2237
Craig Topper58afb4e2018-03-22 21:10:07 +00002238def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002239 let Latency = 15;
2240 let NumMicroOps = 4;
2241 let ResourceCycles = [1,1,2];
2242}
Craig Topperfc179c62018-03-22 04:23:41 +00002243def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002244
2245def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2246 let Latency = 15;
2247 let NumMicroOps = 10;
2248 let ResourceCycles = [1,1,1,5,1,1];
2249}
Craig Topper13a16502018-03-19 00:56:09 +00002250def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002251
Craig Topper8104f262018-04-02 05:33:28 +00002252def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002253 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002254 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002255 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002256}
Craig Topperfc179c62018-03-22 04:23:41 +00002257def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002258
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002259def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2260 let Latency = 16;
2261 let NumMicroOps = 14;
2262 let ResourceCycles = [1,1,1,4,2,5];
2263}
2264def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2265
2266def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002267 let Latency = 16;
2268 let NumMicroOps = 16;
2269 let ResourceCycles = [16];
2270}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002271def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002272
Craig Topper8104f262018-04-02 05:33:28 +00002273def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002274 let Latency = 17;
2275 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002276 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002277}
Craig Topper8104f262018-04-02 05:33:28 +00002278def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2279
2280def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2281 let Latency = 17;
2282 let NumMicroOps = 2;
2283 let ResourceCycles = [1,1,3];
2284}
2285def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002286
2287def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002288 let Latency = 17;
2289 let NumMicroOps = 15;
2290 let ResourceCycles = [2,1,2,4,2,4];
2291}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002292def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002293
Craig Topper8104f262018-04-02 05:33:28 +00002294def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002295 let Latency = 18;
2296 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002297 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002298}
Craig Topper8104f262018-04-02 05:33:28 +00002299def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002300 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002301
Craig Topper8104f262018-04-02 05:33:28 +00002302def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2303 let Latency = 18;
2304 let NumMicroOps = 1;
2305 let ResourceCycles = [1,12];
2306}
2307def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2308
2309def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002310 let Latency = 18;
2311 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002312 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002313}
Craig Topper8104f262018-04-02 05:33:28 +00002314def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2315
2316def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2317 let Latency = 18;
2318 let NumMicroOps = 2;
2319 let ResourceCycles = [1,1,3];
2320}
2321def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002322
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002323def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002324 let Latency = 18;
2325 let NumMicroOps = 8;
2326 let ResourceCycles = [1,1,1,5];
2327}
Craig Topperfc179c62018-03-22 04:23:41 +00002328def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002329
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002330def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002331 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002332 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002333 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002334}
Craig Topper13a16502018-03-19 00:56:09 +00002335def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002336
Craig Topper8104f262018-04-02 05:33:28 +00002337def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002338 let Latency = 19;
2339 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002340 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002341}
Craig Topper8104f262018-04-02 05:33:28 +00002342def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2343
2344def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2345 let Latency = 19;
2346 let NumMicroOps = 2;
2347 let ResourceCycles = [1,1,6];
2348}
2349def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002350
Craig Topper58afb4e2018-03-22 21:10:07 +00002351def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002352 let Latency = 19;
2353 let NumMicroOps = 5;
2354 let ResourceCycles = [1,1,3];
2355}
Craig Topperfc179c62018-03-22 04:23:41 +00002356def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002357
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002358def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002359 let Latency = 20;
2360 let NumMicroOps = 1;
2361 let ResourceCycles = [1];
2362}
Craig Topperfc179c62018-03-22 04:23:41 +00002363def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2364 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002365 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002366
Craig Topper8104f262018-04-02 05:33:28 +00002367def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002368 let Latency = 20;
2369 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002370 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002371}
Craig Topperfc179c62018-03-22 04:23:41 +00002372def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002373
Craig Topper58afb4e2018-03-22 21:10:07 +00002374def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002375 let Latency = 20;
2376 let NumMicroOps = 5;
2377 let ResourceCycles = [1,1,3];
2378}
2379def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2380
2381def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2382 let Latency = 20;
2383 let NumMicroOps = 8;
2384 let ResourceCycles = [1,1,1,1,1,1,2];
2385}
Craig Topperfc179c62018-03-22 04:23:41 +00002386def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2387 "INSL",
2388 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002389
2390def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002391 let Latency = 20;
2392 let NumMicroOps = 10;
2393 let ResourceCycles = [1,2,7];
2394}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002395def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002396
Craig Topper8104f262018-04-02 05:33:28 +00002397def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002398 let Latency = 21;
2399 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002400 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002401}
2402def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2403
2404def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2405 let Latency = 22;
2406 let NumMicroOps = 2;
2407 let ResourceCycles = [1,1];
2408}
Craig Topperfc179c62018-03-22 04:23:41 +00002409def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2410 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002411
2412def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2413 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002414 let NumMicroOps = 5;
2415 let ResourceCycles = [1,2,1,1];
2416}
Craig Topper17a31182017-12-16 18:35:29 +00002417def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2418 VGATHERDPDrm,
2419 VGATHERQPDrm,
2420 VGATHERQPSrm,
2421 VPGATHERDDrm,
2422 VPGATHERDQrm,
2423 VPGATHERQDrm,
2424 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002425
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002426def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2427 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002428 let NumMicroOps = 5;
2429 let ResourceCycles = [1,2,1,1];
2430}
Craig Topper17a31182017-12-16 18:35:29 +00002431def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2432 VGATHERQPDYrm,
2433 VGATHERQPSYrm,
2434 VPGATHERDDYrm,
2435 VPGATHERDQYrm,
2436 VPGATHERQDYrm,
2437 VPGATHERQQYrm,
2438 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002439
Craig Topper8104f262018-04-02 05:33:28 +00002440def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002441 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002442 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002443 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002444}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002445def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002446
2447def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2448 let Latency = 23;
2449 let NumMicroOps = 19;
2450 let ResourceCycles = [2,1,4,1,1,4,6];
2451}
2452def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2453
Craig Topper8104f262018-04-02 05:33:28 +00002454def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002455 let Latency = 24;
2456 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002457 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002458}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002459def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002460
Craig Topper8104f262018-04-02 05:33:28 +00002461def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002462 let Latency = 25;
2463 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002464 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002465}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002466def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002467
2468def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2469 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002470 let NumMicroOps = 3;
2471 let ResourceCycles = [1,1,1];
2472}
Craig Topperfc179c62018-03-22 04:23:41 +00002473def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2474 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002475
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002476def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2477 let Latency = 27;
2478 let NumMicroOps = 2;
2479 let ResourceCycles = [1,1];
2480}
Craig Topperfc179c62018-03-22 04:23:41 +00002481def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2482 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002483
2484def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2485 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002486 let NumMicroOps = 8;
2487 let ResourceCycles = [2,4,1,1];
2488}
Craig Topper13a16502018-03-19 00:56:09 +00002489def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002490
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002491def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002492 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002493 let NumMicroOps = 3;
2494 let ResourceCycles = [1,1,1];
2495}
Craig Topperfc179c62018-03-22 04:23:41 +00002496def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2497 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002498
2499def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2500 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002501 let NumMicroOps = 23;
2502 let ResourceCycles = [1,5,3,4,10];
2503}
Craig Topperfc179c62018-03-22 04:23:41 +00002504def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2505 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002506
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002507def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2508 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002509 let NumMicroOps = 23;
2510 let ResourceCycles = [1,5,2,1,4,10];
2511}
Craig Topperfc179c62018-03-22 04:23:41 +00002512def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2513 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002514
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002515def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2516 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002517 let NumMicroOps = 31;
2518 let ResourceCycles = [1,8,1,21];
2519}
Craig Topper391c6f92017-12-10 01:24:08 +00002520def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002521
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002522def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2523 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002524 let NumMicroOps = 18;
2525 let ResourceCycles = [1,1,2,3,1,1,1,8];
2526}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002527def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002528
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002529def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2530 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002531 let NumMicroOps = 39;
2532 let ResourceCycles = [1,10,1,1,26];
2533}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002534def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002535
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002536def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002537 let Latency = 42;
2538 let NumMicroOps = 22;
2539 let ResourceCycles = [2,20];
2540}
Craig Topper2d451e72018-03-18 08:38:06 +00002541def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002542
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002543def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2544 let Latency = 42;
2545 let NumMicroOps = 40;
2546 let ResourceCycles = [1,11,1,1,26];
2547}
Craig Topper391c6f92017-12-10 01:24:08 +00002548def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002549
2550def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2551 let Latency = 46;
2552 let NumMicroOps = 44;
2553 let ResourceCycles = [1,11,1,1,30];
2554}
2555def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2556
2557def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2558 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002559 let NumMicroOps = 64;
2560 let ResourceCycles = [2,8,5,10,39];
2561}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002562def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002563
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002564def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2565 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002566 let NumMicroOps = 88;
2567 let ResourceCycles = [4,4,31,1,2,1,45];
2568}
Craig Topper2d451e72018-03-18 08:38:06 +00002569def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002570
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002571def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2572 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002573 let NumMicroOps = 90;
2574 let ResourceCycles = [4,2,33,1,2,1,47];
2575}
Craig Topper2d451e72018-03-18 08:38:06 +00002576def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002577
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002578def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002579 let Latency = 75;
2580 let NumMicroOps = 15;
2581 let ResourceCycles = [6,3,6];
2582}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002583def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002584
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002585def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002586 let Latency = 76;
2587 let NumMicroOps = 32;
2588 let ResourceCycles = [7,2,8,3,1,11];
2589}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002590def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002591
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002592def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002593 let Latency = 102;
2594 let NumMicroOps = 66;
2595 let ResourceCycles = [4,2,4,8,14,34];
2596}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002597def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002598
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002599def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2600 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002601 let NumMicroOps = 100;
2602 let ResourceCycles = [9,1,11,16,1,11,21,30];
2603}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002604def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002605
2606} // SchedModel