blob: 8939f01f0654e81c867170e56ab291b0c4b730a1 [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 "SAR(8|16|32|64)r1",
467 "SAR(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000468 "SBB(16|32|64)ri",
469 "SBB(16|32|64)i",
470 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000471 "SHL(8|16|32|64)r1",
472 "SHL(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000473 "SHR(8|16|32|64)r1",
Simon Pilgrimeb609092018-04-23 22:19:55 +0000474 "SHR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000475
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000476def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
477 let Latency = 1;
478 let NumMicroOps = 1;
479 let ResourceCycles = [1];
480}
Craig Topperfc179c62018-03-22 04:23:41 +0000481def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
482 "BLSI(32|64)rr",
483 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000484 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000485
486def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
487 let Latency = 1;
488 let NumMicroOps = 1;
489 let ResourceCycles = [1];
490}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000491def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000492 "(V?)PADDD(Y?)rr",
493 "(V?)PADDQ(Y?)rr",
494 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000495 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000496 "(V?)PSUBB(Y?)rr",
497 "(V?)PSUBD(Y?)rr",
498 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000499 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000500
501def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
502 let Latency = 1;
503 let NumMicroOps = 1;
504 let ResourceCycles = [1];
505}
Craig Topperfbe31322018-04-05 21:56:19 +0000506def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000507def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000508 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000509 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000510 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000511 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000512 "SGDT64m",
513 "SIDT64m",
514 "SLDT64m",
515 "SMSW16m",
516 "STC",
517 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000518 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000519
520def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000521 let Latency = 1;
522 let NumMicroOps = 2;
523 let ResourceCycles = [1,1];
524}
Craig Topperfc179c62018-03-22 04:23:41 +0000525def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
526 "MMX_MOVD64from64rm",
527 "MMX_MOVD64mr",
528 "MMX_MOVNTQmr",
529 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000530 "MOVNTI_64mr",
531 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000532 "ST_FP32m",
533 "ST_FP64m",
534 "ST_FP80m",
535 "VEXTRACTF128mr",
536 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000537 "(V?)MOVAPDYmr",
538 "(V?)MOVAPS(Y?)mr",
539 "(V?)MOVDQA(Y?)mr",
540 "(V?)MOVDQU(Y?)mr",
541 "(V?)MOVHPDmr",
542 "(V?)MOVHPSmr",
543 "(V?)MOVLPDmr",
544 "(V?)MOVLPSmr",
545 "(V?)MOVNTDQ(Y?)mr",
546 "(V?)MOVNTPD(Y?)mr",
547 "(V?)MOVNTPS(Y?)mr",
548 "(V?)MOVPDI2DImr",
549 "(V?)MOVPQI2QImr",
550 "(V?)MOVPQIto64mr",
551 "(V?)MOVSDmr",
552 "(V?)MOVSSmr",
553 "(V?)MOVUPD(Y?)mr",
554 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000555 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000556
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000557def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000558 let Latency = 2;
559 let NumMicroOps = 1;
560 let ResourceCycles = [1];
561}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000562def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000563 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000564 "(V?)MOVPDI2DIrr",
565 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000566 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000567 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000568
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000569def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000570 let Latency = 2;
571 let NumMicroOps = 2;
572 let ResourceCycles = [2];
573}
Craig Topperfc179c62018-03-22 04:23:41 +0000574def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
575 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000576 "(V?)PINSRBrr",
577 "(V?)PINSRDrr",
578 "(V?)PINSRQrr",
579 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000580
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000581def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000582 let Latency = 2;
583 let NumMicroOps = 2;
584 let ResourceCycles = [2];
585}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000586def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
587def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000588
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000589def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000590 let Latency = 2;
591 let NumMicroOps = 2;
592 let ResourceCycles = [2];
593}
Craig Topperfc179c62018-03-22 04:23:41 +0000594def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
595 "ROL(8|16|32|64)r1",
596 "ROL(8|16|32|64)ri",
597 "ROR(8|16|32|64)r1",
598 "ROR(8|16|32|64)ri",
599 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000600
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000601def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000602 let Latency = 2;
603 let NumMicroOps = 2;
604 let ResourceCycles = [2];
605}
Craig Topperfc179c62018-03-22 04:23:41 +0000606def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
607 "WAIT",
608 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000609
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000610def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000611 let Latency = 2;
612 let NumMicroOps = 2;
613 let ResourceCycles = [1,1];
614}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000615def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
616 "VMASKMOVPS(Y?)mr",
617 "VPMASKMOVD(Y?)mr",
618 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000619
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000620def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000621 let Latency = 2;
622 let NumMicroOps = 2;
623 let ResourceCycles = [1,1];
624}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000625def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
626 "(V?)PSLLQrr",
627 "(V?)PSLLWrr",
628 "(V?)PSRADrr",
629 "(V?)PSRAWrr",
630 "(V?)PSRLDrr",
631 "(V?)PSRLQrr",
632 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000633
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000634def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000635 let Latency = 2;
636 let NumMicroOps = 2;
637 let ResourceCycles = [1,1];
638}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000639def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000640
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000641def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000642 let Latency = 2;
643 let NumMicroOps = 2;
644 let ResourceCycles = [1,1];
645}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000646def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000647
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000648def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000649 let Latency = 2;
650 let NumMicroOps = 2;
651 let ResourceCycles = [1,1];
652}
Craig Topper498875f2018-04-04 17:54:19 +0000653def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
654
655def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
656 let Latency = 1;
657 let NumMicroOps = 1;
658 let ResourceCycles = [1];
659}
660def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000661
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000662def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000663 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000664 let NumMicroOps = 2;
665 let ResourceCycles = [1,1];
666}
Craig Topper2d451e72018-03-18 08:38:06 +0000667def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000668def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000669def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
670 "ADC8ri",
671 "SBB8i8",
672 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000673
674def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
675 let Latency = 2;
676 let NumMicroOps = 3;
677 let ResourceCycles = [1,1,1];
678}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000679def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
680 "(V?)PEXTRBmr",
681 "(V?)PEXTRDmr",
682 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000683 "(V?)PEXTRWmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000684
685def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
686 let Latency = 2;
687 let NumMicroOps = 3;
688 let ResourceCycles = [1,1,1];
689}
690def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
691
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000692def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
693 let Latency = 2;
694 let NumMicroOps = 3;
695 let ResourceCycles = [1,1,1];
696}
697def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
698
699def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
700 let Latency = 2;
701 let NumMicroOps = 3;
702 let ResourceCycles = [1,1,1];
703}
Craig Topper2d451e72018-03-18 08:38:06 +0000704def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000705def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
706 "PUSH64i8",
707 "STOSB",
708 "STOSL",
709 "STOSQ",
710 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000711
712def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
713 let Latency = 3;
714 let NumMicroOps = 1;
715 let ResourceCycles = [1];
716}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000717def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000718 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000719 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000720 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000721
Clement Courbet327fac42018-03-07 08:14:02 +0000722def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000723 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000724 let NumMicroOps = 2;
725 let ResourceCycles = [1,1];
726}
Clement Courbet327fac42018-03-07 08:14:02 +0000727def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000728
729def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
730 let Latency = 3;
731 let NumMicroOps = 1;
732 let ResourceCycles = [1];
733}
Craig Topperfc179c62018-03-22 04:23:41 +0000734def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
735 "ADD_FST0r",
736 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000737 "SUBR_FPrST0",
738 "SUBR_FST0r",
739 "SUBR_FrST0",
740 "SUB_FPrST0",
741 "SUB_FST0r",
742 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000743 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000744 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000745 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000746 "VPMOVSXBDYrr",
747 "VPMOVSXBQYrr",
748 "VPMOVSXBWYrr",
749 "VPMOVSXDQYrr",
750 "VPMOVSXWDYrr",
751 "VPMOVSXWQYrr",
752 "VPMOVZXBDYrr",
753 "VPMOVZXBQYrr",
754 "VPMOVZXBWYrr",
755 "VPMOVZXDQYrr",
756 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000757 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000758
759def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
760 let Latency = 3;
761 let NumMicroOps = 2;
762 let ResourceCycles = [1,1];
763}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000764def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
765 "(V?)EXTRACTPSrr",
766 "(V?)PEXTRBrr",
767 "(V?)PEXTRDrr",
768 "(V?)PEXTRQrr",
769 "(V?)PEXTRWrr",
770 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000771
772def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
773 let Latency = 3;
774 let NumMicroOps = 2;
775 let ResourceCycles = [1,1];
776}
777def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
778
779def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
780 let Latency = 3;
781 let NumMicroOps = 3;
782 let ResourceCycles = [3];
783}
Craig Topperfc179c62018-03-22 04:23:41 +0000784def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
785 "ROR(8|16|32|64)rCL",
786 "SAR(8|16|32|64)rCL",
787 "SHL(8|16|32|64)rCL",
788 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000789
790def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000791 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000792 let NumMicroOps = 3;
793 let ResourceCycles = [3];
794}
Craig Topperb5f26592018-04-19 18:00:17 +0000795def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
796 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
797 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000798
799def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
800 let Latency = 3;
801 let NumMicroOps = 3;
802 let ResourceCycles = [1,2];
803}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000804def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000805
806def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
807 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000808 let NumMicroOps = 3;
809 let ResourceCycles = [2,1];
810}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000811def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
812 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000813
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000814def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
815 let Latency = 3;
816 let NumMicroOps = 3;
817 let ResourceCycles = [2,1];
818}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000819def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000820
821def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
822 let Latency = 3;
823 let NumMicroOps = 3;
824 let ResourceCycles = [2,1];
825}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000826def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
827 "(V?)PHADDW(Y?)rr",
828 "(V?)PHSUBD(Y?)rr",
829 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000830
831def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
832 let Latency = 3;
833 let NumMicroOps = 3;
834 let ResourceCycles = [2,1];
835}
Craig Topperfc179c62018-03-22 04:23:41 +0000836def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
837 "MMX_PACKSSWBirr",
838 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000839
840def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
841 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000842 let NumMicroOps = 3;
843 let ResourceCycles = [1,2];
844}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000845def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000846
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000847def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
848 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000849 let NumMicroOps = 3;
850 let ResourceCycles = [1,2];
851}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000852def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000853
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000854def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
855 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000856 let NumMicroOps = 3;
857 let ResourceCycles = [1,2];
858}
Craig Topperfc179c62018-03-22 04:23:41 +0000859def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
860 "RCL(8|16|32|64)ri",
861 "RCR(8|16|32|64)r1",
862 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000863
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000864def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
865 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000866 let NumMicroOps = 3;
867 let ResourceCycles = [1,1,1];
868}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000869def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000870
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000871def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
872 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000873 let NumMicroOps = 4;
874 let ResourceCycles = [1,1,2];
875}
Craig Topperf4cd9082018-01-19 05:47:32 +0000876def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000877
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000878def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
879 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000880 let NumMicroOps = 4;
881 let ResourceCycles = [1,1,1,1];
882}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000883def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000884
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000885def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
886 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000887 let NumMicroOps = 4;
888 let ResourceCycles = [1,1,1,1];
889}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000890def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000891
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000892def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000893 let Latency = 4;
894 let NumMicroOps = 1;
895 let ResourceCycles = [1];
896}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000897def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000898 "MMX_PMADDWDirr",
899 "MMX_PMULHRSWrr",
900 "MMX_PMULHUWirr",
901 "MMX_PMULHWirr",
902 "MMX_PMULLWirr",
903 "MMX_PMULUDQirr",
904 "MUL_FPrST0",
905 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000906 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000907
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000908def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000909 let Latency = 4;
910 let NumMicroOps = 1;
911 let ResourceCycles = [1];
912}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000913def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
914 "(V?)ADDPS(Y?)rr",
915 "(V?)ADDSDrr",
916 "(V?)ADDSSrr",
917 "(V?)ADDSUBPD(Y?)rr",
918 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000919 "(V?)CVTDQ2PS(Y?)rr",
920 "(V?)CVTPS2DQ(Y?)rr",
921 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000922 "(V?)MULPD(Y?)rr",
923 "(V?)MULPS(Y?)rr",
924 "(V?)MULSDrr",
925 "(V?)MULSSrr",
926 "(V?)PHMINPOSUWrr",
927 "(V?)PMADDUBSW(Y?)rr",
928 "(V?)PMADDWD(Y?)rr",
929 "(V?)PMULDQ(Y?)rr",
930 "(V?)PMULHRSW(Y?)rr",
931 "(V?)PMULHUW(Y?)rr",
932 "(V?)PMULHW(Y?)rr",
933 "(V?)PMULLW(Y?)rr",
934 "(V?)PMULUDQ(Y?)rr",
935 "(V?)SUBPD(Y?)rr",
936 "(V?)SUBPS(Y?)rr",
937 "(V?)SUBSDrr",
938 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000939
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000940def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000941 let Latency = 4;
942 let NumMicroOps = 2;
943 let ResourceCycles = [1,1];
944}
Craig Topperf846e2d2018-04-19 05:34:05 +0000945def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000946
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000947def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
948 let Latency = 4;
949 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000950 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000951}
Craig Topperfc179c62018-03-22 04:23:41 +0000952def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000953
954def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000955 let Latency = 4;
956 let NumMicroOps = 2;
957 let ResourceCycles = [1,1];
958}
Craig Topperfc179c62018-03-22 04:23:41 +0000959def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
960 "VPSLLQYrr",
961 "VPSLLWYrr",
962 "VPSRADYrr",
963 "VPSRAWYrr",
964 "VPSRLDYrr",
965 "VPSRLQYrr",
966 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000967
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000968def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000969 let Latency = 4;
970 let NumMicroOps = 3;
971 let ResourceCycles = [1,1,1];
972}
Craig Topperfc179c62018-03-22 04:23:41 +0000973def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
974 "ISTT_FP32m",
975 "ISTT_FP64m",
976 "IST_F16m",
977 "IST_F32m",
978 "IST_FP16m",
979 "IST_FP32m",
980 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000981
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000982def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000983 let Latency = 4;
984 let NumMicroOps = 4;
985 let ResourceCycles = [4];
986}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000987def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000988
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000989def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000990 let Latency = 4;
991 let NumMicroOps = 4;
992 let ResourceCycles = [1,3];
993}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000994def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000995
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000996def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000997 let Latency = 4;
998 let NumMicroOps = 4;
999 let ResourceCycles = [1,3];
1000}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001001def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001002
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001003def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001004 let Latency = 4;
1005 let NumMicroOps = 4;
1006 let ResourceCycles = [1,1,2];
1007}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001008def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001009
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001010def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1011 let Latency = 5;
1012 let NumMicroOps = 1;
1013 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001014}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001015def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001016 "MOVSX(16|32|64)rm32",
1017 "MOVSX(16|32|64)rm8",
1018 "MOVZX(16|32|64)rm16",
1019 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001020 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001021
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001022def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001023 let Latency = 5;
1024 let NumMicroOps = 2;
1025 let ResourceCycles = [1,1];
1026}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001027def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1028 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001029
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001030def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001031 let Latency = 5;
1032 let NumMicroOps = 2;
1033 let ResourceCycles = [1,1];
1034}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001035def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001036 "MMX_CVTPS2PIirr",
1037 "MMX_CVTTPD2PIirr",
1038 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001039 "(V?)CVTPD2DQrr",
1040 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001041 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001042 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001043 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001044 "(V?)CVTSD2SSrr",
1045 "(V?)CVTSI642SDrr",
1046 "(V?)CVTSI2SDrr",
1047 "(V?)CVTSI2SSrr",
1048 "(V?)CVTSS2SDrr",
1049 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001050
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001051def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001052 let Latency = 5;
1053 let NumMicroOps = 3;
1054 let ResourceCycles = [1,1,1];
1055}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001056def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001057
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001058def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001059 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001060 let NumMicroOps = 3;
1061 let ResourceCycles = [1,1,1];
1062}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001063def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001064
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001065def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001066 let Latency = 5;
1067 let NumMicroOps = 5;
1068 let ResourceCycles = [1,4];
1069}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001070def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001071
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001072def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001073 let Latency = 5;
1074 let NumMicroOps = 5;
1075 let ResourceCycles = [2,3];
1076}
Craig Topper13a16502018-03-19 00:56:09 +00001077def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001078
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001079def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001080 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001081 let NumMicroOps = 6;
1082 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001083}
Craig Topperfc179c62018-03-22 04:23:41 +00001084def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1085 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001086
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001087def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1088 let Latency = 6;
1089 let NumMicroOps = 1;
1090 let ResourceCycles = [1];
1091}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001092def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001093 "(V?)MOVSHDUPrm",
1094 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001095 "VPBROADCASTDrm",
1096 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001097
1098def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001099 let Latency = 6;
1100 let NumMicroOps = 2;
1101 let ResourceCycles = [2];
1102}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001103def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001104
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001105def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001106 let Latency = 6;
1107 let NumMicroOps = 2;
1108 let ResourceCycles = [1,1];
1109}
Craig Topperfc179c62018-03-22 04:23:41 +00001110def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1111 "MMX_PADDSWirm",
1112 "MMX_PADDUSBirm",
1113 "MMX_PADDUSWirm",
1114 "MMX_PAVGBirm",
1115 "MMX_PAVGWirm",
1116 "MMX_PCMPEQBirm",
1117 "MMX_PCMPEQDirm",
1118 "MMX_PCMPEQWirm",
1119 "MMX_PCMPGTBirm",
1120 "MMX_PCMPGTDirm",
1121 "MMX_PCMPGTWirm",
1122 "MMX_PMAXSWirm",
1123 "MMX_PMAXUBirm",
1124 "MMX_PMINSWirm",
1125 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001126 "MMX_PSUBSBirm",
1127 "MMX_PSUBSWirm",
1128 "MMX_PSUBUSBirm",
1129 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001130
Craig Topper58afb4e2018-03-22 21:10:07 +00001131def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001132 let Latency = 6;
1133 let NumMicroOps = 2;
1134 let ResourceCycles = [1,1];
1135}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001136def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1137 "(V?)CVTSD2SIrr",
1138 "(V?)CVTSS2SI64rr",
1139 "(V?)CVTSS2SIrr",
1140 "(V?)CVTTSD2SI64rr",
1141 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001142
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001143def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1144 let Latency = 6;
1145 let NumMicroOps = 2;
1146 let ResourceCycles = [1,1];
1147}
Simon Pilgrim0a334a82018-04-23 11:57:15 +00001148def: InstRW<[SKLWriteResGroup71], (instregex "(V?)MOVHPDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001149 "(V?)MOVHPSrm",
1150 "(V?)MOVLPDrm",
1151 "(V?)MOVLPSrm",
1152 "(V?)PINSRBrm",
1153 "(V?)PINSRDrm",
1154 "(V?)PINSRQrm",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001155 "(V?)PINSRWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001156
1157def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1158 let Latency = 6;
1159 let NumMicroOps = 2;
1160 let ResourceCycles = [1,1];
1161}
Craig Topperfc179c62018-03-22 04:23:41 +00001162def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1163 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001164
1165def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1166 let Latency = 6;
1167 let NumMicroOps = 2;
1168 let ResourceCycles = [1,1];
1169}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001170def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1171 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001172 "MMX_PANDNirm",
1173 "MMX_PANDirm",
1174 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001175 "MMX_PSIGN(B|D|W)rm",
1176 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001177 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001178
1179def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1180 let Latency = 6;
1181 let NumMicroOps = 2;
1182 let ResourceCycles = [1,1];
1183}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001184def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001185def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1186 ADCX32rm, ADCX64rm,
1187 ADOX32rm, ADOX64rm,
1188 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001189
1190def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1191 let Latency = 6;
1192 let NumMicroOps = 2;
1193 let ResourceCycles = [1,1];
1194}
Craig Topperfc179c62018-03-22 04:23:41 +00001195def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1196 "BLSI(32|64)rm",
1197 "BLSMSK(32|64)rm",
1198 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001199 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001200
1201def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1202 let Latency = 6;
1203 let NumMicroOps = 2;
1204 let ResourceCycles = [1,1];
1205}
Craig Topper2d451e72018-03-18 08:38:06 +00001206def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001207def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001208
Craig Topper58afb4e2018-03-22 21:10:07 +00001209def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001210 let Latency = 6;
1211 let NumMicroOps = 3;
1212 let ResourceCycles = [2,1];
1213}
Craig Topperfc179c62018-03-22 04:23:41 +00001214def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001215
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001216def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001217 let Latency = 6;
1218 let NumMicroOps = 4;
1219 let ResourceCycles = [1,2,1];
1220}
Craig Topperfc179c62018-03-22 04:23:41 +00001221def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1222 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001223
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001224def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001225 let Latency = 6;
1226 let NumMicroOps = 4;
1227 let ResourceCycles = [1,1,1,1];
1228}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001229def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001230
Craig Topper58afb4e2018-03-22 21:10:07 +00001231def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001232 let Latency = 6;
1233 let NumMicroOps = 4;
1234 let ResourceCycles = [1,1,1,1];
1235}
1236def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1237
1238def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1239 let Latency = 6;
1240 let NumMicroOps = 4;
1241 let ResourceCycles = [1,1,1,1];
1242}
Craig Topperfc179c62018-03-22 04:23:41 +00001243def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1244 "BTR(16|32|64)mi8",
1245 "BTS(16|32|64)mi8",
1246 "SAR(8|16|32|64)m1",
1247 "SAR(8|16|32|64)mi",
1248 "SHL(8|16|32|64)m1",
1249 "SHL(8|16|32|64)mi",
1250 "SHR(8|16|32|64)m1",
1251 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001252
1253def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1254 let Latency = 6;
1255 let NumMicroOps = 4;
1256 let ResourceCycles = [1,1,1,1];
1257}
Craig Topperf0d04262018-04-06 16:16:48 +00001258def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1259 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001260
1261def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001262 let Latency = 6;
1263 let NumMicroOps = 6;
1264 let ResourceCycles = [1,5];
1265}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001266def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001267
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001268def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1269 let Latency = 7;
1270 let NumMicroOps = 1;
1271 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001272}
Craig Topperfc179c62018-03-22 04:23:41 +00001273def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1274 "LD_F64m",
1275 "LD_F80m",
1276 "VBROADCASTF128",
1277 "VBROADCASTI128",
1278 "VBROADCASTSDYrm",
1279 "VBROADCASTSSYrm",
1280 "VLDDQUYrm",
1281 "VMOVAPDYrm",
1282 "VMOVAPSYrm",
1283 "VMOVDDUPYrm",
1284 "VMOVDQAYrm",
1285 "VMOVDQUYrm",
1286 "VMOVNTDQAYrm",
1287 "VMOVSHDUPYrm",
1288 "VMOVSLDUPYrm",
1289 "VMOVUPDYrm",
1290 "VMOVUPSYrm",
1291 "VPBROADCASTDYrm",
1292 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001293
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001294def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001295 let Latency = 7;
1296 let NumMicroOps = 2;
1297 let ResourceCycles = [1,1];
1298}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001299def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001300
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001301def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1302 let Latency = 7;
1303 let NumMicroOps = 2;
1304 let ResourceCycles = [1,1];
1305}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001306def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1307 "(V?)PACKSSDWrm",
1308 "(V?)PACKSSWBrm",
1309 "(V?)PACKUSDWrm",
1310 "(V?)PACKUSWBrm",
1311 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001312 "VPBROADCASTBrm",
1313 "VPBROADCASTWrm",
1314 "VPERMILPDmi",
1315 "VPERMILPDrm",
1316 "VPERMILPSmi",
1317 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001318 "(V?)PSHUFBrm",
1319 "(V?)PSHUFDmi",
1320 "(V?)PSHUFHWmi",
1321 "(V?)PSHUFLWmi",
1322 "(V?)PUNPCKHBWrm",
1323 "(V?)PUNPCKHDQrm",
1324 "(V?)PUNPCKHQDQrm",
1325 "(V?)PUNPCKHWDrm",
1326 "(V?)PUNPCKLBWrm",
1327 "(V?)PUNPCKLDQrm",
1328 "(V?)PUNPCKLQDQrm",
1329 "(V?)PUNPCKLWDrm",
1330 "(V?)SHUFPDrmi",
1331 "(V?)SHUFPSrmi",
1332 "(V?)UNPCKHPDrm",
1333 "(V?)UNPCKHPSrm",
1334 "(V?)UNPCKLPDrm",
1335 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001336
Craig Topper58afb4e2018-03-22 21:10:07 +00001337def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001338 let Latency = 7;
1339 let NumMicroOps = 2;
1340 let ResourceCycles = [1,1];
1341}
Craig Topperfc179c62018-03-22 04:23:41 +00001342def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1343 "VCVTPD2PSYrr",
1344 "VCVTPH2PSYrr",
1345 "VCVTPS2PDYrr",
1346 "VCVTPS2PHYrr",
1347 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001348
1349def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1350 let Latency = 7;
1351 let NumMicroOps = 2;
1352 let ResourceCycles = [1,1];
1353}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001354def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1355 "(V?)PABSDrm",
1356 "(V?)PABSWrm",
1357 "(V?)PADDSBrm",
1358 "(V?)PADDSWrm",
1359 "(V?)PADDUSBrm",
1360 "(V?)PADDUSWrm",
1361 "(V?)PAVGBrm",
1362 "(V?)PAVGWrm",
1363 "(V?)PCMPEQBrm",
1364 "(V?)PCMPEQDrm",
1365 "(V?)PCMPEQQrm",
1366 "(V?)PCMPEQWrm",
1367 "(V?)PCMPGTBrm",
1368 "(V?)PCMPGTDrm",
1369 "(V?)PCMPGTWrm",
1370 "(V?)PMAXSBrm",
1371 "(V?)PMAXSDrm",
1372 "(V?)PMAXSWrm",
1373 "(V?)PMAXUBrm",
1374 "(V?)PMAXUDrm",
1375 "(V?)PMAXUWrm",
1376 "(V?)PMINSBrm",
1377 "(V?)PMINSDrm",
1378 "(V?)PMINSWrm",
1379 "(V?)PMINUBrm",
1380 "(V?)PMINUDrm",
1381 "(V?)PMINUWrm",
1382 "(V?)PSIGNBrm",
1383 "(V?)PSIGNDrm",
1384 "(V?)PSIGNWrm",
1385 "(V?)PSLLDrm",
1386 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001387 "VPSLLVDrm",
1388 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001389 "(V?)PSLLWrm",
1390 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001391 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001392 "(V?)PSRAWrm",
1393 "(V?)PSRLDrm",
1394 "(V?)PSRLQrm",
1395 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001396 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001397 "(V?)PSRLWrm",
1398 "(V?)PSUBSBrm",
1399 "(V?)PSUBSWrm",
1400 "(V?)PSUBUSBrm",
1401 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001402
1403def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1404 let Latency = 7;
1405 let NumMicroOps = 2;
1406 let ResourceCycles = [1,1];
1407}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001408def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001409 "(V?)INSERTI128rm",
1410 "(V?)MASKMOVPDrm",
1411 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001412 "(V?)PADDBrm",
1413 "(V?)PADDDrm",
1414 "(V?)PADDQrm",
1415 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001416 "(V?)PBLENDDrmi",
1417 "(V?)PMASKMOVDrm",
1418 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001419 "(V?)PSUBBrm",
1420 "(V?)PSUBDrm",
1421 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001422 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001423
1424def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1425 let Latency = 7;
1426 let NumMicroOps = 3;
1427 let ResourceCycles = [2,1];
1428}
Craig Topperfc179c62018-03-22 04:23:41 +00001429def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1430 "MMX_PACKSSWBirm",
1431 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001432
1433def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1434 let Latency = 7;
1435 let NumMicroOps = 3;
1436 let ResourceCycles = [1,2];
1437}
Craig Topperf4cd9082018-01-19 05:47:32 +00001438def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001439
1440def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1441 let Latency = 7;
1442 let NumMicroOps = 3;
1443 let ResourceCycles = [1,2];
1444}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001445def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1446 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001447
Craig Topper58afb4e2018-03-22 21:10:07 +00001448def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001449 let Latency = 7;
1450 let NumMicroOps = 3;
1451 let ResourceCycles = [1,1,1];
1452}
Craig Topperfc179c62018-03-22 04:23:41 +00001453def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1454 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001455
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001456def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001457 let Latency = 7;
1458 let NumMicroOps = 3;
1459 let ResourceCycles = [1,1,1];
1460}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001461def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001462
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001463def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001464 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001465 let NumMicroOps = 3;
1466 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001467}
Craig Topperfc179c62018-03-22 04:23:41 +00001468def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1469 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001470
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001471def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1472 let Latency = 7;
1473 let NumMicroOps = 5;
1474 let ResourceCycles = [1,1,1,2];
1475}
Craig Topperfc179c62018-03-22 04:23:41 +00001476def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1477 "ROL(8|16|32|64)mi",
1478 "ROR(8|16|32|64)m1",
1479 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001480
1481def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1482 let Latency = 7;
1483 let NumMicroOps = 5;
1484 let ResourceCycles = [1,1,1,2];
1485}
Craig Topper13a16502018-03-19 00:56:09 +00001486def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001487
1488def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1489 let Latency = 7;
1490 let NumMicroOps = 5;
1491 let ResourceCycles = [1,1,1,1,1];
1492}
Craig Topperfc179c62018-03-22 04:23:41 +00001493def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1494 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001495
1496def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001497 let Latency = 7;
1498 let NumMicroOps = 7;
1499 let ResourceCycles = [1,3,1,2];
1500}
Craig Topper2d451e72018-03-18 08:38:06 +00001501def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001502
Craig Topper58afb4e2018-03-22 21:10:07 +00001503def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001504 let Latency = 8;
1505 let NumMicroOps = 2;
1506 let ResourceCycles = [2];
1507}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001508def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1509 "(V?)ROUNDPS(Y?)r",
1510 "(V?)ROUNDSDr",
1511 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001512
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001513def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001514 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001515 let NumMicroOps = 2;
1516 let ResourceCycles = [1,1];
1517}
Craig Topperfc179c62018-03-22 04:23:41 +00001518def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1519 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001520
1521def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1522 let Latency = 8;
1523 let NumMicroOps = 2;
1524 let ResourceCycles = [1,1];
1525}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001526def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1527 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001528
1529def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001530 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001531 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001532 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001533}
Craig Topperf846e2d2018-04-19 05:34:05 +00001534def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001535
Craig Topperf846e2d2018-04-19 05:34:05 +00001536def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1537 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001538 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001539 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001540}
Craig Topperfc179c62018-03-22 04:23:41 +00001541def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001542
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001543def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1544 let Latency = 8;
1545 let NumMicroOps = 2;
1546 let ResourceCycles = [1,1];
1547}
Craig Topperfc179c62018-03-22 04:23:41 +00001548def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1549 "FCOM64m",
1550 "FCOMP32m",
1551 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001552 "VPACKSSDWYrm",
1553 "VPACKSSWBYrm",
1554 "VPACKUSDWYrm",
1555 "VPACKUSWBYrm",
1556 "VPALIGNRYrmi",
1557 "VPBLENDWYrmi",
1558 "VPBROADCASTBYrm",
1559 "VPBROADCASTWYrm",
1560 "VPERMILPDYmi",
1561 "VPERMILPDYrm",
1562 "VPERMILPSYmi",
1563 "VPERMILPSYrm",
1564 "VPMOVSXBDYrm",
1565 "VPMOVSXBQYrm",
1566 "VPMOVSXWQYrm",
1567 "VPSHUFBYrm",
1568 "VPSHUFDYmi",
1569 "VPSHUFHWYmi",
1570 "VPSHUFLWYmi",
1571 "VPUNPCKHBWYrm",
1572 "VPUNPCKHDQYrm",
1573 "VPUNPCKHQDQYrm",
1574 "VPUNPCKHWDYrm",
1575 "VPUNPCKLBWYrm",
1576 "VPUNPCKLDQYrm",
1577 "VPUNPCKLQDQYrm",
1578 "VPUNPCKLWDYrm",
1579 "VSHUFPDYrmi",
1580 "VSHUFPSYrmi",
1581 "VUNPCKHPDYrm",
1582 "VUNPCKHPSYrm",
1583 "VUNPCKLPDYrm",
1584 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001585
1586def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1587 let Latency = 8;
1588 let NumMicroOps = 2;
1589 let ResourceCycles = [1,1];
1590}
Craig Topperfc179c62018-03-22 04:23:41 +00001591def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1592 "VPABSDYrm",
1593 "VPABSWYrm",
1594 "VPADDSBYrm",
1595 "VPADDSWYrm",
1596 "VPADDUSBYrm",
1597 "VPADDUSWYrm",
1598 "VPAVGBYrm",
1599 "VPAVGWYrm",
1600 "VPCMPEQBYrm",
1601 "VPCMPEQDYrm",
1602 "VPCMPEQQYrm",
1603 "VPCMPEQWYrm",
1604 "VPCMPGTBYrm",
1605 "VPCMPGTDYrm",
1606 "VPCMPGTWYrm",
1607 "VPMAXSBYrm",
1608 "VPMAXSDYrm",
1609 "VPMAXSWYrm",
1610 "VPMAXUBYrm",
1611 "VPMAXUDYrm",
1612 "VPMAXUWYrm",
1613 "VPMINSBYrm",
1614 "VPMINSDYrm",
1615 "VPMINSWYrm",
1616 "VPMINUBYrm",
1617 "VPMINUDYrm",
1618 "VPMINUWYrm",
1619 "VPSIGNBYrm",
1620 "VPSIGNDYrm",
1621 "VPSIGNWYrm",
1622 "VPSLLDYrm",
1623 "VPSLLQYrm",
1624 "VPSLLVDYrm",
1625 "VPSLLVQYrm",
1626 "VPSLLWYrm",
1627 "VPSRADYrm",
1628 "VPSRAVDYrm",
1629 "VPSRAWYrm",
1630 "VPSRLDYrm",
1631 "VPSRLQYrm",
1632 "VPSRLVDYrm",
1633 "VPSRLVQYrm",
1634 "VPSRLWYrm",
1635 "VPSUBSBYrm",
1636 "VPSUBSWYrm",
1637 "VPSUBUSBYrm",
1638 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001639
1640def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1641 let Latency = 8;
1642 let NumMicroOps = 2;
1643 let ResourceCycles = [1,1];
1644}
Craig Topperfc179c62018-03-22 04:23:41 +00001645def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1646 "VANDNPSYrm",
1647 "VANDPDYrm",
1648 "VANDPSYrm",
1649 "VBLENDPDYrmi",
1650 "VBLENDPSYrmi",
1651 "VMASKMOVPDYrm",
1652 "VMASKMOVPSYrm",
1653 "VORPDYrm",
1654 "VORPSYrm",
1655 "VPADDBYrm",
1656 "VPADDDYrm",
1657 "VPADDQYrm",
1658 "VPADDWYrm",
1659 "VPANDNYrm",
1660 "VPANDYrm",
1661 "VPBLENDDYrmi",
1662 "VPMASKMOVDYrm",
1663 "VPMASKMOVQYrm",
1664 "VPORYrm",
1665 "VPSUBBYrm",
1666 "VPSUBDYrm",
1667 "VPSUBQYrm",
1668 "VPSUBWYrm",
1669 "VPXORYrm",
1670 "VXORPDYrm",
1671 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001672
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001673def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1674 let Latency = 8;
1675 let NumMicroOps = 4;
1676 let ResourceCycles = [1,2,1];
1677}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001678def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001679
1680def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1681 let Latency = 8;
1682 let NumMicroOps = 4;
1683 let ResourceCycles = [2,1,1];
1684}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001685def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001686
Craig Topper58afb4e2018-03-22 21:10:07 +00001687def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001688 let Latency = 8;
1689 let NumMicroOps = 4;
1690 let ResourceCycles = [1,1,1,1];
1691}
1692def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1693
1694def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1695 let Latency = 8;
1696 let NumMicroOps = 5;
1697 let ResourceCycles = [1,1,3];
1698}
Craig Topper13a16502018-03-19 00:56:09 +00001699def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001700
1701def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1702 let Latency = 8;
1703 let NumMicroOps = 5;
1704 let ResourceCycles = [1,1,1,2];
1705}
Craig Topperfc179c62018-03-22 04:23:41 +00001706def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1707 "RCL(8|16|32|64)mi",
1708 "RCR(8|16|32|64)m1",
1709 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001710
1711def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1712 let Latency = 8;
1713 let NumMicroOps = 6;
1714 let ResourceCycles = [1,1,1,3];
1715}
Craig Topperfc179c62018-03-22 04:23:41 +00001716def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1717 "SAR(8|16|32|64)mCL",
1718 "SHL(8|16|32|64)mCL",
1719 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001720
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001721def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1722 let Latency = 8;
1723 let NumMicroOps = 6;
1724 let ResourceCycles = [1,1,1,2,1];
1725}
Craig Topper9f834812018-04-01 21:54:24 +00001726def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001727 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001728 "SBB(8|16|32|64)mi")>;
1729def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1730 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001731
1732def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1733 let Latency = 9;
1734 let NumMicroOps = 2;
1735 let ResourceCycles = [1,1];
1736}
Craig Topperfc179c62018-03-22 04:23:41 +00001737def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1738 "MMX_PMADDUBSWrm",
1739 "MMX_PMADDWDirm",
1740 "MMX_PMULHRSWrm",
1741 "MMX_PMULHUWirm",
1742 "MMX_PMULHWirm",
1743 "MMX_PMULLWirm",
1744 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001745 "(V?)RCPSSm",
1746 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001747 "VTESTPDYrm",
1748 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001749
1750def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1751 let Latency = 9;
1752 let NumMicroOps = 2;
1753 let ResourceCycles = [1,1];
1754}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001755def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001756 "VPMOVSXBWYrm",
1757 "VPMOVSXDQYrm",
1758 "VPMOVSXWDYrm",
1759 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001760 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001761
1762def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1763 let Latency = 9;
1764 let NumMicroOps = 2;
1765 let ResourceCycles = [1,1];
1766}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001767def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1768 "(V?)ADDSSrm",
1769 "(V?)CMPSDrm",
1770 "(V?)CMPSSrm",
1771 "(V?)MAX(C?)SDrm",
1772 "(V?)MAX(C?)SSrm",
1773 "(V?)MIN(C?)SDrm",
1774 "(V?)MIN(C?)SSrm",
1775 "(V?)MULSDrm",
1776 "(V?)MULSSrm",
1777 "(V?)SUBSDrm",
1778 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001779def: InstRW<[SKLWriteResGroup122],
1780 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001781
Craig Topper58afb4e2018-03-22 21:10:07 +00001782def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001783 let Latency = 9;
1784 let NumMicroOps = 2;
1785 let ResourceCycles = [1,1];
1786}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001787def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001788 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001789 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001790 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001791
Craig Topper58afb4e2018-03-22 21:10:07 +00001792def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001793 let Latency = 9;
1794 let NumMicroOps = 3;
1795 let ResourceCycles = [1,2];
1796}
Craig Topperfc179c62018-03-22 04:23:41 +00001797def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001798
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001799def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1800 let Latency = 9;
1801 let NumMicroOps = 3;
1802 let ResourceCycles = [1,2];
1803}
Craig Topperfc179c62018-03-22 04:23:41 +00001804def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1805 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001806
1807def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1808 let Latency = 9;
1809 let NumMicroOps = 3;
1810 let ResourceCycles = [1,1,1];
1811}
Craig Topperfc179c62018-03-22 04:23:41 +00001812def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001813
1814def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1815 let Latency = 9;
1816 let NumMicroOps = 3;
1817 let ResourceCycles = [1,1,1];
1818}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001819def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001820
1821def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001822 let Latency = 9;
1823 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001824 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001825}
Craig Topperfc179c62018-03-22 04:23:41 +00001826def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1827 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001828
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001829def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1830 let Latency = 9;
1831 let NumMicroOps = 4;
1832 let ResourceCycles = [2,1,1];
1833}
Craig Topperfc179c62018-03-22 04:23:41 +00001834def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1835 "(V?)PHADDWrm",
1836 "(V?)PHSUBDrm",
1837 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001838
1839def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1840 let Latency = 9;
1841 let NumMicroOps = 4;
1842 let ResourceCycles = [1,1,1,1];
1843}
Craig Topperfc179c62018-03-22 04:23:41 +00001844def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1845 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001846
1847def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1848 let Latency = 9;
1849 let NumMicroOps = 5;
1850 let ResourceCycles = [1,2,1,1];
1851}
Craig Topperfc179c62018-03-22 04:23:41 +00001852def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1853 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001854
1855def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1856 let Latency = 10;
1857 let NumMicroOps = 2;
1858 let ResourceCycles = [1,1];
1859}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001860def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001861 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001862
1863def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1864 let Latency = 10;
1865 let NumMicroOps = 2;
1866 let ResourceCycles = [1,1];
1867}
Craig Topperfc179c62018-03-22 04:23:41 +00001868def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1869 "ADD_F64m",
1870 "ILD_F16m",
1871 "ILD_F32m",
1872 "ILD_F64m",
1873 "SUBR_F32m",
1874 "SUBR_F64m",
1875 "SUB_F32m",
1876 "SUB_F64m",
1877 "VPCMPGTQYrm",
1878 "VPERM2F128rm",
1879 "VPERM2I128rm",
1880 "VPERMDYrm",
1881 "VPERMPDYmi",
1882 "VPERMPSYrm",
1883 "VPERMQYmi",
1884 "VPMOVZXBDYrm",
1885 "VPMOVZXBQYrm",
1886 "VPMOVZXBWYrm",
1887 "VPMOVZXDQYrm",
1888 "VPMOVZXWQYrm",
1889 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001890
1891def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1892 let Latency = 10;
1893 let NumMicroOps = 2;
1894 let ResourceCycles = [1,1];
1895}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001896def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1897 "(V?)ADDPSrm",
1898 "(V?)ADDSUBPDrm",
1899 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001900 "(V?)CVTDQ2PSrm",
1901 "(V?)CVTPH2PSYrm",
1902 "(V?)CVTPS2DQrm",
1903 "(V?)CVTSS2SDrm",
1904 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001905 "(V?)MULPDrm",
1906 "(V?)MULPSrm",
1907 "(V?)PHMINPOSUWrm",
1908 "(V?)PMADDUBSWrm",
1909 "(V?)PMADDWDrm",
1910 "(V?)PMULDQrm",
1911 "(V?)PMULHRSWrm",
1912 "(V?)PMULHUWrm",
1913 "(V?)PMULHWrm",
1914 "(V?)PMULLWrm",
1915 "(V?)PMULUDQrm",
1916 "(V?)SUBPDrm",
1917 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001918def: InstRW<[SKLWriteResGroup134],
1919 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001920
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001921def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1922 let Latency = 10;
1923 let NumMicroOps = 3;
1924 let ResourceCycles = [1,1,1];
1925}
Craig Topperfc179c62018-03-22 04:23:41 +00001926def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1927 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001928
Craig Topper58afb4e2018-03-22 21:10:07 +00001929def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001930 let Latency = 10;
1931 let NumMicroOps = 3;
1932 let ResourceCycles = [1,1,1];
1933}
Craig Topperfc179c62018-03-22 04:23:41 +00001934def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001935
1936def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001937 let Latency = 10;
1938 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001939 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001940}
Craig Topperfc179c62018-03-22 04:23:41 +00001941def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1942 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001943
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001944def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1945 let Latency = 10;
1946 let NumMicroOps = 4;
1947 let ResourceCycles = [2,1,1];
1948}
Craig Topperfc179c62018-03-22 04:23:41 +00001949def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1950 "VPHADDWYrm",
1951 "VPHSUBDYrm",
1952 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001953
1954def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001955 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001956 let NumMicroOps = 4;
1957 let ResourceCycles = [1,1,1,1];
1958}
Craig Topperf846e2d2018-04-19 05:34:05 +00001959def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001960
1961def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1962 let Latency = 10;
1963 let NumMicroOps = 8;
1964 let ResourceCycles = [1,1,1,1,1,3];
1965}
Craig Topper13a16502018-03-19 00:56:09 +00001966def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001967
1968def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001969 let Latency = 10;
1970 let NumMicroOps = 10;
1971 let ResourceCycles = [9,1];
1972}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001973def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001974
Craig Topper8104f262018-04-02 05:33:28 +00001975def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001976 let Latency = 11;
1977 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001978 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001979}
Craig Topper8104f262018-04-02 05:33:28 +00001980def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001981 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001982
Craig Topper8104f262018-04-02 05:33:28 +00001983def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1984 let Latency = 11;
1985 let NumMicroOps = 1;
1986 let ResourceCycles = [1,5];
1987}
1988def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1989
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001990def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001991 let Latency = 11;
1992 let NumMicroOps = 2;
1993 let ResourceCycles = [1,1];
1994}
Craig Topperfc179c62018-03-22 04:23:41 +00001995def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
1996 "MUL_F64m",
1997 "VRCPPSYm",
1998 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001999
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002000def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2001 let Latency = 11;
2002 let NumMicroOps = 2;
2003 let ResourceCycles = [1,1];
2004}
Craig Topperfc179c62018-03-22 04:23:41 +00002005def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2006 "VADDPSYrm",
2007 "VADDSUBPDYrm",
2008 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002009 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002010 "VCMPPSYrmi",
2011 "VCVTDQ2PSYrm",
2012 "VCVTPS2DQYrm",
2013 "VCVTPS2PDYrm",
2014 "VCVTTPS2DQYrm",
2015 "VMAX(C?)PDYrm",
2016 "VMAX(C?)PSYrm",
2017 "VMIN(C?)PDYrm",
2018 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002019 "VMULPDYrm",
2020 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002021 "VPMADDUBSWYrm",
2022 "VPMADDWDYrm",
2023 "VPMULDQYrm",
2024 "VPMULHRSWYrm",
2025 "VPMULHUWYrm",
2026 "VPMULHWYrm",
2027 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002028 "VPMULUDQYrm",
2029 "VSUBPDYrm",
2030 "VSUBPSYrm")>;
2031def: InstRW<[SKLWriteResGroup147],
2032 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002033
2034def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2035 let Latency = 11;
2036 let NumMicroOps = 3;
2037 let ResourceCycles = [2,1];
2038}
Craig Topperfc179c62018-03-22 04:23:41 +00002039def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2040 "FICOM32m",
2041 "FICOMP16m",
2042 "FICOMP32m",
2043 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002044
2045def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2046 let Latency = 11;
2047 let NumMicroOps = 3;
2048 let ResourceCycles = [1,1,1];
2049}
Craig Topperfc179c62018-03-22 04:23:41 +00002050def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002051
Craig Topper58afb4e2018-03-22 21:10:07 +00002052def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002053 let Latency = 11;
2054 let NumMicroOps = 3;
2055 let ResourceCycles = [1,1,1];
2056}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002057def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2058 "(V?)CVTSD2SIrm",
2059 "(V?)CVTSS2SI64rm",
2060 "(V?)CVTSS2SIrm",
2061 "(V?)CVTTSD2SI64rm",
2062 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002063 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002064 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002065
Craig Topper58afb4e2018-03-22 21:10:07 +00002066def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002067 let Latency = 11;
2068 let NumMicroOps = 3;
2069 let ResourceCycles = [1,1,1];
2070}
Craig Topperfc179c62018-03-22 04:23:41 +00002071def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2072 "CVTPD2PSrm",
2073 "CVTTPD2DQrm",
2074 "MMX_CVTPD2PIirm",
2075 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002076
2077def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2078 let Latency = 11;
2079 let NumMicroOps = 6;
2080 let ResourceCycles = [1,1,1,2,1];
2081}
Craig Topperfc179c62018-03-22 04:23:41 +00002082def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2083 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002084
2085def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002086 let Latency = 11;
2087 let NumMicroOps = 7;
2088 let ResourceCycles = [2,3,2];
2089}
Craig Topperfc179c62018-03-22 04:23:41 +00002090def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2091 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002092
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002093def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002094 let Latency = 11;
2095 let NumMicroOps = 9;
2096 let ResourceCycles = [1,5,1,2];
2097}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002098def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002099
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002100def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002101 let Latency = 11;
2102 let NumMicroOps = 11;
2103 let ResourceCycles = [2,9];
2104}
Craig Topperfc179c62018-03-22 04:23:41 +00002105def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002106
Craig Topper8104f262018-04-02 05:33:28 +00002107def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002108 let Latency = 12;
2109 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002110 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002111}
Craig Topper8104f262018-04-02 05:33:28 +00002112def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002113 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002114
Craig Topper8104f262018-04-02 05:33:28 +00002115def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2116 let Latency = 12;
2117 let NumMicroOps = 1;
2118 let ResourceCycles = [1,6];
2119}
2120def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2121
Craig Topper58afb4e2018-03-22 21:10:07 +00002122def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002123 let Latency = 12;
2124 let NumMicroOps = 4;
2125 let ResourceCycles = [1,1,1,1];
2126}
2127def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2128
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002129def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002130 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002131 let NumMicroOps = 3;
2132 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002133}
Craig Topperfc179c62018-03-22 04:23:41 +00002134def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2135 "ADD_FI32m",
2136 "SUBR_FI16m",
2137 "SUBR_FI32m",
2138 "SUB_FI16m",
2139 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002140
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002141def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2142 let Latency = 13;
2143 let NumMicroOps = 3;
2144 let ResourceCycles = [1,1,1];
2145}
2146def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2147
Craig Topper58afb4e2018-03-22 21:10:07 +00002148def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002149 let Latency = 13;
2150 let NumMicroOps = 4;
2151 let ResourceCycles = [1,3];
2152}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002153def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002154
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002155def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002156 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002157 let NumMicroOps = 4;
2158 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002159}
Craig Topperfc179c62018-03-22 04:23:41 +00002160def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2161 "VHADDPSYrm",
2162 "VHSUBPDYrm",
2163 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002164
Craig Topper8104f262018-04-02 05:33:28 +00002165def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002166 let Latency = 14;
2167 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002168 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002169}
Craig Topper8104f262018-04-02 05:33:28 +00002170def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002171 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002172
Craig Topper8104f262018-04-02 05:33:28 +00002173def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2174 let Latency = 14;
2175 let NumMicroOps = 1;
2176 let ResourceCycles = [1,5];
2177}
2178def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2179
Craig Topper58afb4e2018-03-22 21:10:07 +00002180def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002181 let Latency = 14;
2182 let NumMicroOps = 3;
2183 let ResourceCycles = [1,2];
2184}
Craig Topperfc179c62018-03-22 04:23:41 +00002185def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2186def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2187def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2188def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002189
2190def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2191 let Latency = 14;
2192 let NumMicroOps = 3;
2193 let ResourceCycles = [1,1,1];
2194}
Craig Topperfc179c62018-03-22 04:23:41 +00002195def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2196 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002197
2198def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002199 let Latency = 14;
2200 let NumMicroOps = 10;
2201 let ResourceCycles = [2,4,1,3];
2202}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002203def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002204
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002205def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002206 let Latency = 15;
2207 let NumMicroOps = 1;
2208 let ResourceCycles = [1];
2209}
Craig Topperfc179c62018-03-22 04:23:41 +00002210def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2211 "DIVR_FST0r",
2212 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002213
Craig Topper58afb4e2018-03-22 21:10:07 +00002214def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002215 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002216 let NumMicroOps = 3;
2217 let ResourceCycles = [1,2];
2218}
Craig Topper40d3b322018-03-22 21:55:20 +00002219def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2220 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002221
Craig Topperd25f1ac2018-03-20 23:39:48 +00002222def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2223 let Latency = 17;
2224 let NumMicroOps = 3;
2225 let ResourceCycles = [1,2];
2226}
2227def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2228
Craig Topper58afb4e2018-03-22 21:10:07 +00002229def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002230 let Latency = 15;
2231 let NumMicroOps = 4;
2232 let ResourceCycles = [1,1,2];
2233}
Craig Topperfc179c62018-03-22 04:23:41 +00002234def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002235
2236def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2237 let Latency = 15;
2238 let NumMicroOps = 10;
2239 let ResourceCycles = [1,1,1,5,1,1];
2240}
Craig Topper13a16502018-03-19 00:56:09 +00002241def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002242
Craig Topper8104f262018-04-02 05:33:28 +00002243def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002244 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002245 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002246 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002247}
Craig Topperfc179c62018-03-22 04:23:41 +00002248def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002249
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002250def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2251 let Latency = 16;
2252 let NumMicroOps = 14;
2253 let ResourceCycles = [1,1,1,4,2,5];
2254}
2255def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2256
2257def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002258 let Latency = 16;
2259 let NumMicroOps = 16;
2260 let ResourceCycles = [16];
2261}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002262def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002263
Craig Topper8104f262018-04-02 05:33:28 +00002264def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002265 let Latency = 17;
2266 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002267 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002268}
Craig Topper8104f262018-04-02 05:33:28 +00002269def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2270
2271def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2272 let Latency = 17;
2273 let NumMicroOps = 2;
2274 let ResourceCycles = [1,1,3];
2275}
2276def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002277
2278def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002279 let Latency = 17;
2280 let NumMicroOps = 15;
2281 let ResourceCycles = [2,1,2,4,2,4];
2282}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002283def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002284
Craig Topper8104f262018-04-02 05:33:28 +00002285def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002286 let Latency = 18;
2287 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002288 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002289}
Craig Topper8104f262018-04-02 05:33:28 +00002290def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002291 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002292
Craig Topper8104f262018-04-02 05:33:28 +00002293def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2294 let Latency = 18;
2295 let NumMicroOps = 1;
2296 let ResourceCycles = [1,12];
2297}
2298def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2299
2300def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002301 let Latency = 18;
2302 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002303 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002304}
Craig Topper8104f262018-04-02 05:33:28 +00002305def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2306
2307def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2308 let Latency = 18;
2309 let NumMicroOps = 2;
2310 let ResourceCycles = [1,1,3];
2311}
2312def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002313
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002314def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002315 let Latency = 18;
2316 let NumMicroOps = 8;
2317 let ResourceCycles = [1,1,1,5];
2318}
Craig Topperfc179c62018-03-22 04:23:41 +00002319def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002320
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002321def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002322 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002323 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002324 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002325}
Craig Topper13a16502018-03-19 00:56:09 +00002326def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002327
Craig Topper8104f262018-04-02 05:33:28 +00002328def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002329 let Latency = 19;
2330 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002331 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002332}
Craig Topper8104f262018-04-02 05:33:28 +00002333def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2334
2335def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2336 let Latency = 19;
2337 let NumMicroOps = 2;
2338 let ResourceCycles = [1,1,6];
2339}
2340def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002341
Craig Topper58afb4e2018-03-22 21:10:07 +00002342def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002343 let Latency = 19;
2344 let NumMicroOps = 5;
2345 let ResourceCycles = [1,1,3];
2346}
Craig Topperfc179c62018-03-22 04:23:41 +00002347def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002348
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002349def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002350 let Latency = 20;
2351 let NumMicroOps = 1;
2352 let ResourceCycles = [1];
2353}
Craig Topperfc179c62018-03-22 04:23:41 +00002354def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2355 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002356 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002357
Craig Topper8104f262018-04-02 05:33:28 +00002358def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002359 let Latency = 20;
2360 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002361 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002362}
Craig Topperfc179c62018-03-22 04:23:41 +00002363def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002364
Craig Topper58afb4e2018-03-22 21:10:07 +00002365def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002366 let Latency = 20;
2367 let NumMicroOps = 5;
2368 let ResourceCycles = [1,1,3];
2369}
2370def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2371
2372def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2373 let Latency = 20;
2374 let NumMicroOps = 8;
2375 let ResourceCycles = [1,1,1,1,1,1,2];
2376}
Craig Topperfc179c62018-03-22 04:23:41 +00002377def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2378 "INSL",
2379 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002380
2381def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002382 let Latency = 20;
2383 let NumMicroOps = 10;
2384 let ResourceCycles = [1,2,7];
2385}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002386def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002387
Craig Topper8104f262018-04-02 05:33:28 +00002388def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002389 let Latency = 21;
2390 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002391 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002392}
2393def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2394
2395def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2396 let Latency = 22;
2397 let NumMicroOps = 2;
2398 let ResourceCycles = [1,1];
2399}
Craig Topperfc179c62018-03-22 04:23:41 +00002400def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2401 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002402
2403def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2404 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002405 let NumMicroOps = 5;
2406 let ResourceCycles = [1,2,1,1];
2407}
Craig Topper17a31182017-12-16 18:35:29 +00002408def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2409 VGATHERDPDrm,
2410 VGATHERQPDrm,
2411 VGATHERQPSrm,
2412 VPGATHERDDrm,
2413 VPGATHERDQrm,
2414 VPGATHERQDrm,
2415 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002416
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002417def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2418 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002419 let NumMicroOps = 5;
2420 let ResourceCycles = [1,2,1,1];
2421}
Craig Topper17a31182017-12-16 18:35:29 +00002422def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2423 VGATHERQPDYrm,
2424 VGATHERQPSYrm,
2425 VPGATHERDDYrm,
2426 VPGATHERDQYrm,
2427 VPGATHERQDYrm,
2428 VPGATHERQQYrm,
2429 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002430
Craig Topper8104f262018-04-02 05:33:28 +00002431def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002432 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002433 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002434 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002435}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002436def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002437
2438def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2439 let Latency = 23;
2440 let NumMicroOps = 19;
2441 let ResourceCycles = [2,1,4,1,1,4,6];
2442}
2443def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2444
Craig Topper8104f262018-04-02 05:33:28 +00002445def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002446 let Latency = 24;
2447 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002448 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002449}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002450def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002451
Craig Topper8104f262018-04-02 05:33:28 +00002452def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002453 let Latency = 25;
2454 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002455 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002456}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002457def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002458
2459def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2460 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002461 let NumMicroOps = 3;
2462 let ResourceCycles = [1,1,1];
2463}
Craig Topperfc179c62018-03-22 04:23:41 +00002464def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2465 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002466
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002467def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2468 let Latency = 27;
2469 let NumMicroOps = 2;
2470 let ResourceCycles = [1,1];
2471}
Craig Topperfc179c62018-03-22 04:23:41 +00002472def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2473 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002474
2475def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2476 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002477 let NumMicroOps = 8;
2478 let ResourceCycles = [2,4,1,1];
2479}
Craig Topper13a16502018-03-19 00:56:09 +00002480def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002481
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002482def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002483 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002484 let NumMicroOps = 3;
2485 let ResourceCycles = [1,1,1];
2486}
Craig Topperfc179c62018-03-22 04:23:41 +00002487def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2488 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002489
2490def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2491 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002492 let NumMicroOps = 23;
2493 let ResourceCycles = [1,5,3,4,10];
2494}
Craig Topperfc179c62018-03-22 04:23:41 +00002495def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2496 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002497
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002498def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2499 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002500 let NumMicroOps = 23;
2501 let ResourceCycles = [1,5,2,1,4,10];
2502}
Craig Topperfc179c62018-03-22 04:23:41 +00002503def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2504 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002505
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002506def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2507 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002508 let NumMicroOps = 31;
2509 let ResourceCycles = [1,8,1,21];
2510}
Craig Topper391c6f92017-12-10 01:24:08 +00002511def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002512
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002513def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2514 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002515 let NumMicroOps = 18;
2516 let ResourceCycles = [1,1,2,3,1,1,1,8];
2517}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002518def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002519
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002520def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2521 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002522 let NumMicroOps = 39;
2523 let ResourceCycles = [1,10,1,1,26];
2524}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002525def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002526
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002527def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002528 let Latency = 42;
2529 let NumMicroOps = 22;
2530 let ResourceCycles = [2,20];
2531}
Craig Topper2d451e72018-03-18 08:38:06 +00002532def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002533
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002534def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2535 let Latency = 42;
2536 let NumMicroOps = 40;
2537 let ResourceCycles = [1,11,1,1,26];
2538}
Craig Topper391c6f92017-12-10 01:24:08 +00002539def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002540
2541def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2542 let Latency = 46;
2543 let NumMicroOps = 44;
2544 let ResourceCycles = [1,11,1,1,30];
2545}
2546def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2547
2548def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2549 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002550 let NumMicroOps = 64;
2551 let ResourceCycles = [2,8,5,10,39];
2552}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002553def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002554
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002555def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2556 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002557 let NumMicroOps = 88;
2558 let ResourceCycles = [4,4,31,1,2,1,45];
2559}
Craig Topper2d451e72018-03-18 08:38:06 +00002560def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002561
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002562def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2563 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002564 let NumMicroOps = 90;
2565 let ResourceCycles = [4,2,33,1,2,1,47];
2566}
Craig Topper2d451e72018-03-18 08:38:06 +00002567def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002568
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002569def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002570 let Latency = 75;
2571 let NumMicroOps = 15;
2572 let ResourceCycles = [6,3,6];
2573}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002574def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002575
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002576def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002577 let Latency = 76;
2578 let NumMicroOps = 32;
2579 let ResourceCycles = [7,2,8,3,1,11];
2580}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002581def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002582
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002583def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002584 let Latency = 102;
2585 let NumMicroOps = 66;
2586 let ResourceCycles = [4,2,4,8,14,34];
2587}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002588def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002589
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002590def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2591 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002592 let NumMicroOps = 100;
2593 let ResourceCycles = [9,1,11,16,1,11,21,30];
2594}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002595def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002596
2597} // SchedModel