blob: 3f68e927dc597b2111180ca72611ced99fabe08e [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 Pilgrimdbd1ae72018-04-25 13:07:58 +0000162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4, [1], 1, 6>; // Fused Multiply Add.
163defm : SKLWriteResPair<WriteFMAS, [SKLPort01], 4, [1], 1, 5>; // Fused Multiply Add (Scalar).
164defm : SKLWriteResPair<WriteFMAY, [SKLPort01], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000165defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000166defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
167defm : SKLWriteResPair<WriteFLogicY, [SKLPort015], 1, [1], 1, 7>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000170defm : SKLWriteResPair<WriteFVarShuffleY, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000171defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000172defm : SKLWriteResPair<WriteFBlendY, [SKLPort015], 1, [1], 1, 7>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000173defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000174defm : SKLWriteResPair<WriteFVarBlendY,[SKLPort015], 2, [2], 2, 7>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000175
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000176def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
177 let Latency = 6;
178 let NumMicroOps = 4;
179 let ResourceCycles = [1,1,1,1];
180}
181
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000182// FMA Scheduling helper class.
183// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
184
185// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000186def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
187def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
188def : WriteRes<WriteVecMove, [SKLPort015]>;
189
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000190defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000191defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim57f2b182018-05-01 12:39:17 +0000192defm : SKLWriteResPair<WriteVecLogicY,[SKLPort015], 1, [1], 1, 7>; // Vector integer and/or/xor (YMM/ZMM).
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000193defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
194defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000195defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000196defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000197defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000198defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000199defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000200defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000201defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000202defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000203
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000204// Vector insert/extract operations.
205def : WriteRes<WriteVecInsert, [SKLPort5]> {
206 let Latency = 2;
207 let NumMicroOps = 2;
208 let ResourceCycles = [2];
209}
210def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
211 let Latency = 6;
212 let NumMicroOps = 2;
213}
214
215def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
216 let Latency = 3;
217 let NumMicroOps = 2;
218}
219def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
220 let Latency = 2;
221 let NumMicroOps = 3;
222}
223
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000224// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000225defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
226defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
227defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000228
229// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000230
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000232def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
233 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000234 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000235 let ResourceCycles = [3];
236}
237def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000238 let Latency = 16;
239 let NumMicroOps = 4;
240 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000241}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000242
243// Packed Compare Explicit Length Strings, Return Mask
244def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
245 let Latency = 19;
246 let NumMicroOps = 9;
247 let ResourceCycles = [4,3,1,1];
248}
249def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
250 let Latency = 25;
251 let NumMicroOps = 10;
252 let ResourceCycles = [4,3,1,1,1];
253}
254
255// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000256def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000257 let Latency = 10;
258 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000259 let ResourceCycles = [3];
260}
261def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000262 let Latency = 16;
263 let NumMicroOps = 4;
264 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000266
267// Packed Compare Explicit Length Strings, Return Index
268def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
269 let Latency = 18;
270 let NumMicroOps = 8;
271 let ResourceCycles = [4,3,1];
272}
273def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
274 let Latency = 24;
275 let NumMicroOps = 9;
276 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277}
278
Simon Pilgrima2f26782018-03-27 20:38:54 +0000279// MOVMSK Instructions.
280def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
281def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
282def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
283
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000284// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000285def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
286 let Latency = 4;
287 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000288 let ResourceCycles = [1];
289}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000290def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
291 let Latency = 10;
292 let NumMicroOps = 2;
293 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000294}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000295
296def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
297 let Latency = 8;
298 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000299 let ResourceCycles = [2];
300}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000301def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000302 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000303 let NumMicroOps = 3;
304 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000306
307def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
308 let Latency = 20;
309 let NumMicroOps = 11;
310 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000311}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000312def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
313 let Latency = 25;
314 let NumMicroOps = 11;
315 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000316}
317
318// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000319def : WriteRes<WriteCLMul, [SKLPort5]> {
320 let Latency = 6;
321 let NumMicroOps = 1;
322 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000323}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000324def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
325 let Latency = 12;
326 let NumMicroOps = 2;
327 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000328}
329
330// Catch-all for expensive system instructions.
331def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
332
333// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000334defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000335defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000336defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000337defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000338defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000339
340// Old microcoded instructions that nobody use.
341def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
342
343// Fence instructions.
344def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
345
Craig Topper05242bf2018-04-21 18:07:36 +0000346// Load/store MXCSR.
347def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
348def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
349
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000350// Nop, not very useful expect it provides a model for nops!
351def : WriteRes<WriteNop, []>;
352
353////////////////////////////////////////////////////////////////////////////////
354// Horizontal add/sub instructions.
355////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000356
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000357defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
358defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000359defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000360
361// Remaining instrs.
362
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000363def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000364 let Latency = 1;
365 let NumMicroOps = 1;
366 let ResourceCycles = [1];
367}
Craig Topperfc179c62018-03-22 04:23:41 +0000368def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
369 "MMX_PADDSWirr",
370 "MMX_PADDUSBirr",
371 "MMX_PADDUSWirr",
372 "MMX_PAVGBirr",
373 "MMX_PAVGWirr",
374 "MMX_PCMPEQBirr",
375 "MMX_PCMPEQDirr",
376 "MMX_PCMPEQWirr",
377 "MMX_PCMPGTBirr",
378 "MMX_PCMPGTDirr",
379 "MMX_PCMPGTWirr",
380 "MMX_PMAXSWirr",
381 "MMX_PMAXUBirr",
382 "MMX_PMINSWirr",
383 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000384 "MMX_PSUBSBirr",
385 "MMX_PSUBSWirr",
386 "MMX_PSUBUSBirr",
387 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000388
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000389def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000390 let Latency = 1;
391 let NumMicroOps = 1;
392 let ResourceCycles = [1];
393}
Craig Topperfc179c62018-03-22 04:23:41 +0000394def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
395 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000396 "MMX_MOVD64rr",
397 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000398 "UCOM_FPr",
399 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000400 "(V?)MOV64toPQIrr",
Simon Pilgrimfc0c26f2018-05-01 11:05:42 +0000401 "(V?)MOVDI2PDIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000402
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000403def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000404 let Latency = 1;
405 let NumMicroOps = 1;
406 let ResourceCycles = [1];
407}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000408def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000409
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000410def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000411 let Latency = 1;
412 let NumMicroOps = 1;
413 let ResourceCycles = [1];
414}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000415def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
416 "(V?)PABSD(Y?)rr",
417 "(V?)PABSW(Y?)rr",
418 "(V?)PADDSB(Y?)rr",
419 "(V?)PADDSW(Y?)rr",
420 "(V?)PADDUSB(Y?)rr",
421 "(V?)PADDUSW(Y?)rr",
422 "(V?)PAVGB(Y?)rr",
423 "(V?)PAVGW(Y?)rr",
424 "(V?)PCMPEQB(Y?)rr",
425 "(V?)PCMPEQD(Y?)rr",
426 "(V?)PCMPEQQ(Y?)rr",
427 "(V?)PCMPEQW(Y?)rr",
428 "(V?)PCMPGTB(Y?)rr",
429 "(V?)PCMPGTD(Y?)rr",
430 "(V?)PCMPGTW(Y?)rr",
431 "(V?)PMAXSB(Y?)rr",
432 "(V?)PMAXSD(Y?)rr",
433 "(V?)PMAXSW(Y?)rr",
434 "(V?)PMAXUB(Y?)rr",
435 "(V?)PMAXUD(Y?)rr",
436 "(V?)PMAXUW(Y?)rr",
437 "(V?)PMINSB(Y?)rr",
438 "(V?)PMINSD(Y?)rr",
439 "(V?)PMINSW(Y?)rr",
440 "(V?)PMINUB(Y?)rr",
441 "(V?)PMINUD(Y?)rr",
442 "(V?)PMINUW(Y?)rr",
443 "(V?)PSIGNB(Y?)rr",
444 "(V?)PSIGND(Y?)rr",
445 "(V?)PSIGNW(Y?)rr",
446 "(V?)PSLLD(Y?)ri",
447 "(V?)PSLLQ(Y?)ri",
448 "VPSLLVD(Y?)rr",
449 "VPSLLVQ(Y?)rr",
450 "(V?)PSLLW(Y?)ri",
451 "(V?)PSRAD(Y?)ri",
452 "VPSRAVD(Y?)rr",
453 "(V?)PSRAW(Y?)ri",
454 "(V?)PSRLD(Y?)ri",
455 "(V?)PSRLQ(Y?)ri",
456 "VPSRLVD(Y?)rr",
457 "VPSRLVQ(Y?)rr",
458 "(V?)PSRLW(Y?)ri",
459 "(V?)PSUBSB(Y?)rr",
460 "(V?)PSUBSW(Y?)rr",
461 "(V?)PSUBUSB(Y?)rr",
462 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000463
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000464def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000465 let Latency = 1;
466 let NumMicroOps = 1;
467 let ResourceCycles = [1];
468}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000469def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
470def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000471 "MMX_PABS(B|D|W)rr",
472 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000473 "MMX_PANDNirr",
474 "MMX_PANDirr",
475 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000476 "MMX_PSIGN(B|D|W)rr",
477 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000478 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000479
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000480def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000481 let Latency = 1;
482 let NumMicroOps = 1;
483 let ResourceCycles = [1];
484}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000485def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000486def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
487 "ADC(16|32|64)i",
488 "ADC(8|16|32|64)rr",
489 "ADCX(32|64)rr",
490 "ADOX(32|64)rr",
491 "BT(16|32|64)ri8",
492 "BT(16|32|64)rr",
493 "BTC(16|32|64)ri8",
494 "BTC(16|32|64)rr",
495 "BTR(16|32|64)ri8",
496 "BTR(16|32|64)rr",
497 "BTS(16|32|64)ri8",
498 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000499 "SBB(16|32|64)ri",
500 "SBB(16|32|64)i",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000501 "SBB(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000502
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000503def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
504 let Latency = 1;
505 let NumMicroOps = 1;
506 let ResourceCycles = [1];
507}
Craig Topperfc179c62018-03-22 04:23:41 +0000508def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
509 "BLSI(32|64)rr",
510 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000511 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000512
513def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
514 let Latency = 1;
515 let NumMicroOps = 1;
516 let ResourceCycles = [1];
517}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000518def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000519 "(V?)PADDD(Y?)rr",
520 "(V?)PADDQ(Y?)rr",
521 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000522 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000523 "(V?)PSUBB(Y?)rr",
524 "(V?)PSUBD(Y?)rr",
525 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000526 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000527
528def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
529 let Latency = 1;
530 let NumMicroOps = 1;
531 let ResourceCycles = [1];
532}
Craig Topperfbe31322018-04-05 21:56:19 +0000533def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000534def: InstRW<[SKLWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000535def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000536 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000537 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000538 "SGDT64m",
539 "SIDT64m",
Craig Topperfc179c62018-03-22 04:23:41 +0000540 "SMSW16m",
541 "STC",
542 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000543 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000544
545def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000546 let Latency = 1;
547 let NumMicroOps = 2;
548 let ResourceCycles = [1,1];
549}
Craig Topperfc179c62018-03-22 04:23:41 +0000550def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
551 "MMX_MOVD64from64rm",
552 "MMX_MOVD64mr",
553 "MMX_MOVNTQmr",
554 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000555 "MOVNTI_64mr",
556 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000557 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000558 "VEXTRACTF128mr",
559 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000560 "(V?)MOVAPDYmr",
561 "(V?)MOVAPS(Y?)mr",
562 "(V?)MOVDQA(Y?)mr",
563 "(V?)MOVDQU(Y?)mr",
564 "(V?)MOVHPDmr",
565 "(V?)MOVHPSmr",
566 "(V?)MOVLPDmr",
567 "(V?)MOVLPSmr",
568 "(V?)MOVNTDQ(Y?)mr",
569 "(V?)MOVNTPD(Y?)mr",
570 "(V?)MOVNTPS(Y?)mr",
571 "(V?)MOVPDI2DImr",
572 "(V?)MOVPQI2QImr",
573 "(V?)MOVPQIto64mr",
574 "(V?)MOVSDmr",
575 "(V?)MOVSSmr",
576 "(V?)MOVUPD(Y?)mr",
577 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000578 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000579
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000580def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000581 let Latency = 2;
582 let NumMicroOps = 1;
583 let ResourceCycles = [1];
584}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000585def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000586 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000587 "(V?)MOVPDI2DIrr",
588 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000589 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000590 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000591
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000592def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000593 let Latency = 2;
594 let NumMicroOps = 2;
595 let ResourceCycles = [2];
596}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000597def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000598
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000599def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000600 let Latency = 2;
601 let NumMicroOps = 2;
602 let ResourceCycles = [2];
603}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000604def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
605def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000606
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000607def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000608 let Latency = 2;
609 let NumMicroOps = 2;
610 let ResourceCycles = [2];
611}
Craig Topperfc179c62018-03-22 04:23:41 +0000612def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
613 "ROL(8|16|32|64)r1",
614 "ROL(8|16|32|64)ri",
615 "ROR(8|16|32|64)r1",
616 "ROR(8|16|32|64)ri",
617 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000618
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000619def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000620 let Latency = 2;
621 let NumMicroOps = 2;
622 let ResourceCycles = [2];
623}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000624def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
625 WAIT,
626 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000627
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000628def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000629 let Latency = 2;
630 let NumMicroOps = 2;
631 let ResourceCycles = [1,1];
632}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000633def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
634 "VMASKMOVPS(Y?)mr",
635 "VPMASKMOVD(Y?)mr",
636 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000637
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000638def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000639 let Latency = 2;
640 let NumMicroOps = 2;
641 let ResourceCycles = [1,1];
642}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000643def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
644 "(V?)PSLLQrr",
645 "(V?)PSLLWrr",
646 "(V?)PSRADrr",
647 "(V?)PSRAWrr",
648 "(V?)PSRLDrr",
649 "(V?)PSRLQrr",
650 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000651
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000652def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000653 let Latency = 2;
654 let NumMicroOps = 2;
655 let ResourceCycles = [1,1];
656}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000657def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000658
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000659def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000660 let Latency = 2;
661 let NumMicroOps = 2;
662 let ResourceCycles = [1,1];
663}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000664def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000665
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000666def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000667 let Latency = 2;
668 let NumMicroOps = 2;
669 let ResourceCycles = [1,1];
670}
Craig Topper498875f2018-04-04 17:54:19 +0000671def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
672
673def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
674 let Latency = 1;
675 let NumMicroOps = 1;
676 let ResourceCycles = [1];
677}
678def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000679
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000680def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000681 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000682 let NumMicroOps = 2;
683 let ResourceCycles = [1,1];
684}
Craig Topper2d451e72018-03-18 08:38:06 +0000685def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000686def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000687def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
688 "ADC8ri",
689 "SBB8i8",
690 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000691
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000692def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
693 let Latency = 2;
694 let NumMicroOps = 3;
695 let ResourceCycles = [1,1,1];
696}
697def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
698
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000699def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
700 let Latency = 2;
701 let NumMicroOps = 3;
702 let ResourceCycles = [1,1,1];
703}
704def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
705
706def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
707 let Latency = 2;
708 let NumMicroOps = 3;
709 let ResourceCycles = [1,1,1];
710}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000711def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
712 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000713def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000714 "PUSH64i8")>;
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}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000738def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
739 "(ADD|SUB|SUBR)_FST0r",
740 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000741 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000742 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000743 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000744 "VPMOVSXBDYrr",
745 "VPMOVSXBQYrr",
746 "VPMOVSXBWYrr",
747 "VPMOVSXDQYrr",
748 "VPMOVSXWDYrr",
749 "VPMOVSXWQYrr",
750 "VPMOVZXBDYrr",
751 "VPMOVZXBQYrr",
752 "VPMOVZXBWYrr",
753 "VPMOVZXDQYrr",
754 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000755 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000756
757def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
758 let Latency = 3;
759 let NumMicroOps = 2;
760 let ResourceCycles = [1,1];
761}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000762def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000763
764def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
765 let Latency = 3;
766 let NumMicroOps = 2;
767 let ResourceCycles = [1,1];
768}
769def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
770
771def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
772 let Latency = 3;
773 let NumMicroOps = 3;
774 let ResourceCycles = [3];
775}
Craig Topperfc179c62018-03-22 04:23:41 +0000776def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
777 "ROR(8|16|32|64)rCL",
778 "SAR(8|16|32|64)rCL",
779 "SHL(8|16|32|64)rCL",
780 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000781
782def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000783 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000784 let NumMicroOps = 3;
785 let ResourceCycles = [3];
786}
Craig Topperb5f26592018-04-19 18:00:17 +0000787def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
788 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
789 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000790
791def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
792 let Latency = 3;
793 let NumMicroOps = 3;
794 let ResourceCycles = [1,2];
795}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000796def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000797
798def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
799 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000800 let NumMicroOps = 3;
801 let ResourceCycles = [2,1];
802}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000803def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
804 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000805
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000806def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
807 let Latency = 3;
808 let NumMicroOps = 3;
809 let ResourceCycles = [2,1];
810}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000811def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000812
813def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
814 let Latency = 3;
815 let NumMicroOps = 3;
816 let ResourceCycles = [2,1];
817}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000818def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
819 "(V?)PHADDW(Y?)rr",
820 "(V?)PHSUBD(Y?)rr",
821 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000822
823def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
824 let Latency = 3;
825 let NumMicroOps = 3;
826 let ResourceCycles = [2,1];
827}
Craig Topperfc179c62018-03-22 04:23:41 +0000828def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
829 "MMX_PACKSSWBirr",
830 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000831
832def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
833 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000834 let NumMicroOps = 3;
835 let ResourceCycles = [1,2];
836}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000837def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000838
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000839def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
840 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000841 let NumMicroOps = 3;
842 let ResourceCycles = [1,2];
843}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000844def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000845
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000846def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
847 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000848 let NumMicroOps = 3;
849 let ResourceCycles = [1,2];
850}
Craig Topperfc179c62018-03-22 04:23:41 +0000851def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
852 "RCL(8|16|32|64)ri",
853 "RCR(8|16|32|64)r1",
854 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000855
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000856def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
857 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000858 let NumMicroOps = 3;
859 let ResourceCycles = [1,1,1];
860}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000861def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000862
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000863def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
864 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000865 let NumMicroOps = 4;
866 let ResourceCycles = [1,1,2];
867}
Craig Topperf4cd9082018-01-19 05:47:32 +0000868def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000869
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000870def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
871 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000872 let NumMicroOps = 4;
873 let ResourceCycles = [1,1,1,1];
874}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000875def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000876
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000877def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
878 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000879 let NumMicroOps = 4;
880 let ResourceCycles = [1,1,1,1];
881}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000882def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000883
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000884def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000885 let Latency = 4;
886 let NumMicroOps = 1;
887 let ResourceCycles = [1];
888}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000889def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000890 "MMX_PMADDWDirr",
891 "MMX_PMULHRSWrr",
892 "MMX_PMULHUWirr",
893 "MMX_PMULHWirr",
894 "MMX_PMULLWirr",
895 "MMX_PMULUDQirr",
896 "MUL_FPrST0",
897 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000898 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000899
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000900def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000901 let Latency = 4;
902 let NumMicroOps = 1;
903 let ResourceCycles = [1];
904}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000905def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
906 "(V?)ADDPS(Y?)rr",
907 "(V?)ADDSDrr",
908 "(V?)ADDSSrr",
909 "(V?)ADDSUBPD(Y?)rr",
910 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000911 "(V?)CVTDQ2PS(Y?)rr",
912 "(V?)CVTPS2DQ(Y?)rr",
913 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000914 "(V?)MULPD(Y?)rr",
915 "(V?)MULPS(Y?)rr",
916 "(V?)MULSDrr",
917 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000918 "(V?)PMADDUBSW(Y?)rr",
919 "(V?)PMADDWD(Y?)rr",
920 "(V?)PMULDQ(Y?)rr",
921 "(V?)PMULHRSW(Y?)rr",
922 "(V?)PMULHUW(Y?)rr",
923 "(V?)PMULHW(Y?)rr",
924 "(V?)PMULLW(Y?)rr",
925 "(V?)PMULUDQ(Y?)rr",
926 "(V?)SUBPD(Y?)rr",
927 "(V?)SUBPS(Y?)rr",
928 "(V?)SUBSDrr",
929 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000930
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000931def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000932 let Latency = 4;
933 let NumMicroOps = 2;
934 let ResourceCycles = [1,1];
935}
Craig Topperf846e2d2018-04-19 05:34:05 +0000936def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000937
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000938def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
939 let Latency = 4;
940 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000941 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000942}
Craig Topperfc179c62018-03-22 04:23:41 +0000943def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000944
945def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000946 let Latency = 4;
947 let NumMicroOps = 2;
948 let ResourceCycles = [1,1];
949}
Craig Topperfc179c62018-03-22 04:23:41 +0000950def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
951 "VPSLLQYrr",
952 "VPSLLWYrr",
953 "VPSRADYrr",
954 "VPSRAWYrr",
955 "VPSRLDYrr",
956 "VPSRLQYrr",
957 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000958
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000959def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000960 let Latency = 4;
961 let NumMicroOps = 3;
962 let ResourceCycles = [1,1,1];
963}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000964def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
965 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000966
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000967def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000968 let Latency = 4;
969 let NumMicroOps = 4;
970 let ResourceCycles = [4];
971}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000972def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000973
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000974def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000975 let Latency = 4;
976 let NumMicroOps = 4;
977 let ResourceCycles = [1,3];
978}
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000979def: InstRW<[SKLWriteResGroup55], (instrs PAUSE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000980
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000981def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000982 let Latency = 4;
983 let NumMicroOps = 4;
984 let ResourceCycles = [1,3];
985}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000986def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000987
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000988def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000989 let Latency = 4;
990 let NumMicroOps = 4;
991 let ResourceCycles = [1,1,2];
992}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000993def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000994
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000995def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
996 let Latency = 5;
997 let NumMicroOps = 1;
998 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000999}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001000def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001001 "MOVSX(16|32|64)rm32",
1002 "MOVSX(16|32|64)rm8",
1003 "MOVZX(16|32|64)rm16",
1004 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001005 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001006
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001007def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008 let Latency = 5;
1009 let NumMicroOps = 2;
1010 let ResourceCycles = [1,1];
1011}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001012def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1013 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001014
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001015def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001016 let Latency = 5;
1017 let NumMicroOps = 2;
1018 let ResourceCycles = [1,1];
1019}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001020def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001021 "MMX_CVTPS2PIirr",
1022 "MMX_CVTTPD2PIirr",
1023 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001024 "(V?)CVTPD2DQrr",
1025 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001026 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001027 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001028 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001029 "(V?)CVTSD2SSrr",
1030 "(V?)CVTSI642SDrr",
1031 "(V?)CVTSI2SDrr",
1032 "(V?)CVTSI2SSrr",
1033 "(V?)CVTSS2SDrr",
1034 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001035
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001036def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001037 let Latency = 5;
1038 let NumMicroOps = 3;
1039 let ResourceCycles = [1,1,1];
1040}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001041def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001042
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001043def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001044 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001045 let NumMicroOps = 3;
1046 let ResourceCycles = [1,1,1];
1047}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001048def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001049
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001050def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001051 let Latency = 5;
1052 let NumMicroOps = 5;
1053 let ResourceCycles = [1,4];
1054}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001055def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001056
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001057def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001058 let Latency = 5;
1059 let NumMicroOps = 5;
1060 let ResourceCycles = [2,3];
1061}
Craig Topper13a16502018-03-19 00:56:09 +00001062def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001063
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001064def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001066 let NumMicroOps = 6;
1067 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001068}
Craig Topperfc179c62018-03-22 04:23:41 +00001069def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1070 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001071
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001072def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1073 let Latency = 6;
1074 let NumMicroOps = 1;
1075 let ResourceCycles = [1];
1076}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001077def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001078 "(V?)MOVSHDUPrm",
1079 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001080 "VPBROADCASTDrm",
1081 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001082
1083def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001084 let Latency = 6;
1085 let NumMicroOps = 2;
1086 let ResourceCycles = [2];
1087}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001088def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001089
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001090def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001091 let Latency = 6;
1092 let NumMicroOps = 2;
1093 let ResourceCycles = [1,1];
1094}
Craig Topperfc179c62018-03-22 04:23:41 +00001095def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1096 "MMX_PADDSWirm",
1097 "MMX_PADDUSBirm",
1098 "MMX_PADDUSWirm",
1099 "MMX_PAVGBirm",
1100 "MMX_PAVGWirm",
1101 "MMX_PCMPEQBirm",
1102 "MMX_PCMPEQDirm",
1103 "MMX_PCMPEQWirm",
1104 "MMX_PCMPGTBirm",
1105 "MMX_PCMPGTDirm",
1106 "MMX_PCMPGTWirm",
1107 "MMX_PMAXSWirm",
1108 "MMX_PMAXUBirm",
1109 "MMX_PMINSWirm",
1110 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001111 "MMX_PSUBSBirm",
1112 "MMX_PSUBSWirm",
1113 "MMX_PSUBUSBirm",
1114 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001115
Craig Topper58afb4e2018-03-22 21:10:07 +00001116def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001117 let Latency = 6;
1118 let NumMicroOps = 2;
1119 let ResourceCycles = [1,1];
1120}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001121def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1122 "(V?)CVTSD2SIrr",
1123 "(V?)CVTSS2SI64rr",
1124 "(V?)CVTSS2SIrr",
1125 "(V?)CVTTSD2SI64rr",
1126 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001127
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001128def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1129 let Latency = 6;
1130 let NumMicroOps = 2;
1131 let ResourceCycles = [1,1];
1132}
Craig Topperfc179c62018-03-22 04:23:41 +00001133def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1134 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001135
1136def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1137 let Latency = 6;
1138 let NumMicroOps = 2;
1139 let ResourceCycles = [1,1];
1140}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001141def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1142 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001143 "MMX_PANDNirm",
1144 "MMX_PANDirm",
1145 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001146 "MMX_PSIGN(B|D|W)rm",
1147 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001148 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001149
1150def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1151 let Latency = 6;
1152 let NumMicroOps = 2;
1153 let ResourceCycles = [1,1];
1154}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001155def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001156def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1157 ADCX32rm, ADCX64rm,
1158 ADOX32rm, ADOX64rm,
1159 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001160
1161def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1162 let Latency = 6;
1163 let NumMicroOps = 2;
1164 let ResourceCycles = [1,1];
1165}
Craig Topperfc179c62018-03-22 04:23:41 +00001166def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1167 "BLSI(32|64)rm",
1168 "BLSMSK(32|64)rm",
1169 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001170 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001171
1172def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1173 let Latency = 6;
1174 let NumMicroOps = 2;
1175 let ResourceCycles = [1,1];
1176}
Craig Topper2d451e72018-03-18 08:38:06 +00001177def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001178def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001179
Craig Topper58afb4e2018-03-22 21:10:07 +00001180def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001181 let Latency = 6;
1182 let NumMicroOps = 3;
1183 let ResourceCycles = [2,1];
1184}
Craig Topperfc179c62018-03-22 04:23:41 +00001185def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001186
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001187def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001188 let Latency = 6;
1189 let NumMicroOps = 4;
1190 let ResourceCycles = [1,2,1];
1191}
Craig Topperfc179c62018-03-22 04:23:41 +00001192def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1193 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001194
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001195def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001196 let Latency = 6;
1197 let NumMicroOps = 4;
1198 let ResourceCycles = [1,1,1,1];
1199}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001200def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001201
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001202def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1203 let Latency = 6;
1204 let NumMicroOps = 4;
1205 let ResourceCycles = [1,1,1,1];
1206}
Craig Topperfc179c62018-03-22 04:23:41 +00001207def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1208 "BTR(16|32|64)mi8",
1209 "BTS(16|32|64)mi8",
1210 "SAR(8|16|32|64)m1",
1211 "SAR(8|16|32|64)mi",
1212 "SHL(8|16|32|64)m1",
1213 "SHL(8|16|32|64)mi",
1214 "SHR(8|16|32|64)m1",
1215 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001216
1217def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1218 let Latency = 6;
1219 let NumMicroOps = 4;
1220 let ResourceCycles = [1,1,1,1];
1221}
Craig Topperf0d04262018-04-06 16:16:48 +00001222def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1223 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001224
1225def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001226 let Latency = 6;
1227 let NumMicroOps = 6;
1228 let ResourceCycles = [1,5];
1229}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001230def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001231
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001232def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1233 let Latency = 7;
1234 let NumMicroOps = 1;
1235 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001236}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001237def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001238 "VBROADCASTF128",
1239 "VBROADCASTI128",
1240 "VBROADCASTSDYrm",
1241 "VBROADCASTSSYrm",
1242 "VLDDQUYrm",
1243 "VMOVAPDYrm",
1244 "VMOVAPSYrm",
1245 "VMOVDDUPYrm",
1246 "VMOVDQAYrm",
1247 "VMOVDQUYrm",
1248 "VMOVNTDQAYrm",
1249 "VMOVSHDUPYrm",
1250 "VMOVSLDUPYrm",
1251 "VMOVUPDYrm",
1252 "VMOVUPSYrm",
1253 "VPBROADCASTDYrm",
1254 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001255
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001256def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001257 let Latency = 7;
1258 let NumMicroOps = 2;
1259 let ResourceCycles = [1,1];
1260}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001261def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001262
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001263def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1264 let Latency = 7;
1265 let NumMicroOps = 2;
1266 let ResourceCycles = [1,1];
1267}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001268def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1269 "(V?)PACKSSDWrm",
1270 "(V?)PACKSSWBrm",
1271 "(V?)PACKUSDWrm",
1272 "(V?)PACKUSWBrm",
1273 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001274 "VPBROADCASTBrm",
1275 "VPBROADCASTWrm",
1276 "VPERMILPDmi",
1277 "VPERMILPDrm",
1278 "VPERMILPSmi",
1279 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001280 "(V?)PSHUFBrm",
1281 "(V?)PSHUFDmi",
1282 "(V?)PSHUFHWmi",
1283 "(V?)PSHUFLWmi",
1284 "(V?)PUNPCKHBWrm",
1285 "(V?)PUNPCKHDQrm",
1286 "(V?)PUNPCKHQDQrm",
1287 "(V?)PUNPCKHWDrm",
1288 "(V?)PUNPCKLBWrm",
1289 "(V?)PUNPCKLDQrm",
1290 "(V?)PUNPCKLQDQrm",
1291 "(V?)PUNPCKLWDrm",
1292 "(V?)SHUFPDrmi",
1293 "(V?)SHUFPSrmi",
1294 "(V?)UNPCKHPDrm",
1295 "(V?)UNPCKHPSrm",
1296 "(V?)UNPCKLPDrm",
1297 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001298
Craig Topper58afb4e2018-03-22 21:10:07 +00001299def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001300 let Latency = 7;
1301 let NumMicroOps = 2;
1302 let ResourceCycles = [1,1];
1303}
Craig Topperfc179c62018-03-22 04:23:41 +00001304def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1305 "VCVTPD2PSYrr",
1306 "VCVTPH2PSYrr",
1307 "VCVTPS2PDYrr",
1308 "VCVTPS2PHYrr",
1309 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001310
1311def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1312 let Latency = 7;
1313 let NumMicroOps = 2;
1314 let ResourceCycles = [1,1];
1315}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001316def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1317 "(V?)PABSDrm",
1318 "(V?)PABSWrm",
1319 "(V?)PADDSBrm",
1320 "(V?)PADDSWrm",
1321 "(V?)PADDUSBrm",
1322 "(V?)PADDUSWrm",
1323 "(V?)PAVGBrm",
1324 "(V?)PAVGWrm",
1325 "(V?)PCMPEQBrm",
1326 "(V?)PCMPEQDrm",
1327 "(V?)PCMPEQQrm",
1328 "(V?)PCMPEQWrm",
1329 "(V?)PCMPGTBrm",
1330 "(V?)PCMPGTDrm",
1331 "(V?)PCMPGTWrm",
1332 "(V?)PMAXSBrm",
1333 "(V?)PMAXSDrm",
1334 "(V?)PMAXSWrm",
1335 "(V?)PMAXUBrm",
1336 "(V?)PMAXUDrm",
1337 "(V?)PMAXUWrm",
1338 "(V?)PMINSBrm",
1339 "(V?)PMINSDrm",
1340 "(V?)PMINSWrm",
1341 "(V?)PMINUBrm",
1342 "(V?)PMINUDrm",
1343 "(V?)PMINUWrm",
1344 "(V?)PSIGNBrm",
1345 "(V?)PSIGNDrm",
1346 "(V?)PSIGNWrm",
1347 "(V?)PSLLDrm",
1348 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001349 "VPSLLVDrm",
1350 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001351 "(V?)PSLLWrm",
1352 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001353 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001354 "(V?)PSRAWrm",
1355 "(V?)PSRLDrm",
1356 "(V?)PSRLQrm",
1357 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001358 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001359 "(V?)PSRLWrm",
1360 "(V?)PSUBSBrm",
1361 "(V?)PSUBSWrm",
1362 "(V?)PSUBUSBrm",
1363 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001364
1365def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1366 let Latency = 7;
1367 let NumMicroOps = 2;
1368 let ResourceCycles = [1,1];
1369}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001370def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001371 "(V?)INSERTI128rm",
1372 "(V?)MASKMOVPDrm",
1373 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001374 "(V?)PADDBrm",
1375 "(V?)PADDDrm",
1376 "(V?)PADDQrm",
1377 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001378 "(V?)PBLENDDrmi",
1379 "(V?)PMASKMOVDrm",
1380 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001381 "(V?)PSUBBrm",
1382 "(V?)PSUBDrm",
1383 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001384 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001385
1386def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1387 let Latency = 7;
1388 let NumMicroOps = 3;
1389 let ResourceCycles = [2,1];
1390}
Craig Topperfc179c62018-03-22 04:23:41 +00001391def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1392 "MMX_PACKSSWBirm",
1393 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001394
1395def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1396 let Latency = 7;
1397 let NumMicroOps = 3;
1398 let ResourceCycles = [1,2];
1399}
Craig Topperf4cd9082018-01-19 05:47:32 +00001400def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001401
1402def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1403 let Latency = 7;
1404 let NumMicroOps = 3;
1405 let ResourceCycles = [1,2];
1406}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001407def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1408 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001409
Craig Topper58afb4e2018-03-22 21:10:07 +00001410def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001411 let Latency = 7;
1412 let NumMicroOps = 3;
1413 let ResourceCycles = [1,1,1];
1414}
Craig Topperfc179c62018-03-22 04:23:41 +00001415def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1416 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001417
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001418def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001419 let Latency = 7;
1420 let NumMicroOps = 3;
1421 let ResourceCycles = [1,1,1];
1422}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001423def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001424
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001425def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001426 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001427 let NumMicroOps = 3;
1428 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001429}
Craig Topperfc179c62018-03-22 04:23:41 +00001430def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1431 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001432
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001433def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1434 let Latency = 7;
1435 let NumMicroOps = 5;
1436 let ResourceCycles = [1,1,1,2];
1437}
Craig Topperfc179c62018-03-22 04:23:41 +00001438def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1439 "ROL(8|16|32|64)mi",
1440 "ROR(8|16|32|64)m1",
1441 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001442
1443def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1444 let Latency = 7;
1445 let NumMicroOps = 5;
1446 let ResourceCycles = [1,1,1,2];
1447}
Craig Topper13a16502018-03-19 00:56:09 +00001448def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001449
1450def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1451 let Latency = 7;
1452 let NumMicroOps = 5;
1453 let ResourceCycles = [1,1,1,1,1];
1454}
Craig Topperfc179c62018-03-22 04:23:41 +00001455def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1456 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001457
1458def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001459 let Latency = 7;
1460 let NumMicroOps = 7;
1461 let ResourceCycles = [1,3,1,2];
1462}
Craig Topper2d451e72018-03-18 08:38:06 +00001463def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001464
Craig Topper58afb4e2018-03-22 21:10:07 +00001465def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001466 let Latency = 8;
1467 let NumMicroOps = 2;
1468 let ResourceCycles = [2];
1469}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001470def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1471 "(V?)ROUNDPS(Y?)r",
1472 "(V?)ROUNDSDr",
1473 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001474
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001475def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001476 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001477 let NumMicroOps = 2;
1478 let ResourceCycles = [1,1];
1479}
Craig Topperfc179c62018-03-22 04:23:41 +00001480def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1481 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001482
1483def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1484 let Latency = 8;
1485 let NumMicroOps = 2;
1486 let ResourceCycles = [1,1];
1487}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001488def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1489 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001490
1491def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001492 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001493 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001494 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001495}
Craig Topperf846e2d2018-04-19 05:34:05 +00001496def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001497
Craig Topperf846e2d2018-04-19 05:34:05 +00001498def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1499 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001500 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001501 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001502}
Craig Topperfc179c62018-03-22 04:23:41 +00001503def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001504
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001505def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1506 let Latency = 8;
1507 let NumMicroOps = 2;
1508 let ResourceCycles = [1,1];
1509}
Craig Topperfc179c62018-03-22 04:23:41 +00001510def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1511 "FCOM64m",
1512 "FCOMP32m",
1513 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001514 "VPACKSSDWYrm",
1515 "VPACKSSWBYrm",
1516 "VPACKUSDWYrm",
1517 "VPACKUSWBYrm",
1518 "VPALIGNRYrmi",
1519 "VPBLENDWYrmi",
1520 "VPBROADCASTBYrm",
1521 "VPBROADCASTWYrm",
1522 "VPERMILPDYmi",
1523 "VPERMILPDYrm",
1524 "VPERMILPSYmi",
1525 "VPERMILPSYrm",
1526 "VPMOVSXBDYrm",
1527 "VPMOVSXBQYrm",
1528 "VPMOVSXWQYrm",
1529 "VPSHUFBYrm",
1530 "VPSHUFDYmi",
1531 "VPSHUFHWYmi",
1532 "VPSHUFLWYmi",
1533 "VPUNPCKHBWYrm",
1534 "VPUNPCKHDQYrm",
1535 "VPUNPCKHQDQYrm",
1536 "VPUNPCKHWDYrm",
1537 "VPUNPCKLBWYrm",
1538 "VPUNPCKLDQYrm",
1539 "VPUNPCKLQDQYrm",
1540 "VPUNPCKLWDYrm",
1541 "VSHUFPDYrmi",
1542 "VSHUFPSYrmi",
1543 "VUNPCKHPDYrm",
1544 "VUNPCKHPSYrm",
1545 "VUNPCKLPDYrm",
1546 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001547
1548def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1549 let Latency = 8;
1550 let NumMicroOps = 2;
1551 let ResourceCycles = [1,1];
1552}
Craig Topperfc179c62018-03-22 04:23:41 +00001553def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1554 "VPABSDYrm",
1555 "VPABSWYrm",
1556 "VPADDSBYrm",
1557 "VPADDSWYrm",
1558 "VPADDUSBYrm",
1559 "VPADDUSWYrm",
1560 "VPAVGBYrm",
1561 "VPAVGWYrm",
1562 "VPCMPEQBYrm",
1563 "VPCMPEQDYrm",
1564 "VPCMPEQQYrm",
1565 "VPCMPEQWYrm",
1566 "VPCMPGTBYrm",
1567 "VPCMPGTDYrm",
1568 "VPCMPGTWYrm",
1569 "VPMAXSBYrm",
1570 "VPMAXSDYrm",
1571 "VPMAXSWYrm",
1572 "VPMAXUBYrm",
1573 "VPMAXUDYrm",
1574 "VPMAXUWYrm",
1575 "VPMINSBYrm",
1576 "VPMINSDYrm",
1577 "VPMINSWYrm",
1578 "VPMINUBYrm",
1579 "VPMINUDYrm",
1580 "VPMINUWYrm",
1581 "VPSIGNBYrm",
1582 "VPSIGNDYrm",
1583 "VPSIGNWYrm",
1584 "VPSLLDYrm",
1585 "VPSLLQYrm",
1586 "VPSLLVDYrm",
1587 "VPSLLVQYrm",
1588 "VPSLLWYrm",
1589 "VPSRADYrm",
1590 "VPSRAVDYrm",
1591 "VPSRAWYrm",
1592 "VPSRLDYrm",
1593 "VPSRLQYrm",
1594 "VPSRLVDYrm",
1595 "VPSRLVQYrm",
1596 "VPSRLWYrm",
1597 "VPSUBSBYrm",
1598 "VPSUBSWYrm",
1599 "VPSUBUSBYrm",
1600 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001601
1602def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1603 let Latency = 8;
1604 let NumMicroOps = 2;
1605 let ResourceCycles = [1,1];
1606}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001607def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001608 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001609 "VPADDBYrm",
1610 "VPADDDYrm",
1611 "VPADDQYrm",
1612 "VPADDWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001613 "VPBLENDDYrmi",
1614 "VPMASKMOVDYrm",
1615 "VPMASKMOVQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001616 "VPSUBBYrm",
1617 "VPSUBDYrm",
1618 "VPSUBQYrm",
Simon Pilgrim57f2b182018-05-01 12:39:17 +00001619 "VPSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001620
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001621def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1622 let Latency = 8;
1623 let NumMicroOps = 4;
1624 let ResourceCycles = [1,2,1];
1625}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001626def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001627
1628def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1629 let Latency = 8;
1630 let NumMicroOps = 4;
1631 let ResourceCycles = [2,1,1];
1632}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001633def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001634
Craig Topper58afb4e2018-03-22 21:10:07 +00001635def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001636 let Latency = 8;
1637 let NumMicroOps = 4;
1638 let ResourceCycles = [1,1,1,1];
1639}
1640def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1641
1642def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1643 let Latency = 8;
1644 let NumMicroOps = 5;
1645 let ResourceCycles = [1,1,3];
1646}
Craig Topper13a16502018-03-19 00:56:09 +00001647def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001648
1649def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1650 let Latency = 8;
1651 let NumMicroOps = 5;
1652 let ResourceCycles = [1,1,1,2];
1653}
Craig Topperfc179c62018-03-22 04:23:41 +00001654def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1655 "RCL(8|16|32|64)mi",
1656 "RCR(8|16|32|64)m1",
1657 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001658
1659def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1660 let Latency = 8;
1661 let NumMicroOps = 6;
1662 let ResourceCycles = [1,1,1,3];
1663}
Craig Topperfc179c62018-03-22 04:23:41 +00001664def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1665 "SAR(8|16|32|64)mCL",
1666 "SHL(8|16|32|64)mCL",
1667 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001668
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001669def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1670 let Latency = 8;
1671 let NumMicroOps = 6;
1672 let ResourceCycles = [1,1,1,2,1];
1673}
Craig Topper9f834812018-04-01 21:54:24 +00001674def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001675 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001676 "SBB(8|16|32|64)mi")>;
1677def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1678 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001679
1680def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1681 let Latency = 9;
1682 let NumMicroOps = 2;
1683 let ResourceCycles = [1,1];
1684}
Craig Topperfc179c62018-03-22 04:23:41 +00001685def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1686 "MMX_PMADDUBSWrm",
1687 "MMX_PMADDWDirm",
1688 "MMX_PMULHRSWrm",
1689 "MMX_PMULHUWirm",
1690 "MMX_PMULHWirm",
1691 "MMX_PMULLWirm",
1692 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001693 "VTESTPDYrm",
1694 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001695
1696def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1697 let Latency = 9;
1698 let NumMicroOps = 2;
1699 let ResourceCycles = [1,1];
1700}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001701def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001702 "VPMOVSXBWYrm",
1703 "VPMOVSXDQYrm",
1704 "VPMOVSXWDYrm",
1705 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001706 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001707
1708def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1709 let Latency = 9;
1710 let NumMicroOps = 2;
1711 let ResourceCycles = [1,1];
1712}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001713def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1714 "(V?)ADDSSrm",
1715 "(V?)CMPSDrm",
1716 "(V?)CMPSSrm",
1717 "(V?)MAX(C?)SDrm",
1718 "(V?)MAX(C?)SSrm",
1719 "(V?)MIN(C?)SDrm",
1720 "(V?)MIN(C?)SSrm",
1721 "(V?)MULSDrm",
1722 "(V?)MULSSrm",
1723 "(V?)SUBSDrm",
1724 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001725
Craig Topper58afb4e2018-03-22 21:10:07 +00001726def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001727 let Latency = 9;
1728 let NumMicroOps = 2;
1729 let ResourceCycles = [1,1];
1730}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001731def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001732 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001733 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001734 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001735
Craig Topper58afb4e2018-03-22 21:10:07 +00001736def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001737 let Latency = 9;
1738 let NumMicroOps = 3;
1739 let ResourceCycles = [1,2];
1740}
Craig Topperfc179c62018-03-22 04:23:41 +00001741def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001742
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001743def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1744 let Latency = 9;
1745 let NumMicroOps = 3;
1746 let ResourceCycles = [1,1,1];
1747}
Craig Topperfc179c62018-03-22 04:23:41 +00001748def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001749
1750def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1751 let Latency = 9;
1752 let NumMicroOps = 3;
1753 let ResourceCycles = [1,1,1];
1754}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001755def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001756
1757def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001758 let Latency = 9;
1759 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001760 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001761}
Craig Topperfc179c62018-03-22 04:23:41 +00001762def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1763 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001764
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001765def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1766 let Latency = 9;
1767 let NumMicroOps = 4;
1768 let ResourceCycles = [2,1,1];
1769}
Craig Topperfc179c62018-03-22 04:23:41 +00001770def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1771 "(V?)PHADDWrm",
1772 "(V?)PHSUBDrm",
1773 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001774
1775def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1776 let Latency = 9;
1777 let NumMicroOps = 4;
1778 let ResourceCycles = [1,1,1,1];
1779}
Craig Topperfc179c62018-03-22 04:23:41 +00001780def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1781 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001782
1783def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1784 let Latency = 9;
1785 let NumMicroOps = 5;
1786 let ResourceCycles = [1,2,1,1];
1787}
Craig Topperfc179c62018-03-22 04:23:41 +00001788def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1789 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001790
1791def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1792 let Latency = 10;
1793 let NumMicroOps = 2;
1794 let ResourceCycles = [1,1];
1795}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001796def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001797 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001798
1799def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1800 let Latency = 10;
1801 let NumMicroOps = 2;
1802 let ResourceCycles = [1,1];
1803}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001804def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1805 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001806 "VPCMPGTQYrm",
1807 "VPERM2F128rm",
1808 "VPERM2I128rm",
1809 "VPERMDYrm",
1810 "VPERMPDYmi",
1811 "VPERMPSYrm",
1812 "VPERMQYmi",
1813 "VPMOVZXBDYrm",
1814 "VPMOVZXBQYrm",
1815 "VPMOVZXBWYrm",
1816 "VPMOVZXDQYrm",
1817 "VPMOVZXWQYrm",
1818 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001819
1820def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1821 let Latency = 10;
1822 let NumMicroOps = 2;
1823 let ResourceCycles = [1,1];
1824}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001825def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1826 "(V?)ADDPSrm",
1827 "(V?)ADDSUBPDrm",
1828 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001829 "(V?)CVTDQ2PSrm",
1830 "(V?)CVTPH2PSYrm",
1831 "(V?)CVTPS2DQrm",
1832 "(V?)CVTSS2SDrm",
1833 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001834 "(V?)MULPDrm",
1835 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001836 "(V?)PMADDUBSWrm",
1837 "(V?)PMADDWDrm",
1838 "(V?)PMULDQrm",
1839 "(V?)PMULHRSWrm",
1840 "(V?)PMULHUWrm",
1841 "(V?)PMULHWrm",
1842 "(V?)PMULLWrm",
1843 "(V?)PMULUDQrm",
1844 "(V?)SUBPDrm",
1845 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001846
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001847def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1848 let Latency = 10;
1849 let NumMicroOps = 3;
1850 let ResourceCycles = [1,1,1];
1851}
Craig Topperfc179c62018-03-22 04:23:41 +00001852def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1853 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001854
Craig Topper58afb4e2018-03-22 21:10:07 +00001855def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001856 let Latency = 10;
1857 let NumMicroOps = 3;
1858 let ResourceCycles = [1,1,1];
1859}
Craig Topperfc179c62018-03-22 04:23:41 +00001860def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001861
1862def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001863 let Latency = 10;
1864 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001865 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001866}
Craig Topperfc179c62018-03-22 04:23:41 +00001867def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1868 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001869
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001870def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1871 let Latency = 10;
1872 let NumMicroOps = 4;
1873 let ResourceCycles = [2,1,1];
1874}
Craig Topperfc179c62018-03-22 04:23:41 +00001875def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1876 "VPHADDWYrm",
1877 "VPHSUBDYrm",
1878 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001879
1880def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001881 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001882 let NumMicroOps = 4;
1883 let ResourceCycles = [1,1,1,1];
1884}
Craig Topperf846e2d2018-04-19 05:34:05 +00001885def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001886
1887def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1888 let Latency = 10;
1889 let NumMicroOps = 8;
1890 let ResourceCycles = [1,1,1,1,1,3];
1891}
Craig Topper13a16502018-03-19 00:56:09 +00001892def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001893
1894def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001895 let Latency = 10;
1896 let NumMicroOps = 10;
1897 let ResourceCycles = [9,1];
1898}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001899def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001900
Craig Topper8104f262018-04-02 05:33:28 +00001901def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001902 let Latency = 11;
1903 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001904 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001905}
Craig Topper8104f262018-04-02 05:33:28 +00001906def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001907 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001908
Craig Topper8104f262018-04-02 05:33:28 +00001909def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1910 let Latency = 11;
1911 let NumMicroOps = 1;
1912 let ResourceCycles = [1,5];
1913}
1914def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1915
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001916def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001917 let Latency = 11;
1918 let NumMicroOps = 2;
1919 let ResourceCycles = [1,1];
1920}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001921def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001922 "VRCPPSYm",
1923 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001924
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001925def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1926 let Latency = 11;
1927 let NumMicroOps = 2;
1928 let ResourceCycles = [1,1];
1929}
Craig Topperfc179c62018-03-22 04:23:41 +00001930def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1931 "VADDPSYrm",
1932 "VADDSUBPDYrm",
1933 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001934 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001935 "VCMPPSYrmi",
1936 "VCVTDQ2PSYrm",
1937 "VCVTPS2DQYrm",
1938 "VCVTPS2PDYrm",
1939 "VCVTTPS2DQYrm",
1940 "VMAX(C?)PDYrm",
1941 "VMAX(C?)PSYrm",
1942 "VMIN(C?)PDYrm",
1943 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001944 "VMULPDYrm",
1945 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001946 "VPMADDUBSWYrm",
1947 "VPMADDWDYrm",
1948 "VPMULDQYrm",
1949 "VPMULHRSWYrm",
1950 "VPMULHUWYrm",
1951 "VPMULHWYrm",
1952 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001953 "VPMULUDQYrm",
1954 "VSUBPDYrm",
1955 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001956
1957def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1958 let Latency = 11;
1959 let NumMicroOps = 3;
1960 let ResourceCycles = [2,1];
1961}
Craig Topperfc179c62018-03-22 04:23:41 +00001962def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1963 "FICOM32m",
1964 "FICOMP16m",
1965 "FICOMP32m",
1966 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001967
1968def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1969 let Latency = 11;
1970 let NumMicroOps = 3;
1971 let ResourceCycles = [1,1,1];
1972}
Craig Topperfc179c62018-03-22 04:23:41 +00001973def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001974
Craig Topper58afb4e2018-03-22 21:10:07 +00001975def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001976 let Latency = 11;
1977 let NumMicroOps = 3;
1978 let ResourceCycles = [1,1,1];
1979}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001980def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1981 "(V?)CVTSD2SIrm",
1982 "(V?)CVTSS2SI64rm",
1983 "(V?)CVTSS2SIrm",
1984 "(V?)CVTTSD2SI64rm",
1985 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001986 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001987 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001988
Craig Topper58afb4e2018-03-22 21:10:07 +00001989def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001990 let Latency = 11;
1991 let NumMicroOps = 3;
1992 let ResourceCycles = [1,1,1];
1993}
Craig Topperfc179c62018-03-22 04:23:41 +00001994def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
1995 "CVTPD2PSrm",
1996 "CVTTPD2DQrm",
1997 "MMX_CVTPD2PIirm",
1998 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001999
2000def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2001 let Latency = 11;
2002 let NumMicroOps = 6;
2003 let ResourceCycles = [1,1,1,2,1];
2004}
Craig Topperfc179c62018-03-22 04:23:41 +00002005def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2006 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002007
2008def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002009 let Latency = 11;
2010 let NumMicroOps = 7;
2011 let ResourceCycles = [2,3,2];
2012}
Craig Topperfc179c62018-03-22 04:23:41 +00002013def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2014 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002015
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002016def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002017 let Latency = 11;
2018 let NumMicroOps = 9;
2019 let ResourceCycles = [1,5,1,2];
2020}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002021def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002022
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002023def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002024 let Latency = 11;
2025 let NumMicroOps = 11;
2026 let ResourceCycles = [2,9];
2027}
Craig Topperfc179c62018-03-22 04:23:41 +00002028def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002029
Craig Topper8104f262018-04-02 05:33:28 +00002030def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002031 let Latency = 12;
2032 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002033 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002034}
Craig Topper8104f262018-04-02 05:33:28 +00002035def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002036 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002037
Craig Topper8104f262018-04-02 05:33:28 +00002038def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2039 let Latency = 12;
2040 let NumMicroOps = 1;
2041 let ResourceCycles = [1,6];
2042}
2043def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2044
Craig Topper58afb4e2018-03-22 21:10:07 +00002045def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002046 let Latency = 12;
2047 let NumMicroOps = 4;
2048 let ResourceCycles = [1,1,1,1];
2049}
2050def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2051
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002052def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002053 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002054 let NumMicroOps = 3;
2055 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002056}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002057def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002058
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002059def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2060 let Latency = 13;
2061 let NumMicroOps = 3;
2062 let ResourceCycles = [1,1,1];
2063}
2064def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2065
Craig Topper58afb4e2018-03-22 21:10:07 +00002066def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002067 let Latency = 13;
2068 let NumMicroOps = 4;
2069 let ResourceCycles = [1,3];
2070}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002071def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002072
Craig Topper8104f262018-04-02 05:33:28 +00002073def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002074 let Latency = 14;
2075 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002076 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002077}
Craig Topper8104f262018-04-02 05:33:28 +00002078def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002079 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002080
Craig Topper8104f262018-04-02 05:33:28 +00002081def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2082 let Latency = 14;
2083 let NumMicroOps = 1;
2084 let ResourceCycles = [1,5];
2085}
2086def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2087
Craig Topper58afb4e2018-03-22 21:10:07 +00002088def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002089 let Latency = 14;
2090 let NumMicroOps = 3;
2091 let ResourceCycles = [1,2];
2092}
Craig Topperfc179c62018-03-22 04:23:41 +00002093def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2094def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2095def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2096def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002097
2098def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2099 let Latency = 14;
2100 let NumMicroOps = 3;
2101 let ResourceCycles = [1,1,1];
2102}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002103def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002104
2105def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002106 let Latency = 14;
2107 let NumMicroOps = 10;
2108 let ResourceCycles = [2,4,1,3];
2109}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002110def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002111
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002112def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002113 let Latency = 15;
2114 let NumMicroOps = 1;
2115 let ResourceCycles = [1];
2116}
Craig Topperfc179c62018-03-22 04:23:41 +00002117def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2118 "DIVR_FST0r",
2119 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002120
Craig Topper58afb4e2018-03-22 21:10:07 +00002121def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002122 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002123 let NumMicroOps = 3;
2124 let ResourceCycles = [1,2];
2125}
Craig Topper40d3b322018-03-22 21:55:20 +00002126def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2127 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002128
Craig Topperd25f1ac2018-03-20 23:39:48 +00002129def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2130 let Latency = 17;
2131 let NumMicroOps = 3;
2132 let ResourceCycles = [1,2];
2133}
2134def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2135
Craig Topper58afb4e2018-03-22 21:10:07 +00002136def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002137 let Latency = 15;
2138 let NumMicroOps = 4;
2139 let ResourceCycles = [1,1,2];
2140}
Craig Topperfc179c62018-03-22 04:23:41 +00002141def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002142
2143def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2144 let Latency = 15;
2145 let NumMicroOps = 10;
2146 let ResourceCycles = [1,1,1,5,1,1];
2147}
Craig Topper13a16502018-03-19 00:56:09 +00002148def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002149
Craig Topper8104f262018-04-02 05:33:28 +00002150def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002151 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002152 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002153 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002154}
Craig Topperfc179c62018-03-22 04:23:41 +00002155def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002156
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002157def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2158 let Latency = 16;
2159 let NumMicroOps = 14;
2160 let ResourceCycles = [1,1,1,4,2,5];
2161}
2162def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2163
2164def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002165 let Latency = 16;
2166 let NumMicroOps = 16;
2167 let ResourceCycles = [16];
2168}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002169def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002170
Craig Topper8104f262018-04-02 05:33:28 +00002171def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002172 let Latency = 17;
2173 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002174 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002175}
Craig Topper8104f262018-04-02 05:33:28 +00002176def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2177
2178def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2179 let Latency = 17;
2180 let NumMicroOps = 2;
2181 let ResourceCycles = [1,1,3];
2182}
2183def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002184
2185def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002186 let Latency = 17;
2187 let NumMicroOps = 15;
2188 let ResourceCycles = [2,1,2,4,2,4];
2189}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002190def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002191
Craig Topper8104f262018-04-02 05:33:28 +00002192def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002193 let Latency = 18;
2194 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002195 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002196}
Craig Topper8104f262018-04-02 05:33:28 +00002197def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002198 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002199
Craig Topper8104f262018-04-02 05:33:28 +00002200def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2201 let Latency = 18;
2202 let NumMicroOps = 1;
2203 let ResourceCycles = [1,12];
2204}
2205def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2206
2207def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002208 let Latency = 18;
2209 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002210 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002211}
Craig Topper8104f262018-04-02 05:33:28 +00002212def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2213
2214def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2215 let Latency = 18;
2216 let NumMicroOps = 2;
2217 let ResourceCycles = [1,1,3];
2218}
2219def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002220
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002221def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002222 let Latency = 18;
2223 let NumMicroOps = 8;
2224 let ResourceCycles = [1,1,1,5];
2225}
Craig Topperfc179c62018-03-22 04:23:41 +00002226def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002227
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002228def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002229 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002230 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002231 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002232}
Craig Topper13a16502018-03-19 00:56:09 +00002233def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002234
Craig Topper8104f262018-04-02 05:33:28 +00002235def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002236 let Latency = 19;
2237 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002238 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002239}
Craig Topper8104f262018-04-02 05:33:28 +00002240def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2241
2242def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2243 let Latency = 19;
2244 let NumMicroOps = 2;
2245 let ResourceCycles = [1,1,6];
2246}
2247def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002248
Craig Topper58afb4e2018-03-22 21:10:07 +00002249def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002250 let Latency = 19;
2251 let NumMicroOps = 5;
2252 let ResourceCycles = [1,1,3];
2253}
Craig Topperfc179c62018-03-22 04:23:41 +00002254def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002255
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002256def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002257 let Latency = 20;
2258 let NumMicroOps = 1;
2259 let ResourceCycles = [1];
2260}
Craig Topperfc179c62018-03-22 04:23:41 +00002261def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2262 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002263 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002264
Craig Topper8104f262018-04-02 05:33:28 +00002265def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002266 let Latency = 20;
2267 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002268 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002269}
Craig Topperfc179c62018-03-22 04:23:41 +00002270def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002271
Craig Topper58afb4e2018-03-22 21:10:07 +00002272def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002273 let Latency = 20;
2274 let NumMicroOps = 5;
2275 let ResourceCycles = [1,1,3];
2276}
2277def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2278
2279def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2280 let Latency = 20;
2281 let NumMicroOps = 8;
2282 let ResourceCycles = [1,1,1,1,1,1,2];
2283}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002284def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002285
2286def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002287 let Latency = 20;
2288 let NumMicroOps = 10;
2289 let ResourceCycles = [1,2,7];
2290}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002291def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002292
Craig Topper8104f262018-04-02 05:33:28 +00002293def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002294 let Latency = 21;
2295 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002296 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002297}
2298def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2299
2300def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2301 let Latency = 22;
2302 let NumMicroOps = 2;
2303 let ResourceCycles = [1,1];
2304}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002305def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002306
2307def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2308 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002309 let NumMicroOps = 5;
2310 let ResourceCycles = [1,2,1,1];
2311}
Craig Topper17a31182017-12-16 18:35:29 +00002312def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2313 VGATHERDPDrm,
2314 VGATHERQPDrm,
2315 VGATHERQPSrm,
2316 VPGATHERDDrm,
2317 VPGATHERDQrm,
2318 VPGATHERQDrm,
2319 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002320
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002321def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2322 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002323 let NumMicroOps = 5;
2324 let ResourceCycles = [1,2,1,1];
2325}
Craig Topper17a31182017-12-16 18:35:29 +00002326def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2327 VGATHERQPDYrm,
2328 VGATHERQPSYrm,
2329 VPGATHERDDYrm,
2330 VPGATHERDQYrm,
2331 VPGATHERQDYrm,
2332 VPGATHERQQYrm,
2333 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002334
Craig Topper8104f262018-04-02 05:33:28 +00002335def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002336 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002337 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002338 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002339}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002340def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002341
2342def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2343 let Latency = 23;
2344 let NumMicroOps = 19;
2345 let ResourceCycles = [2,1,4,1,1,4,6];
2346}
2347def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2348
Craig Topper8104f262018-04-02 05:33:28 +00002349def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002350 let Latency = 24;
2351 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002352 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002353}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002354def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002355
Craig Topper8104f262018-04-02 05:33:28 +00002356def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002357 let Latency = 25;
2358 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002359 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002360}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002361def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002362
2363def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2364 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002365 let NumMicroOps = 3;
2366 let ResourceCycles = [1,1,1];
2367}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002368def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002369
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002370def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2371 let Latency = 27;
2372 let NumMicroOps = 2;
2373 let ResourceCycles = [1,1];
2374}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002375def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002376
2377def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2378 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002379 let NumMicroOps = 8;
2380 let ResourceCycles = [2,4,1,1];
2381}
Craig Topper13a16502018-03-19 00:56:09 +00002382def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002383
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002384def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002385 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002386 let NumMicroOps = 3;
2387 let ResourceCycles = [1,1,1];
2388}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002389def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002390
2391def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2392 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002393 let NumMicroOps = 23;
2394 let ResourceCycles = [1,5,3,4,10];
2395}
Craig Topperfc179c62018-03-22 04:23:41 +00002396def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2397 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002398
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002399def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2400 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002401 let NumMicroOps = 23;
2402 let ResourceCycles = [1,5,2,1,4,10];
2403}
Craig Topperfc179c62018-03-22 04:23:41 +00002404def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2405 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002406
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002407def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2408 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002409 let NumMicroOps = 31;
2410 let ResourceCycles = [1,8,1,21];
2411}
Craig Topper391c6f92017-12-10 01:24:08 +00002412def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002413
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002414def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2415 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002416 let NumMicroOps = 18;
2417 let ResourceCycles = [1,1,2,3,1,1,1,8];
2418}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002419def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002420
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002421def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2422 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002423 let NumMicroOps = 39;
2424 let ResourceCycles = [1,10,1,1,26];
2425}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002426def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002427
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002428def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002429 let Latency = 42;
2430 let NumMicroOps = 22;
2431 let ResourceCycles = [2,20];
2432}
Craig Topper2d451e72018-03-18 08:38:06 +00002433def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002434
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002435def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2436 let Latency = 42;
2437 let NumMicroOps = 40;
2438 let ResourceCycles = [1,11,1,1,26];
2439}
Craig Topper391c6f92017-12-10 01:24:08 +00002440def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002441
2442def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2443 let Latency = 46;
2444 let NumMicroOps = 44;
2445 let ResourceCycles = [1,11,1,1,30];
2446}
2447def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2448
2449def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2450 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002451 let NumMicroOps = 64;
2452 let ResourceCycles = [2,8,5,10,39];
2453}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002454def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002455
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002456def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2457 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002458 let NumMicroOps = 88;
2459 let ResourceCycles = [4,4,31,1,2,1,45];
2460}
Craig Topper2d451e72018-03-18 08:38:06 +00002461def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002462
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002463def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2464 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002465 let NumMicroOps = 90;
2466 let ResourceCycles = [4,2,33,1,2,1,47];
2467}
Craig Topper2d451e72018-03-18 08:38:06 +00002468def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002469
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002470def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002471 let Latency = 75;
2472 let NumMicroOps = 15;
2473 let ResourceCycles = [6,3,6];
2474}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002475def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002477def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002478 let Latency = 76;
2479 let NumMicroOps = 32;
2480 let ResourceCycles = [7,2,8,3,1,11];
2481}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002482def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002483
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002484def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002485 let Latency = 102;
2486 let NumMicroOps = 66;
2487 let ResourceCycles = [4,2,4,8,14,34];
2488}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002489def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002490
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002491def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2492 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002493 let NumMicroOps = 100;
2494 let ResourceCycles = [9,1,11,16,1,11,21,30];
2495}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002496def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002497
2498} // SchedModel