blob: 02c8bd83013f5050e1dbbb8a3de851e2f81218e6 [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : SKLWriteResPair<WriteCMOV, [SKLPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [SKLPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [SKLPort06,SKLPort4,SKLPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
125defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
126defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
127defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
134defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
135
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteMove, [SKLPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
145// Branches don't produce values, so they have no latency, but they still
146// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000148
149// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000150def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
151def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
152def : WriteRes<WriteFMove, [SKLPort015]>;
153
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
156defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000157defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
158defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
159defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000160defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4>; // Floating point reciprocal estimate.
161defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4>; // Floating point reciprocal square root estimate.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
164defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000167defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000168defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000169
170// FMA Scheduling helper class.
171// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
172
173// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000174def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
175def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
176def : WriteRes<WriteVecMove, [SKLPort015]>;
177
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000178defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000179defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
181defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000182defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000183defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000184defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000185defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000186defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000187defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000188defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000189
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000191defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
192defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
193defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000194
195// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000197// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000198def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
199 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000200 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000201 let ResourceCycles = [3];
202}
203def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000204 let Latency = 16;
205 let NumMicroOps = 4;
206 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000207}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000208
209// Packed Compare Explicit Length Strings, Return Mask
210def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
211 let Latency = 19;
212 let NumMicroOps = 9;
213 let ResourceCycles = [4,3,1,1];
214}
215def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
216 let Latency = 25;
217 let NumMicroOps = 10;
218 let ResourceCycles = [4,3,1,1,1];
219}
220
221// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000222def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000223 let Latency = 10;
224 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000225 let ResourceCycles = [3];
226}
227def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000228 let Latency = 16;
229 let NumMicroOps = 4;
230 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000232
233// Packed Compare Explicit Length Strings, Return Index
234def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
235 let Latency = 18;
236 let NumMicroOps = 8;
237 let ResourceCycles = [4,3,1];
238}
239def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
240 let Latency = 24;
241 let NumMicroOps = 9;
242 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000243}
244
Simon Pilgrima2f26782018-03-27 20:38:54 +0000245// MOVMSK Instructions.
246def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
247def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
248def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
249
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000250// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000251def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
252 let Latency = 4;
253 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000254 let ResourceCycles = [1];
255}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
257 let Latency = 10;
258 let NumMicroOps = 2;
259 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000260}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261
262def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
263 let Latency = 8;
264 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265 let ResourceCycles = [2];
266}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000268 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000269 let NumMicroOps = 3;
270 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000272
273def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
274 let Latency = 20;
275 let NumMicroOps = 11;
276 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000278def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
279 let Latency = 25;
280 let NumMicroOps = 11;
281 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000282}
283
284// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000285def : WriteRes<WriteCLMul, [SKLPort5]> {
286 let Latency = 6;
287 let NumMicroOps = 1;
288 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000289}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000290def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
291 let Latency = 12;
292 let NumMicroOps = 2;
293 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000294}
295
296// Catch-all for expensive system instructions.
297def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
298
299// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000300defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000301defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000302defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000303defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000304defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305
306// Old microcoded instructions that nobody use.
307def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
308
309// Fence instructions.
310def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
311
Craig Topper05242bf2018-04-21 18:07:36 +0000312// Load/store MXCSR.
313def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
314def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
315
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000316// Nop, not very useful expect it provides a model for nops!
317def : WriteRes<WriteNop, []>;
318
319////////////////////////////////////////////////////////////////////////////////
320// Horizontal add/sub instructions.
321////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000322
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000323defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000324defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000325
326// Remaining instrs.
327
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000328def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000329 let Latency = 1;
330 let NumMicroOps = 1;
331 let ResourceCycles = [1];
332}
Craig Topperfc179c62018-03-22 04:23:41 +0000333def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
334 "MMX_PADDSWirr",
335 "MMX_PADDUSBirr",
336 "MMX_PADDUSWirr",
337 "MMX_PAVGBirr",
338 "MMX_PAVGWirr",
339 "MMX_PCMPEQBirr",
340 "MMX_PCMPEQDirr",
341 "MMX_PCMPEQWirr",
342 "MMX_PCMPGTBirr",
343 "MMX_PCMPGTDirr",
344 "MMX_PCMPGTWirr",
345 "MMX_PMAXSWirr",
346 "MMX_PMAXUBirr",
347 "MMX_PMINSWirr",
348 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000349 "MMX_PSUBSBirr",
350 "MMX_PSUBSWirr",
351 "MMX_PSUBUSBirr",
352 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000353
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000354def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000355 let Latency = 1;
356 let NumMicroOps = 1;
357 let ResourceCycles = [1];
358}
Craig Topperfc179c62018-03-22 04:23:41 +0000359def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
360 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000361 "MMX_MOVD64rr",
362 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000363 "UCOM_FPr",
364 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000365 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000366 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000367 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000368 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000369
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000370def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000371 let Latency = 1;
372 let NumMicroOps = 1;
373 let ResourceCycles = [1];
374}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000375def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000376
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000377def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000378 let Latency = 1;
379 let NumMicroOps = 1;
380 let ResourceCycles = [1];
381}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000382def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
383 "(V?)PABSD(Y?)rr",
384 "(V?)PABSW(Y?)rr",
385 "(V?)PADDSB(Y?)rr",
386 "(V?)PADDSW(Y?)rr",
387 "(V?)PADDUSB(Y?)rr",
388 "(V?)PADDUSW(Y?)rr",
389 "(V?)PAVGB(Y?)rr",
390 "(V?)PAVGW(Y?)rr",
391 "(V?)PCMPEQB(Y?)rr",
392 "(V?)PCMPEQD(Y?)rr",
393 "(V?)PCMPEQQ(Y?)rr",
394 "(V?)PCMPEQW(Y?)rr",
395 "(V?)PCMPGTB(Y?)rr",
396 "(V?)PCMPGTD(Y?)rr",
397 "(V?)PCMPGTW(Y?)rr",
398 "(V?)PMAXSB(Y?)rr",
399 "(V?)PMAXSD(Y?)rr",
400 "(V?)PMAXSW(Y?)rr",
401 "(V?)PMAXUB(Y?)rr",
402 "(V?)PMAXUD(Y?)rr",
403 "(V?)PMAXUW(Y?)rr",
404 "(V?)PMINSB(Y?)rr",
405 "(V?)PMINSD(Y?)rr",
406 "(V?)PMINSW(Y?)rr",
407 "(V?)PMINUB(Y?)rr",
408 "(V?)PMINUD(Y?)rr",
409 "(V?)PMINUW(Y?)rr",
410 "(V?)PSIGNB(Y?)rr",
411 "(V?)PSIGND(Y?)rr",
412 "(V?)PSIGNW(Y?)rr",
413 "(V?)PSLLD(Y?)ri",
414 "(V?)PSLLQ(Y?)ri",
415 "VPSLLVD(Y?)rr",
416 "VPSLLVQ(Y?)rr",
417 "(V?)PSLLW(Y?)ri",
418 "(V?)PSRAD(Y?)ri",
419 "VPSRAVD(Y?)rr",
420 "(V?)PSRAW(Y?)ri",
421 "(V?)PSRLD(Y?)ri",
422 "(V?)PSRLQ(Y?)ri",
423 "VPSRLVD(Y?)rr",
424 "VPSRLVQ(Y?)rr",
425 "(V?)PSRLW(Y?)ri",
426 "(V?)PSUBSB(Y?)rr",
427 "(V?)PSUBSW(Y?)rr",
428 "(V?)PSUBUSB(Y?)rr",
429 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000430
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000431def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000432 let Latency = 1;
433 let NumMicroOps = 1;
434 let ResourceCycles = [1];
435}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000436def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
437def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000438 "MMX_PABS(B|D|W)rr",
439 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000440 "MMX_PANDNirr",
441 "MMX_PANDirr",
442 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000443 "MMX_PSIGN(B|D|W)rr",
444 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000445 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000446
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000447def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000448 let Latency = 1;
449 let NumMicroOps = 1;
450 let ResourceCycles = [1];
451}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000452def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000453def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
454 "ADC(16|32|64)i",
455 "ADC(8|16|32|64)rr",
456 "ADCX(32|64)rr",
457 "ADOX(32|64)rr",
458 "BT(16|32|64)ri8",
459 "BT(16|32|64)rr",
460 "BTC(16|32|64)ri8",
461 "BTC(16|32|64)rr",
462 "BTR(16|32|64)ri8",
463 "BTR(16|32|64)rr",
464 "BTS(16|32|64)ri8",
465 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000466 "RORX(32|64)ri",
467 "SAR(8|16|32|64)r1",
468 "SAR(8|16|32|64)ri",
469 "SARX(32|64)rr",
470 "SBB(16|32|64)ri",
471 "SBB(16|32|64)i",
472 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000473 "SHL(8|16|32|64)r1",
474 "SHL(8|16|32|64)ri",
475 "SHLX(32|64)rr",
476 "SHR(8|16|32|64)r1",
477 "SHR(8|16|32|64)ri",
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000478 "SHRX(32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000479
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000480def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
481 let Latency = 1;
482 let NumMicroOps = 1;
483 let ResourceCycles = [1];
484}
Craig Topperfc179c62018-03-22 04:23:41 +0000485def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
486 "BLSI(32|64)rr",
487 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000488 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000489
490def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
491 let Latency = 1;
492 let NumMicroOps = 1;
493 let ResourceCycles = [1];
494}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000495def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000496 "(V?)PADDD(Y?)rr",
497 "(V?)PADDQ(Y?)rr",
498 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000499 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000500 "(V?)PSUBB(Y?)rr",
501 "(V?)PSUBD(Y?)rr",
502 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000503 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000504
505def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
506 let Latency = 1;
507 let NumMicroOps = 1;
508 let ResourceCycles = [1];
509}
Craig Topperfbe31322018-04-05 21:56:19 +0000510def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000511def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000512 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000513 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000514 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000515 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000516 "SGDT64m",
517 "SIDT64m",
518 "SLDT64m",
519 "SMSW16m",
520 "STC",
521 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000522 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000523
524def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000525 let Latency = 1;
526 let NumMicroOps = 2;
527 let ResourceCycles = [1,1];
528}
Craig Topperfc179c62018-03-22 04:23:41 +0000529def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
530 "MMX_MOVD64from64rm",
531 "MMX_MOVD64mr",
532 "MMX_MOVNTQmr",
533 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000534 "MOVNTI_64mr",
535 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000536 "ST_FP32m",
537 "ST_FP64m",
538 "ST_FP80m",
539 "VEXTRACTF128mr",
540 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000541 "(V?)MOVAPDYmr",
542 "(V?)MOVAPS(Y?)mr",
543 "(V?)MOVDQA(Y?)mr",
544 "(V?)MOVDQU(Y?)mr",
545 "(V?)MOVHPDmr",
546 "(V?)MOVHPSmr",
547 "(V?)MOVLPDmr",
548 "(V?)MOVLPSmr",
549 "(V?)MOVNTDQ(Y?)mr",
550 "(V?)MOVNTPD(Y?)mr",
551 "(V?)MOVNTPS(Y?)mr",
552 "(V?)MOVPDI2DImr",
553 "(V?)MOVPQI2QImr",
554 "(V?)MOVPQIto64mr",
555 "(V?)MOVSDmr",
556 "(V?)MOVSSmr",
557 "(V?)MOVUPD(Y?)mr",
558 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000559 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000560
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000561def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000562 let Latency = 2;
563 let NumMicroOps = 1;
564 let ResourceCycles = [1];
565}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000566def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000567 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000568 "(V?)MOVPDI2DIrr",
569 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000570 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000571 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000572
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000573def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000574 let Latency = 2;
575 let NumMicroOps = 2;
576 let ResourceCycles = [2];
577}
Craig Topperfc179c62018-03-22 04:23:41 +0000578def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
579 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000580 "(V?)PINSRBrr",
581 "(V?)PINSRDrr",
582 "(V?)PINSRQrr",
583 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000584
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000585def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000586 let Latency = 2;
587 let NumMicroOps = 2;
588 let ResourceCycles = [2];
589}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000590def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
591def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000592
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000593def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000594 let Latency = 2;
595 let NumMicroOps = 2;
596 let ResourceCycles = [2];
597}
Craig Topperfc179c62018-03-22 04:23:41 +0000598def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
599 "ROL(8|16|32|64)r1",
600 "ROL(8|16|32|64)ri",
601 "ROR(8|16|32|64)r1",
602 "ROR(8|16|32|64)ri",
603 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000604
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000605def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000606 let Latency = 2;
607 let NumMicroOps = 2;
608 let ResourceCycles = [2];
609}
Craig Topperfc179c62018-03-22 04:23:41 +0000610def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
611 "WAIT",
612 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000613
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000614def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000615 let Latency = 2;
616 let NumMicroOps = 2;
617 let ResourceCycles = [1,1];
618}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000619def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
620 "VMASKMOVPS(Y?)mr",
621 "VPMASKMOVD(Y?)mr",
622 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000623
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000624def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000625 let Latency = 2;
626 let NumMicroOps = 2;
627 let ResourceCycles = [1,1];
628}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000629def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
630 "(V?)PSLLQrr",
631 "(V?)PSLLWrr",
632 "(V?)PSRADrr",
633 "(V?)PSRAWrr",
634 "(V?)PSRLDrr",
635 "(V?)PSRLQrr",
636 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000637
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000638def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000639 let Latency = 2;
640 let NumMicroOps = 2;
641 let ResourceCycles = [1,1];
642}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000643def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000644
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000645def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000646 let Latency = 2;
647 let NumMicroOps = 2;
648 let ResourceCycles = [1,1];
649}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000650def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000651
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000652def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000653 let Latency = 2;
654 let NumMicroOps = 2;
655 let ResourceCycles = [1,1];
656}
Craig Topper498875f2018-04-04 17:54:19 +0000657def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
658
659def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
660 let Latency = 1;
661 let NumMicroOps = 1;
662 let ResourceCycles = [1];
663}
664def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000665
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000666def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000667 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000668 let NumMicroOps = 2;
669 let ResourceCycles = [1,1];
670}
Craig Topper2d451e72018-03-18 08:38:06 +0000671def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000672def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000673def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
674 "ADC8ri",
675 "SBB8i8",
676 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000677
678def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
679 let Latency = 2;
680 let NumMicroOps = 3;
681 let ResourceCycles = [1,1,1];
682}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000683def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
684 "(V?)PEXTRBmr",
685 "(V?)PEXTRDmr",
686 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +0000687 "(V?)PEXTRWmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000688
689def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
690 let Latency = 2;
691 let NumMicroOps = 3;
692 let ResourceCycles = [1,1,1];
693}
694def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
695
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000696def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
697 let Latency = 2;
698 let NumMicroOps = 3;
699 let ResourceCycles = [1,1,1];
700}
701def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
702
703def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
704 let Latency = 2;
705 let NumMicroOps = 3;
706 let ResourceCycles = [1,1,1];
707}
Craig Topper2d451e72018-03-18 08:38:06 +0000708def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000709def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
710 "PUSH64i8",
711 "STOSB",
712 "STOSL",
713 "STOSQ",
714 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000715
716def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
717 let Latency = 3;
718 let NumMicroOps = 1;
719 let ResourceCycles = [1];
720}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000721def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000722 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000723 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000724 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000725
Clement Courbet327fac42018-03-07 08:14:02 +0000726def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000727 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000728 let NumMicroOps = 2;
729 let ResourceCycles = [1,1];
730}
Clement Courbet327fac42018-03-07 08:14:02 +0000731def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000732
733def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
734 let Latency = 3;
735 let NumMicroOps = 1;
736 let ResourceCycles = [1];
737}
Craig Topperfc179c62018-03-22 04:23:41 +0000738def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
739 "ADD_FST0r",
740 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000741 "SUBR_FPrST0",
742 "SUBR_FST0r",
743 "SUBR_FrST0",
744 "SUB_FPrST0",
745 "SUB_FST0r",
746 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000747 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000748 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000749 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000750 "VPMOVSXBDYrr",
751 "VPMOVSXBQYrr",
752 "VPMOVSXBWYrr",
753 "VPMOVSXDQYrr",
754 "VPMOVSXWDYrr",
755 "VPMOVSXWQYrr",
756 "VPMOVZXBDYrr",
757 "VPMOVZXBQYrr",
758 "VPMOVZXBWYrr",
759 "VPMOVZXDQYrr",
760 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000761 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000762
763def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
764 let Latency = 3;
765 let NumMicroOps = 2;
766 let ResourceCycles = [1,1];
767}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000768def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
769 "(V?)EXTRACTPSrr",
770 "(V?)PEXTRBrr",
771 "(V?)PEXTRDrr",
772 "(V?)PEXTRQrr",
773 "(V?)PEXTRWrr",
774 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000775
776def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
777 let Latency = 3;
778 let NumMicroOps = 2;
779 let ResourceCycles = [1,1];
780}
781def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
782
783def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
784 let Latency = 3;
785 let NumMicroOps = 3;
786 let ResourceCycles = [3];
787}
Craig Topperfc179c62018-03-22 04:23:41 +0000788def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
789 "ROR(8|16|32|64)rCL",
790 "SAR(8|16|32|64)rCL",
791 "SHL(8|16|32|64)rCL",
792 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000793
794def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000795 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000796 let NumMicroOps = 3;
797 let ResourceCycles = [3];
798}
Craig Topperb5f26592018-04-19 18:00:17 +0000799def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
800 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
801 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000802
803def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
804 let Latency = 3;
805 let NumMicroOps = 3;
806 let ResourceCycles = [1,2];
807}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000808def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000809
810def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
811 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000812 let NumMicroOps = 3;
813 let ResourceCycles = [2,1];
814}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000815def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
816 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000817
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000818def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
819 let Latency = 3;
820 let NumMicroOps = 3;
821 let ResourceCycles = [2,1];
822}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000823def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000824
825def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
826 let Latency = 3;
827 let NumMicroOps = 3;
828 let ResourceCycles = [2,1];
829}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000830def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
831 "(V?)PHADDW(Y?)rr",
832 "(V?)PHSUBD(Y?)rr",
833 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000834
835def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
836 let Latency = 3;
837 let NumMicroOps = 3;
838 let ResourceCycles = [2,1];
839}
Craig Topperfc179c62018-03-22 04:23:41 +0000840def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
841 "MMX_PACKSSWBirr",
842 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000843
844def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
845 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000846 let NumMicroOps = 3;
847 let ResourceCycles = [1,2];
848}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000849def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000850
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000851def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
852 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000853 let NumMicroOps = 3;
854 let ResourceCycles = [1,2];
855}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000856def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000857
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000858def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
859 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000860 let NumMicroOps = 3;
861 let ResourceCycles = [1,2];
862}
Craig Topperfc179c62018-03-22 04:23:41 +0000863def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
864 "RCL(8|16|32|64)ri",
865 "RCR(8|16|32|64)r1",
866 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000867
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000868def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
869 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000870 let NumMicroOps = 3;
871 let ResourceCycles = [1,1,1];
872}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000873def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000874
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000875def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
876 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000877 let NumMicroOps = 4;
878 let ResourceCycles = [1,1,2];
879}
Craig Topperf4cd9082018-01-19 05:47:32 +0000880def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000881
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000882def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
883 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000884 let NumMicroOps = 4;
885 let ResourceCycles = [1,1,1,1];
886}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000887def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000888
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000889def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
890 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000891 let NumMicroOps = 4;
892 let ResourceCycles = [1,1,1,1];
893}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000894def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000895
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000896def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000897 let Latency = 4;
898 let NumMicroOps = 1;
899 let ResourceCycles = [1];
900}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000901def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000902 "MMX_PMADDWDirr",
903 "MMX_PMULHRSWrr",
904 "MMX_PMULHUWirr",
905 "MMX_PMULHWirr",
906 "MMX_PMULLWirr",
907 "MMX_PMULUDQirr",
908 "MUL_FPrST0",
909 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000910 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000911
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000912def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000913 let Latency = 4;
914 let NumMicroOps = 1;
915 let ResourceCycles = [1];
916}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000917def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
918 "(V?)ADDPS(Y?)rr",
919 "(V?)ADDSDrr",
920 "(V?)ADDSSrr",
921 "(V?)ADDSUBPD(Y?)rr",
922 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000923 "(V?)CVTDQ2PS(Y?)rr",
924 "(V?)CVTPS2DQ(Y?)rr",
925 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000926 "(V?)MULPD(Y?)rr",
927 "(V?)MULPS(Y?)rr",
928 "(V?)MULSDrr",
929 "(V?)MULSSrr",
930 "(V?)PHMINPOSUWrr",
931 "(V?)PMADDUBSW(Y?)rr",
932 "(V?)PMADDWD(Y?)rr",
933 "(V?)PMULDQ(Y?)rr",
934 "(V?)PMULHRSW(Y?)rr",
935 "(V?)PMULHUW(Y?)rr",
936 "(V?)PMULHW(Y?)rr",
937 "(V?)PMULLW(Y?)rr",
938 "(V?)PMULUDQ(Y?)rr",
939 "(V?)SUBPD(Y?)rr",
940 "(V?)SUBPS(Y?)rr",
941 "(V?)SUBSDrr",
942 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000943
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000944def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000945 let Latency = 4;
946 let NumMicroOps = 2;
947 let ResourceCycles = [1,1];
948}
Craig Topperf846e2d2018-04-19 05:34:05 +0000949def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000950
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000951def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
952 let Latency = 4;
953 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000954 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000955}
Craig Topperfc179c62018-03-22 04:23:41 +0000956def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000957
958def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000959 let Latency = 4;
960 let NumMicroOps = 2;
961 let ResourceCycles = [1,1];
962}
Craig Topperfc179c62018-03-22 04:23:41 +0000963def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
964 "VPSLLQYrr",
965 "VPSLLWYrr",
966 "VPSRADYrr",
967 "VPSRAWYrr",
968 "VPSRLDYrr",
969 "VPSRLQYrr",
970 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000971
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000972def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000973 let Latency = 4;
974 let NumMicroOps = 3;
975 let ResourceCycles = [1,1,1];
976}
Craig Topperfc179c62018-03-22 04:23:41 +0000977def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
978 "ISTT_FP32m",
979 "ISTT_FP64m",
980 "IST_F16m",
981 "IST_F32m",
982 "IST_FP16m",
983 "IST_FP32m",
984 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000985
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000986def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000987 let Latency = 4;
988 let NumMicroOps = 4;
989 let ResourceCycles = [4];
990}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000991def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000992
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000993def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000994 let Latency = 4;
995 let NumMicroOps = 4;
996 let ResourceCycles = [1,3];
997}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000998def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000999
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001000def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001001 let Latency = 4;
1002 let NumMicroOps = 4;
1003 let ResourceCycles = [1,3];
1004}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001005def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001006
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001007def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008 let Latency = 4;
1009 let NumMicroOps = 4;
1010 let ResourceCycles = [1,1,2];
1011}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001012def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001013
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001014def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1015 let Latency = 5;
1016 let NumMicroOps = 1;
1017 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001018}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001019def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001020 "MOVSX(16|32|64)rm32",
1021 "MOVSX(16|32|64)rm8",
1022 "MOVZX(16|32|64)rm16",
1023 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001024 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001025
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001026def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001027 let Latency = 5;
1028 let NumMicroOps = 2;
1029 let ResourceCycles = [1,1];
1030}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001031def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1032 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001033
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001034def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001035 let Latency = 5;
1036 let NumMicroOps = 2;
1037 let ResourceCycles = [1,1];
1038}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001039def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001040 "MMX_CVTPS2PIirr",
1041 "MMX_CVTTPD2PIirr",
1042 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001043 "(V?)CVTPD2DQrr",
1044 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001045 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001046 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001047 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001048 "(V?)CVTSD2SSrr",
1049 "(V?)CVTSI642SDrr",
1050 "(V?)CVTSI2SDrr",
1051 "(V?)CVTSI2SSrr",
1052 "(V?)CVTSS2SDrr",
1053 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001054
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001055def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001056 let Latency = 5;
1057 let NumMicroOps = 3;
1058 let ResourceCycles = [1,1,1];
1059}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001060def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001061
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001062def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001063 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001064 let NumMicroOps = 3;
1065 let ResourceCycles = [1,1,1];
1066}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001067def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001068
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001069def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001070 let Latency = 5;
1071 let NumMicroOps = 5;
1072 let ResourceCycles = [1,4];
1073}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001074def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001075
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001076def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001077 let Latency = 5;
1078 let NumMicroOps = 5;
1079 let ResourceCycles = [2,3];
1080}
Craig Topper13a16502018-03-19 00:56:09 +00001081def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001082
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001083def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001084 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001085 let NumMicroOps = 6;
1086 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001087}
Craig Topperfc179c62018-03-22 04:23:41 +00001088def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1089 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001090
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001091def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1092 let Latency = 6;
1093 let NumMicroOps = 1;
1094 let ResourceCycles = [1];
1095}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001096def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001097 "(V?)MOVSHDUPrm",
1098 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001099 "VPBROADCASTDrm",
1100 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001101
1102def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001103 let Latency = 6;
1104 let NumMicroOps = 2;
1105 let ResourceCycles = [2];
1106}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001107def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001108
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001109def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001110 let Latency = 6;
1111 let NumMicroOps = 2;
1112 let ResourceCycles = [1,1];
1113}
Craig Topperfc179c62018-03-22 04:23:41 +00001114def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1115 "MMX_PADDSWirm",
1116 "MMX_PADDUSBirm",
1117 "MMX_PADDUSWirm",
1118 "MMX_PAVGBirm",
1119 "MMX_PAVGWirm",
1120 "MMX_PCMPEQBirm",
1121 "MMX_PCMPEQDirm",
1122 "MMX_PCMPEQWirm",
1123 "MMX_PCMPGTBirm",
1124 "MMX_PCMPGTDirm",
1125 "MMX_PCMPGTWirm",
1126 "MMX_PMAXSWirm",
1127 "MMX_PMAXUBirm",
1128 "MMX_PMINSWirm",
1129 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001130 "MMX_PSUBSBirm",
1131 "MMX_PSUBSWirm",
1132 "MMX_PSUBUSBirm",
1133 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001134
Craig Topper58afb4e2018-03-22 21:10:07 +00001135def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001136 let Latency = 6;
1137 let NumMicroOps = 2;
1138 let ResourceCycles = [1,1];
1139}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001140def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1141 "(V?)CVTSD2SIrr",
1142 "(V?)CVTSS2SI64rr",
1143 "(V?)CVTSS2SIrr",
1144 "(V?)CVTTSD2SI64rr",
1145 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001146
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001147def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1148 let Latency = 6;
1149 let NumMicroOps = 2;
1150 let ResourceCycles = [1,1];
1151}
Simon Pilgrim0a334a82018-04-23 11:57:15 +00001152def: InstRW<[SKLWriteResGroup71], (instregex "(V?)MOVHPDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001153 "(V?)MOVHPSrm",
1154 "(V?)MOVLPDrm",
1155 "(V?)MOVLPSrm",
1156 "(V?)PINSRBrm",
1157 "(V?)PINSRDrm",
1158 "(V?)PINSRQrm",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001159 "(V?)PINSRWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001160
1161def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1162 let Latency = 6;
1163 let NumMicroOps = 2;
1164 let ResourceCycles = [1,1];
1165}
Craig Topperfc179c62018-03-22 04:23:41 +00001166def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1167 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001168
1169def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1170 let Latency = 6;
1171 let NumMicroOps = 2;
1172 let ResourceCycles = [1,1];
1173}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001174def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1175 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001176 "MMX_PANDNirm",
1177 "MMX_PANDirm",
1178 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001179 "MMX_PSIGN(B|D|W)rm",
1180 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001181 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001182
1183def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1184 let Latency = 6;
1185 let NumMicroOps = 2;
1186 let ResourceCycles = [1,1];
1187}
Craig Topperc50570f2018-04-06 17:12:18 +00001188def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8",
Craig Topperfc179c62018-03-22 04:23:41 +00001189 "RORX(32|64)mi",
1190 "SARX(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001191 "SHLX(32|64)rm",
1192 "SHRX(32|64)rm")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001193def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1194 ADCX32rm, ADCX64rm,
1195 ADOX32rm, ADOX64rm,
1196 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001197
1198def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1199 let Latency = 6;
1200 let NumMicroOps = 2;
1201 let ResourceCycles = [1,1];
1202}
Craig Topperfc179c62018-03-22 04:23:41 +00001203def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1204 "BLSI(32|64)rm",
1205 "BLSMSK(32|64)rm",
1206 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001207 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001208
1209def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1210 let Latency = 6;
1211 let NumMicroOps = 2;
1212 let ResourceCycles = [1,1];
1213}
Craig Topper2d451e72018-03-18 08:38:06 +00001214def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001215def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001216
Craig Topper58afb4e2018-03-22 21:10:07 +00001217def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001218 let Latency = 6;
1219 let NumMicroOps = 3;
1220 let ResourceCycles = [2,1];
1221}
Craig Topperfc179c62018-03-22 04:23:41 +00001222def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001223
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001224def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001225 let Latency = 6;
1226 let NumMicroOps = 4;
1227 let ResourceCycles = [1,2,1];
1228}
Craig Topperfc179c62018-03-22 04:23:41 +00001229def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1230 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001231
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001232def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001233 let Latency = 6;
1234 let NumMicroOps = 4;
1235 let ResourceCycles = [1,1,1,1];
1236}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001237def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001238
Craig Topper58afb4e2018-03-22 21:10:07 +00001239def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001240 let Latency = 6;
1241 let NumMicroOps = 4;
1242 let ResourceCycles = [1,1,1,1];
1243}
1244def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1245
1246def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1247 let Latency = 6;
1248 let NumMicroOps = 4;
1249 let ResourceCycles = [1,1,1,1];
1250}
Craig Topperfc179c62018-03-22 04:23:41 +00001251def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1252 "BTR(16|32|64)mi8",
1253 "BTS(16|32|64)mi8",
1254 "SAR(8|16|32|64)m1",
1255 "SAR(8|16|32|64)mi",
1256 "SHL(8|16|32|64)m1",
1257 "SHL(8|16|32|64)mi",
1258 "SHR(8|16|32|64)m1",
1259 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001260
1261def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1262 let Latency = 6;
1263 let NumMicroOps = 4;
1264 let ResourceCycles = [1,1,1,1];
1265}
Craig Topperf0d04262018-04-06 16:16:48 +00001266def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1267 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001268
1269def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001270 let Latency = 6;
1271 let NumMicroOps = 6;
1272 let ResourceCycles = [1,5];
1273}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001274def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001275
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001276def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1277 let Latency = 7;
1278 let NumMicroOps = 1;
1279 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001280}
Craig Topperfc179c62018-03-22 04:23:41 +00001281def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1282 "LD_F64m",
1283 "LD_F80m",
1284 "VBROADCASTF128",
1285 "VBROADCASTI128",
1286 "VBROADCASTSDYrm",
1287 "VBROADCASTSSYrm",
1288 "VLDDQUYrm",
1289 "VMOVAPDYrm",
1290 "VMOVAPSYrm",
1291 "VMOVDDUPYrm",
1292 "VMOVDQAYrm",
1293 "VMOVDQUYrm",
1294 "VMOVNTDQAYrm",
1295 "VMOVSHDUPYrm",
1296 "VMOVSLDUPYrm",
1297 "VMOVUPDYrm",
1298 "VMOVUPSYrm",
1299 "VPBROADCASTDYrm",
1300 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001301
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001302def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001303 let Latency = 7;
1304 let NumMicroOps = 2;
1305 let ResourceCycles = [1,1];
1306}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001307def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001308
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001309def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1310 let Latency = 7;
1311 let NumMicroOps = 2;
1312 let ResourceCycles = [1,1];
1313}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001314def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1315 "(V?)PACKSSDWrm",
1316 "(V?)PACKSSWBrm",
1317 "(V?)PACKUSDWrm",
1318 "(V?)PACKUSWBrm",
1319 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001320 "VPBROADCASTBrm",
1321 "VPBROADCASTWrm",
1322 "VPERMILPDmi",
1323 "VPERMILPDrm",
1324 "VPERMILPSmi",
1325 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001326 "(V?)PSHUFBrm",
1327 "(V?)PSHUFDmi",
1328 "(V?)PSHUFHWmi",
1329 "(V?)PSHUFLWmi",
1330 "(V?)PUNPCKHBWrm",
1331 "(V?)PUNPCKHDQrm",
1332 "(V?)PUNPCKHQDQrm",
1333 "(V?)PUNPCKHWDrm",
1334 "(V?)PUNPCKLBWrm",
1335 "(V?)PUNPCKLDQrm",
1336 "(V?)PUNPCKLQDQrm",
1337 "(V?)PUNPCKLWDrm",
1338 "(V?)SHUFPDrmi",
1339 "(V?)SHUFPSrmi",
1340 "(V?)UNPCKHPDrm",
1341 "(V?)UNPCKHPSrm",
1342 "(V?)UNPCKLPDrm",
1343 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001344
Craig Topper58afb4e2018-03-22 21:10:07 +00001345def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001346 let Latency = 7;
1347 let NumMicroOps = 2;
1348 let ResourceCycles = [1,1];
1349}
Craig Topperfc179c62018-03-22 04:23:41 +00001350def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1351 "VCVTPD2PSYrr",
1352 "VCVTPH2PSYrr",
1353 "VCVTPS2PDYrr",
1354 "VCVTPS2PHYrr",
1355 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001356
1357def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1358 let Latency = 7;
1359 let NumMicroOps = 2;
1360 let ResourceCycles = [1,1];
1361}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001362def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1363 "(V?)PABSDrm",
1364 "(V?)PABSWrm",
1365 "(V?)PADDSBrm",
1366 "(V?)PADDSWrm",
1367 "(V?)PADDUSBrm",
1368 "(V?)PADDUSWrm",
1369 "(V?)PAVGBrm",
1370 "(V?)PAVGWrm",
1371 "(V?)PCMPEQBrm",
1372 "(V?)PCMPEQDrm",
1373 "(V?)PCMPEQQrm",
1374 "(V?)PCMPEQWrm",
1375 "(V?)PCMPGTBrm",
1376 "(V?)PCMPGTDrm",
1377 "(V?)PCMPGTWrm",
1378 "(V?)PMAXSBrm",
1379 "(V?)PMAXSDrm",
1380 "(V?)PMAXSWrm",
1381 "(V?)PMAXUBrm",
1382 "(V?)PMAXUDrm",
1383 "(V?)PMAXUWrm",
1384 "(V?)PMINSBrm",
1385 "(V?)PMINSDrm",
1386 "(V?)PMINSWrm",
1387 "(V?)PMINUBrm",
1388 "(V?)PMINUDrm",
1389 "(V?)PMINUWrm",
1390 "(V?)PSIGNBrm",
1391 "(V?)PSIGNDrm",
1392 "(V?)PSIGNWrm",
1393 "(V?)PSLLDrm",
1394 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001395 "VPSLLVDrm",
1396 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001397 "(V?)PSLLWrm",
1398 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001399 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001400 "(V?)PSRAWrm",
1401 "(V?)PSRLDrm",
1402 "(V?)PSRLQrm",
1403 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001404 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001405 "(V?)PSRLWrm",
1406 "(V?)PSUBSBrm",
1407 "(V?)PSUBSWrm",
1408 "(V?)PSUBUSBrm",
1409 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001410
1411def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1412 let Latency = 7;
1413 let NumMicroOps = 2;
1414 let ResourceCycles = [1,1];
1415}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001416def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001417 "(V?)INSERTI128rm",
1418 "(V?)MASKMOVPDrm",
1419 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001420 "(V?)PADDBrm",
1421 "(V?)PADDDrm",
1422 "(V?)PADDQrm",
1423 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001424 "(V?)PBLENDDrmi",
1425 "(V?)PMASKMOVDrm",
1426 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001427 "(V?)PSUBBrm",
1428 "(V?)PSUBDrm",
1429 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001430 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001431
1432def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1433 let Latency = 7;
1434 let NumMicroOps = 3;
1435 let ResourceCycles = [2,1];
1436}
Craig Topperfc179c62018-03-22 04:23:41 +00001437def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1438 "MMX_PACKSSWBirm",
1439 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001440
1441def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1442 let Latency = 7;
1443 let NumMicroOps = 3;
1444 let ResourceCycles = [1,2];
1445}
Craig Topperf4cd9082018-01-19 05:47:32 +00001446def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001447
1448def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1449 let Latency = 7;
1450 let NumMicroOps = 3;
1451 let ResourceCycles = [1,2];
1452}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001453def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1454 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001455
Craig Topper58afb4e2018-03-22 21:10:07 +00001456def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001457 let Latency = 7;
1458 let NumMicroOps = 3;
1459 let ResourceCycles = [1,1,1];
1460}
Craig Topperfc179c62018-03-22 04:23:41 +00001461def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1462 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001463
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001464def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001465 let Latency = 7;
1466 let NumMicroOps = 3;
1467 let ResourceCycles = [1,1,1];
1468}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001469def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001470
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001471def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001472 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001473 let NumMicroOps = 3;
1474 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001475}
Craig Topperfc179c62018-03-22 04:23:41 +00001476def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1477 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001478
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001479def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1480 let Latency = 7;
1481 let NumMicroOps = 5;
1482 let ResourceCycles = [1,1,1,2];
1483}
Craig Topperfc179c62018-03-22 04:23:41 +00001484def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1485 "ROL(8|16|32|64)mi",
1486 "ROR(8|16|32|64)m1",
1487 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001488
1489def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1490 let Latency = 7;
1491 let NumMicroOps = 5;
1492 let ResourceCycles = [1,1,1,2];
1493}
Craig Topper13a16502018-03-19 00:56:09 +00001494def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001495
1496def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1497 let Latency = 7;
1498 let NumMicroOps = 5;
1499 let ResourceCycles = [1,1,1,1,1];
1500}
Craig Topperfc179c62018-03-22 04:23:41 +00001501def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1502 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001503
1504def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001505 let Latency = 7;
1506 let NumMicroOps = 7;
1507 let ResourceCycles = [1,3,1,2];
1508}
Craig Topper2d451e72018-03-18 08:38:06 +00001509def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001510
Craig Topper58afb4e2018-03-22 21:10:07 +00001511def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001512 let Latency = 8;
1513 let NumMicroOps = 2;
1514 let ResourceCycles = [2];
1515}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001516def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1517 "(V?)ROUNDPS(Y?)r",
1518 "(V?)ROUNDSDr",
1519 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001520
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001521def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001522 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001523 let NumMicroOps = 2;
1524 let ResourceCycles = [1,1];
1525}
Craig Topperfc179c62018-03-22 04:23:41 +00001526def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1527 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001528
1529def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1530 let Latency = 8;
1531 let NumMicroOps = 2;
1532 let ResourceCycles = [1,1];
1533}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001534def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1535 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001536
1537def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001538 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001539 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001540 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001541}
Craig Topperf846e2d2018-04-19 05:34:05 +00001542def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001543
Craig Topperf846e2d2018-04-19 05:34:05 +00001544def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1545 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001546 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001547 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001548}
Craig Topperfc179c62018-03-22 04:23:41 +00001549def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001550
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001551def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1552 let Latency = 8;
1553 let NumMicroOps = 2;
1554 let ResourceCycles = [1,1];
1555}
Craig Topperfc179c62018-03-22 04:23:41 +00001556def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1557 "FCOM64m",
1558 "FCOMP32m",
1559 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001560 "VPACKSSDWYrm",
1561 "VPACKSSWBYrm",
1562 "VPACKUSDWYrm",
1563 "VPACKUSWBYrm",
1564 "VPALIGNRYrmi",
1565 "VPBLENDWYrmi",
1566 "VPBROADCASTBYrm",
1567 "VPBROADCASTWYrm",
1568 "VPERMILPDYmi",
1569 "VPERMILPDYrm",
1570 "VPERMILPSYmi",
1571 "VPERMILPSYrm",
1572 "VPMOVSXBDYrm",
1573 "VPMOVSXBQYrm",
1574 "VPMOVSXWQYrm",
1575 "VPSHUFBYrm",
1576 "VPSHUFDYmi",
1577 "VPSHUFHWYmi",
1578 "VPSHUFLWYmi",
1579 "VPUNPCKHBWYrm",
1580 "VPUNPCKHDQYrm",
1581 "VPUNPCKHQDQYrm",
1582 "VPUNPCKHWDYrm",
1583 "VPUNPCKLBWYrm",
1584 "VPUNPCKLDQYrm",
1585 "VPUNPCKLQDQYrm",
1586 "VPUNPCKLWDYrm",
1587 "VSHUFPDYrmi",
1588 "VSHUFPSYrmi",
1589 "VUNPCKHPDYrm",
1590 "VUNPCKHPSYrm",
1591 "VUNPCKLPDYrm",
1592 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001593
1594def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1595 let Latency = 8;
1596 let NumMicroOps = 2;
1597 let ResourceCycles = [1,1];
1598}
Craig Topperfc179c62018-03-22 04:23:41 +00001599def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1600 "VPABSDYrm",
1601 "VPABSWYrm",
1602 "VPADDSBYrm",
1603 "VPADDSWYrm",
1604 "VPADDUSBYrm",
1605 "VPADDUSWYrm",
1606 "VPAVGBYrm",
1607 "VPAVGWYrm",
1608 "VPCMPEQBYrm",
1609 "VPCMPEQDYrm",
1610 "VPCMPEQQYrm",
1611 "VPCMPEQWYrm",
1612 "VPCMPGTBYrm",
1613 "VPCMPGTDYrm",
1614 "VPCMPGTWYrm",
1615 "VPMAXSBYrm",
1616 "VPMAXSDYrm",
1617 "VPMAXSWYrm",
1618 "VPMAXUBYrm",
1619 "VPMAXUDYrm",
1620 "VPMAXUWYrm",
1621 "VPMINSBYrm",
1622 "VPMINSDYrm",
1623 "VPMINSWYrm",
1624 "VPMINUBYrm",
1625 "VPMINUDYrm",
1626 "VPMINUWYrm",
1627 "VPSIGNBYrm",
1628 "VPSIGNDYrm",
1629 "VPSIGNWYrm",
1630 "VPSLLDYrm",
1631 "VPSLLQYrm",
1632 "VPSLLVDYrm",
1633 "VPSLLVQYrm",
1634 "VPSLLWYrm",
1635 "VPSRADYrm",
1636 "VPSRAVDYrm",
1637 "VPSRAWYrm",
1638 "VPSRLDYrm",
1639 "VPSRLQYrm",
1640 "VPSRLVDYrm",
1641 "VPSRLVQYrm",
1642 "VPSRLWYrm",
1643 "VPSUBSBYrm",
1644 "VPSUBSWYrm",
1645 "VPSUBUSBYrm",
1646 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001647
1648def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1649 let Latency = 8;
1650 let NumMicroOps = 2;
1651 let ResourceCycles = [1,1];
1652}
Craig Topperfc179c62018-03-22 04:23:41 +00001653def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1654 "VANDNPSYrm",
1655 "VANDPDYrm",
1656 "VANDPSYrm",
1657 "VBLENDPDYrmi",
1658 "VBLENDPSYrmi",
1659 "VMASKMOVPDYrm",
1660 "VMASKMOVPSYrm",
1661 "VORPDYrm",
1662 "VORPSYrm",
1663 "VPADDBYrm",
1664 "VPADDDYrm",
1665 "VPADDQYrm",
1666 "VPADDWYrm",
1667 "VPANDNYrm",
1668 "VPANDYrm",
1669 "VPBLENDDYrmi",
1670 "VPMASKMOVDYrm",
1671 "VPMASKMOVQYrm",
1672 "VPORYrm",
1673 "VPSUBBYrm",
1674 "VPSUBDYrm",
1675 "VPSUBQYrm",
1676 "VPSUBWYrm",
1677 "VPXORYrm",
1678 "VXORPDYrm",
1679 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001680
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001681def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1682 let Latency = 8;
1683 let NumMicroOps = 4;
1684 let ResourceCycles = [1,2,1];
1685}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001686def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001687
1688def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1689 let Latency = 8;
1690 let NumMicroOps = 4;
1691 let ResourceCycles = [2,1,1];
1692}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001693def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001694
Craig Topper58afb4e2018-03-22 21:10:07 +00001695def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001696 let Latency = 8;
1697 let NumMicroOps = 4;
1698 let ResourceCycles = [1,1,1,1];
1699}
1700def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1701
1702def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1703 let Latency = 8;
1704 let NumMicroOps = 5;
1705 let ResourceCycles = [1,1,3];
1706}
Craig Topper13a16502018-03-19 00:56:09 +00001707def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001708
1709def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1710 let Latency = 8;
1711 let NumMicroOps = 5;
1712 let ResourceCycles = [1,1,1,2];
1713}
Craig Topperfc179c62018-03-22 04:23:41 +00001714def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1715 "RCL(8|16|32|64)mi",
1716 "RCR(8|16|32|64)m1",
1717 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001718
1719def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1720 let Latency = 8;
1721 let NumMicroOps = 6;
1722 let ResourceCycles = [1,1,1,3];
1723}
Craig Topperfc179c62018-03-22 04:23:41 +00001724def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1725 "SAR(8|16|32|64)mCL",
1726 "SHL(8|16|32|64)mCL",
1727 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001728
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001729def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1730 let Latency = 8;
1731 let NumMicroOps = 6;
1732 let ResourceCycles = [1,1,1,2,1];
1733}
Craig Topper9f834812018-04-01 21:54:24 +00001734def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001735 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001736 "SBB(8|16|32|64)mi")>;
1737def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1738 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001739
1740def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1741 let Latency = 9;
1742 let NumMicroOps = 2;
1743 let ResourceCycles = [1,1];
1744}
Craig Topperfc179c62018-03-22 04:23:41 +00001745def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1746 "MMX_PMADDUBSWrm",
1747 "MMX_PMADDWDirm",
1748 "MMX_PMULHRSWrm",
1749 "MMX_PMULHUWirm",
1750 "MMX_PMULHWirm",
1751 "MMX_PMULLWirm",
1752 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001753 "(V?)RCPSSm",
1754 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001755 "VTESTPDYrm",
1756 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001757
1758def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1759 let Latency = 9;
1760 let NumMicroOps = 2;
1761 let ResourceCycles = [1,1];
1762}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001763def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001764 "VPMOVSXBWYrm",
1765 "VPMOVSXDQYrm",
1766 "VPMOVSXWDYrm",
1767 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001768 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001769
1770def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1771 let Latency = 9;
1772 let NumMicroOps = 2;
1773 let ResourceCycles = [1,1];
1774}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001775def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1776 "(V?)ADDSSrm",
1777 "(V?)CMPSDrm",
1778 "(V?)CMPSSrm",
1779 "(V?)MAX(C?)SDrm",
1780 "(V?)MAX(C?)SSrm",
1781 "(V?)MIN(C?)SDrm",
1782 "(V?)MIN(C?)SSrm",
1783 "(V?)MULSDrm",
1784 "(V?)MULSSrm",
1785 "(V?)SUBSDrm",
1786 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001787def: InstRW<[SKLWriteResGroup122],
1788 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001789
Craig Topper58afb4e2018-03-22 21:10:07 +00001790def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001791 let Latency = 9;
1792 let NumMicroOps = 2;
1793 let ResourceCycles = [1,1];
1794}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001795def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001796 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001797 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001798 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001799
Craig Topper58afb4e2018-03-22 21:10:07 +00001800def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001801 let Latency = 9;
1802 let NumMicroOps = 3;
1803 let ResourceCycles = [1,2];
1804}
Craig Topperfc179c62018-03-22 04:23:41 +00001805def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001806
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001807def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1808 let Latency = 9;
1809 let NumMicroOps = 3;
1810 let ResourceCycles = [1,2];
1811}
Craig Topperfc179c62018-03-22 04:23:41 +00001812def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1813 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001814
1815def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1816 let Latency = 9;
1817 let NumMicroOps = 3;
1818 let ResourceCycles = [1,1,1];
1819}
Craig Topperfc179c62018-03-22 04:23:41 +00001820def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001821
1822def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1823 let Latency = 9;
1824 let NumMicroOps = 3;
1825 let ResourceCycles = [1,1,1];
1826}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001827def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001828
1829def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001830 let Latency = 9;
1831 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001832 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001833}
Craig Topperfc179c62018-03-22 04:23:41 +00001834def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1835 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001836
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001837def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1838 let Latency = 9;
1839 let NumMicroOps = 4;
1840 let ResourceCycles = [2,1,1];
1841}
Craig Topperfc179c62018-03-22 04:23:41 +00001842def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1843 "(V?)PHADDWrm",
1844 "(V?)PHSUBDrm",
1845 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001846
1847def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1848 let Latency = 9;
1849 let NumMicroOps = 4;
1850 let ResourceCycles = [1,1,1,1];
1851}
Craig Topperfc179c62018-03-22 04:23:41 +00001852def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1853 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001854
1855def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1856 let Latency = 9;
1857 let NumMicroOps = 5;
1858 let ResourceCycles = [1,2,1,1];
1859}
Craig Topperfc179c62018-03-22 04:23:41 +00001860def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1861 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001862
1863def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1864 let Latency = 10;
1865 let NumMicroOps = 2;
1866 let ResourceCycles = [1,1];
1867}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001868def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001869 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001870
1871def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1872 let Latency = 10;
1873 let NumMicroOps = 2;
1874 let ResourceCycles = [1,1];
1875}
Craig Topperfc179c62018-03-22 04:23:41 +00001876def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1877 "ADD_F64m",
1878 "ILD_F16m",
1879 "ILD_F32m",
1880 "ILD_F64m",
1881 "SUBR_F32m",
1882 "SUBR_F64m",
1883 "SUB_F32m",
1884 "SUB_F64m",
1885 "VPCMPGTQYrm",
1886 "VPERM2F128rm",
1887 "VPERM2I128rm",
1888 "VPERMDYrm",
1889 "VPERMPDYmi",
1890 "VPERMPSYrm",
1891 "VPERMQYmi",
1892 "VPMOVZXBDYrm",
1893 "VPMOVZXBQYrm",
1894 "VPMOVZXBWYrm",
1895 "VPMOVZXDQYrm",
1896 "VPMOVZXWQYrm",
1897 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001898
1899def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1900 let Latency = 10;
1901 let NumMicroOps = 2;
1902 let ResourceCycles = [1,1];
1903}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001904def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1905 "(V?)ADDPSrm",
1906 "(V?)ADDSUBPDrm",
1907 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001908 "(V?)CVTDQ2PSrm",
1909 "(V?)CVTPH2PSYrm",
1910 "(V?)CVTPS2DQrm",
1911 "(V?)CVTSS2SDrm",
1912 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001913 "(V?)MULPDrm",
1914 "(V?)MULPSrm",
1915 "(V?)PHMINPOSUWrm",
1916 "(V?)PMADDUBSWrm",
1917 "(V?)PMADDWDrm",
1918 "(V?)PMULDQrm",
1919 "(V?)PMULHRSWrm",
1920 "(V?)PMULHUWrm",
1921 "(V?)PMULHWrm",
1922 "(V?)PMULLWrm",
1923 "(V?)PMULUDQrm",
1924 "(V?)SUBPDrm",
1925 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001926def: InstRW<[SKLWriteResGroup134],
1927 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001928
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001929def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1930 let Latency = 10;
1931 let NumMicroOps = 3;
1932 let ResourceCycles = [1,1,1];
1933}
Craig Topperfc179c62018-03-22 04:23:41 +00001934def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1935 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001936
Craig Topper58afb4e2018-03-22 21:10:07 +00001937def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001938 let Latency = 10;
1939 let NumMicroOps = 3;
1940 let ResourceCycles = [1,1,1];
1941}
Craig Topperfc179c62018-03-22 04:23:41 +00001942def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001943
1944def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001945 let Latency = 10;
1946 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001947 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001948}
Craig Topperfc179c62018-03-22 04:23:41 +00001949def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1950 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001951
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001952def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1953 let Latency = 10;
1954 let NumMicroOps = 4;
1955 let ResourceCycles = [2,1,1];
1956}
Craig Topperfc179c62018-03-22 04:23:41 +00001957def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1958 "VPHADDWYrm",
1959 "VPHSUBDYrm",
1960 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001961
1962def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001963 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001964 let NumMicroOps = 4;
1965 let ResourceCycles = [1,1,1,1];
1966}
Craig Topperf846e2d2018-04-19 05:34:05 +00001967def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001968
1969def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1970 let Latency = 10;
1971 let NumMicroOps = 8;
1972 let ResourceCycles = [1,1,1,1,1,3];
1973}
Craig Topper13a16502018-03-19 00:56:09 +00001974def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001975
1976def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001977 let Latency = 10;
1978 let NumMicroOps = 10;
1979 let ResourceCycles = [9,1];
1980}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001981def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001982
Craig Topper8104f262018-04-02 05:33:28 +00001983def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001984 let Latency = 11;
1985 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001986 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001987}
Craig Topper8104f262018-04-02 05:33:28 +00001988def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001989 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001990
Craig Topper8104f262018-04-02 05:33:28 +00001991def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1992 let Latency = 11;
1993 let NumMicroOps = 1;
1994 let ResourceCycles = [1,5];
1995}
1996def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1997
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001998def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001999 let Latency = 11;
2000 let NumMicroOps = 2;
2001 let ResourceCycles = [1,1];
2002}
Craig Topperfc179c62018-03-22 04:23:41 +00002003def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2004 "MUL_F64m",
2005 "VRCPPSYm",
2006 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002007
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002008def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2009 let Latency = 11;
2010 let NumMicroOps = 2;
2011 let ResourceCycles = [1,1];
2012}
Craig Topperfc179c62018-03-22 04:23:41 +00002013def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2014 "VADDPSYrm",
2015 "VADDSUBPDYrm",
2016 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002017 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002018 "VCMPPSYrmi",
2019 "VCVTDQ2PSYrm",
2020 "VCVTPS2DQYrm",
2021 "VCVTPS2PDYrm",
2022 "VCVTTPS2DQYrm",
2023 "VMAX(C?)PDYrm",
2024 "VMAX(C?)PSYrm",
2025 "VMIN(C?)PDYrm",
2026 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002027 "VMULPDYrm",
2028 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002029 "VPMADDUBSWYrm",
2030 "VPMADDWDYrm",
2031 "VPMULDQYrm",
2032 "VPMULHRSWYrm",
2033 "VPMULHUWYrm",
2034 "VPMULHWYrm",
2035 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002036 "VPMULUDQYrm",
2037 "VSUBPDYrm",
2038 "VSUBPSYrm")>;
2039def: InstRW<[SKLWriteResGroup147],
2040 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002041
2042def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2043 let Latency = 11;
2044 let NumMicroOps = 3;
2045 let ResourceCycles = [2,1];
2046}
Craig Topperfc179c62018-03-22 04:23:41 +00002047def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2048 "FICOM32m",
2049 "FICOMP16m",
2050 "FICOMP32m",
2051 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002052
2053def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2054 let Latency = 11;
2055 let NumMicroOps = 3;
2056 let ResourceCycles = [1,1,1];
2057}
Craig Topperfc179c62018-03-22 04:23:41 +00002058def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002059
Craig Topper58afb4e2018-03-22 21:10:07 +00002060def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002061 let Latency = 11;
2062 let NumMicroOps = 3;
2063 let ResourceCycles = [1,1,1];
2064}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002065def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2066 "(V?)CVTSD2SIrm",
2067 "(V?)CVTSS2SI64rm",
2068 "(V?)CVTSS2SIrm",
2069 "(V?)CVTTSD2SI64rm",
2070 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002071 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002072 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002073
Craig Topper58afb4e2018-03-22 21:10:07 +00002074def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002075 let Latency = 11;
2076 let NumMicroOps = 3;
2077 let ResourceCycles = [1,1,1];
2078}
Craig Topperfc179c62018-03-22 04:23:41 +00002079def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2080 "CVTPD2PSrm",
2081 "CVTTPD2DQrm",
2082 "MMX_CVTPD2PIirm",
2083 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002084
2085def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2086 let Latency = 11;
2087 let NumMicroOps = 6;
2088 let ResourceCycles = [1,1,1,2,1];
2089}
Craig Topperfc179c62018-03-22 04:23:41 +00002090def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2091 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002092
2093def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002094 let Latency = 11;
2095 let NumMicroOps = 7;
2096 let ResourceCycles = [2,3,2];
2097}
Craig Topperfc179c62018-03-22 04:23:41 +00002098def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2099 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002100
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002101def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002102 let Latency = 11;
2103 let NumMicroOps = 9;
2104 let ResourceCycles = [1,5,1,2];
2105}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002106def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002107
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002108def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002109 let Latency = 11;
2110 let NumMicroOps = 11;
2111 let ResourceCycles = [2,9];
2112}
Craig Topperfc179c62018-03-22 04:23:41 +00002113def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002114
Craig Topper8104f262018-04-02 05:33:28 +00002115def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002116 let Latency = 12;
2117 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002118 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002119}
Craig Topper8104f262018-04-02 05:33:28 +00002120def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002121 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002122
Craig Topper8104f262018-04-02 05:33:28 +00002123def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2124 let Latency = 12;
2125 let NumMicroOps = 1;
2126 let ResourceCycles = [1,6];
2127}
2128def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2129
Craig Topper58afb4e2018-03-22 21:10:07 +00002130def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002131 let Latency = 12;
2132 let NumMicroOps = 4;
2133 let ResourceCycles = [1,1,1,1];
2134}
2135def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2136
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002137def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002138 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002139 let NumMicroOps = 3;
2140 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002141}
Craig Topperfc179c62018-03-22 04:23:41 +00002142def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2143 "ADD_FI32m",
2144 "SUBR_FI16m",
2145 "SUBR_FI32m",
2146 "SUB_FI16m",
2147 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002148
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002149def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2150 let Latency = 13;
2151 let NumMicroOps = 3;
2152 let ResourceCycles = [1,1,1];
2153}
2154def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2155
Craig Topper58afb4e2018-03-22 21:10:07 +00002156def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002157 let Latency = 13;
2158 let NumMicroOps = 4;
2159 let ResourceCycles = [1,3];
2160}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002161def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002162
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002163def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002164 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002165 let NumMicroOps = 4;
2166 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002167}
Craig Topperfc179c62018-03-22 04:23:41 +00002168def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2169 "VHADDPSYrm",
2170 "VHSUBPDYrm",
2171 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002172
Craig Topper8104f262018-04-02 05:33:28 +00002173def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002174 let Latency = 14;
2175 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002176 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002177}
Craig Topper8104f262018-04-02 05:33:28 +00002178def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002179 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002180
Craig Topper8104f262018-04-02 05:33:28 +00002181def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2182 let Latency = 14;
2183 let NumMicroOps = 1;
2184 let ResourceCycles = [1,5];
2185}
2186def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2187
Craig Topper58afb4e2018-03-22 21:10:07 +00002188def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002189 let Latency = 14;
2190 let NumMicroOps = 3;
2191 let ResourceCycles = [1,2];
2192}
Craig Topperfc179c62018-03-22 04:23:41 +00002193def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2194def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2195def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2196def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002197
2198def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2199 let Latency = 14;
2200 let NumMicroOps = 3;
2201 let ResourceCycles = [1,1,1];
2202}
Craig Topperfc179c62018-03-22 04:23:41 +00002203def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2204 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002205
2206def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002207 let Latency = 14;
2208 let NumMicroOps = 10;
2209 let ResourceCycles = [2,4,1,3];
2210}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002211def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002212
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002213def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002214 let Latency = 15;
2215 let NumMicroOps = 1;
2216 let ResourceCycles = [1];
2217}
Craig Topperfc179c62018-03-22 04:23:41 +00002218def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2219 "DIVR_FST0r",
2220 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002221
Craig Topper58afb4e2018-03-22 21:10:07 +00002222def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002223 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002224 let NumMicroOps = 3;
2225 let ResourceCycles = [1,2];
2226}
Craig Topper40d3b322018-03-22 21:55:20 +00002227def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2228 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002229
Craig Topperd25f1ac2018-03-20 23:39:48 +00002230def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2231 let Latency = 17;
2232 let NumMicroOps = 3;
2233 let ResourceCycles = [1,2];
2234}
2235def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2236
Craig Topper58afb4e2018-03-22 21:10:07 +00002237def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002238 let Latency = 15;
2239 let NumMicroOps = 4;
2240 let ResourceCycles = [1,1,2];
2241}
Craig Topperfc179c62018-03-22 04:23:41 +00002242def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002243
2244def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2245 let Latency = 15;
2246 let NumMicroOps = 10;
2247 let ResourceCycles = [1,1,1,5,1,1];
2248}
Craig Topper13a16502018-03-19 00:56:09 +00002249def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002250
Craig Topper8104f262018-04-02 05:33:28 +00002251def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002252 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002253 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002254 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002255}
Craig Topperfc179c62018-03-22 04:23:41 +00002256def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002257
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002258def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2259 let Latency = 16;
2260 let NumMicroOps = 14;
2261 let ResourceCycles = [1,1,1,4,2,5];
2262}
2263def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2264
2265def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002266 let Latency = 16;
2267 let NumMicroOps = 16;
2268 let ResourceCycles = [16];
2269}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002270def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002271
Craig Topper8104f262018-04-02 05:33:28 +00002272def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002273 let Latency = 17;
2274 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002275 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002276}
Craig Topper8104f262018-04-02 05:33:28 +00002277def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2278
2279def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2280 let Latency = 17;
2281 let NumMicroOps = 2;
2282 let ResourceCycles = [1,1,3];
2283}
2284def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002285
2286def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002287 let Latency = 17;
2288 let NumMicroOps = 15;
2289 let ResourceCycles = [2,1,2,4,2,4];
2290}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002291def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002292
Craig Topper8104f262018-04-02 05:33:28 +00002293def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002294 let Latency = 18;
2295 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002296 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002297}
Craig Topper8104f262018-04-02 05:33:28 +00002298def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002299 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002300
Craig Topper8104f262018-04-02 05:33:28 +00002301def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2302 let Latency = 18;
2303 let NumMicroOps = 1;
2304 let ResourceCycles = [1,12];
2305}
2306def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2307
2308def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002309 let Latency = 18;
2310 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002311 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002312}
Craig Topper8104f262018-04-02 05:33:28 +00002313def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2314
2315def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2316 let Latency = 18;
2317 let NumMicroOps = 2;
2318 let ResourceCycles = [1,1,3];
2319}
2320def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002321
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002322def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002323 let Latency = 18;
2324 let NumMicroOps = 8;
2325 let ResourceCycles = [1,1,1,5];
2326}
Craig Topperfc179c62018-03-22 04:23:41 +00002327def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002328
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002329def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002330 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002331 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002332 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002333}
Craig Topper13a16502018-03-19 00:56:09 +00002334def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002335
Craig Topper8104f262018-04-02 05:33:28 +00002336def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002337 let Latency = 19;
2338 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002339 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002340}
Craig Topper8104f262018-04-02 05:33:28 +00002341def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2342
2343def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2344 let Latency = 19;
2345 let NumMicroOps = 2;
2346 let ResourceCycles = [1,1,6];
2347}
2348def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002349
Craig Topper58afb4e2018-03-22 21:10:07 +00002350def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002351 let Latency = 19;
2352 let NumMicroOps = 5;
2353 let ResourceCycles = [1,1,3];
2354}
Craig Topperfc179c62018-03-22 04:23:41 +00002355def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002356
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002357def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002358 let Latency = 20;
2359 let NumMicroOps = 1;
2360 let ResourceCycles = [1];
2361}
Craig Topperfc179c62018-03-22 04:23:41 +00002362def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2363 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002364 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002365
Craig Topper8104f262018-04-02 05:33:28 +00002366def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002367 let Latency = 20;
2368 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002369 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002370}
Craig Topperfc179c62018-03-22 04:23:41 +00002371def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002372
Craig Topper58afb4e2018-03-22 21:10:07 +00002373def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002374 let Latency = 20;
2375 let NumMicroOps = 5;
2376 let ResourceCycles = [1,1,3];
2377}
2378def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2379
2380def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2381 let Latency = 20;
2382 let NumMicroOps = 8;
2383 let ResourceCycles = [1,1,1,1,1,1,2];
2384}
Craig Topperfc179c62018-03-22 04:23:41 +00002385def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2386 "INSL",
2387 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002388
2389def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002390 let Latency = 20;
2391 let NumMicroOps = 10;
2392 let ResourceCycles = [1,2,7];
2393}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002394def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002395
Craig Topper8104f262018-04-02 05:33:28 +00002396def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002397 let Latency = 21;
2398 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002399 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002400}
2401def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2402
2403def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2404 let Latency = 22;
2405 let NumMicroOps = 2;
2406 let ResourceCycles = [1,1];
2407}
Craig Topperfc179c62018-03-22 04:23:41 +00002408def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2409 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002410
2411def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2412 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002413 let NumMicroOps = 5;
2414 let ResourceCycles = [1,2,1,1];
2415}
Craig Topper17a31182017-12-16 18:35:29 +00002416def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2417 VGATHERDPDrm,
2418 VGATHERQPDrm,
2419 VGATHERQPSrm,
2420 VPGATHERDDrm,
2421 VPGATHERDQrm,
2422 VPGATHERQDrm,
2423 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002424
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002425def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2426 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002427 let NumMicroOps = 5;
2428 let ResourceCycles = [1,2,1,1];
2429}
Craig Topper17a31182017-12-16 18:35:29 +00002430def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2431 VGATHERQPDYrm,
2432 VGATHERQPSYrm,
2433 VPGATHERDDYrm,
2434 VPGATHERDQYrm,
2435 VPGATHERQDYrm,
2436 VPGATHERQQYrm,
2437 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002438
Craig Topper8104f262018-04-02 05:33:28 +00002439def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002440 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002441 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002442 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002443}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002444def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002445
2446def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2447 let Latency = 23;
2448 let NumMicroOps = 19;
2449 let ResourceCycles = [2,1,4,1,1,4,6];
2450}
2451def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2452
Craig Topper8104f262018-04-02 05:33:28 +00002453def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002454 let Latency = 24;
2455 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002456 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002457}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002458def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002459
Craig Topper8104f262018-04-02 05:33:28 +00002460def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002461 let Latency = 25;
2462 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002463 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002464}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002465def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002466
2467def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2468 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002469 let NumMicroOps = 3;
2470 let ResourceCycles = [1,1,1];
2471}
Craig Topperfc179c62018-03-22 04:23:41 +00002472def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2473 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002474
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002475def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2476 let Latency = 27;
2477 let NumMicroOps = 2;
2478 let ResourceCycles = [1,1];
2479}
Craig Topperfc179c62018-03-22 04:23:41 +00002480def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2481 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002482
2483def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2484 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002485 let NumMicroOps = 8;
2486 let ResourceCycles = [2,4,1,1];
2487}
Craig Topper13a16502018-03-19 00:56:09 +00002488def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002489
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002490def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002491 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002492 let NumMicroOps = 3;
2493 let ResourceCycles = [1,1,1];
2494}
Craig Topperfc179c62018-03-22 04:23:41 +00002495def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2496 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002497
2498def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2499 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002500 let NumMicroOps = 23;
2501 let ResourceCycles = [1,5,3,4,10];
2502}
Craig Topperfc179c62018-03-22 04:23:41 +00002503def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2504 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002505
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002506def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2507 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002508 let NumMicroOps = 23;
2509 let ResourceCycles = [1,5,2,1,4,10];
2510}
Craig Topperfc179c62018-03-22 04:23:41 +00002511def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2512 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002513
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002514def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2515 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002516 let NumMicroOps = 31;
2517 let ResourceCycles = [1,8,1,21];
2518}
Craig Topper391c6f92017-12-10 01:24:08 +00002519def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002520
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002521def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2522 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002523 let NumMicroOps = 18;
2524 let ResourceCycles = [1,1,2,3,1,1,1,8];
2525}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002526def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002527
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002528def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2529 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002530 let NumMicroOps = 39;
2531 let ResourceCycles = [1,10,1,1,26];
2532}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002533def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002534
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002535def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002536 let Latency = 42;
2537 let NumMicroOps = 22;
2538 let ResourceCycles = [2,20];
2539}
Craig Topper2d451e72018-03-18 08:38:06 +00002540def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002541
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002542def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2543 let Latency = 42;
2544 let NumMicroOps = 40;
2545 let ResourceCycles = [1,11,1,1,26];
2546}
Craig Topper391c6f92017-12-10 01:24:08 +00002547def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002548
2549def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2550 let Latency = 46;
2551 let NumMicroOps = 44;
2552 let ResourceCycles = [1,11,1,1,30];
2553}
2554def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2555
2556def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2557 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002558 let NumMicroOps = 64;
2559 let ResourceCycles = [2,8,5,10,39];
2560}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002561def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002562
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002563def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2564 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002565 let NumMicroOps = 88;
2566 let ResourceCycles = [4,4,31,1,2,1,45];
2567}
Craig Topper2d451e72018-03-18 08:38:06 +00002568def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002569
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002570def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2571 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002572 let NumMicroOps = 90;
2573 let ResourceCycles = [4,2,33,1,2,1,47];
2574}
Craig Topper2d451e72018-03-18 08:38:06 +00002575def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002576
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002577def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002578 let Latency = 75;
2579 let NumMicroOps = 15;
2580 let ResourceCycles = [6,3,6];
2581}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002582def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002583
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002584def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002585 let Latency = 76;
2586 let NumMicroOps = 32;
2587 let ResourceCycles = [7,2,8,3,1,11];
2588}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002589def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002590
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002591def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002592 let Latency = 102;
2593 let NumMicroOps = 66;
2594 let ResourceCycles = [4,2,4,8,14,34];
2595}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002596def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002597
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002598def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2599 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002600 let NumMicroOps = 100;
2601 let ResourceCycles = [9,1,11,16,1,11,21,30];
2602}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002603def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002604
2605} // SchedModel