blob: ce272b264651f6c3b858fc8fee1af78d0e16c9d1 [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}
Craig Topperfc179c62018-03-22 04:23:41 +0000436def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
437 "FNOP",
438 "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000439 "MMX_PABS(B|D|W)rr",
440 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000441 "MMX_PANDNirr",
442 "MMX_PANDirr",
443 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000444 "MMX_PSIGN(B|D|W)rr",
445 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000446 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000447
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000448def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000449 let Latency = 1;
450 let NumMicroOps = 1;
451 let ResourceCycles = [1];
452}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000453def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000454def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
455 "ADC(16|32|64)i",
456 "ADC(8|16|32|64)rr",
457 "ADCX(32|64)rr",
458 "ADOX(32|64)rr",
459 "BT(16|32|64)ri8",
460 "BT(16|32|64)rr",
461 "BTC(16|32|64)ri8",
462 "BTC(16|32|64)rr",
463 "BTR(16|32|64)ri8",
464 "BTR(16|32|64)rr",
465 "BTS(16|32|64)ri8",
466 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000467 "RORX(32|64)ri",
468 "SAR(8|16|32|64)r1",
469 "SAR(8|16|32|64)ri",
470 "SARX(32|64)rr",
471 "SBB(16|32|64)ri",
472 "SBB(16|32|64)i",
473 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000474 "SHL(8|16|32|64)r1",
475 "SHL(8|16|32|64)ri",
476 "SHLX(32|64)rr",
477 "SHR(8|16|32|64)r1",
478 "SHR(8|16|32|64)ri",
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000479 "SHRX(32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000480
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000481def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
482 let Latency = 1;
483 let NumMicroOps = 1;
484 let ResourceCycles = [1];
485}
Craig Topperfc179c62018-03-22 04:23:41 +0000486def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
487 "BLSI(32|64)rr",
488 "BLSMSK(32|64)rr",
489 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000490 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000491
492def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
493 let Latency = 1;
494 let NumMicroOps = 1;
495 let ResourceCycles = [1];
496}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000497def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000498 "(V?)PADDD(Y?)rr",
499 "(V?)PADDQ(Y?)rr",
500 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000501 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000502 "(V?)PSUBB(Y?)rr",
503 "(V?)PSUBD(Y?)rr",
504 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000505 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000506
507def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
508 let Latency = 1;
509 let NumMicroOps = 1;
510 let ResourceCycles = [1];
511}
Craig Topperfbe31322018-04-05 21:56:19 +0000512def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000513def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000514 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000515 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000516 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000517 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000518 "SGDT64m",
519 "SIDT64m",
520 "SLDT64m",
521 "SMSW16m",
522 "STC",
523 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000524 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000525
526def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000527 let Latency = 1;
528 let NumMicroOps = 2;
529 let ResourceCycles = [1,1];
530}
Craig Topperfc179c62018-03-22 04:23:41 +0000531def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
532 "MMX_MOVD64from64rm",
533 "MMX_MOVD64mr",
534 "MMX_MOVNTQmr",
535 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000536 "MOVNTI_64mr",
537 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000538 "ST_FP32m",
539 "ST_FP64m",
540 "ST_FP80m",
541 "VEXTRACTF128mr",
542 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000543 "(V?)MOVAPDYmr",
544 "(V?)MOVAPS(Y?)mr",
545 "(V?)MOVDQA(Y?)mr",
546 "(V?)MOVDQU(Y?)mr",
547 "(V?)MOVHPDmr",
548 "(V?)MOVHPSmr",
549 "(V?)MOVLPDmr",
550 "(V?)MOVLPSmr",
551 "(V?)MOVNTDQ(Y?)mr",
552 "(V?)MOVNTPD(Y?)mr",
553 "(V?)MOVNTPS(Y?)mr",
554 "(V?)MOVPDI2DImr",
555 "(V?)MOVPQI2QImr",
556 "(V?)MOVPQIto64mr",
557 "(V?)MOVSDmr",
558 "(V?)MOVSSmr",
559 "(V?)MOVUPD(Y?)mr",
560 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000561 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000562
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000563def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000564 let Latency = 2;
565 let NumMicroOps = 1;
566 let ResourceCycles = [1];
567}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000568def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000569 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000570 "(V?)MOVPDI2DIrr",
571 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000572 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000573 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000574
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000575def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000576 let Latency = 2;
577 let NumMicroOps = 2;
578 let ResourceCycles = [2];
579}
Craig Topperfc179c62018-03-22 04:23:41 +0000580def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
581 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000582 "(V?)PINSRBrr",
583 "(V?)PINSRDrr",
584 "(V?)PINSRQrr",
585 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000586
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000587def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000588 let Latency = 2;
589 let NumMicroOps = 2;
590 let ResourceCycles = [2];
591}
Craig Topperfc179c62018-03-22 04:23:41 +0000592def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
593 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000594
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000595def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000596 let Latency = 2;
597 let NumMicroOps = 2;
598 let ResourceCycles = [2];
599}
Craig Topperfc179c62018-03-22 04:23:41 +0000600def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
601 "ROL(8|16|32|64)r1",
602 "ROL(8|16|32|64)ri",
603 "ROR(8|16|32|64)r1",
604 "ROR(8|16|32|64)ri",
605 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000606
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000607def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000608 let Latency = 2;
609 let NumMicroOps = 2;
610 let ResourceCycles = [2];
611}
Craig Topperfc179c62018-03-22 04:23:41 +0000612def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
613 "WAIT",
614 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000615
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000616def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000617 let Latency = 2;
618 let NumMicroOps = 2;
619 let ResourceCycles = [1,1];
620}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000621def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
622 "VMASKMOVPS(Y?)mr",
623 "VPMASKMOVD(Y?)mr",
624 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000625
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000626def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000627 let Latency = 2;
628 let NumMicroOps = 2;
629 let ResourceCycles = [1,1];
630}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000631def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
632 "(V?)PSLLQrr",
633 "(V?)PSLLWrr",
634 "(V?)PSRADrr",
635 "(V?)PSRAWrr",
636 "(V?)PSRLDrr",
637 "(V?)PSRLQrr",
638 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000639
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000640def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000641 let Latency = 2;
642 let NumMicroOps = 2;
643 let ResourceCycles = [1,1];
644}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000645def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000646
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000647def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000648 let Latency = 2;
649 let NumMicroOps = 2;
650 let ResourceCycles = [1,1];
651}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000652def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000653
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000654def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000655 let Latency = 2;
656 let NumMicroOps = 2;
657 let ResourceCycles = [1,1];
658}
Craig Topper498875f2018-04-04 17:54:19 +0000659def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
660
661def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
662 let Latency = 1;
663 let NumMicroOps = 1;
664 let ResourceCycles = [1];
665}
666def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000667
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000668def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000669 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000670 let NumMicroOps = 2;
671 let ResourceCycles = [1,1];
672}
Craig Topper2d451e72018-03-18 08:38:06 +0000673def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000674def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000675def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
676 "ADC8ri",
677 "SBB8i8",
678 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000679
680def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
681 let Latency = 2;
682 let NumMicroOps = 3;
683 let ResourceCycles = [1,1,1];
684}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000685def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
686 "(V?)PEXTRBmr",
687 "(V?)PEXTRDmr",
688 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000689 "(V?)PEXTRWmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000690
691def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
692 let Latency = 2;
693 let NumMicroOps = 3;
694 let ResourceCycles = [1,1,1];
695}
696def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
697
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000698def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
699 let Latency = 2;
700 let NumMicroOps = 3;
701 let ResourceCycles = [1,1,1];
702}
703def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
704
705def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
706 let Latency = 2;
707 let NumMicroOps = 3;
708 let ResourceCycles = [1,1,1];
709}
Craig Topper2d451e72018-03-18 08:38:06 +0000710def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000711def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
712 "PUSH64i8",
713 "STOSB",
714 "STOSL",
715 "STOSQ",
716 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000717
718def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
719 let Latency = 3;
720 let NumMicroOps = 1;
721 let ResourceCycles = [1];
722}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000723def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000724 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000725 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000726 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000727
Clement Courbet327fac42018-03-07 08:14:02 +0000728def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000729 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000730 let NumMicroOps = 2;
731 let ResourceCycles = [1,1];
732}
Clement Courbet327fac42018-03-07 08:14:02 +0000733def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000734
735def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
736 let Latency = 3;
737 let NumMicroOps = 1;
738 let ResourceCycles = [1];
739}
Craig Topperfc179c62018-03-22 04:23:41 +0000740def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
741 "ADD_FST0r",
742 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000743 "SUBR_FPrST0",
744 "SUBR_FST0r",
745 "SUBR_FrST0",
746 "SUB_FPrST0",
747 "SUB_FST0r",
748 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000749 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000750 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000751 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000752 "VPMOVSXBDYrr",
753 "VPMOVSXBQYrr",
754 "VPMOVSXBWYrr",
755 "VPMOVSXDQYrr",
756 "VPMOVSXWDYrr",
757 "VPMOVSXWQYrr",
758 "VPMOVZXBDYrr",
759 "VPMOVZXBQYrr",
760 "VPMOVZXBWYrr",
761 "VPMOVZXDQYrr",
762 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000763 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000764
765def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
766 let Latency = 3;
767 let NumMicroOps = 2;
768 let ResourceCycles = [1,1];
769}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000770def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
771 "(V?)EXTRACTPSrr",
772 "(V?)PEXTRBrr",
773 "(V?)PEXTRDrr",
774 "(V?)PEXTRQrr",
775 "(V?)PEXTRWrr",
776 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000777
778def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
779 let Latency = 3;
780 let NumMicroOps = 2;
781 let ResourceCycles = [1,1];
782}
783def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
784
785def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
786 let Latency = 3;
787 let NumMicroOps = 3;
788 let ResourceCycles = [3];
789}
Craig Topperfc179c62018-03-22 04:23:41 +0000790def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
791 "ROR(8|16|32|64)rCL",
792 "SAR(8|16|32|64)rCL",
793 "SHL(8|16|32|64)rCL",
794 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000795
796def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000797 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000798 let NumMicroOps = 3;
799 let ResourceCycles = [3];
800}
Craig Topperb5f26592018-04-19 18:00:17 +0000801def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
802 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
803 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000804
805def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
806 let Latency = 3;
807 let NumMicroOps = 3;
808 let ResourceCycles = [1,2];
809}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000810def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000811
812def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
813 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000814 let NumMicroOps = 3;
815 let ResourceCycles = [2,1];
816}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000817def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
818 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000819
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000820def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
821 let Latency = 3;
822 let NumMicroOps = 3;
823 let ResourceCycles = [2,1];
824}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000825def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000826
827def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
828 let Latency = 3;
829 let NumMicroOps = 3;
830 let ResourceCycles = [2,1];
831}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000832def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
833 "(V?)PHADDW(Y?)rr",
834 "(V?)PHSUBD(Y?)rr",
835 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000836
837def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
838 let Latency = 3;
839 let NumMicroOps = 3;
840 let ResourceCycles = [2,1];
841}
Craig Topperfc179c62018-03-22 04:23:41 +0000842def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
843 "MMX_PACKSSWBirr",
844 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000845
846def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
847 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000848 let NumMicroOps = 3;
849 let ResourceCycles = [1,2];
850}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000851def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000852
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000853def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
854 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000855 let NumMicroOps = 3;
856 let ResourceCycles = [1,2];
857}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000858def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000859
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000860def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
861 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000862 let NumMicroOps = 3;
863 let ResourceCycles = [1,2];
864}
Craig Topperfc179c62018-03-22 04:23:41 +0000865def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
866 "RCL(8|16|32|64)ri",
867 "RCR(8|16|32|64)r1",
868 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000869
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000870def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
871 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000872 let NumMicroOps = 3;
873 let ResourceCycles = [1,1,1];
874}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000875def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000876
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000877def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
878 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000879 let NumMicroOps = 4;
880 let ResourceCycles = [1,1,2];
881}
Craig Topperf4cd9082018-01-19 05:47:32 +0000882def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000883
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000884def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
885 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000886 let NumMicroOps = 4;
887 let ResourceCycles = [1,1,1,1];
888}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000889def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000890
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000891def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
892 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000893 let NumMicroOps = 4;
894 let ResourceCycles = [1,1,1,1];
895}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000896def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000897
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000898def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000899 let Latency = 4;
900 let NumMicroOps = 1;
901 let ResourceCycles = [1];
902}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000903def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000904 "MMX_PMADDWDirr",
905 "MMX_PMULHRSWrr",
906 "MMX_PMULHUWirr",
907 "MMX_PMULHWirr",
908 "MMX_PMULLWirr",
909 "MMX_PMULUDQirr",
910 "MUL_FPrST0",
911 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000912 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000913
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000914def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000915 let Latency = 4;
916 let NumMicroOps = 1;
917 let ResourceCycles = [1];
918}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000919def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
920 "(V?)ADDPS(Y?)rr",
921 "(V?)ADDSDrr",
922 "(V?)ADDSSrr",
923 "(V?)ADDSUBPD(Y?)rr",
924 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000925 "(V?)CVTDQ2PS(Y?)rr",
926 "(V?)CVTPS2DQ(Y?)rr",
927 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000928 "(V?)MULPD(Y?)rr",
929 "(V?)MULPS(Y?)rr",
930 "(V?)MULSDrr",
931 "(V?)MULSSrr",
932 "(V?)PHMINPOSUWrr",
933 "(V?)PMADDUBSW(Y?)rr",
934 "(V?)PMADDWD(Y?)rr",
935 "(V?)PMULDQ(Y?)rr",
936 "(V?)PMULHRSW(Y?)rr",
937 "(V?)PMULHUW(Y?)rr",
938 "(V?)PMULHW(Y?)rr",
939 "(V?)PMULLW(Y?)rr",
940 "(V?)PMULUDQ(Y?)rr",
941 "(V?)SUBPD(Y?)rr",
942 "(V?)SUBPS(Y?)rr",
943 "(V?)SUBSDrr",
944 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000945
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000946def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000947 let Latency = 4;
948 let NumMicroOps = 2;
949 let ResourceCycles = [1,1];
950}
Craig Topperf846e2d2018-04-19 05:34:05 +0000951def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000952
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000953def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
954 let Latency = 4;
955 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000956 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000957}
Craig Topperfc179c62018-03-22 04:23:41 +0000958def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000959
960def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000961 let Latency = 4;
962 let NumMicroOps = 2;
963 let ResourceCycles = [1,1];
964}
Craig Topperfc179c62018-03-22 04:23:41 +0000965def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
966 "VPSLLQYrr",
967 "VPSLLWYrr",
968 "VPSRADYrr",
969 "VPSRAWYrr",
970 "VPSRLDYrr",
971 "VPSRLQYrr",
972 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000973
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000974def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000975 let Latency = 4;
976 let NumMicroOps = 3;
977 let ResourceCycles = [1,1,1];
978}
Craig Topperfc179c62018-03-22 04:23:41 +0000979def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
980 "ISTT_FP32m",
981 "ISTT_FP64m",
982 "IST_F16m",
983 "IST_F32m",
984 "IST_FP16m",
985 "IST_FP32m",
986 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000987
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000988def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000989 let Latency = 4;
990 let NumMicroOps = 4;
991 let ResourceCycles = [4];
992}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000993def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000994
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000995def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000996 let Latency = 4;
997 let NumMicroOps = 4;
998 let ResourceCycles = [1,3];
999}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001000def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001001
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001002def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001003 let Latency = 4;
1004 let NumMicroOps = 4;
1005 let ResourceCycles = [1,3];
1006}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001007def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001009def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001010 let Latency = 4;
1011 let NumMicroOps = 4;
1012 let ResourceCycles = [1,1,2];
1013}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001014def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001015
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001016def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1017 let Latency = 5;
1018 let NumMicroOps = 1;
1019 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001020}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001021def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001022 "MOVSX(16|32|64)rm32",
1023 "MOVSX(16|32|64)rm8",
1024 "MOVZX(16|32|64)rm16",
1025 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001026 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001027
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001028def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001029 let Latency = 5;
1030 let NumMicroOps = 2;
1031 let ResourceCycles = [1,1];
1032}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001033def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1034 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001035
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001036def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001037 let Latency = 5;
1038 let NumMicroOps = 2;
1039 let ResourceCycles = [1,1];
1040}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001041def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001042 "MMX_CVTPS2PIirr",
1043 "MMX_CVTTPD2PIirr",
1044 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001045 "(V?)CVTPD2DQrr",
1046 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001047 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001048 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001049 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001050 "(V?)CVTSD2SSrr",
1051 "(V?)CVTSI642SDrr",
1052 "(V?)CVTSI2SDrr",
1053 "(V?)CVTSI2SSrr",
1054 "(V?)CVTSS2SDrr",
1055 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001056
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001057def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001058 let Latency = 5;
1059 let NumMicroOps = 3;
1060 let ResourceCycles = [1,1,1];
1061}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001062def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001063
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001064def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001065 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001066 let NumMicroOps = 3;
1067 let ResourceCycles = [1,1,1];
1068}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001069def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001070
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001071def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001072 let Latency = 5;
1073 let NumMicroOps = 5;
1074 let ResourceCycles = [1,4];
1075}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001076def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001077
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001078def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001079 let Latency = 5;
1080 let NumMicroOps = 5;
1081 let ResourceCycles = [2,3];
1082}
Craig Topper13a16502018-03-19 00:56:09 +00001083def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001084
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001085def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001086 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001087 let NumMicroOps = 6;
1088 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001089}
Craig Topperfc179c62018-03-22 04:23:41 +00001090def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1091 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001092
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001093def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1094 let Latency = 6;
1095 let NumMicroOps = 1;
1096 let ResourceCycles = [1];
1097}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001098def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001099 "(V?)MOVSHDUPrm",
1100 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001101 "VPBROADCASTDrm",
1102 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001103
1104def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001105 let Latency = 6;
1106 let NumMicroOps = 2;
1107 let ResourceCycles = [2];
1108}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001109def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001110
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001111def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001112 let Latency = 6;
1113 let NumMicroOps = 2;
1114 let ResourceCycles = [1,1];
1115}
Craig Topperfc179c62018-03-22 04:23:41 +00001116def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1117 "MMX_PADDSWirm",
1118 "MMX_PADDUSBirm",
1119 "MMX_PADDUSWirm",
1120 "MMX_PAVGBirm",
1121 "MMX_PAVGWirm",
1122 "MMX_PCMPEQBirm",
1123 "MMX_PCMPEQDirm",
1124 "MMX_PCMPEQWirm",
1125 "MMX_PCMPGTBirm",
1126 "MMX_PCMPGTDirm",
1127 "MMX_PCMPGTWirm",
1128 "MMX_PMAXSWirm",
1129 "MMX_PMAXUBirm",
1130 "MMX_PMINSWirm",
1131 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001132 "MMX_PSUBSBirm",
1133 "MMX_PSUBSWirm",
1134 "MMX_PSUBUSBirm",
1135 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001136
Craig Topper58afb4e2018-03-22 21:10:07 +00001137def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001138 let Latency = 6;
1139 let NumMicroOps = 2;
1140 let ResourceCycles = [1,1];
1141}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001142def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1143 "(V?)CVTSD2SIrr",
1144 "(V?)CVTSS2SI64rr",
1145 "(V?)CVTSS2SIrr",
1146 "(V?)CVTTSD2SI64rr",
1147 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001148
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001149def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1150 let Latency = 6;
1151 let NumMicroOps = 2;
1152 let ResourceCycles = [1,1];
1153}
Simon Pilgrim0a334a82018-04-23 11:57:15 +00001154def: InstRW<[SKLWriteResGroup71], (instregex "(V?)MOVHPDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001155 "(V?)MOVHPSrm",
1156 "(V?)MOVLPDrm",
1157 "(V?)MOVLPSrm",
1158 "(V?)PINSRBrm",
1159 "(V?)PINSRDrm",
1160 "(V?)PINSRQrm",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001161 "(V?)PINSRWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001162
1163def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1164 let Latency = 6;
1165 let NumMicroOps = 2;
1166 let ResourceCycles = [1,1];
1167}
Craig Topperfc179c62018-03-22 04:23:41 +00001168def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1169 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001170
1171def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1172 let Latency = 6;
1173 let NumMicroOps = 2;
1174 let ResourceCycles = [1,1];
1175}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001176def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1177 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001178 "MMX_PANDNirm",
1179 "MMX_PANDirm",
1180 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001181 "MMX_PSIGN(B|D|W)rm",
1182 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001183 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001184
1185def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1186 let Latency = 6;
1187 let NumMicroOps = 2;
1188 let ResourceCycles = [1,1];
1189}
Craig Topperc50570f2018-04-06 17:12:18 +00001190def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001191 "RORX(32|64)mi",
1192 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001193 "SHLX(32|64)rm",
1194 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001195def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1196 ADCX32rm, ADCX64rm,
1197 ADOX32rm, ADOX64rm,
1198 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001199
1200def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1201 let Latency = 6;
1202 let NumMicroOps = 2;
1203 let ResourceCycles = [1,1];
1204}
Craig Topperfc179c62018-03-22 04:23:41 +00001205def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1206 "BLSI(32|64)rm",
1207 "BLSMSK(32|64)rm",
1208 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001209 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001210
1211def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1212 let Latency = 6;
1213 let NumMicroOps = 2;
1214 let ResourceCycles = [1,1];
1215}
Craig Topper2d451e72018-03-18 08:38:06 +00001216def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001217def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001218
Craig Topper58afb4e2018-03-22 21:10:07 +00001219def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001220 let Latency = 6;
1221 let NumMicroOps = 3;
1222 let ResourceCycles = [2,1];
1223}
Craig Topperfc179c62018-03-22 04:23:41 +00001224def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001225
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001226def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001227 let Latency = 6;
1228 let NumMicroOps = 4;
1229 let ResourceCycles = [1,2,1];
1230}
Craig Topperfc179c62018-03-22 04:23:41 +00001231def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1232 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001233
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001234def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001235 let Latency = 6;
1236 let NumMicroOps = 4;
1237 let ResourceCycles = [1,1,1,1];
1238}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001239def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001240
Craig Topper58afb4e2018-03-22 21:10:07 +00001241def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001242 let Latency = 6;
1243 let NumMicroOps = 4;
1244 let ResourceCycles = [1,1,1,1];
1245}
1246def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1247
1248def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1249 let Latency = 6;
1250 let NumMicroOps = 4;
1251 let ResourceCycles = [1,1,1,1];
1252}
Craig Topperfc179c62018-03-22 04:23:41 +00001253def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1254 "BTR(16|32|64)mi8",
1255 "BTS(16|32|64)mi8",
1256 "SAR(8|16|32|64)m1",
1257 "SAR(8|16|32|64)mi",
1258 "SHL(8|16|32|64)m1",
1259 "SHL(8|16|32|64)mi",
1260 "SHR(8|16|32|64)m1",
1261 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001262
1263def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1264 let Latency = 6;
1265 let NumMicroOps = 4;
1266 let ResourceCycles = [1,1,1,1];
1267}
Craig Topperf0d04262018-04-06 16:16:48 +00001268def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1269 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001270
1271def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001272 let Latency = 6;
1273 let NumMicroOps = 6;
1274 let ResourceCycles = [1,5];
1275}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001276def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001277
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001278def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1279 let Latency = 7;
1280 let NumMicroOps = 1;
1281 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001282}
Craig Topperfc179c62018-03-22 04:23:41 +00001283def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1284 "LD_F64m",
1285 "LD_F80m",
1286 "VBROADCASTF128",
1287 "VBROADCASTI128",
1288 "VBROADCASTSDYrm",
1289 "VBROADCASTSSYrm",
1290 "VLDDQUYrm",
1291 "VMOVAPDYrm",
1292 "VMOVAPSYrm",
1293 "VMOVDDUPYrm",
1294 "VMOVDQAYrm",
1295 "VMOVDQUYrm",
1296 "VMOVNTDQAYrm",
1297 "VMOVSHDUPYrm",
1298 "VMOVSLDUPYrm",
1299 "VMOVUPDYrm",
1300 "VMOVUPSYrm",
1301 "VPBROADCASTDYrm",
1302 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001303
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001304def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001305 let Latency = 7;
1306 let NumMicroOps = 2;
1307 let ResourceCycles = [1,1];
1308}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001309def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001310
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001311def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1312 let Latency = 7;
1313 let NumMicroOps = 2;
1314 let ResourceCycles = [1,1];
1315}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001316def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1317 "(V?)PACKSSDWrm",
1318 "(V?)PACKSSWBrm",
1319 "(V?)PACKUSDWrm",
1320 "(V?)PACKUSWBrm",
1321 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001322 "VPBROADCASTBrm",
1323 "VPBROADCASTWrm",
1324 "VPERMILPDmi",
1325 "VPERMILPDrm",
1326 "VPERMILPSmi",
1327 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001328 "(V?)PSHUFBrm",
1329 "(V?)PSHUFDmi",
1330 "(V?)PSHUFHWmi",
1331 "(V?)PSHUFLWmi",
1332 "(V?)PUNPCKHBWrm",
1333 "(V?)PUNPCKHDQrm",
1334 "(V?)PUNPCKHQDQrm",
1335 "(V?)PUNPCKHWDrm",
1336 "(V?)PUNPCKLBWrm",
1337 "(V?)PUNPCKLDQrm",
1338 "(V?)PUNPCKLQDQrm",
1339 "(V?)PUNPCKLWDrm",
1340 "(V?)SHUFPDrmi",
1341 "(V?)SHUFPSrmi",
1342 "(V?)UNPCKHPDrm",
1343 "(V?)UNPCKHPSrm",
1344 "(V?)UNPCKLPDrm",
1345 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001346
Craig Topper58afb4e2018-03-22 21:10:07 +00001347def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001348 let Latency = 7;
1349 let NumMicroOps = 2;
1350 let ResourceCycles = [1,1];
1351}
Craig Topperfc179c62018-03-22 04:23:41 +00001352def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1353 "VCVTPD2PSYrr",
1354 "VCVTPH2PSYrr",
1355 "VCVTPS2PDYrr",
1356 "VCVTPS2PHYrr",
1357 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001358
1359def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1360 let Latency = 7;
1361 let NumMicroOps = 2;
1362 let ResourceCycles = [1,1];
1363}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001364def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1365 "(V?)PABSDrm",
1366 "(V?)PABSWrm",
1367 "(V?)PADDSBrm",
1368 "(V?)PADDSWrm",
1369 "(V?)PADDUSBrm",
1370 "(V?)PADDUSWrm",
1371 "(V?)PAVGBrm",
1372 "(V?)PAVGWrm",
1373 "(V?)PCMPEQBrm",
1374 "(V?)PCMPEQDrm",
1375 "(V?)PCMPEQQrm",
1376 "(V?)PCMPEQWrm",
1377 "(V?)PCMPGTBrm",
1378 "(V?)PCMPGTDrm",
1379 "(V?)PCMPGTWrm",
1380 "(V?)PMAXSBrm",
1381 "(V?)PMAXSDrm",
1382 "(V?)PMAXSWrm",
1383 "(V?)PMAXUBrm",
1384 "(V?)PMAXUDrm",
1385 "(V?)PMAXUWrm",
1386 "(V?)PMINSBrm",
1387 "(V?)PMINSDrm",
1388 "(V?)PMINSWrm",
1389 "(V?)PMINUBrm",
1390 "(V?)PMINUDrm",
1391 "(V?)PMINUWrm",
1392 "(V?)PSIGNBrm",
1393 "(V?)PSIGNDrm",
1394 "(V?)PSIGNWrm",
1395 "(V?)PSLLDrm",
1396 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001397 "VPSLLVDrm",
1398 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001399 "(V?)PSLLWrm",
1400 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001401 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001402 "(V?)PSRAWrm",
1403 "(V?)PSRLDrm",
1404 "(V?)PSRLQrm",
1405 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001406 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001407 "(V?)PSRLWrm",
1408 "(V?)PSUBSBrm",
1409 "(V?)PSUBSWrm",
1410 "(V?)PSUBUSBrm",
1411 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001412
1413def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1414 let Latency = 7;
1415 let NumMicroOps = 2;
1416 let ResourceCycles = [1,1];
1417}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001418def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001419 "(V?)INSERTI128rm",
1420 "(V?)MASKMOVPDrm",
1421 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001422 "(V?)PADDBrm",
1423 "(V?)PADDDrm",
1424 "(V?)PADDQrm",
1425 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001426 "(V?)PBLENDDrmi",
1427 "(V?)PMASKMOVDrm",
1428 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001429 "(V?)PSUBBrm",
1430 "(V?)PSUBDrm",
1431 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001432 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001433
1434def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1435 let Latency = 7;
1436 let NumMicroOps = 3;
1437 let ResourceCycles = [2,1];
1438}
Craig Topperfc179c62018-03-22 04:23:41 +00001439def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1440 "MMX_PACKSSWBirm",
1441 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001442
1443def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1444 let Latency = 7;
1445 let NumMicroOps = 3;
1446 let ResourceCycles = [1,2];
1447}
Craig Topperf4cd9082018-01-19 05:47:32 +00001448def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001449
1450def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1451 let Latency = 7;
1452 let NumMicroOps = 3;
1453 let ResourceCycles = [1,2];
1454}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001455def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1456 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001457
Craig Topper58afb4e2018-03-22 21:10:07 +00001458def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001459 let Latency = 7;
1460 let NumMicroOps = 3;
1461 let ResourceCycles = [1,1,1];
1462}
Craig Topperfc179c62018-03-22 04:23:41 +00001463def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1464 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001465
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001466def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001467 let Latency = 7;
1468 let NumMicroOps = 3;
1469 let ResourceCycles = [1,1,1];
1470}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001471def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001472
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001473def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001474 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001475 let NumMicroOps = 3;
1476 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001477}
Craig Topperfc179c62018-03-22 04:23:41 +00001478def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1479 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001480
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001481def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1482 let Latency = 7;
1483 let NumMicroOps = 5;
1484 let ResourceCycles = [1,1,1,2];
1485}
Craig Topperfc179c62018-03-22 04:23:41 +00001486def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1487 "ROL(8|16|32|64)mi",
1488 "ROR(8|16|32|64)m1",
1489 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001490
1491def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1492 let Latency = 7;
1493 let NumMicroOps = 5;
1494 let ResourceCycles = [1,1,1,2];
1495}
Craig Topper13a16502018-03-19 00:56:09 +00001496def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001497
1498def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1499 let Latency = 7;
1500 let NumMicroOps = 5;
1501 let ResourceCycles = [1,1,1,1,1];
1502}
Craig Topperfc179c62018-03-22 04:23:41 +00001503def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1504 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001505
1506def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001507 let Latency = 7;
1508 let NumMicroOps = 7;
1509 let ResourceCycles = [1,3,1,2];
1510}
Craig Topper2d451e72018-03-18 08:38:06 +00001511def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001512
Craig Topper58afb4e2018-03-22 21:10:07 +00001513def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001514 let Latency = 8;
1515 let NumMicroOps = 2;
1516 let ResourceCycles = [2];
1517}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001518def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1519 "(V?)ROUNDPS(Y?)r",
1520 "(V?)ROUNDSDr",
1521 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001522
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001523def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001524 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001525 let NumMicroOps = 2;
1526 let ResourceCycles = [1,1];
1527}
Craig Topperfc179c62018-03-22 04:23:41 +00001528def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1529 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001530
1531def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1532 let Latency = 8;
1533 let NumMicroOps = 2;
1534 let ResourceCycles = [1,1];
1535}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001536def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1537 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001538
1539def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001540 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001541 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001542 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001543}
Craig Topperf846e2d2018-04-19 05:34:05 +00001544def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001545
Craig Topperf846e2d2018-04-19 05:34:05 +00001546def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1547 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001548 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001549 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001550}
Craig Topperfc179c62018-03-22 04:23:41 +00001551def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001552
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001553def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1554 let Latency = 8;
1555 let NumMicroOps = 2;
1556 let ResourceCycles = [1,1];
1557}
Craig Topperfc179c62018-03-22 04:23:41 +00001558def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1559 "FCOM64m",
1560 "FCOMP32m",
1561 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001562 "VPACKSSDWYrm",
1563 "VPACKSSWBYrm",
1564 "VPACKUSDWYrm",
1565 "VPACKUSWBYrm",
1566 "VPALIGNRYrmi",
1567 "VPBLENDWYrmi",
1568 "VPBROADCASTBYrm",
1569 "VPBROADCASTWYrm",
1570 "VPERMILPDYmi",
1571 "VPERMILPDYrm",
1572 "VPERMILPSYmi",
1573 "VPERMILPSYrm",
1574 "VPMOVSXBDYrm",
1575 "VPMOVSXBQYrm",
1576 "VPMOVSXWQYrm",
1577 "VPSHUFBYrm",
1578 "VPSHUFDYmi",
1579 "VPSHUFHWYmi",
1580 "VPSHUFLWYmi",
1581 "VPUNPCKHBWYrm",
1582 "VPUNPCKHDQYrm",
1583 "VPUNPCKHQDQYrm",
1584 "VPUNPCKHWDYrm",
1585 "VPUNPCKLBWYrm",
1586 "VPUNPCKLDQYrm",
1587 "VPUNPCKLQDQYrm",
1588 "VPUNPCKLWDYrm",
1589 "VSHUFPDYrmi",
1590 "VSHUFPSYrmi",
1591 "VUNPCKHPDYrm",
1592 "VUNPCKHPSYrm",
1593 "VUNPCKLPDYrm",
1594 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001595
1596def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1597 let Latency = 8;
1598 let NumMicroOps = 2;
1599 let ResourceCycles = [1,1];
1600}
Craig Topperfc179c62018-03-22 04:23:41 +00001601def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1602 "VPABSDYrm",
1603 "VPABSWYrm",
1604 "VPADDSBYrm",
1605 "VPADDSWYrm",
1606 "VPADDUSBYrm",
1607 "VPADDUSWYrm",
1608 "VPAVGBYrm",
1609 "VPAVGWYrm",
1610 "VPCMPEQBYrm",
1611 "VPCMPEQDYrm",
1612 "VPCMPEQQYrm",
1613 "VPCMPEQWYrm",
1614 "VPCMPGTBYrm",
1615 "VPCMPGTDYrm",
1616 "VPCMPGTWYrm",
1617 "VPMAXSBYrm",
1618 "VPMAXSDYrm",
1619 "VPMAXSWYrm",
1620 "VPMAXUBYrm",
1621 "VPMAXUDYrm",
1622 "VPMAXUWYrm",
1623 "VPMINSBYrm",
1624 "VPMINSDYrm",
1625 "VPMINSWYrm",
1626 "VPMINUBYrm",
1627 "VPMINUDYrm",
1628 "VPMINUWYrm",
1629 "VPSIGNBYrm",
1630 "VPSIGNDYrm",
1631 "VPSIGNWYrm",
1632 "VPSLLDYrm",
1633 "VPSLLQYrm",
1634 "VPSLLVDYrm",
1635 "VPSLLVQYrm",
1636 "VPSLLWYrm",
1637 "VPSRADYrm",
1638 "VPSRAVDYrm",
1639 "VPSRAWYrm",
1640 "VPSRLDYrm",
1641 "VPSRLQYrm",
1642 "VPSRLVDYrm",
1643 "VPSRLVQYrm",
1644 "VPSRLWYrm",
1645 "VPSUBSBYrm",
1646 "VPSUBSWYrm",
1647 "VPSUBUSBYrm",
1648 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001649
1650def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1651 let Latency = 8;
1652 let NumMicroOps = 2;
1653 let ResourceCycles = [1,1];
1654}
Craig Topperfc179c62018-03-22 04:23:41 +00001655def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1656 "VANDNPSYrm",
1657 "VANDPDYrm",
1658 "VANDPSYrm",
1659 "VBLENDPDYrmi",
1660 "VBLENDPSYrmi",
1661 "VMASKMOVPDYrm",
1662 "VMASKMOVPSYrm",
1663 "VORPDYrm",
1664 "VORPSYrm",
1665 "VPADDBYrm",
1666 "VPADDDYrm",
1667 "VPADDQYrm",
1668 "VPADDWYrm",
1669 "VPANDNYrm",
1670 "VPANDYrm",
1671 "VPBLENDDYrmi",
1672 "VPMASKMOVDYrm",
1673 "VPMASKMOVQYrm",
1674 "VPORYrm",
1675 "VPSUBBYrm",
1676 "VPSUBDYrm",
1677 "VPSUBQYrm",
1678 "VPSUBWYrm",
1679 "VPXORYrm",
1680 "VXORPDYrm",
1681 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001682
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001683def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1684 let Latency = 8;
1685 let NumMicroOps = 4;
1686 let ResourceCycles = [1,2,1];
1687}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001688def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001689
1690def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1691 let Latency = 8;
1692 let NumMicroOps = 4;
1693 let ResourceCycles = [2,1,1];
1694}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001695def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001696
Craig Topper58afb4e2018-03-22 21:10:07 +00001697def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001698 let Latency = 8;
1699 let NumMicroOps = 4;
1700 let ResourceCycles = [1,1,1,1];
1701}
1702def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1703
1704def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1705 let Latency = 8;
1706 let NumMicroOps = 5;
1707 let ResourceCycles = [1,1,3];
1708}
Craig Topper13a16502018-03-19 00:56:09 +00001709def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001710
1711def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1712 let Latency = 8;
1713 let NumMicroOps = 5;
1714 let ResourceCycles = [1,1,1,2];
1715}
Craig Topperfc179c62018-03-22 04:23:41 +00001716def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1717 "RCL(8|16|32|64)mi",
1718 "RCR(8|16|32|64)m1",
1719 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001720
1721def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1722 let Latency = 8;
1723 let NumMicroOps = 6;
1724 let ResourceCycles = [1,1,1,3];
1725}
Craig Topperfc179c62018-03-22 04:23:41 +00001726def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1727 "SAR(8|16|32|64)mCL",
1728 "SHL(8|16|32|64)mCL",
1729 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001730
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001731def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1732 let Latency = 8;
1733 let NumMicroOps = 6;
1734 let ResourceCycles = [1,1,1,2,1];
1735}
Craig Topper9f834812018-04-01 21:54:24 +00001736def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001737 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001738 "SBB(8|16|32|64)mi")>;
1739def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1740 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001741
1742def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1743 let Latency = 9;
1744 let NumMicroOps = 2;
1745 let ResourceCycles = [1,1];
1746}
Craig Topperfc179c62018-03-22 04:23:41 +00001747def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1748 "MMX_PMADDUBSWrm",
1749 "MMX_PMADDWDirm",
1750 "MMX_PMULHRSWrm",
1751 "MMX_PMULHUWirm",
1752 "MMX_PMULHWirm",
1753 "MMX_PMULLWirm",
1754 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001755 "(V?)RCPSSm",
1756 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001757 "VTESTPDYrm",
1758 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001759
1760def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1761 let Latency = 9;
1762 let NumMicroOps = 2;
1763 let ResourceCycles = [1,1];
1764}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001765def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001766 "VPMOVSXBWYrm",
1767 "VPMOVSXDQYrm",
1768 "VPMOVSXWDYrm",
1769 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001770 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001771
1772def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1773 let Latency = 9;
1774 let NumMicroOps = 2;
1775 let ResourceCycles = [1,1];
1776}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001777def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1778 "(V?)ADDSSrm",
1779 "(V?)CMPSDrm",
1780 "(V?)CMPSSrm",
1781 "(V?)MAX(C?)SDrm",
1782 "(V?)MAX(C?)SSrm",
1783 "(V?)MIN(C?)SDrm",
1784 "(V?)MIN(C?)SSrm",
1785 "(V?)MULSDrm",
1786 "(V?)MULSSrm",
1787 "(V?)SUBSDrm",
1788 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001789def: InstRW<[SKLWriteResGroup122],
1790 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001791
Craig Topper58afb4e2018-03-22 21:10:07 +00001792def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001793 let Latency = 9;
1794 let NumMicroOps = 2;
1795 let ResourceCycles = [1,1];
1796}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001797def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001798 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001799 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001800 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001801
Craig Topper58afb4e2018-03-22 21:10:07 +00001802def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001803 let Latency = 9;
1804 let NumMicroOps = 3;
1805 let ResourceCycles = [1,2];
1806}
Craig Topperfc179c62018-03-22 04:23:41 +00001807def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001808
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001809def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1810 let Latency = 9;
1811 let NumMicroOps = 3;
1812 let ResourceCycles = [1,2];
1813}
Craig Topperfc179c62018-03-22 04:23:41 +00001814def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1815 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001816
1817def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1818 let Latency = 9;
1819 let NumMicroOps = 3;
1820 let ResourceCycles = [1,1,1];
1821}
Craig Topperfc179c62018-03-22 04:23:41 +00001822def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001823
1824def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1825 let Latency = 9;
1826 let NumMicroOps = 3;
1827 let ResourceCycles = [1,1,1];
1828}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001829def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001830
1831def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001832 let Latency = 9;
1833 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001834 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001835}
Craig Topperfc179c62018-03-22 04:23:41 +00001836def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1837 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001838
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001839def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1840 let Latency = 9;
1841 let NumMicroOps = 4;
1842 let ResourceCycles = [2,1,1];
1843}
Craig Topperfc179c62018-03-22 04:23:41 +00001844def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1845 "(V?)PHADDWrm",
1846 "(V?)PHSUBDrm",
1847 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001848
1849def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1850 let Latency = 9;
1851 let NumMicroOps = 4;
1852 let ResourceCycles = [1,1,1,1];
1853}
Craig Topperfc179c62018-03-22 04:23:41 +00001854def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1855 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001856
1857def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1858 let Latency = 9;
1859 let NumMicroOps = 5;
1860 let ResourceCycles = [1,2,1,1];
1861}
Craig Topperfc179c62018-03-22 04:23:41 +00001862def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1863 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001864
1865def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1866 let Latency = 10;
1867 let NumMicroOps = 2;
1868 let ResourceCycles = [1,1];
1869}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001870def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001871 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001872
1873def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1874 let Latency = 10;
1875 let NumMicroOps = 2;
1876 let ResourceCycles = [1,1];
1877}
Craig Topperfc179c62018-03-22 04:23:41 +00001878def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1879 "ADD_F64m",
1880 "ILD_F16m",
1881 "ILD_F32m",
1882 "ILD_F64m",
1883 "SUBR_F32m",
1884 "SUBR_F64m",
1885 "SUB_F32m",
1886 "SUB_F64m",
1887 "VPCMPGTQYrm",
1888 "VPERM2F128rm",
1889 "VPERM2I128rm",
1890 "VPERMDYrm",
1891 "VPERMPDYmi",
1892 "VPERMPSYrm",
1893 "VPERMQYmi",
1894 "VPMOVZXBDYrm",
1895 "VPMOVZXBQYrm",
1896 "VPMOVZXBWYrm",
1897 "VPMOVZXDQYrm",
1898 "VPMOVZXWQYrm",
1899 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001900
1901def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1902 let Latency = 10;
1903 let NumMicroOps = 2;
1904 let ResourceCycles = [1,1];
1905}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001906def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1907 "(V?)ADDPSrm",
1908 "(V?)ADDSUBPDrm",
1909 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001910 "(V?)CVTDQ2PSrm",
1911 "(V?)CVTPH2PSYrm",
1912 "(V?)CVTPS2DQrm",
1913 "(V?)CVTSS2SDrm",
1914 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001915 "(V?)MULPDrm",
1916 "(V?)MULPSrm",
1917 "(V?)PHMINPOSUWrm",
1918 "(V?)PMADDUBSWrm",
1919 "(V?)PMADDWDrm",
1920 "(V?)PMULDQrm",
1921 "(V?)PMULHRSWrm",
1922 "(V?)PMULHUWrm",
1923 "(V?)PMULHWrm",
1924 "(V?)PMULLWrm",
1925 "(V?)PMULUDQrm",
1926 "(V?)SUBPDrm",
1927 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001928def: InstRW<[SKLWriteResGroup134],
1929 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001930
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001931def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1932 let Latency = 10;
1933 let NumMicroOps = 3;
1934 let ResourceCycles = [1,1,1];
1935}
Craig Topperfc179c62018-03-22 04:23:41 +00001936def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1937 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001938
Craig Topper58afb4e2018-03-22 21:10:07 +00001939def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001940 let Latency = 10;
1941 let NumMicroOps = 3;
1942 let ResourceCycles = [1,1,1];
1943}
Craig Topperfc179c62018-03-22 04:23:41 +00001944def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001945
1946def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001947 let Latency = 10;
1948 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001949 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001950}
Craig Topperfc179c62018-03-22 04:23:41 +00001951def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1952 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001953
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001954def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1955 let Latency = 10;
1956 let NumMicroOps = 4;
1957 let ResourceCycles = [2,1,1];
1958}
Craig Topperfc179c62018-03-22 04:23:41 +00001959def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1960 "VPHADDWYrm",
1961 "VPHSUBDYrm",
1962 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001963
1964def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001965 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001966 let NumMicroOps = 4;
1967 let ResourceCycles = [1,1,1,1];
1968}
Craig Topperf846e2d2018-04-19 05:34:05 +00001969def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001970
1971def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1972 let Latency = 10;
1973 let NumMicroOps = 8;
1974 let ResourceCycles = [1,1,1,1,1,3];
1975}
Craig Topper13a16502018-03-19 00:56:09 +00001976def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001977
1978def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001979 let Latency = 10;
1980 let NumMicroOps = 10;
1981 let ResourceCycles = [9,1];
1982}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001983def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001984
Craig Topper8104f262018-04-02 05:33:28 +00001985def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001986 let Latency = 11;
1987 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001988 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001989}
Craig Topper8104f262018-04-02 05:33:28 +00001990def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001991 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001992
Craig Topper8104f262018-04-02 05:33:28 +00001993def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1994 let Latency = 11;
1995 let NumMicroOps = 1;
1996 let ResourceCycles = [1,5];
1997}
1998def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1999
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002000def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002001 let Latency = 11;
2002 let NumMicroOps = 2;
2003 let ResourceCycles = [1,1];
2004}
Craig Topperfc179c62018-03-22 04:23:41 +00002005def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2006 "MUL_F64m",
2007 "VRCPPSYm",
2008 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002009
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002010def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2011 let Latency = 11;
2012 let NumMicroOps = 2;
2013 let ResourceCycles = [1,1];
2014}
Craig Topperfc179c62018-03-22 04:23:41 +00002015def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2016 "VADDPSYrm",
2017 "VADDSUBPDYrm",
2018 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002019 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002020 "VCMPPSYrmi",
2021 "VCVTDQ2PSYrm",
2022 "VCVTPS2DQYrm",
2023 "VCVTPS2PDYrm",
2024 "VCVTTPS2DQYrm",
2025 "VMAX(C?)PDYrm",
2026 "VMAX(C?)PSYrm",
2027 "VMIN(C?)PDYrm",
2028 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002029 "VMULPDYrm",
2030 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002031 "VPMADDUBSWYrm",
2032 "VPMADDWDYrm",
2033 "VPMULDQYrm",
2034 "VPMULHRSWYrm",
2035 "VPMULHUWYrm",
2036 "VPMULHWYrm",
2037 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002038 "VPMULUDQYrm",
2039 "VSUBPDYrm",
2040 "VSUBPSYrm")>;
2041def: InstRW<[SKLWriteResGroup147],
2042 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002043
2044def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2045 let Latency = 11;
2046 let NumMicroOps = 3;
2047 let ResourceCycles = [2,1];
2048}
Craig Topperfc179c62018-03-22 04:23:41 +00002049def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2050 "FICOM32m",
2051 "FICOMP16m",
2052 "FICOMP32m",
2053 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002054
2055def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2056 let Latency = 11;
2057 let NumMicroOps = 3;
2058 let ResourceCycles = [1,1,1];
2059}
Craig Topperfc179c62018-03-22 04:23:41 +00002060def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002061
Craig Topper58afb4e2018-03-22 21:10:07 +00002062def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002063 let Latency = 11;
2064 let NumMicroOps = 3;
2065 let ResourceCycles = [1,1,1];
2066}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002067def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2068 "(V?)CVTSD2SIrm",
2069 "(V?)CVTSS2SI64rm",
2070 "(V?)CVTSS2SIrm",
2071 "(V?)CVTTSD2SI64rm",
2072 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002073 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002074 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002075
Craig Topper58afb4e2018-03-22 21:10:07 +00002076def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002077 let Latency = 11;
2078 let NumMicroOps = 3;
2079 let ResourceCycles = [1,1,1];
2080}
Craig Topperfc179c62018-03-22 04:23:41 +00002081def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2082 "CVTPD2PSrm",
2083 "CVTTPD2DQrm",
2084 "MMX_CVTPD2PIirm",
2085 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002086
2087def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2088 let Latency = 11;
2089 let NumMicroOps = 6;
2090 let ResourceCycles = [1,1,1,2,1];
2091}
Craig Topperfc179c62018-03-22 04:23:41 +00002092def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2093 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002094
2095def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002096 let Latency = 11;
2097 let NumMicroOps = 7;
2098 let ResourceCycles = [2,3,2];
2099}
Craig Topperfc179c62018-03-22 04:23:41 +00002100def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2101 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002102
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002103def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002104 let Latency = 11;
2105 let NumMicroOps = 9;
2106 let ResourceCycles = [1,5,1,2];
2107}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002108def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002109
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002110def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002111 let Latency = 11;
2112 let NumMicroOps = 11;
2113 let ResourceCycles = [2,9];
2114}
Craig Topperfc179c62018-03-22 04:23:41 +00002115def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002116
Craig Topper8104f262018-04-02 05:33:28 +00002117def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002118 let Latency = 12;
2119 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002120 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002121}
Craig Topper8104f262018-04-02 05:33:28 +00002122def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002123 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002124
Craig Topper8104f262018-04-02 05:33:28 +00002125def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2126 let Latency = 12;
2127 let NumMicroOps = 1;
2128 let ResourceCycles = [1,6];
2129}
2130def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2131
Craig Topper58afb4e2018-03-22 21:10:07 +00002132def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002133 let Latency = 12;
2134 let NumMicroOps = 4;
2135 let ResourceCycles = [1,1,1,1];
2136}
2137def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2138
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002139def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002140 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002141 let NumMicroOps = 3;
2142 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002143}
Craig Topperfc179c62018-03-22 04:23:41 +00002144def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2145 "ADD_FI32m",
2146 "SUBR_FI16m",
2147 "SUBR_FI32m",
2148 "SUB_FI16m",
2149 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002150
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002151def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2152 let Latency = 13;
2153 let NumMicroOps = 3;
2154 let ResourceCycles = [1,1,1];
2155}
2156def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2157
Craig Topper58afb4e2018-03-22 21:10:07 +00002158def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002159 let Latency = 13;
2160 let NumMicroOps = 4;
2161 let ResourceCycles = [1,3];
2162}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002163def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002164
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002165def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002166 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002167 let NumMicroOps = 4;
2168 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002169}
Craig Topperfc179c62018-03-22 04:23:41 +00002170def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2171 "VHADDPSYrm",
2172 "VHSUBPDYrm",
2173 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002174
Craig Topper8104f262018-04-02 05:33:28 +00002175def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002176 let Latency = 14;
2177 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002178 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002179}
Craig Topper8104f262018-04-02 05:33:28 +00002180def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002181 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002182
Craig Topper8104f262018-04-02 05:33:28 +00002183def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2184 let Latency = 14;
2185 let NumMicroOps = 1;
2186 let ResourceCycles = [1,5];
2187}
2188def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2189
Craig Topper58afb4e2018-03-22 21:10:07 +00002190def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002191 let Latency = 14;
2192 let NumMicroOps = 3;
2193 let ResourceCycles = [1,2];
2194}
Craig Topperfc179c62018-03-22 04:23:41 +00002195def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2196def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2197def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2198def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002199
2200def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2201 let Latency = 14;
2202 let NumMicroOps = 3;
2203 let ResourceCycles = [1,1,1];
2204}
Craig Topperfc179c62018-03-22 04:23:41 +00002205def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2206 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002207
2208def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002209 let Latency = 14;
2210 let NumMicroOps = 10;
2211 let ResourceCycles = [2,4,1,3];
2212}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002213def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002214
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002215def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002216 let Latency = 15;
2217 let NumMicroOps = 1;
2218 let ResourceCycles = [1];
2219}
Craig Topperfc179c62018-03-22 04:23:41 +00002220def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2221 "DIVR_FST0r",
2222 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002223
Craig Topper58afb4e2018-03-22 21:10:07 +00002224def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002225 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002226 let NumMicroOps = 3;
2227 let ResourceCycles = [1,2];
2228}
Craig Topper40d3b322018-03-22 21:55:20 +00002229def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2230 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002231
Craig Topperd25f1ac2018-03-20 23:39:48 +00002232def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2233 let Latency = 17;
2234 let NumMicroOps = 3;
2235 let ResourceCycles = [1,2];
2236}
2237def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2238
Craig Topper58afb4e2018-03-22 21:10:07 +00002239def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002240 let Latency = 15;
2241 let NumMicroOps = 4;
2242 let ResourceCycles = [1,1,2];
2243}
Craig Topperfc179c62018-03-22 04:23:41 +00002244def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002245
2246def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2247 let Latency = 15;
2248 let NumMicroOps = 10;
2249 let ResourceCycles = [1,1,1,5,1,1];
2250}
Craig Topper13a16502018-03-19 00:56:09 +00002251def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002252
Craig Topper8104f262018-04-02 05:33:28 +00002253def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002254 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002255 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002256 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002257}
Craig Topperfc179c62018-03-22 04:23:41 +00002258def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002259
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002260def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2261 let Latency = 16;
2262 let NumMicroOps = 14;
2263 let ResourceCycles = [1,1,1,4,2,5];
2264}
2265def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2266
2267def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002268 let Latency = 16;
2269 let NumMicroOps = 16;
2270 let ResourceCycles = [16];
2271}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002272def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002273
Craig Topper8104f262018-04-02 05:33:28 +00002274def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002275 let Latency = 17;
2276 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002277 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002278}
Craig Topper8104f262018-04-02 05:33:28 +00002279def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2280
2281def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2282 let Latency = 17;
2283 let NumMicroOps = 2;
2284 let ResourceCycles = [1,1,3];
2285}
2286def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002287
2288def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002289 let Latency = 17;
2290 let NumMicroOps = 15;
2291 let ResourceCycles = [2,1,2,4,2,4];
2292}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002293def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002294
Craig Topper8104f262018-04-02 05:33:28 +00002295def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002296 let Latency = 18;
2297 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002298 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002299}
Craig Topper8104f262018-04-02 05:33:28 +00002300def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002301 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002302
Craig Topper8104f262018-04-02 05:33:28 +00002303def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2304 let Latency = 18;
2305 let NumMicroOps = 1;
2306 let ResourceCycles = [1,12];
2307}
2308def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2309
2310def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002311 let Latency = 18;
2312 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002313 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002314}
Craig Topper8104f262018-04-02 05:33:28 +00002315def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2316
2317def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2318 let Latency = 18;
2319 let NumMicroOps = 2;
2320 let ResourceCycles = [1,1,3];
2321}
2322def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002323
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002324def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002325 let Latency = 18;
2326 let NumMicroOps = 8;
2327 let ResourceCycles = [1,1,1,5];
2328}
Craig Topperfc179c62018-03-22 04:23:41 +00002329def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002330
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002331def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002332 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002333 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002334 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002335}
Craig Topper13a16502018-03-19 00:56:09 +00002336def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002337
Craig Topper8104f262018-04-02 05:33:28 +00002338def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002339 let Latency = 19;
2340 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002341 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002342}
Craig Topper8104f262018-04-02 05:33:28 +00002343def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2344
2345def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2346 let Latency = 19;
2347 let NumMicroOps = 2;
2348 let ResourceCycles = [1,1,6];
2349}
2350def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002351
Craig Topper58afb4e2018-03-22 21:10:07 +00002352def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002353 let Latency = 19;
2354 let NumMicroOps = 5;
2355 let ResourceCycles = [1,1,3];
2356}
Craig Topperfc179c62018-03-22 04:23:41 +00002357def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002358
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002359def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002360 let Latency = 20;
2361 let NumMicroOps = 1;
2362 let ResourceCycles = [1];
2363}
Craig Topperfc179c62018-03-22 04:23:41 +00002364def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2365 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002366 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002367
Craig Topper8104f262018-04-02 05:33:28 +00002368def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002369 let Latency = 20;
2370 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002371 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002372}
Craig Topperfc179c62018-03-22 04:23:41 +00002373def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002374
Craig Topper58afb4e2018-03-22 21:10:07 +00002375def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002376 let Latency = 20;
2377 let NumMicroOps = 5;
2378 let ResourceCycles = [1,1,3];
2379}
2380def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2381
2382def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2383 let Latency = 20;
2384 let NumMicroOps = 8;
2385 let ResourceCycles = [1,1,1,1,1,1,2];
2386}
Craig Topperfc179c62018-03-22 04:23:41 +00002387def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2388 "INSL",
2389 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002390
2391def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002392 let Latency = 20;
2393 let NumMicroOps = 10;
2394 let ResourceCycles = [1,2,7];
2395}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002396def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002397
Craig Topper8104f262018-04-02 05:33:28 +00002398def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002399 let Latency = 21;
2400 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002401 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002402}
2403def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2404
2405def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2406 let Latency = 22;
2407 let NumMicroOps = 2;
2408 let ResourceCycles = [1,1];
2409}
Craig Topperfc179c62018-03-22 04:23:41 +00002410def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2411 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002412
2413def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2414 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002415 let NumMicroOps = 5;
2416 let ResourceCycles = [1,2,1,1];
2417}
Craig Topper17a31182017-12-16 18:35:29 +00002418def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2419 VGATHERDPDrm,
2420 VGATHERQPDrm,
2421 VGATHERQPSrm,
2422 VPGATHERDDrm,
2423 VPGATHERDQrm,
2424 VPGATHERQDrm,
2425 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002426
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002427def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2428 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002429 let NumMicroOps = 5;
2430 let ResourceCycles = [1,2,1,1];
2431}
Craig Topper17a31182017-12-16 18:35:29 +00002432def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2433 VGATHERQPDYrm,
2434 VGATHERQPSYrm,
2435 VPGATHERDDYrm,
2436 VPGATHERDQYrm,
2437 VPGATHERQDYrm,
2438 VPGATHERQQYrm,
2439 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002440
Craig Topper8104f262018-04-02 05:33:28 +00002441def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002442 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002443 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002444 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002445}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002446def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002447
2448def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2449 let Latency = 23;
2450 let NumMicroOps = 19;
2451 let ResourceCycles = [2,1,4,1,1,4,6];
2452}
2453def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2454
Craig Topper8104f262018-04-02 05:33:28 +00002455def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002456 let Latency = 24;
2457 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002458 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002459}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002460def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002461
Craig Topper8104f262018-04-02 05:33:28 +00002462def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002463 let Latency = 25;
2464 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002465 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002466}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002467def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002468
2469def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2470 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002471 let NumMicroOps = 3;
2472 let ResourceCycles = [1,1,1];
2473}
Craig Topperfc179c62018-03-22 04:23:41 +00002474def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2475 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002477def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2478 let Latency = 27;
2479 let NumMicroOps = 2;
2480 let ResourceCycles = [1,1];
2481}
Craig Topperfc179c62018-03-22 04:23:41 +00002482def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2483 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002484
2485def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2486 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002487 let NumMicroOps = 8;
2488 let ResourceCycles = [2,4,1,1];
2489}
Craig Topper13a16502018-03-19 00:56:09 +00002490def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002491
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002492def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002493 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002494 let NumMicroOps = 3;
2495 let ResourceCycles = [1,1,1];
2496}
Craig Topperfc179c62018-03-22 04:23:41 +00002497def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2498 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002499
2500def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2501 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002502 let NumMicroOps = 23;
2503 let ResourceCycles = [1,5,3,4,10];
2504}
Craig Topperfc179c62018-03-22 04:23:41 +00002505def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2506 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002507
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002508def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2509 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002510 let NumMicroOps = 23;
2511 let ResourceCycles = [1,5,2,1,4,10];
2512}
Craig Topperfc179c62018-03-22 04:23:41 +00002513def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2514 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002515
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002516def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2517 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002518 let NumMicroOps = 31;
2519 let ResourceCycles = [1,8,1,21];
2520}
Craig Topper391c6f92017-12-10 01:24:08 +00002521def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002522
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002523def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2524 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002525 let NumMicroOps = 18;
2526 let ResourceCycles = [1,1,2,3,1,1,1,8];
2527}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002528def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002529
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002530def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2531 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002532 let NumMicroOps = 39;
2533 let ResourceCycles = [1,10,1,1,26];
2534}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002535def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002536
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002537def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002538 let Latency = 42;
2539 let NumMicroOps = 22;
2540 let ResourceCycles = [2,20];
2541}
Craig Topper2d451e72018-03-18 08:38:06 +00002542def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002543
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002544def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2545 let Latency = 42;
2546 let NumMicroOps = 40;
2547 let ResourceCycles = [1,11,1,1,26];
2548}
Craig Topper391c6f92017-12-10 01:24:08 +00002549def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002550
2551def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2552 let Latency = 46;
2553 let NumMicroOps = 44;
2554 let ResourceCycles = [1,11,1,1,30];
2555}
2556def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2557
2558def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2559 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002560 let NumMicroOps = 64;
2561 let ResourceCycles = [2,8,5,10,39];
2562}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002563def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002564
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002565def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2566 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002567 let NumMicroOps = 88;
2568 let ResourceCycles = [4,4,31,1,2,1,45];
2569}
Craig Topper2d451e72018-03-18 08:38:06 +00002570def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002571
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002572def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2573 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002574 let NumMicroOps = 90;
2575 let ResourceCycles = [4,2,33,1,2,1,47];
2576}
Craig Topper2d451e72018-03-18 08:38:06 +00002577def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002578
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002579def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002580 let Latency = 75;
2581 let NumMicroOps = 15;
2582 let ResourceCycles = [6,3,6];
2583}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002584def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002585
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002586def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002587 let Latency = 76;
2588 let NumMicroOps = 32;
2589 let ResourceCycles = [7,2,8,3,1,11];
2590}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002591def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002592
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002593def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002594 let Latency = 102;
2595 let NumMicroOps = 66;
2596 let ResourceCycles = [4,2,4,8,14,34];
2597}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002598def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002599
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002600def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2601 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002602 let NumMicroOps = 100;
2603 let ResourceCycles = [9,1,11,16,1,11,21,30];
2604}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002605def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002606
2607} // SchedModel