blob: 5e02e43bd9ffc6f45449301a6ca77bc35fdb45d4 [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 Pilgrim30c38c32018-03-19 14:46:07 +0000192defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
193defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000194defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000195defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000196defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000197defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000198defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000199defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000200defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000201defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000202
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000203// Vector insert/extract operations.
204def : WriteRes<WriteVecInsert, [SKLPort5]> {
205 let Latency = 2;
206 let NumMicroOps = 2;
207 let ResourceCycles = [2];
208}
209def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
210 let Latency = 6;
211 let NumMicroOps = 2;
212}
213
214def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
215 let Latency = 3;
216 let NumMicroOps = 2;
217}
218def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
219 let Latency = 2;
220 let NumMicroOps = 3;
221}
222
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000223// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000224defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
225defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
226defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000227
228// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000230// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
232 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000233 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000234 let ResourceCycles = [3];
235}
236def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000237 let Latency = 16;
238 let NumMicroOps = 4;
239 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000240}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000241
242// Packed Compare Explicit Length Strings, Return Mask
243def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
244 let Latency = 19;
245 let NumMicroOps = 9;
246 let ResourceCycles = [4,3,1,1];
247}
248def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
249 let Latency = 25;
250 let NumMicroOps = 10;
251 let ResourceCycles = [4,3,1,1,1];
252}
253
254// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000255def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000256 let Latency = 10;
257 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000258 let ResourceCycles = [3];
259}
260def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000261 let Latency = 16;
262 let NumMicroOps = 4;
263 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000264}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000265
266// Packed Compare Explicit Length Strings, Return Index
267def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
268 let Latency = 18;
269 let NumMicroOps = 8;
270 let ResourceCycles = [4,3,1];
271}
272def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
273 let Latency = 24;
274 let NumMicroOps = 9;
275 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000276}
277
Simon Pilgrima2f26782018-03-27 20:38:54 +0000278// MOVMSK Instructions.
279def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
280def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
281def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
282
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000283// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000284def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
285 let Latency = 4;
286 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000287 let ResourceCycles = [1];
288}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000289def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
290 let Latency = 10;
291 let NumMicroOps = 2;
292 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000293}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000294
295def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
296 let Latency = 8;
297 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000298 let ResourceCycles = [2];
299}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000300def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000301 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000302 let NumMicroOps = 3;
303 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000304}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000305
306def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
307 let Latency = 20;
308 let NumMicroOps = 11;
309 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000310}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000311def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
312 let Latency = 25;
313 let NumMicroOps = 11;
314 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000315}
316
317// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000318def : WriteRes<WriteCLMul, [SKLPort5]> {
319 let Latency = 6;
320 let NumMicroOps = 1;
321 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000322}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000323def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
324 let Latency = 12;
325 let NumMicroOps = 2;
326 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000327}
328
329// Catch-all for expensive system instructions.
330def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
331
332// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000333defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000334defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000335defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000336defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000337defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000338
339// Old microcoded instructions that nobody use.
340def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
341
342// Fence instructions.
343def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
344
Craig Topper05242bf2018-04-21 18:07:36 +0000345// Load/store MXCSR.
346def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
347def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
348
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000349// Nop, not very useful expect it provides a model for nops!
350def : WriteRes<WriteNop, []>;
351
352////////////////////////////////////////////////////////////////////////////////
353// Horizontal add/sub instructions.
354////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000355
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000356defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
357defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000358defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000359
360// Remaining instrs.
361
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000362def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000363 let Latency = 1;
364 let NumMicroOps = 1;
365 let ResourceCycles = [1];
366}
Craig Topperfc179c62018-03-22 04:23:41 +0000367def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
368 "MMX_PADDSWirr",
369 "MMX_PADDUSBirr",
370 "MMX_PADDUSWirr",
371 "MMX_PAVGBirr",
372 "MMX_PAVGWirr",
373 "MMX_PCMPEQBirr",
374 "MMX_PCMPEQDirr",
375 "MMX_PCMPEQWirr",
376 "MMX_PCMPGTBirr",
377 "MMX_PCMPGTDirr",
378 "MMX_PCMPGTWirr",
379 "MMX_PMAXSWirr",
380 "MMX_PMAXUBirr",
381 "MMX_PMINSWirr",
382 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000383 "MMX_PSUBSBirr",
384 "MMX_PSUBSWirr",
385 "MMX_PSUBUSBirr",
386 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000387
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000388def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000389 let Latency = 1;
390 let NumMicroOps = 1;
391 let ResourceCycles = [1];
392}
Craig Topperfc179c62018-03-22 04:23:41 +0000393def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
394 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000395 "MMX_MOVD64rr",
396 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000397 "UCOM_FPr",
398 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000399 "(V?)MOV64toPQIrr",
Simon Pilgrimfc0c26f2018-05-01 11:05:42 +0000400 "(V?)MOVDI2PDIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000401
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000402def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000403 let Latency = 1;
404 let NumMicroOps = 1;
405 let ResourceCycles = [1];
406}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000407def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000408
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000409def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000410 let Latency = 1;
411 let NumMicroOps = 1;
412 let ResourceCycles = [1];
413}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000414def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
415 "(V?)PABSD(Y?)rr",
416 "(V?)PABSW(Y?)rr",
417 "(V?)PADDSB(Y?)rr",
418 "(V?)PADDSW(Y?)rr",
419 "(V?)PADDUSB(Y?)rr",
420 "(V?)PADDUSW(Y?)rr",
421 "(V?)PAVGB(Y?)rr",
422 "(V?)PAVGW(Y?)rr",
423 "(V?)PCMPEQB(Y?)rr",
424 "(V?)PCMPEQD(Y?)rr",
425 "(V?)PCMPEQQ(Y?)rr",
426 "(V?)PCMPEQW(Y?)rr",
427 "(V?)PCMPGTB(Y?)rr",
428 "(V?)PCMPGTD(Y?)rr",
429 "(V?)PCMPGTW(Y?)rr",
430 "(V?)PMAXSB(Y?)rr",
431 "(V?)PMAXSD(Y?)rr",
432 "(V?)PMAXSW(Y?)rr",
433 "(V?)PMAXUB(Y?)rr",
434 "(V?)PMAXUD(Y?)rr",
435 "(V?)PMAXUW(Y?)rr",
436 "(V?)PMINSB(Y?)rr",
437 "(V?)PMINSD(Y?)rr",
438 "(V?)PMINSW(Y?)rr",
439 "(V?)PMINUB(Y?)rr",
440 "(V?)PMINUD(Y?)rr",
441 "(V?)PMINUW(Y?)rr",
442 "(V?)PSIGNB(Y?)rr",
443 "(V?)PSIGND(Y?)rr",
444 "(V?)PSIGNW(Y?)rr",
445 "(V?)PSLLD(Y?)ri",
446 "(V?)PSLLQ(Y?)ri",
447 "VPSLLVD(Y?)rr",
448 "VPSLLVQ(Y?)rr",
449 "(V?)PSLLW(Y?)ri",
450 "(V?)PSRAD(Y?)ri",
451 "VPSRAVD(Y?)rr",
452 "(V?)PSRAW(Y?)ri",
453 "(V?)PSRLD(Y?)ri",
454 "(V?)PSRLQ(Y?)ri",
455 "VPSRLVD(Y?)rr",
456 "VPSRLVQ(Y?)rr",
457 "(V?)PSRLW(Y?)ri",
458 "(V?)PSUBSB(Y?)rr",
459 "(V?)PSUBSW(Y?)rr",
460 "(V?)PSUBUSB(Y?)rr",
461 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000462
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000463def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000464 let Latency = 1;
465 let NumMicroOps = 1;
466 let ResourceCycles = [1];
467}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000468def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
469def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000470 "MMX_PABS(B|D|W)rr",
471 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000472 "MMX_PANDNirr",
473 "MMX_PANDirr",
474 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000475 "MMX_PSIGN(B|D|W)rr",
476 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000477 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000478
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000479def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000480 let Latency = 1;
481 let NumMicroOps = 1;
482 let ResourceCycles = [1];
483}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000484def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000485def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
486 "ADC(16|32|64)i",
487 "ADC(8|16|32|64)rr",
488 "ADCX(32|64)rr",
489 "ADOX(32|64)rr",
490 "BT(16|32|64)ri8",
491 "BT(16|32|64)rr",
492 "BTC(16|32|64)ri8",
493 "BTC(16|32|64)rr",
494 "BTR(16|32|64)ri8",
495 "BTR(16|32|64)rr",
496 "BTS(16|32|64)ri8",
497 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000498 "SBB(16|32|64)ri",
499 "SBB(16|32|64)i",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000500 "SBB(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000501
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000502def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
503 let Latency = 1;
504 let NumMicroOps = 1;
505 let ResourceCycles = [1];
506}
Craig Topperfc179c62018-03-22 04:23:41 +0000507def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
508 "BLSI(32|64)rr",
509 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000510 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000511
512def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
513 let Latency = 1;
514 let NumMicroOps = 1;
515 let ResourceCycles = [1];
516}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000517def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000518 "(V?)PADDD(Y?)rr",
519 "(V?)PADDQ(Y?)rr",
520 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000521 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000522 "(V?)PSUBB(Y?)rr",
523 "(V?)PSUBD(Y?)rr",
524 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000525 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000526
527def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
528 let Latency = 1;
529 let NumMicroOps = 1;
530 let ResourceCycles = [1];
531}
Craig Topperfbe31322018-04-05 21:56:19 +0000532def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000533def: InstRW<[SKLWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000534def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000535 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000536 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000537 "SGDT64m",
538 "SIDT64m",
Craig Topperfc179c62018-03-22 04:23:41 +0000539 "SMSW16m",
540 "STC",
541 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000542 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000543
544def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000545 let Latency = 1;
546 let NumMicroOps = 2;
547 let ResourceCycles = [1,1];
548}
Craig Topperfc179c62018-03-22 04:23:41 +0000549def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
550 "MMX_MOVD64from64rm",
551 "MMX_MOVD64mr",
552 "MMX_MOVNTQmr",
553 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000554 "MOVNTI_64mr",
555 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000556 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000557 "VEXTRACTF128mr",
558 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000559 "(V?)MOVAPDYmr",
560 "(V?)MOVAPS(Y?)mr",
561 "(V?)MOVDQA(Y?)mr",
562 "(V?)MOVDQU(Y?)mr",
563 "(V?)MOVHPDmr",
564 "(V?)MOVHPSmr",
565 "(V?)MOVLPDmr",
566 "(V?)MOVLPSmr",
567 "(V?)MOVNTDQ(Y?)mr",
568 "(V?)MOVNTPD(Y?)mr",
569 "(V?)MOVNTPS(Y?)mr",
570 "(V?)MOVPDI2DImr",
571 "(V?)MOVPQI2QImr",
572 "(V?)MOVPQIto64mr",
573 "(V?)MOVSDmr",
574 "(V?)MOVSSmr",
575 "(V?)MOVUPD(Y?)mr",
576 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000577 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000578
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000579def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000580 let Latency = 2;
581 let NumMicroOps = 1;
582 let ResourceCycles = [1];
583}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000584def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000585 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000586 "(V?)MOVPDI2DIrr",
587 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000588 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000589 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000590
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000591def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000592 let Latency = 2;
593 let NumMicroOps = 2;
594 let ResourceCycles = [2];
595}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000596def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000597
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000598def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000599 let Latency = 2;
600 let NumMicroOps = 2;
601 let ResourceCycles = [2];
602}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000603def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
604def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000605
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000606def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000607 let Latency = 2;
608 let NumMicroOps = 2;
609 let ResourceCycles = [2];
610}
Craig Topperfc179c62018-03-22 04:23:41 +0000611def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
612 "ROL(8|16|32|64)r1",
613 "ROL(8|16|32|64)ri",
614 "ROR(8|16|32|64)r1",
615 "ROR(8|16|32|64)ri",
616 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000617
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000618def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000619 let Latency = 2;
620 let NumMicroOps = 2;
621 let ResourceCycles = [2];
622}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000623def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
624 WAIT,
625 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000626
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000627def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000628 let Latency = 2;
629 let NumMicroOps = 2;
630 let ResourceCycles = [1,1];
631}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000632def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
633 "VMASKMOVPS(Y?)mr",
634 "VPMASKMOVD(Y?)mr",
635 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000636
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000637def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000638 let Latency = 2;
639 let NumMicroOps = 2;
640 let ResourceCycles = [1,1];
641}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000642def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
643 "(V?)PSLLQrr",
644 "(V?)PSLLWrr",
645 "(V?)PSRADrr",
646 "(V?)PSRAWrr",
647 "(V?)PSRLDrr",
648 "(V?)PSRLQrr",
649 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000650
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000651def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000652 let Latency = 2;
653 let NumMicroOps = 2;
654 let ResourceCycles = [1,1];
655}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000656def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000657
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000658def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000659 let Latency = 2;
660 let NumMicroOps = 2;
661 let ResourceCycles = [1,1];
662}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000663def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000664
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000665def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000666 let Latency = 2;
667 let NumMicroOps = 2;
668 let ResourceCycles = [1,1];
669}
Craig Topper498875f2018-04-04 17:54:19 +0000670def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
671
672def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
673 let Latency = 1;
674 let NumMicroOps = 1;
675 let ResourceCycles = [1];
676}
677def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000678
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000679def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000680 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000681 let NumMicroOps = 2;
682 let ResourceCycles = [1,1];
683}
Craig Topper2d451e72018-03-18 08:38:06 +0000684def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000685def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000686def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
687 "ADC8ri",
688 "SBB8i8",
689 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000690
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000691def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
692 let Latency = 2;
693 let NumMicroOps = 3;
694 let ResourceCycles = [1,1,1];
695}
696def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
697
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000698def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
699 let Latency = 2;
700 let NumMicroOps = 3;
701 let ResourceCycles = [1,1,1];
702}
703def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
704
705def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
706 let Latency = 2;
707 let NumMicroOps = 3;
708 let ResourceCycles = [1,1,1];
709}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000710def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
711 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000712def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000713 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000714
715def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
716 let Latency = 3;
717 let NumMicroOps = 1;
718 let ResourceCycles = [1];
719}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000720def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000721 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000722 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000723 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000724
Clement Courbet327fac42018-03-07 08:14:02 +0000725def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000726 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000727 let NumMicroOps = 2;
728 let ResourceCycles = [1,1];
729}
Clement Courbet327fac42018-03-07 08:14:02 +0000730def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000731
732def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
733 let Latency = 3;
734 let NumMicroOps = 1;
735 let ResourceCycles = [1];
736}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000737def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
738 "(ADD|SUB|SUBR)_FST0r",
739 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000740 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000741 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000742 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000743 "VPMOVSXBDYrr",
744 "VPMOVSXBQYrr",
745 "VPMOVSXBWYrr",
746 "VPMOVSXDQYrr",
747 "VPMOVSXWDYrr",
748 "VPMOVSXWQYrr",
749 "VPMOVZXBDYrr",
750 "VPMOVZXBQYrr",
751 "VPMOVZXBWYrr",
752 "VPMOVZXDQYrr",
753 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000754 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000755
756def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
757 let Latency = 3;
758 let NumMicroOps = 2;
759 let ResourceCycles = [1,1];
760}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000761def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000762
763def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
764 let Latency = 3;
765 let NumMicroOps = 2;
766 let ResourceCycles = [1,1];
767}
768def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
769
770def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
771 let Latency = 3;
772 let NumMicroOps = 3;
773 let ResourceCycles = [3];
774}
Craig Topperfc179c62018-03-22 04:23:41 +0000775def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
776 "ROR(8|16|32|64)rCL",
777 "SAR(8|16|32|64)rCL",
778 "SHL(8|16|32|64)rCL",
779 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000780
781def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000782 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000783 let NumMicroOps = 3;
784 let ResourceCycles = [3];
785}
Craig Topperb5f26592018-04-19 18:00:17 +0000786def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
787 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
788 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000789
790def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
791 let Latency = 3;
792 let NumMicroOps = 3;
793 let ResourceCycles = [1,2];
794}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000795def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000796
797def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
798 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000799 let NumMicroOps = 3;
800 let ResourceCycles = [2,1];
801}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000802def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
803 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000804
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000805def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
806 let Latency = 3;
807 let NumMicroOps = 3;
808 let ResourceCycles = [2,1];
809}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000810def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000811
812def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
813 let Latency = 3;
814 let NumMicroOps = 3;
815 let ResourceCycles = [2,1];
816}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000817def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
818 "(V?)PHADDW(Y?)rr",
819 "(V?)PHSUBD(Y?)rr",
820 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000821
822def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
823 let Latency = 3;
824 let NumMicroOps = 3;
825 let ResourceCycles = [2,1];
826}
Craig Topperfc179c62018-03-22 04:23:41 +0000827def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
828 "MMX_PACKSSWBirr",
829 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000830
831def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
832 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000833 let NumMicroOps = 3;
834 let ResourceCycles = [1,2];
835}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000836def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000837
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000838def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
839 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000840 let NumMicroOps = 3;
841 let ResourceCycles = [1,2];
842}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000843def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000844
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000845def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
846 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000847 let NumMicroOps = 3;
848 let ResourceCycles = [1,2];
849}
Craig Topperfc179c62018-03-22 04:23:41 +0000850def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
851 "RCL(8|16|32|64)ri",
852 "RCR(8|16|32|64)r1",
853 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000854
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000855def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
856 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000857 let NumMicroOps = 3;
858 let ResourceCycles = [1,1,1];
859}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000860def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000861
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000862def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
863 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000864 let NumMicroOps = 4;
865 let ResourceCycles = [1,1,2];
866}
Craig Topperf4cd9082018-01-19 05:47:32 +0000867def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000868
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000869def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
870 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000871 let NumMicroOps = 4;
872 let ResourceCycles = [1,1,1,1];
873}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000874def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000875
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000876def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
877 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000878 let NumMicroOps = 4;
879 let ResourceCycles = [1,1,1,1];
880}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000881def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000882
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000883def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000884 let Latency = 4;
885 let NumMicroOps = 1;
886 let ResourceCycles = [1];
887}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000888def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000889 "MMX_PMADDWDirr",
890 "MMX_PMULHRSWrr",
891 "MMX_PMULHUWirr",
892 "MMX_PMULHWirr",
893 "MMX_PMULLWirr",
894 "MMX_PMULUDQirr",
895 "MUL_FPrST0",
896 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000897 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000898
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000899def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000900 let Latency = 4;
901 let NumMicroOps = 1;
902 let ResourceCycles = [1];
903}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000904def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
905 "(V?)ADDPS(Y?)rr",
906 "(V?)ADDSDrr",
907 "(V?)ADDSSrr",
908 "(V?)ADDSUBPD(Y?)rr",
909 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000910 "(V?)CVTDQ2PS(Y?)rr",
911 "(V?)CVTPS2DQ(Y?)rr",
912 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000913 "(V?)MULPD(Y?)rr",
914 "(V?)MULPS(Y?)rr",
915 "(V?)MULSDrr",
916 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000917 "(V?)PMADDUBSW(Y?)rr",
918 "(V?)PMADDWD(Y?)rr",
919 "(V?)PMULDQ(Y?)rr",
920 "(V?)PMULHRSW(Y?)rr",
921 "(V?)PMULHUW(Y?)rr",
922 "(V?)PMULHW(Y?)rr",
923 "(V?)PMULLW(Y?)rr",
924 "(V?)PMULUDQ(Y?)rr",
925 "(V?)SUBPD(Y?)rr",
926 "(V?)SUBPS(Y?)rr",
927 "(V?)SUBSDrr",
928 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000929
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000930def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000931 let Latency = 4;
932 let NumMicroOps = 2;
933 let ResourceCycles = [1,1];
934}
Craig Topperf846e2d2018-04-19 05:34:05 +0000935def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000936
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000937def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
938 let Latency = 4;
939 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000940 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000941}
Craig Topperfc179c62018-03-22 04:23:41 +0000942def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000943
944def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000945 let Latency = 4;
946 let NumMicroOps = 2;
947 let ResourceCycles = [1,1];
948}
Craig Topperfc179c62018-03-22 04:23:41 +0000949def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
950 "VPSLLQYrr",
951 "VPSLLWYrr",
952 "VPSRADYrr",
953 "VPSRAWYrr",
954 "VPSRLDYrr",
955 "VPSRLQYrr",
956 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000957
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000958def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000959 let Latency = 4;
960 let NumMicroOps = 3;
961 let ResourceCycles = [1,1,1];
962}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000963def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
964 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000965
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000966def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000967 let Latency = 4;
968 let NumMicroOps = 4;
969 let ResourceCycles = [4];
970}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000971def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000972
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000973def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000974 let Latency = 4;
975 let NumMicroOps = 4;
976 let ResourceCycles = [1,3];
977}
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000978def: InstRW<[SKLWriteResGroup55], (instrs PAUSE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000979
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000980def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000981 let Latency = 4;
982 let NumMicroOps = 4;
983 let ResourceCycles = [1,3];
984}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000985def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000986
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000987def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000988 let Latency = 4;
989 let NumMicroOps = 4;
990 let ResourceCycles = [1,1,2];
991}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000992def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000993
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000994def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
995 let Latency = 5;
996 let NumMicroOps = 1;
997 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000998}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000999def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001000 "MOVSX(16|32|64)rm32",
1001 "MOVSX(16|32|64)rm8",
1002 "MOVZX(16|32|64)rm16",
1003 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001004 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001005
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001006def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001007 let Latency = 5;
1008 let NumMicroOps = 2;
1009 let ResourceCycles = [1,1];
1010}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001011def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1012 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001013
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001014def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001015 let Latency = 5;
1016 let NumMicroOps = 2;
1017 let ResourceCycles = [1,1];
1018}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001019def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001020 "MMX_CVTPS2PIirr",
1021 "MMX_CVTTPD2PIirr",
1022 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001023 "(V?)CVTPD2DQrr",
1024 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001025 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001026 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001027 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001028 "(V?)CVTSD2SSrr",
1029 "(V?)CVTSI642SDrr",
1030 "(V?)CVTSI2SDrr",
1031 "(V?)CVTSI2SSrr",
1032 "(V?)CVTSS2SDrr",
1033 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001034
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001035def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001036 let Latency = 5;
1037 let NumMicroOps = 3;
1038 let ResourceCycles = [1,1,1];
1039}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001040def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001041
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001042def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001043 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001044 let NumMicroOps = 3;
1045 let ResourceCycles = [1,1,1];
1046}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001047def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001048
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001049def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001050 let Latency = 5;
1051 let NumMicroOps = 5;
1052 let ResourceCycles = [1,4];
1053}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001054def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001055
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001056def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001057 let Latency = 5;
1058 let NumMicroOps = 5;
1059 let ResourceCycles = [2,3];
1060}
Craig Topper13a16502018-03-19 00:56:09 +00001061def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001062
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001063def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001064 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001065 let NumMicroOps = 6;
1066 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001067}
Craig Topperfc179c62018-03-22 04:23:41 +00001068def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1069 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001070
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001071def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1072 let Latency = 6;
1073 let NumMicroOps = 1;
1074 let ResourceCycles = [1];
1075}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001076def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001077 "(V?)MOVSHDUPrm",
1078 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001079 "VPBROADCASTDrm",
1080 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001081
1082def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001083 let Latency = 6;
1084 let NumMicroOps = 2;
1085 let ResourceCycles = [2];
1086}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001087def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001088
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001089def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001090 let Latency = 6;
1091 let NumMicroOps = 2;
1092 let ResourceCycles = [1,1];
1093}
Craig Topperfc179c62018-03-22 04:23:41 +00001094def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1095 "MMX_PADDSWirm",
1096 "MMX_PADDUSBirm",
1097 "MMX_PADDUSWirm",
1098 "MMX_PAVGBirm",
1099 "MMX_PAVGWirm",
1100 "MMX_PCMPEQBirm",
1101 "MMX_PCMPEQDirm",
1102 "MMX_PCMPEQWirm",
1103 "MMX_PCMPGTBirm",
1104 "MMX_PCMPGTDirm",
1105 "MMX_PCMPGTWirm",
1106 "MMX_PMAXSWirm",
1107 "MMX_PMAXUBirm",
1108 "MMX_PMINSWirm",
1109 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001110 "MMX_PSUBSBirm",
1111 "MMX_PSUBSWirm",
1112 "MMX_PSUBUSBirm",
1113 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001114
Craig Topper58afb4e2018-03-22 21:10:07 +00001115def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001116 let Latency = 6;
1117 let NumMicroOps = 2;
1118 let ResourceCycles = [1,1];
1119}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001120def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1121 "(V?)CVTSD2SIrr",
1122 "(V?)CVTSS2SI64rr",
1123 "(V?)CVTSS2SIrr",
1124 "(V?)CVTTSD2SI64rr",
1125 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001126
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001127def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1128 let Latency = 6;
1129 let NumMicroOps = 2;
1130 let ResourceCycles = [1,1];
1131}
Craig Topperfc179c62018-03-22 04:23:41 +00001132def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1133 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001134
1135def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1136 let Latency = 6;
1137 let NumMicroOps = 2;
1138 let ResourceCycles = [1,1];
1139}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001140def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1141 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001142 "MMX_PANDNirm",
1143 "MMX_PANDirm",
1144 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001145 "MMX_PSIGN(B|D|W)rm",
1146 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001147 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001148
1149def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1150 let Latency = 6;
1151 let NumMicroOps = 2;
1152 let ResourceCycles = [1,1];
1153}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001154def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001155def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1156 ADCX32rm, ADCX64rm,
1157 ADOX32rm, ADOX64rm,
1158 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001159
1160def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1161 let Latency = 6;
1162 let NumMicroOps = 2;
1163 let ResourceCycles = [1,1];
1164}
Craig Topperfc179c62018-03-22 04:23:41 +00001165def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1166 "BLSI(32|64)rm",
1167 "BLSMSK(32|64)rm",
1168 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001169 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001170
1171def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1172 let Latency = 6;
1173 let NumMicroOps = 2;
1174 let ResourceCycles = [1,1];
1175}
Craig Topper2d451e72018-03-18 08:38:06 +00001176def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001177def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001178
Craig Topper58afb4e2018-03-22 21:10:07 +00001179def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001180 let Latency = 6;
1181 let NumMicroOps = 3;
1182 let ResourceCycles = [2,1];
1183}
Craig Topperfc179c62018-03-22 04:23:41 +00001184def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001185
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001186def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001187 let Latency = 6;
1188 let NumMicroOps = 4;
1189 let ResourceCycles = [1,2,1];
1190}
Craig Topperfc179c62018-03-22 04:23:41 +00001191def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1192 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001193
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001194def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001195 let Latency = 6;
1196 let NumMicroOps = 4;
1197 let ResourceCycles = [1,1,1,1];
1198}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001199def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001200
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001201def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1202 let Latency = 6;
1203 let NumMicroOps = 4;
1204 let ResourceCycles = [1,1,1,1];
1205}
Craig Topperfc179c62018-03-22 04:23:41 +00001206def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1207 "BTR(16|32|64)mi8",
1208 "BTS(16|32|64)mi8",
1209 "SAR(8|16|32|64)m1",
1210 "SAR(8|16|32|64)mi",
1211 "SHL(8|16|32|64)m1",
1212 "SHL(8|16|32|64)mi",
1213 "SHR(8|16|32|64)m1",
1214 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001215
1216def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1217 let Latency = 6;
1218 let NumMicroOps = 4;
1219 let ResourceCycles = [1,1,1,1];
1220}
Craig Topperf0d04262018-04-06 16:16:48 +00001221def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1222 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001223
1224def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001225 let Latency = 6;
1226 let NumMicroOps = 6;
1227 let ResourceCycles = [1,5];
1228}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001229def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001230
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001231def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1232 let Latency = 7;
1233 let NumMicroOps = 1;
1234 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001235}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001236def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001237 "VBROADCASTF128",
1238 "VBROADCASTI128",
1239 "VBROADCASTSDYrm",
1240 "VBROADCASTSSYrm",
1241 "VLDDQUYrm",
1242 "VMOVAPDYrm",
1243 "VMOVAPSYrm",
1244 "VMOVDDUPYrm",
1245 "VMOVDQAYrm",
1246 "VMOVDQUYrm",
1247 "VMOVNTDQAYrm",
1248 "VMOVSHDUPYrm",
1249 "VMOVSLDUPYrm",
1250 "VMOVUPDYrm",
1251 "VMOVUPSYrm",
1252 "VPBROADCASTDYrm",
1253 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001254
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001255def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001256 let Latency = 7;
1257 let NumMicroOps = 2;
1258 let ResourceCycles = [1,1];
1259}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001260def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001261
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001262def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1263 let Latency = 7;
1264 let NumMicroOps = 2;
1265 let ResourceCycles = [1,1];
1266}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001267def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1268 "(V?)PACKSSDWrm",
1269 "(V?)PACKSSWBrm",
1270 "(V?)PACKUSDWrm",
1271 "(V?)PACKUSWBrm",
1272 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001273 "VPBROADCASTBrm",
1274 "VPBROADCASTWrm",
1275 "VPERMILPDmi",
1276 "VPERMILPDrm",
1277 "VPERMILPSmi",
1278 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001279 "(V?)PSHUFBrm",
1280 "(V?)PSHUFDmi",
1281 "(V?)PSHUFHWmi",
1282 "(V?)PSHUFLWmi",
1283 "(V?)PUNPCKHBWrm",
1284 "(V?)PUNPCKHDQrm",
1285 "(V?)PUNPCKHQDQrm",
1286 "(V?)PUNPCKHWDrm",
1287 "(V?)PUNPCKLBWrm",
1288 "(V?)PUNPCKLDQrm",
1289 "(V?)PUNPCKLQDQrm",
1290 "(V?)PUNPCKLWDrm",
1291 "(V?)SHUFPDrmi",
1292 "(V?)SHUFPSrmi",
1293 "(V?)UNPCKHPDrm",
1294 "(V?)UNPCKHPSrm",
1295 "(V?)UNPCKLPDrm",
1296 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001297
Craig Topper58afb4e2018-03-22 21:10:07 +00001298def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001299 let Latency = 7;
1300 let NumMicroOps = 2;
1301 let ResourceCycles = [1,1];
1302}
Craig Topperfc179c62018-03-22 04:23:41 +00001303def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1304 "VCVTPD2PSYrr",
1305 "VCVTPH2PSYrr",
1306 "VCVTPS2PDYrr",
1307 "VCVTPS2PHYrr",
1308 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001309
1310def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1311 let Latency = 7;
1312 let NumMicroOps = 2;
1313 let ResourceCycles = [1,1];
1314}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001315def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1316 "(V?)PABSDrm",
1317 "(V?)PABSWrm",
1318 "(V?)PADDSBrm",
1319 "(V?)PADDSWrm",
1320 "(V?)PADDUSBrm",
1321 "(V?)PADDUSWrm",
1322 "(V?)PAVGBrm",
1323 "(V?)PAVGWrm",
1324 "(V?)PCMPEQBrm",
1325 "(V?)PCMPEQDrm",
1326 "(V?)PCMPEQQrm",
1327 "(V?)PCMPEQWrm",
1328 "(V?)PCMPGTBrm",
1329 "(V?)PCMPGTDrm",
1330 "(V?)PCMPGTWrm",
1331 "(V?)PMAXSBrm",
1332 "(V?)PMAXSDrm",
1333 "(V?)PMAXSWrm",
1334 "(V?)PMAXUBrm",
1335 "(V?)PMAXUDrm",
1336 "(V?)PMAXUWrm",
1337 "(V?)PMINSBrm",
1338 "(V?)PMINSDrm",
1339 "(V?)PMINSWrm",
1340 "(V?)PMINUBrm",
1341 "(V?)PMINUDrm",
1342 "(V?)PMINUWrm",
1343 "(V?)PSIGNBrm",
1344 "(V?)PSIGNDrm",
1345 "(V?)PSIGNWrm",
1346 "(V?)PSLLDrm",
1347 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001348 "VPSLLVDrm",
1349 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001350 "(V?)PSLLWrm",
1351 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001352 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001353 "(V?)PSRAWrm",
1354 "(V?)PSRLDrm",
1355 "(V?)PSRLQrm",
1356 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001357 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001358 "(V?)PSRLWrm",
1359 "(V?)PSUBSBrm",
1360 "(V?)PSUBSWrm",
1361 "(V?)PSUBUSBrm",
1362 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001363
1364def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1365 let Latency = 7;
1366 let NumMicroOps = 2;
1367 let ResourceCycles = [1,1];
1368}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001369def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001370 "(V?)INSERTI128rm",
1371 "(V?)MASKMOVPDrm",
1372 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001373 "(V?)PADDBrm",
1374 "(V?)PADDDrm",
1375 "(V?)PADDQrm",
1376 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001377 "(V?)PBLENDDrmi",
1378 "(V?)PMASKMOVDrm",
1379 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001380 "(V?)PSUBBrm",
1381 "(V?)PSUBDrm",
1382 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001383 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001384
1385def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1386 let Latency = 7;
1387 let NumMicroOps = 3;
1388 let ResourceCycles = [2,1];
1389}
Craig Topperfc179c62018-03-22 04:23:41 +00001390def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1391 "MMX_PACKSSWBirm",
1392 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001393
1394def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1395 let Latency = 7;
1396 let NumMicroOps = 3;
1397 let ResourceCycles = [1,2];
1398}
Craig Topperf4cd9082018-01-19 05:47:32 +00001399def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001400
1401def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1402 let Latency = 7;
1403 let NumMicroOps = 3;
1404 let ResourceCycles = [1,2];
1405}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001406def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1407 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001408
Craig Topper58afb4e2018-03-22 21:10:07 +00001409def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001410 let Latency = 7;
1411 let NumMicroOps = 3;
1412 let ResourceCycles = [1,1,1];
1413}
Craig Topperfc179c62018-03-22 04:23:41 +00001414def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1415 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001416
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001417def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001418 let Latency = 7;
1419 let NumMicroOps = 3;
1420 let ResourceCycles = [1,1,1];
1421}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001422def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001423
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001424def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001425 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001426 let NumMicroOps = 3;
1427 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001428}
Craig Topperfc179c62018-03-22 04:23:41 +00001429def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1430 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001431
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001432def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1433 let Latency = 7;
1434 let NumMicroOps = 5;
1435 let ResourceCycles = [1,1,1,2];
1436}
Craig Topperfc179c62018-03-22 04:23:41 +00001437def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1438 "ROL(8|16|32|64)mi",
1439 "ROR(8|16|32|64)m1",
1440 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001441
1442def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1443 let Latency = 7;
1444 let NumMicroOps = 5;
1445 let ResourceCycles = [1,1,1,2];
1446}
Craig Topper13a16502018-03-19 00:56:09 +00001447def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001448
1449def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1450 let Latency = 7;
1451 let NumMicroOps = 5;
1452 let ResourceCycles = [1,1,1,1,1];
1453}
Craig Topperfc179c62018-03-22 04:23:41 +00001454def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1455 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001456
1457def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001458 let Latency = 7;
1459 let NumMicroOps = 7;
1460 let ResourceCycles = [1,3,1,2];
1461}
Craig Topper2d451e72018-03-18 08:38:06 +00001462def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001463
Craig Topper58afb4e2018-03-22 21:10:07 +00001464def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001465 let Latency = 8;
1466 let NumMicroOps = 2;
1467 let ResourceCycles = [2];
1468}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001469def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1470 "(V?)ROUNDPS(Y?)r",
1471 "(V?)ROUNDSDr",
1472 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001473
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001474def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001475 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001476 let NumMicroOps = 2;
1477 let ResourceCycles = [1,1];
1478}
Craig Topperfc179c62018-03-22 04:23:41 +00001479def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1480 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001481
1482def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1483 let Latency = 8;
1484 let NumMicroOps = 2;
1485 let ResourceCycles = [1,1];
1486}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001487def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1488 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001489
1490def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001491 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001492 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001493 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001494}
Craig Topperf846e2d2018-04-19 05:34:05 +00001495def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001496
Craig Topperf846e2d2018-04-19 05:34:05 +00001497def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1498 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001499 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001500 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001501}
Craig Topperfc179c62018-03-22 04:23:41 +00001502def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001503
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001504def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1505 let Latency = 8;
1506 let NumMicroOps = 2;
1507 let ResourceCycles = [1,1];
1508}
Craig Topperfc179c62018-03-22 04:23:41 +00001509def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1510 "FCOM64m",
1511 "FCOMP32m",
1512 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001513 "VPACKSSDWYrm",
1514 "VPACKSSWBYrm",
1515 "VPACKUSDWYrm",
1516 "VPACKUSWBYrm",
1517 "VPALIGNRYrmi",
1518 "VPBLENDWYrmi",
1519 "VPBROADCASTBYrm",
1520 "VPBROADCASTWYrm",
1521 "VPERMILPDYmi",
1522 "VPERMILPDYrm",
1523 "VPERMILPSYmi",
1524 "VPERMILPSYrm",
1525 "VPMOVSXBDYrm",
1526 "VPMOVSXBQYrm",
1527 "VPMOVSXWQYrm",
1528 "VPSHUFBYrm",
1529 "VPSHUFDYmi",
1530 "VPSHUFHWYmi",
1531 "VPSHUFLWYmi",
1532 "VPUNPCKHBWYrm",
1533 "VPUNPCKHDQYrm",
1534 "VPUNPCKHQDQYrm",
1535 "VPUNPCKHWDYrm",
1536 "VPUNPCKLBWYrm",
1537 "VPUNPCKLDQYrm",
1538 "VPUNPCKLQDQYrm",
1539 "VPUNPCKLWDYrm",
1540 "VSHUFPDYrmi",
1541 "VSHUFPSYrmi",
1542 "VUNPCKHPDYrm",
1543 "VUNPCKHPSYrm",
1544 "VUNPCKLPDYrm",
1545 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001546
1547def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1548 let Latency = 8;
1549 let NumMicroOps = 2;
1550 let ResourceCycles = [1,1];
1551}
Craig Topperfc179c62018-03-22 04:23:41 +00001552def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1553 "VPABSDYrm",
1554 "VPABSWYrm",
1555 "VPADDSBYrm",
1556 "VPADDSWYrm",
1557 "VPADDUSBYrm",
1558 "VPADDUSWYrm",
1559 "VPAVGBYrm",
1560 "VPAVGWYrm",
1561 "VPCMPEQBYrm",
1562 "VPCMPEQDYrm",
1563 "VPCMPEQQYrm",
1564 "VPCMPEQWYrm",
1565 "VPCMPGTBYrm",
1566 "VPCMPGTDYrm",
1567 "VPCMPGTWYrm",
1568 "VPMAXSBYrm",
1569 "VPMAXSDYrm",
1570 "VPMAXSWYrm",
1571 "VPMAXUBYrm",
1572 "VPMAXUDYrm",
1573 "VPMAXUWYrm",
1574 "VPMINSBYrm",
1575 "VPMINSDYrm",
1576 "VPMINSWYrm",
1577 "VPMINUBYrm",
1578 "VPMINUDYrm",
1579 "VPMINUWYrm",
1580 "VPSIGNBYrm",
1581 "VPSIGNDYrm",
1582 "VPSIGNWYrm",
1583 "VPSLLDYrm",
1584 "VPSLLQYrm",
1585 "VPSLLVDYrm",
1586 "VPSLLVQYrm",
1587 "VPSLLWYrm",
1588 "VPSRADYrm",
1589 "VPSRAVDYrm",
1590 "VPSRAWYrm",
1591 "VPSRLDYrm",
1592 "VPSRLQYrm",
1593 "VPSRLVDYrm",
1594 "VPSRLVQYrm",
1595 "VPSRLWYrm",
1596 "VPSUBSBYrm",
1597 "VPSUBSWYrm",
1598 "VPSUBUSBYrm",
1599 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001600
1601def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1602 let Latency = 8;
1603 let NumMicroOps = 2;
1604 let ResourceCycles = [1,1];
1605}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001606def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001607 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001608 "VPADDBYrm",
1609 "VPADDDYrm",
1610 "VPADDQYrm",
1611 "VPADDWYrm",
1612 "VPANDNYrm",
1613 "VPANDYrm",
1614 "VPBLENDDYrmi",
1615 "VPMASKMOVDYrm",
1616 "VPMASKMOVQYrm",
1617 "VPORYrm",
1618 "VPSUBBYrm",
1619 "VPSUBDYrm",
1620 "VPSUBQYrm",
1621 "VPSUBWYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001622 "VPXORYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001623
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001624def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1625 let Latency = 8;
1626 let NumMicroOps = 4;
1627 let ResourceCycles = [1,2,1];
1628}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001629def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001630
1631def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1632 let Latency = 8;
1633 let NumMicroOps = 4;
1634 let ResourceCycles = [2,1,1];
1635}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001636def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001637
Craig Topper58afb4e2018-03-22 21:10:07 +00001638def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001639 let Latency = 8;
1640 let NumMicroOps = 4;
1641 let ResourceCycles = [1,1,1,1];
1642}
1643def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1644
1645def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1646 let Latency = 8;
1647 let NumMicroOps = 5;
1648 let ResourceCycles = [1,1,3];
1649}
Craig Topper13a16502018-03-19 00:56:09 +00001650def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001651
1652def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1653 let Latency = 8;
1654 let NumMicroOps = 5;
1655 let ResourceCycles = [1,1,1,2];
1656}
Craig Topperfc179c62018-03-22 04:23:41 +00001657def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1658 "RCL(8|16|32|64)mi",
1659 "RCR(8|16|32|64)m1",
1660 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001661
1662def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1663 let Latency = 8;
1664 let NumMicroOps = 6;
1665 let ResourceCycles = [1,1,1,3];
1666}
Craig Topperfc179c62018-03-22 04:23:41 +00001667def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1668 "SAR(8|16|32|64)mCL",
1669 "SHL(8|16|32|64)mCL",
1670 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001671
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001672def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1673 let Latency = 8;
1674 let NumMicroOps = 6;
1675 let ResourceCycles = [1,1,1,2,1];
1676}
Craig Topper9f834812018-04-01 21:54:24 +00001677def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001678 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001679 "SBB(8|16|32|64)mi")>;
1680def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1681 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001682
1683def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1684 let Latency = 9;
1685 let NumMicroOps = 2;
1686 let ResourceCycles = [1,1];
1687}
Craig Topperfc179c62018-03-22 04:23:41 +00001688def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1689 "MMX_PMADDUBSWrm",
1690 "MMX_PMADDWDirm",
1691 "MMX_PMULHRSWrm",
1692 "MMX_PMULHUWirm",
1693 "MMX_PMULHWirm",
1694 "MMX_PMULLWirm",
1695 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001696 "VTESTPDYrm",
1697 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001698
1699def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1700 let Latency = 9;
1701 let NumMicroOps = 2;
1702 let ResourceCycles = [1,1];
1703}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001704def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001705 "VPMOVSXBWYrm",
1706 "VPMOVSXDQYrm",
1707 "VPMOVSXWDYrm",
1708 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001709 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001710
1711def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1712 let Latency = 9;
1713 let NumMicroOps = 2;
1714 let ResourceCycles = [1,1];
1715}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001716def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1717 "(V?)ADDSSrm",
1718 "(V?)CMPSDrm",
1719 "(V?)CMPSSrm",
1720 "(V?)MAX(C?)SDrm",
1721 "(V?)MAX(C?)SSrm",
1722 "(V?)MIN(C?)SDrm",
1723 "(V?)MIN(C?)SSrm",
1724 "(V?)MULSDrm",
1725 "(V?)MULSSrm",
1726 "(V?)SUBSDrm",
1727 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001728
Craig Topper58afb4e2018-03-22 21:10:07 +00001729def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001730 let Latency = 9;
1731 let NumMicroOps = 2;
1732 let ResourceCycles = [1,1];
1733}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001734def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001735 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001736 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001737 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001738
Craig Topper58afb4e2018-03-22 21:10:07 +00001739def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001740 let Latency = 9;
1741 let NumMicroOps = 3;
1742 let ResourceCycles = [1,2];
1743}
Craig Topperfc179c62018-03-22 04:23:41 +00001744def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001745
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001746def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1747 let Latency = 9;
1748 let NumMicroOps = 3;
1749 let ResourceCycles = [1,1,1];
1750}
Craig Topperfc179c62018-03-22 04:23:41 +00001751def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001752
1753def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1754 let Latency = 9;
1755 let NumMicroOps = 3;
1756 let ResourceCycles = [1,1,1];
1757}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001758def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001759
1760def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001761 let Latency = 9;
1762 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001763 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001764}
Craig Topperfc179c62018-03-22 04:23:41 +00001765def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1766 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001767
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001768def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1769 let Latency = 9;
1770 let NumMicroOps = 4;
1771 let ResourceCycles = [2,1,1];
1772}
Craig Topperfc179c62018-03-22 04:23:41 +00001773def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1774 "(V?)PHADDWrm",
1775 "(V?)PHSUBDrm",
1776 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001777
1778def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1779 let Latency = 9;
1780 let NumMicroOps = 4;
1781 let ResourceCycles = [1,1,1,1];
1782}
Craig Topperfc179c62018-03-22 04:23:41 +00001783def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1784 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001785
1786def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1787 let Latency = 9;
1788 let NumMicroOps = 5;
1789 let ResourceCycles = [1,2,1,1];
1790}
Craig Topperfc179c62018-03-22 04:23:41 +00001791def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1792 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001793
1794def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1795 let Latency = 10;
1796 let NumMicroOps = 2;
1797 let ResourceCycles = [1,1];
1798}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001799def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001800 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001801
1802def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1803 let Latency = 10;
1804 let NumMicroOps = 2;
1805 let ResourceCycles = [1,1];
1806}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001807def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1808 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001809 "VPCMPGTQYrm",
1810 "VPERM2F128rm",
1811 "VPERM2I128rm",
1812 "VPERMDYrm",
1813 "VPERMPDYmi",
1814 "VPERMPSYrm",
1815 "VPERMQYmi",
1816 "VPMOVZXBDYrm",
1817 "VPMOVZXBQYrm",
1818 "VPMOVZXBWYrm",
1819 "VPMOVZXDQYrm",
1820 "VPMOVZXWQYrm",
1821 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001822
1823def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1824 let Latency = 10;
1825 let NumMicroOps = 2;
1826 let ResourceCycles = [1,1];
1827}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001828def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1829 "(V?)ADDPSrm",
1830 "(V?)ADDSUBPDrm",
1831 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001832 "(V?)CVTDQ2PSrm",
1833 "(V?)CVTPH2PSYrm",
1834 "(V?)CVTPS2DQrm",
1835 "(V?)CVTSS2SDrm",
1836 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001837 "(V?)MULPDrm",
1838 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001839 "(V?)PMADDUBSWrm",
1840 "(V?)PMADDWDrm",
1841 "(V?)PMULDQrm",
1842 "(V?)PMULHRSWrm",
1843 "(V?)PMULHUWrm",
1844 "(V?)PMULHWrm",
1845 "(V?)PMULLWrm",
1846 "(V?)PMULUDQrm",
1847 "(V?)SUBPDrm",
1848 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001849
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001850def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1851 let Latency = 10;
1852 let NumMicroOps = 3;
1853 let ResourceCycles = [1,1,1];
1854}
Craig Topperfc179c62018-03-22 04:23:41 +00001855def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1856 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001857
Craig Topper58afb4e2018-03-22 21:10:07 +00001858def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001859 let Latency = 10;
1860 let NumMicroOps = 3;
1861 let ResourceCycles = [1,1,1];
1862}
Craig Topperfc179c62018-03-22 04:23:41 +00001863def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001864
1865def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001866 let Latency = 10;
1867 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001868 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001869}
Craig Topperfc179c62018-03-22 04:23:41 +00001870def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1871 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001872
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001873def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1874 let Latency = 10;
1875 let NumMicroOps = 4;
1876 let ResourceCycles = [2,1,1];
1877}
Craig Topperfc179c62018-03-22 04:23:41 +00001878def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1879 "VPHADDWYrm",
1880 "VPHSUBDYrm",
1881 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001882
1883def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001884 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001885 let NumMicroOps = 4;
1886 let ResourceCycles = [1,1,1,1];
1887}
Craig Topperf846e2d2018-04-19 05:34:05 +00001888def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001889
1890def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1891 let Latency = 10;
1892 let NumMicroOps = 8;
1893 let ResourceCycles = [1,1,1,1,1,3];
1894}
Craig Topper13a16502018-03-19 00:56:09 +00001895def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001896
1897def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001898 let Latency = 10;
1899 let NumMicroOps = 10;
1900 let ResourceCycles = [9,1];
1901}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001902def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001903
Craig Topper8104f262018-04-02 05:33:28 +00001904def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001905 let Latency = 11;
1906 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001907 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001908}
Craig Topper8104f262018-04-02 05:33:28 +00001909def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001910 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001911
Craig Topper8104f262018-04-02 05:33:28 +00001912def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1913 let Latency = 11;
1914 let NumMicroOps = 1;
1915 let ResourceCycles = [1,5];
1916}
1917def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1918
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001919def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001920 let Latency = 11;
1921 let NumMicroOps = 2;
1922 let ResourceCycles = [1,1];
1923}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001924def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001925 "VRCPPSYm",
1926 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001927
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001928def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1929 let Latency = 11;
1930 let NumMicroOps = 2;
1931 let ResourceCycles = [1,1];
1932}
Craig Topperfc179c62018-03-22 04:23:41 +00001933def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1934 "VADDPSYrm",
1935 "VADDSUBPDYrm",
1936 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001937 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001938 "VCMPPSYrmi",
1939 "VCVTDQ2PSYrm",
1940 "VCVTPS2DQYrm",
1941 "VCVTPS2PDYrm",
1942 "VCVTTPS2DQYrm",
1943 "VMAX(C?)PDYrm",
1944 "VMAX(C?)PSYrm",
1945 "VMIN(C?)PDYrm",
1946 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001947 "VMULPDYrm",
1948 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001949 "VPMADDUBSWYrm",
1950 "VPMADDWDYrm",
1951 "VPMULDQYrm",
1952 "VPMULHRSWYrm",
1953 "VPMULHUWYrm",
1954 "VPMULHWYrm",
1955 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001956 "VPMULUDQYrm",
1957 "VSUBPDYrm",
1958 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001959
1960def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1961 let Latency = 11;
1962 let NumMicroOps = 3;
1963 let ResourceCycles = [2,1];
1964}
Craig Topperfc179c62018-03-22 04:23:41 +00001965def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1966 "FICOM32m",
1967 "FICOMP16m",
1968 "FICOMP32m",
1969 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001970
1971def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1972 let Latency = 11;
1973 let NumMicroOps = 3;
1974 let ResourceCycles = [1,1,1];
1975}
Craig Topperfc179c62018-03-22 04:23:41 +00001976def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001977
Craig Topper58afb4e2018-03-22 21:10:07 +00001978def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001979 let Latency = 11;
1980 let NumMicroOps = 3;
1981 let ResourceCycles = [1,1,1];
1982}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001983def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1984 "(V?)CVTSD2SIrm",
1985 "(V?)CVTSS2SI64rm",
1986 "(V?)CVTSS2SIrm",
1987 "(V?)CVTTSD2SI64rm",
1988 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001989 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001990 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001991
Craig Topper58afb4e2018-03-22 21:10:07 +00001992def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001993 let Latency = 11;
1994 let NumMicroOps = 3;
1995 let ResourceCycles = [1,1,1];
1996}
Craig Topperfc179c62018-03-22 04:23:41 +00001997def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
1998 "CVTPD2PSrm",
1999 "CVTTPD2DQrm",
2000 "MMX_CVTPD2PIirm",
2001 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002002
2003def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2004 let Latency = 11;
2005 let NumMicroOps = 6;
2006 let ResourceCycles = [1,1,1,2,1];
2007}
Craig Topperfc179c62018-03-22 04:23:41 +00002008def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2009 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002010
2011def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002012 let Latency = 11;
2013 let NumMicroOps = 7;
2014 let ResourceCycles = [2,3,2];
2015}
Craig Topperfc179c62018-03-22 04:23:41 +00002016def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2017 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002018
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002019def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002020 let Latency = 11;
2021 let NumMicroOps = 9;
2022 let ResourceCycles = [1,5,1,2];
2023}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002024def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002025
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002026def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002027 let Latency = 11;
2028 let NumMicroOps = 11;
2029 let ResourceCycles = [2,9];
2030}
Craig Topperfc179c62018-03-22 04:23:41 +00002031def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002032
Craig Topper8104f262018-04-02 05:33:28 +00002033def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002034 let Latency = 12;
2035 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002036 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002037}
Craig Topper8104f262018-04-02 05:33:28 +00002038def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002039 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002040
Craig Topper8104f262018-04-02 05:33:28 +00002041def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2042 let Latency = 12;
2043 let NumMicroOps = 1;
2044 let ResourceCycles = [1,6];
2045}
2046def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2047
Craig Topper58afb4e2018-03-22 21:10:07 +00002048def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002049 let Latency = 12;
2050 let NumMicroOps = 4;
2051 let ResourceCycles = [1,1,1,1];
2052}
2053def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2054
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002055def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002056 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002057 let NumMicroOps = 3;
2058 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002059}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002060def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002061
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002062def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2063 let Latency = 13;
2064 let NumMicroOps = 3;
2065 let ResourceCycles = [1,1,1];
2066}
2067def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2068
Craig Topper58afb4e2018-03-22 21:10:07 +00002069def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002070 let Latency = 13;
2071 let NumMicroOps = 4;
2072 let ResourceCycles = [1,3];
2073}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002074def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002075
Craig Topper8104f262018-04-02 05:33:28 +00002076def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002077 let Latency = 14;
2078 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002079 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002080}
Craig Topper8104f262018-04-02 05:33:28 +00002081def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002082 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002083
Craig Topper8104f262018-04-02 05:33:28 +00002084def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2085 let Latency = 14;
2086 let NumMicroOps = 1;
2087 let ResourceCycles = [1,5];
2088}
2089def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2090
Craig Topper58afb4e2018-03-22 21:10:07 +00002091def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002092 let Latency = 14;
2093 let NumMicroOps = 3;
2094 let ResourceCycles = [1,2];
2095}
Craig Topperfc179c62018-03-22 04:23:41 +00002096def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2097def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2098def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2099def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002100
2101def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2102 let Latency = 14;
2103 let NumMicroOps = 3;
2104 let ResourceCycles = [1,1,1];
2105}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002106def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002107
2108def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002109 let Latency = 14;
2110 let NumMicroOps = 10;
2111 let ResourceCycles = [2,4,1,3];
2112}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002113def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002114
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002115def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002116 let Latency = 15;
2117 let NumMicroOps = 1;
2118 let ResourceCycles = [1];
2119}
Craig Topperfc179c62018-03-22 04:23:41 +00002120def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2121 "DIVR_FST0r",
2122 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002123
Craig Topper58afb4e2018-03-22 21:10:07 +00002124def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002125 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002126 let NumMicroOps = 3;
2127 let ResourceCycles = [1,2];
2128}
Craig Topper40d3b322018-03-22 21:55:20 +00002129def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2130 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002131
Craig Topperd25f1ac2018-03-20 23:39:48 +00002132def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2133 let Latency = 17;
2134 let NumMicroOps = 3;
2135 let ResourceCycles = [1,2];
2136}
2137def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2138
Craig Topper58afb4e2018-03-22 21:10:07 +00002139def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002140 let Latency = 15;
2141 let NumMicroOps = 4;
2142 let ResourceCycles = [1,1,2];
2143}
Craig Topperfc179c62018-03-22 04:23:41 +00002144def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002145
2146def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2147 let Latency = 15;
2148 let NumMicroOps = 10;
2149 let ResourceCycles = [1,1,1,5,1,1];
2150}
Craig Topper13a16502018-03-19 00:56:09 +00002151def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002152
Craig Topper8104f262018-04-02 05:33:28 +00002153def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002154 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002155 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002156 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002157}
Craig Topperfc179c62018-03-22 04:23:41 +00002158def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002159
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002160def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2161 let Latency = 16;
2162 let NumMicroOps = 14;
2163 let ResourceCycles = [1,1,1,4,2,5];
2164}
2165def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2166
2167def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002168 let Latency = 16;
2169 let NumMicroOps = 16;
2170 let ResourceCycles = [16];
2171}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002172def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002173
Craig Topper8104f262018-04-02 05:33:28 +00002174def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002175 let Latency = 17;
2176 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002177 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002178}
Craig Topper8104f262018-04-02 05:33:28 +00002179def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2180
2181def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2182 let Latency = 17;
2183 let NumMicroOps = 2;
2184 let ResourceCycles = [1,1,3];
2185}
2186def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002187
2188def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002189 let Latency = 17;
2190 let NumMicroOps = 15;
2191 let ResourceCycles = [2,1,2,4,2,4];
2192}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002193def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002194
Craig Topper8104f262018-04-02 05:33:28 +00002195def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002196 let Latency = 18;
2197 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002198 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002199}
Craig Topper8104f262018-04-02 05:33:28 +00002200def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002201 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002202
Craig Topper8104f262018-04-02 05:33:28 +00002203def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2204 let Latency = 18;
2205 let NumMicroOps = 1;
2206 let ResourceCycles = [1,12];
2207}
2208def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2209
2210def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002211 let Latency = 18;
2212 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002213 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002214}
Craig Topper8104f262018-04-02 05:33:28 +00002215def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2216
2217def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2218 let Latency = 18;
2219 let NumMicroOps = 2;
2220 let ResourceCycles = [1,1,3];
2221}
2222def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002223
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002224def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002225 let Latency = 18;
2226 let NumMicroOps = 8;
2227 let ResourceCycles = [1,1,1,5];
2228}
Craig Topperfc179c62018-03-22 04:23:41 +00002229def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002230
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002231def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002232 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002233 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002234 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002235}
Craig Topper13a16502018-03-19 00:56:09 +00002236def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002237
Craig Topper8104f262018-04-02 05:33:28 +00002238def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002239 let Latency = 19;
2240 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002241 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002242}
Craig Topper8104f262018-04-02 05:33:28 +00002243def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2244
2245def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2246 let Latency = 19;
2247 let NumMicroOps = 2;
2248 let ResourceCycles = [1,1,6];
2249}
2250def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002251
Craig Topper58afb4e2018-03-22 21:10:07 +00002252def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002253 let Latency = 19;
2254 let NumMicroOps = 5;
2255 let ResourceCycles = [1,1,3];
2256}
Craig Topperfc179c62018-03-22 04:23:41 +00002257def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002258
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002259def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002260 let Latency = 20;
2261 let NumMicroOps = 1;
2262 let ResourceCycles = [1];
2263}
Craig Topperfc179c62018-03-22 04:23:41 +00002264def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2265 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002266 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002267
Craig Topper8104f262018-04-02 05:33:28 +00002268def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002269 let Latency = 20;
2270 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002271 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002272}
Craig Topperfc179c62018-03-22 04:23:41 +00002273def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002274
Craig Topper58afb4e2018-03-22 21:10:07 +00002275def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002276 let Latency = 20;
2277 let NumMicroOps = 5;
2278 let ResourceCycles = [1,1,3];
2279}
2280def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2281
2282def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2283 let Latency = 20;
2284 let NumMicroOps = 8;
2285 let ResourceCycles = [1,1,1,1,1,1,2];
2286}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002287def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002288
2289def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002290 let Latency = 20;
2291 let NumMicroOps = 10;
2292 let ResourceCycles = [1,2,7];
2293}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002294def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002295
Craig Topper8104f262018-04-02 05:33:28 +00002296def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002297 let Latency = 21;
2298 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002299 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002300}
2301def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2302
2303def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2304 let Latency = 22;
2305 let NumMicroOps = 2;
2306 let ResourceCycles = [1,1];
2307}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002308def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002309
2310def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2311 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002312 let NumMicroOps = 5;
2313 let ResourceCycles = [1,2,1,1];
2314}
Craig Topper17a31182017-12-16 18:35:29 +00002315def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2316 VGATHERDPDrm,
2317 VGATHERQPDrm,
2318 VGATHERQPSrm,
2319 VPGATHERDDrm,
2320 VPGATHERDQrm,
2321 VPGATHERQDrm,
2322 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002323
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002324def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2325 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002326 let NumMicroOps = 5;
2327 let ResourceCycles = [1,2,1,1];
2328}
Craig Topper17a31182017-12-16 18:35:29 +00002329def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2330 VGATHERQPDYrm,
2331 VGATHERQPSYrm,
2332 VPGATHERDDYrm,
2333 VPGATHERDQYrm,
2334 VPGATHERQDYrm,
2335 VPGATHERQQYrm,
2336 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002337
Craig Topper8104f262018-04-02 05:33:28 +00002338def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002339 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002340 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002341 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002342}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002343def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002344
2345def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2346 let Latency = 23;
2347 let NumMicroOps = 19;
2348 let ResourceCycles = [2,1,4,1,1,4,6];
2349}
2350def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2351
Craig Topper8104f262018-04-02 05:33:28 +00002352def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002353 let Latency = 24;
2354 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002355 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002356}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002357def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002358
Craig Topper8104f262018-04-02 05:33:28 +00002359def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002360 let Latency = 25;
2361 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002362 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002363}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002364def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002365
2366def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2367 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002368 let NumMicroOps = 3;
2369 let ResourceCycles = [1,1,1];
2370}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002371def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002372
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002373def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2374 let Latency = 27;
2375 let NumMicroOps = 2;
2376 let ResourceCycles = [1,1];
2377}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002378def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002379
2380def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2381 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002382 let NumMicroOps = 8;
2383 let ResourceCycles = [2,4,1,1];
2384}
Craig Topper13a16502018-03-19 00:56:09 +00002385def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002386
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002387def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002388 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002389 let NumMicroOps = 3;
2390 let ResourceCycles = [1,1,1];
2391}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002392def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002393
2394def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2395 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002396 let NumMicroOps = 23;
2397 let ResourceCycles = [1,5,3,4,10];
2398}
Craig Topperfc179c62018-03-22 04:23:41 +00002399def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2400 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002401
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002402def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2403 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002404 let NumMicroOps = 23;
2405 let ResourceCycles = [1,5,2,1,4,10];
2406}
Craig Topperfc179c62018-03-22 04:23:41 +00002407def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2408 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002409
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002410def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2411 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002412 let NumMicroOps = 31;
2413 let ResourceCycles = [1,8,1,21];
2414}
Craig Topper391c6f92017-12-10 01:24:08 +00002415def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002416
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002417def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2418 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002419 let NumMicroOps = 18;
2420 let ResourceCycles = [1,1,2,3,1,1,1,8];
2421}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002422def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002423
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002424def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2425 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002426 let NumMicroOps = 39;
2427 let ResourceCycles = [1,10,1,1,26];
2428}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002429def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002430
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002431def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002432 let Latency = 42;
2433 let NumMicroOps = 22;
2434 let ResourceCycles = [2,20];
2435}
Craig Topper2d451e72018-03-18 08:38:06 +00002436def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002437
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002438def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2439 let Latency = 42;
2440 let NumMicroOps = 40;
2441 let ResourceCycles = [1,11,1,1,26];
2442}
Craig Topper391c6f92017-12-10 01:24:08 +00002443def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002444
2445def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2446 let Latency = 46;
2447 let NumMicroOps = 44;
2448 let ResourceCycles = [1,11,1,1,30];
2449}
2450def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2451
2452def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2453 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002454 let NumMicroOps = 64;
2455 let ResourceCycles = [2,8,5,10,39];
2456}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002457def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002458
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002459def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2460 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002461 let NumMicroOps = 88;
2462 let ResourceCycles = [4,4,31,1,2,1,45];
2463}
Craig Topper2d451e72018-03-18 08:38:06 +00002464def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002465
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002466def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2467 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002468 let NumMicroOps = 90;
2469 let ResourceCycles = [4,2,33,1,2,1,47];
2470}
Craig Topper2d451e72018-03-18 08:38:06 +00002471def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002472
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002473def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002474 let Latency = 75;
2475 let NumMicroOps = 15;
2476 let ResourceCycles = [6,3,6];
2477}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002478def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002479
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002480def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002481 let Latency = 76;
2482 let NumMicroOps = 32;
2483 let ResourceCycles = [7,2,8,3,1,11];
2484}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002485def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002486
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002487def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002488 let Latency = 102;
2489 let NumMicroOps = 66;
2490 let ResourceCycles = [4,2,4,8,14,34];
2491}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002492def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002493
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002494def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2495 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002496 let NumMicroOps = 100;
2497 let ResourceCycles = [9,1,11,16,1,11,21,30];
2498}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002499def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002500
2501} // SchedModel