blob: b1a4714ece7ffaac0e6fa99ee9a3b971a85e7f3e [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 Pilgrim31a96332018-03-24 20:40:14 +0000400 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000401 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000402 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000403
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000404def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000405 let Latency = 1;
406 let NumMicroOps = 1;
407 let ResourceCycles = [1];
408}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000409def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000410
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000411def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000412 let Latency = 1;
413 let NumMicroOps = 1;
414 let ResourceCycles = [1];
415}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000416def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
417 "(V?)PABSD(Y?)rr",
418 "(V?)PABSW(Y?)rr",
419 "(V?)PADDSB(Y?)rr",
420 "(V?)PADDSW(Y?)rr",
421 "(V?)PADDUSB(Y?)rr",
422 "(V?)PADDUSW(Y?)rr",
423 "(V?)PAVGB(Y?)rr",
424 "(V?)PAVGW(Y?)rr",
425 "(V?)PCMPEQB(Y?)rr",
426 "(V?)PCMPEQD(Y?)rr",
427 "(V?)PCMPEQQ(Y?)rr",
428 "(V?)PCMPEQW(Y?)rr",
429 "(V?)PCMPGTB(Y?)rr",
430 "(V?)PCMPGTD(Y?)rr",
431 "(V?)PCMPGTW(Y?)rr",
432 "(V?)PMAXSB(Y?)rr",
433 "(V?)PMAXSD(Y?)rr",
434 "(V?)PMAXSW(Y?)rr",
435 "(V?)PMAXUB(Y?)rr",
436 "(V?)PMAXUD(Y?)rr",
437 "(V?)PMAXUW(Y?)rr",
438 "(V?)PMINSB(Y?)rr",
439 "(V?)PMINSD(Y?)rr",
440 "(V?)PMINSW(Y?)rr",
441 "(V?)PMINUB(Y?)rr",
442 "(V?)PMINUD(Y?)rr",
443 "(V?)PMINUW(Y?)rr",
444 "(V?)PSIGNB(Y?)rr",
445 "(V?)PSIGND(Y?)rr",
446 "(V?)PSIGNW(Y?)rr",
447 "(V?)PSLLD(Y?)ri",
448 "(V?)PSLLQ(Y?)ri",
449 "VPSLLVD(Y?)rr",
450 "VPSLLVQ(Y?)rr",
451 "(V?)PSLLW(Y?)ri",
452 "(V?)PSRAD(Y?)ri",
453 "VPSRAVD(Y?)rr",
454 "(V?)PSRAW(Y?)ri",
455 "(V?)PSRLD(Y?)ri",
456 "(V?)PSRLQ(Y?)ri",
457 "VPSRLVD(Y?)rr",
458 "VPSRLVQ(Y?)rr",
459 "(V?)PSRLW(Y?)ri",
460 "(V?)PSUBSB(Y?)rr",
461 "(V?)PSUBSW(Y?)rr",
462 "(V?)PSUBUSB(Y?)rr",
463 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000464
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000465def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000466 let Latency = 1;
467 let NumMicroOps = 1;
468 let ResourceCycles = [1];
469}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000470def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
471def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000472 "MMX_PABS(B|D|W)rr",
473 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000474 "MMX_PANDNirr",
475 "MMX_PANDirr",
476 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000477 "MMX_PSIGN(B|D|W)rr",
478 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000479 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000480
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000481def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000482 let Latency = 1;
483 let NumMicroOps = 1;
484 let ResourceCycles = [1];
485}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000486def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000487def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
488 "ADC(16|32|64)i",
489 "ADC(8|16|32|64)rr",
490 "ADCX(32|64)rr",
491 "ADOX(32|64)rr",
492 "BT(16|32|64)ri8",
493 "BT(16|32|64)rr",
494 "BTC(16|32|64)ri8",
495 "BTC(16|32|64)rr",
496 "BTR(16|32|64)ri8",
497 "BTR(16|32|64)rr",
498 "BTS(16|32|64)ri8",
499 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000500 "SBB(16|32|64)ri",
501 "SBB(16|32|64)i",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000502 "SBB(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000503
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000504def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
505 let Latency = 1;
506 let NumMicroOps = 1;
507 let ResourceCycles = [1];
508}
Craig Topperfc179c62018-03-22 04:23:41 +0000509def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
510 "BLSI(32|64)rr",
511 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000512 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000513
514def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
515 let Latency = 1;
516 let NumMicroOps = 1;
517 let ResourceCycles = [1];
518}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000519def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000520 "(V?)PADDD(Y?)rr",
521 "(V?)PADDQ(Y?)rr",
522 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000523 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000524 "(V?)PSUBB(Y?)rr",
525 "(V?)PSUBD(Y?)rr",
526 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000527 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000528
529def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
530 let Latency = 1;
531 let NumMicroOps = 1;
532 let ResourceCycles = [1];
533}
Craig Topperfbe31322018-04-05 21:56:19 +0000534def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000535def: InstRW<[SKLWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000536def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000537 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000538 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000539 "SGDT64m",
540 "SIDT64m",
Craig Topperfc179c62018-03-22 04:23:41 +0000541 "SMSW16m",
542 "STC",
543 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000544 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000545
546def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000547 let Latency = 1;
548 let NumMicroOps = 2;
549 let ResourceCycles = [1,1];
550}
Craig Topperfc179c62018-03-22 04:23:41 +0000551def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
552 "MMX_MOVD64from64rm",
553 "MMX_MOVD64mr",
554 "MMX_MOVNTQmr",
555 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000556 "MOVNTI_64mr",
557 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000558 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000559 "VEXTRACTF128mr",
560 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000561 "(V?)MOVAPDYmr",
562 "(V?)MOVAPS(Y?)mr",
563 "(V?)MOVDQA(Y?)mr",
564 "(V?)MOVDQU(Y?)mr",
565 "(V?)MOVHPDmr",
566 "(V?)MOVHPSmr",
567 "(V?)MOVLPDmr",
568 "(V?)MOVLPSmr",
569 "(V?)MOVNTDQ(Y?)mr",
570 "(V?)MOVNTPD(Y?)mr",
571 "(V?)MOVNTPS(Y?)mr",
572 "(V?)MOVPDI2DImr",
573 "(V?)MOVPQI2QImr",
574 "(V?)MOVPQIto64mr",
575 "(V?)MOVSDmr",
576 "(V?)MOVSSmr",
577 "(V?)MOVUPD(Y?)mr",
578 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000579 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000580
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000581def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000582 let Latency = 2;
583 let NumMicroOps = 1;
584 let ResourceCycles = [1];
585}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000586def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000587 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000588 "(V?)MOVPDI2DIrr",
589 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000590 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000591 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000592
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000593def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000594 let Latency = 2;
595 let NumMicroOps = 2;
596 let ResourceCycles = [2];
597}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000598def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000599
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000600def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000601 let Latency = 2;
602 let NumMicroOps = 2;
603 let ResourceCycles = [2];
604}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000605def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
606def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000607
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000608def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000609 let Latency = 2;
610 let NumMicroOps = 2;
611 let ResourceCycles = [2];
612}
Craig Topperfc179c62018-03-22 04:23:41 +0000613def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
614 "ROL(8|16|32|64)r1",
615 "ROL(8|16|32|64)ri",
616 "ROR(8|16|32|64)r1",
617 "ROR(8|16|32|64)ri",
618 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000619
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000620def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000621 let Latency = 2;
622 let NumMicroOps = 2;
623 let ResourceCycles = [2];
624}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000625def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
626 WAIT,
627 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000628
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000629def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000630 let Latency = 2;
631 let NumMicroOps = 2;
632 let ResourceCycles = [1,1];
633}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000634def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
635 "VMASKMOVPS(Y?)mr",
636 "VPMASKMOVD(Y?)mr",
637 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000638
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000639def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000640 let Latency = 2;
641 let NumMicroOps = 2;
642 let ResourceCycles = [1,1];
643}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000644def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
645 "(V?)PSLLQrr",
646 "(V?)PSLLWrr",
647 "(V?)PSRADrr",
648 "(V?)PSRAWrr",
649 "(V?)PSRLDrr",
650 "(V?)PSRLQrr",
651 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000652
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000653def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000654 let Latency = 2;
655 let NumMicroOps = 2;
656 let ResourceCycles = [1,1];
657}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000658def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000659
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000660def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000661 let Latency = 2;
662 let NumMicroOps = 2;
663 let ResourceCycles = [1,1];
664}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000665def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000666
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000667def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000668 let Latency = 2;
669 let NumMicroOps = 2;
670 let ResourceCycles = [1,1];
671}
Craig Topper498875f2018-04-04 17:54:19 +0000672def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
673
674def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
675 let Latency = 1;
676 let NumMicroOps = 1;
677 let ResourceCycles = [1];
678}
679def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000680
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000681def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000682 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000683 let NumMicroOps = 2;
684 let ResourceCycles = [1,1];
685}
Craig Topper2d451e72018-03-18 08:38:06 +0000686def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000687def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000688def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
689 "ADC8ri",
690 "SBB8i8",
691 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000692
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000693def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
694 let Latency = 2;
695 let NumMicroOps = 3;
696 let ResourceCycles = [1,1,1];
697}
698def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
699
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000700def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
701 let Latency = 2;
702 let NumMicroOps = 3;
703 let ResourceCycles = [1,1,1];
704}
705def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
706
707def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
708 let Latency = 2;
709 let NumMicroOps = 3;
710 let ResourceCycles = [1,1,1];
711}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000712def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
713 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000714def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000715 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000716
717def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
718 let Latency = 3;
719 let NumMicroOps = 1;
720 let ResourceCycles = [1];
721}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000722def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000723 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000724 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000725 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000726
Clement Courbet327fac42018-03-07 08:14:02 +0000727def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000728 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000729 let NumMicroOps = 2;
730 let ResourceCycles = [1,1];
731}
Clement Courbet327fac42018-03-07 08:14:02 +0000732def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000733
734def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
735 let Latency = 3;
736 let NumMicroOps = 1;
737 let ResourceCycles = [1];
738}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000739def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
740 "(ADD|SUB|SUBR)_FST0r",
741 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000742 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000743 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000744 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000745 "VPMOVSXBDYrr",
746 "VPMOVSXBQYrr",
747 "VPMOVSXBWYrr",
748 "VPMOVSXDQYrr",
749 "VPMOVSXWDYrr",
750 "VPMOVSXWQYrr",
751 "VPMOVZXBDYrr",
752 "VPMOVZXBQYrr",
753 "VPMOVZXBWYrr",
754 "VPMOVZXDQYrr",
755 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000756 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000757
758def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
759 let Latency = 3;
760 let NumMicroOps = 2;
761 let ResourceCycles = [1,1];
762}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000763def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000764
765def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
766 let Latency = 3;
767 let NumMicroOps = 2;
768 let ResourceCycles = [1,1];
769}
770def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
771
772def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
773 let Latency = 3;
774 let NumMicroOps = 3;
775 let ResourceCycles = [3];
776}
Craig Topperfc179c62018-03-22 04:23:41 +0000777def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
778 "ROR(8|16|32|64)rCL",
779 "SAR(8|16|32|64)rCL",
780 "SHL(8|16|32|64)rCL",
781 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000782
783def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000784 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000785 let NumMicroOps = 3;
786 let ResourceCycles = [3];
787}
Craig Topperb5f26592018-04-19 18:00:17 +0000788def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
789 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
790 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000791
792def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
793 let Latency = 3;
794 let NumMicroOps = 3;
795 let ResourceCycles = [1,2];
796}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000797def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000798
799def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
800 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000801 let NumMicroOps = 3;
802 let ResourceCycles = [2,1];
803}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000804def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
805 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000806
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000807def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
808 let Latency = 3;
809 let NumMicroOps = 3;
810 let ResourceCycles = [2,1];
811}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000812def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000813
814def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
815 let Latency = 3;
816 let NumMicroOps = 3;
817 let ResourceCycles = [2,1];
818}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000819def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
820 "(V?)PHADDW(Y?)rr",
821 "(V?)PHSUBD(Y?)rr",
822 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000823
824def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
825 let Latency = 3;
826 let NumMicroOps = 3;
827 let ResourceCycles = [2,1];
828}
Craig Topperfc179c62018-03-22 04:23:41 +0000829def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
830 "MMX_PACKSSWBirr",
831 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000832
833def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
834 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000835 let NumMicroOps = 3;
836 let ResourceCycles = [1,2];
837}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000838def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000839
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000840def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
841 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000842 let NumMicroOps = 3;
843 let ResourceCycles = [1,2];
844}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000845def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000846
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000847def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
848 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000849 let NumMicroOps = 3;
850 let ResourceCycles = [1,2];
851}
Craig Topperfc179c62018-03-22 04:23:41 +0000852def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
853 "RCL(8|16|32|64)ri",
854 "RCR(8|16|32|64)r1",
855 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000856
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000857def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
858 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000859 let NumMicroOps = 3;
860 let ResourceCycles = [1,1,1];
861}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000862def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000863
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000864def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
865 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000866 let NumMicroOps = 4;
867 let ResourceCycles = [1,1,2];
868}
Craig Topperf4cd9082018-01-19 05:47:32 +0000869def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000870
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000871def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
872 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000873 let NumMicroOps = 4;
874 let ResourceCycles = [1,1,1,1];
875}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000876def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000877
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000878def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
879 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000880 let NumMicroOps = 4;
881 let ResourceCycles = [1,1,1,1];
882}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000883def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000884
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000885def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000886 let Latency = 4;
887 let NumMicroOps = 1;
888 let ResourceCycles = [1];
889}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000890def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000891 "MMX_PMADDWDirr",
892 "MMX_PMULHRSWrr",
893 "MMX_PMULHUWirr",
894 "MMX_PMULHWirr",
895 "MMX_PMULLWirr",
896 "MMX_PMULUDQirr",
897 "MUL_FPrST0",
898 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000899 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000900
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000901def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000902 let Latency = 4;
903 let NumMicroOps = 1;
904 let ResourceCycles = [1];
905}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000906def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
907 "(V?)ADDPS(Y?)rr",
908 "(V?)ADDSDrr",
909 "(V?)ADDSSrr",
910 "(V?)ADDSUBPD(Y?)rr",
911 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000912 "(V?)CVTDQ2PS(Y?)rr",
913 "(V?)CVTPS2DQ(Y?)rr",
914 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000915 "(V?)MULPD(Y?)rr",
916 "(V?)MULPS(Y?)rr",
917 "(V?)MULSDrr",
918 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000919 "(V?)PMADDUBSW(Y?)rr",
920 "(V?)PMADDWD(Y?)rr",
921 "(V?)PMULDQ(Y?)rr",
922 "(V?)PMULHRSW(Y?)rr",
923 "(V?)PMULHUW(Y?)rr",
924 "(V?)PMULHW(Y?)rr",
925 "(V?)PMULLW(Y?)rr",
926 "(V?)PMULUDQ(Y?)rr",
927 "(V?)SUBPD(Y?)rr",
928 "(V?)SUBPS(Y?)rr",
929 "(V?)SUBSDrr",
930 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000931
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000932def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000933 let Latency = 4;
934 let NumMicroOps = 2;
935 let ResourceCycles = [1,1];
936}
Craig Topperf846e2d2018-04-19 05:34:05 +0000937def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000938
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000939def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
940 let Latency = 4;
941 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000942 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000943}
Craig Topperfc179c62018-03-22 04:23:41 +0000944def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000945
946def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000947 let Latency = 4;
948 let NumMicroOps = 2;
949 let ResourceCycles = [1,1];
950}
Craig Topperfc179c62018-03-22 04:23:41 +0000951def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
952 "VPSLLQYrr",
953 "VPSLLWYrr",
954 "VPSRADYrr",
955 "VPSRAWYrr",
956 "VPSRLDYrr",
957 "VPSRLQYrr",
958 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000959
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000960def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000961 let Latency = 4;
962 let NumMicroOps = 3;
963 let ResourceCycles = [1,1,1];
964}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000965def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
966 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000967
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000968def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000969 let Latency = 4;
970 let NumMicroOps = 4;
971 let ResourceCycles = [4];
972}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000973def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000974
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000975def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000976 let Latency = 4;
977 let NumMicroOps = 4;
978 let ResourceCycles = [1,3];
979}
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000980def: InstRW<[SKLWriteResGroup55], (instrs PAUSE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000981
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000982def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000983 let Latency = 4;
984 let NumMicroOps = 4;
985 let ResourceCycles = [1,3];
986}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000987def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000988
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000989def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000990 let Latency = 4;
991 let NumMicroOps = 4;
992 let ResourceCycles = [1,1,2];
993}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000994def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000995
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000996def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
997 let Latency = 5;
998 let NumMicroOps = 1;
999 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001000}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001001def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001002 "MOVSX(16|32|64)rm32",
1003 "MOVSX(16|32|64)rm8",
1004 "MOVZX(16|32|64)rm16",
1005 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001006 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001007
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001008def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001009 let Latency = 5;
1010 let NumMicroOps = 2;
1011 let ResourceCycles = [1,1];
1012}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001013def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1014 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001015
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001016def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001017 let Latency = 5;
1018 let NumMicroOps = 2;
1019 let ResourceCycles = [1,1];
1020}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001021def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001022 "MMX_CVTPS2PIirr",
1023 "MMX_CVTTPD2PIirr",
1024 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001025 "(V?)CVTPD2DQrr",
1026 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001027 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001028 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001029 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001030 "(V?)CVTSD2SSrr",
1031 "(V?)CVTSI642SDrr",
1032 "(V?)CVTSI2SDrr",
1033 "(V?)CVTSI2SSrr",
1034 "(V?)CVTSS2SDrr",
1035 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001036
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001037def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001038 let Latency = 5;
1039 let NumMicroOps = 3;
1040 let ResourceCycles = [1,1,1];
1041}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001042def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001043
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001044def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001045 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001046 let NumMicroOps = 3;
1047 let ResourceCycles = [1,1,1];
1048}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001049def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001050
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001051def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001052 let Latency = 5;
1053 let NumMicroOps = 5;
1054 let ResourceCycles = [1,4];
1055}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001056def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001057
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001058def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001059 let Latency = 5;
1060 let NumMicroOps = 5;
1061 let ResourceCycles = [2,3];
1062}
Craig Topper13a16502018-03-19 00:56:09 +00001063def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001064
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001065def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001066 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001067 let NumMicroOps = 6;
1068 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001069}
Craig Topperfc179c62018-03-22 04:23:41 +00001070def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1071 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001072
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001073def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1074 let Latency = 6;
1075 let NumMicroOps = 1;
1076 let ResourceCycles = [1];
1077}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001078def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001079 "(V?)MOVSHDUPrm",
1080 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001081 "VPBROADCASTDrm",
1082 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001083
1084def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001085 let Latency = 6;
1086 let NumMicroOps = 2;
1087 let ResourceCycles = [2];
1088}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001089def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001090
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001091def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001092 let Latency = 6;
1093 let NumMicroOps = 2;
1094 let ResourceCycles = [1,1];
1095}
Craig Topperfc179c62018-03-22 04:23:41 +00001096def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1097 "MMX_PADDSWirm",
1098 "MMX_PADDUSBirm",
1099 "MMX_PADDUSWirm",
1100 "MMX_PAVGBirm",
1101 "MMX_PAVGWirm",
1102 "MMX_PCMPEQBirm",
1103 "MMX_PCMPEQDirm",
1104 "MMX_PCMPEQWirm",
1105 "MMX_PCMPGTBirm",
1106 "MMX_PCMPGTDirm",
1107 "MMX_PCMPGTWirm",
1108 "MMX_PMAXSWirm",
1109 "MMX_PMAXUBirm",
1110 "MMX_PMINSWirm",
1111 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001112 "MMX_PSUBSBirm",
1113 "MMX_PSUBSWirm",
1114 "MMX_PSUBUSBirm",
1115 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001116
Craig Topper58afb4e2018-03-22 21:10:07 +00001117def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001118 let Latency = 6;
1119 let NumMicroOps = 2;
1120 let ResourceCycles = [1,1];
1121}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001122def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1123 "(V?)CVTSD2SIrr",
1124 "(V?)CVTSS2SI64rr",
1125 "(V?)CVTSS2SIrr",
1126 "(V?)CVTTSD2SI64rr",
1127 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001128
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001129def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1130 let Latency = 6;
1131 let NumMicroOps = 2;
1132 let ResourceCycles = [1,1];
1133}
Craig Topperfc179c62018-03-22 04:23:41 +00001134def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1135 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001136
1137def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1138 let Latency = 6;
1139 let NumMicroOps = 2;
1140 let ResourceCycles = [1,1];
1141}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001142def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1143 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001144 "MMX_PANDNirm",
1145 "MMX_PANDirm",
1146 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001147 "MMX_PSIGN(B|D|W)rm",
1148 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001149 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001150
1151def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1152 let Latency = 6;
1153 let NumMicroOps = 2;
1154 let ResourceCycles = [1,1];
1155}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001156def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001157def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1158 ADCX32rm, ADCX64rm,
1159 ADOX32rm, ADOX64rm,
1160 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001161
1162def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1163 let Latency = 6;
1164 let NumMicroOps = 2;
1165 let ResourceCycles = [1,1];
1166}
Craig Topperfc179c62018-03-22 04:23:41 +00001167def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1168 "BLSI(32|64)rm",
1169 "BLSMSK(32|64)rm",
1170 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001171 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001172
1173def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1174 let Latency = 6;
1175 let NumMicroOps = 2;
1176 let ResourceCycles = [1,1];
1177}
Craig Topper2d451e72018-03-18 08:38:06 +00001178def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001179def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001180
Craig Topper58afb4e2018-03-22 21:10:07 +00001181def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001182 let Latency = 6;
1183 let NumMicroOps = 3;
1184 let ResourceCycles = [2,1];
1185}
Craig Topperfc179c62018-03-22 04:23:41 +00001186def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001187
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001188def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001189 let Latency = 6;
1190 let NumMicroOps = 4;
1191 let ResourceCycles = [1,2,1];
1192}
Craig Topperfc179c62018-03-22 04:23:41 +00001193def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1194 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001195
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001196def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001197 let Latency = 6;
1198 let NumMicroOps = 4;
1199 let ResourceCycles = [1,1,1,1];
1200}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001201def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001202
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001203def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1204 let Latency = 6;
1205 let NumMicroOps = 4;
1206 let ResourceCycles = [1,1,1,1];
1207}
Craig Topperfc179c62018-03-22 04:23:41 +00001208def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1209 "BTR(16|32|64)mi8",
1210 "BTS(16|32|64)mi8",
1211 "SAR(8|16|32|64)m1",
1212 "SAR(8|16|32|64)mi",
1213 "SHL(8|16|32|64)m1",
1214 "SHL(8|16|32|64)mi",
1215 "SHR(8|16|32|64)m1",
1216 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001217
1218def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1219 let Latency = 6;
1220 let NumMicroOps = 4;
1221 let ResourceCycles = [1,1,1,1];
1222}
Craig Topperf0d04262018-04-06 16:16:48 +00001223def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1224 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001225
1226def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001227 let Latency = 6;
1228 let NumMicroOps = 6;
1229 let ResourceCycles = [1,5];
1230}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001231def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001232
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001233def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1234 let Latency = 7;
1235 let NumMicroOps = 1;
1236 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001237}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001238def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001239 "VBROADCASTF128",
1240 "VBROADCASTI128",
1241 "VBROADCASTSDYrm",
1242 "VBROADCASTSSYrm",
1243 "VLDDQUYrm",
1244 "VMOVAPDYrm",
1245 "VMOVAPSYrm",
1246 "VMOVDDUPYrm",
1247 "VMOVDQAYrm",
1248 "VMOVDQUYrm",
1249 "VMOVNTDQAYrm",
1250 "VMOVSHDUPYrm",
1251 "VMOVSLDUPYrm",
1252 "VMOVUPDYrm",
1253 "VMOVUPSYrm",
1254 "VPBROADCASTDYrm",
1255 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001256
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001257def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001258 let Latency = 7;
1259 let NumMicroOps = 2;
1260 let ResourceCycles = [1,1];
1261}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001262def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001263
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001264def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1265 let Latency = 7;
1266 let NumMicroOps = 2;
1267 let ResourceCycles = [1,1];
1268}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001269def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1270 "(V?)PACKSSDWrm",
1271 "(V?)PACKSSWBrm",
1272 "(V?)PACKUSDWrm",
1273 "(V?)PACKUSWBrm",
1274 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001275 "VPBROADCASTBrm",
1276 "VPBROADCASTWrm",
1277 "VPERMILPDmi",
1278 "VPERMILPDrm",
1279 "VPERMILPSmi",
1280 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001281 "(V?)PSHUFBrm",
1282 "(V?)PSHUFDmi",
1283 "(V?)PSHUFHWmi",
1284 "(V?)PSHUFLWmi",
1285 "(V?)PUNPCKHBWrm",
1286 "(V?)PUNPCKHDQrm",
1287 "(V?)PUNPCKHQDQrm",
1288 "(V?)PUNPCKHWDrm",
1289 "(V?)PUNPCKLBWrm",
1290 "(V?)PUNPCKLDQrm",
1291 "(V?)PUNPCKLQDQrm",
1292 "(V?)PUNPCKLWDrm",
1293 "(V?)SHUFPDrmi",
1294 "(V?)SHUFPSrmi",
1295 "(V?)UNPCKHPDrm",
1296 "(V?)UNPCKHPSrm",
1297 "(V?)UNPCKLPDrm",
1298 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001299
Craig Topper58afb4e2018-03-22 21:10:07 +00001300def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001301 let Latency = 7;
1302 let NumMicroOps = 2;
1303 let ResourceCycles = [1,1];
1304}
Craig Topperfc179c62018-03-22 04:23:41 +00001305def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1306 "VCVTPD2PSYrr",
1307 "VCVTPH2PSYrr",
1308 "VCVTPS2PDYrr",
1309 "VCVTPS2PHYrr",
1310 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001311
1312def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1313 let Latency = 7;
1314 let NumMicroOps = 2;
1315 let ResourceCycles = [1,1];
1316}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001317def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1318 "(V?)PABSDrm",
1319 "(V?)PABSWrm",
1320 "(V?)PADDSBrm",
1321 "(V?)PADDSWrm",
1322 "(V?)PADDUSBrm",
1323 "(V?)PADDUSWrm",
1324 "(V?)PAVGBrm",
1325 "(V?)PAVGWrm",
1326 "(V?)PCMPEQBrm",
1327 "(V?)PCMPEQDrm",
1328 "(V?)PCMPEQQrm",
1329 "(V?)PCMPEQWrm",
1330 "(V?)PCMPGTBrm",
1331 "(V?)PCMPGTDrm",
1332 "(V?)PCMPGTWrm",
1333 "(V?)PMAXSBrm",
1334 "(V?)PMAXSDrm",
1335 "(V?)PMAXSWrm",
1336 "(V?)PMAXUBrm",
1337 "(V?)PMAXUDrm",
1338 "(V?)PMAXUWrm",
1339 "(V?)PMINSBrm",
1340 "(V?)PMINSDrm",
1341 "(V?)PMINSWrm",
1342 "(V?)PMINUBrm",
1343 "(V?)PMINUDrm",
1344 "(V?)PMINUWrm",
1345 "(V?)PSIGNBrm",
1346 "(V?)PSIGNDrm",
1347 "(V?)PSIGNWrm",
1348 "(V?)PSLLDrm",
1349 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001350 "VPSLLVDrm",
1351 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001352 "(V?)PSLLWrm",
1353 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001354 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001355 "(V?)PSRAWrm",
1356 "(V?)PSRLDrm",
1357 "(V?)PSRLQrm",
1358 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001359 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001360 "(V?)PSRLWrm",
1361 "(V?)PSUBSBrm",
1362 "(V?)PSUBSWrm",
1363 "(V?)PSUBUSBrm",
1364 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001365
1366def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1367 let Latency = 7;
1368 let NumMicroOps = 2;
1369 let ResourceCycles = [1,1];
1370}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001371def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001372 "(V?)INSERTI128rm",
1373 "(V?)MASKMOVPDrm",
1374 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001375 "(V?)PADDBrm",
1376 "(V?)PADDDrm",
1377 "(V?)PADDQrm",
1378 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001379 "(V?)PBLENDDrmi",
1380 "(V?)PMASKMOVDrm",
1381 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001382 "(V?)PSUBBrm",
1383 "(V?)PSUBDrm",
1384 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001385 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001386
1387def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1388 let Latency = 7;
1389 let NumMicroOps = 3;
1390 let ResourceCycles = [2,1];
1391}
Craig Topperfc179c62018-03-22 04:23:41 +00001392def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1393 "MMX_PACKSSWBirm",
1394 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001395
1396def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1397 let Latency = 7;
1398 let NumMicroOps = 3;
1399 let ResourceCycles = [1,2];
1400}
Craig Topperf4cd9082018-01-19 05:47:32 +00001401def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001402
1403def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1404 let Latency = 7;
1405 let NumMicroOps = 3;
1406 let ResourceCycles = [1,2];
1407}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001408def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1409 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001410
Craig Topper58afb4e2018-03-22 21:10:07 +00001411def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001412 let Latency = 7;
1413 let NumMicroOps = 3;
1414 let ResourceCycles = [1,1,1];
1415}
Craig Topperfc179c62018-03-22 04:23:41 +00001416def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1417 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001418
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001419def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001420 let Latency = 7;
1421 let NumMicroOps = 3;
1422 let ResourceCycles = [1,1,1];
1423}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001424def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001425
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001426def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001427 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001428 let NumMicroOps = 3;
1429 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001430}
Craig Topperfc179c62018-03-22 04:23:41 +00001431def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1432 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001433
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001434def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1435 let Latency = 7;
1436 let NumMicroOps = 5;
1437 let ResourceCycles = [1,1,1,2];
1438}
Craig Topperfc179c62018-03-22 04:23:41 +00001439def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1440 "ROL(8|16|32|64)mi",
1441 "ROR(8|16|32|64)m1",
1442 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001443
1444def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1445 let Latency = 7;
1446 let NumMicroOps = 5;
1447 let ResourceCycles = [1,1,1,2];
1448}
Craig Topper13a16502018-03-19 00:56:09 +00001449def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001450
1451def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1452 let Latency = 7;
1453 let NumMicroOps = 5;
1454 let ResourceCycles = [1,1,1,1,1];
1455}
Craig Topperfc179c62018-03-22 04:23:41 +00001456def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1457 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001458
1459def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001460 let Latency = 7;
1461 let NumMicroOps = 7;
1462 let ResourceCycles = [1,3,1,2];
1463}
Craig Topper2d451e72018-03-18 08:38:06 +00001464def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001465
Craig Topper58afb4e2018-03-22 21:10:07 +00001466def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001467 let Latency = 8;
1468 let NumMicroOps = 2;
1469 let ResourceCycles = [2];
1470}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001471def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1472 "(V?)ROUNDPS(Y?)r",
1473 "(V?)ROUNDSDr",
1474 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001475
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001476def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001477 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001478 let NumMicroOps = 2;
1479 let ResourceCycles = [1,1];
1480}
Craig Topperfc179c62018-03-22 04:23:41 +00001481def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1482 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001483
1484def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1485 let Latency = 8;
1486 let NumMicroOps = 2;
1487 let ResourceCycles = [1,1];
1488}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001489def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1490 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001491
1492def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001493 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001494 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001495 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001496}
Craig Topperf846e2d2018-04-19 05:34:05 +00001497def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001498
Craig Topperf846e2d2018-04-19 05:34:05 +00001499def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1500 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001501 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001502 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001503}
Craig Topperfc179c62018-03-22 04:23:41 +00001504def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001505
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001506def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1507 let Latency = 8;
1508 let NumMicroOps = 2;
1509 let ResourceCycles = [1,1];
1510}
Craig Topperfc179c62018-03-22 04:23:41 +00001511def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1512 "FCOM64m",
1513 "FCOMP32m",
1514 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001515 "VPACKSSDWYrm",
1516 "VPACKSSWBYrm",
1517 "VPACKUSDWYrm",
1518 "VPACKUSWBYrm",
1519 "VPALIGNRYrmi",
1520 "VPBLENDWYrmi",
1521 "VPBROADCASTBYrm",
1522 "VPBROADCASTWYrm",
1523 "VPERMILPDYmi",
1524 "VPERMILPDYrm",
1525 "VPERMILPSYmi",
1526 "VPERMILPSYrm",
1527 "VPMOVSXBDYrm",
1528 "VPMOVSXBQYrm",
1529 "VPMOVSXWQYrm",
1530 "VPSHUFBYrm",
1531 "VPSHUFDYmi",
1532 "VPSHUFHWYmi",
1533 "VPSHUFLWYmi",
1534 "VPUNPCKHBWYrm",
1535 "VPUNPCKHDQYrm",
1536 "VPUNPCKHQDQYrm",
1537 "VPUNPCKHWDYrm",
1538 "VPUNPCKLBWYrm",
1539 "VPUNPCKLDQYrm",
1540 "VPUNPCKLQDQYrm",
1541 "VPUNPCKLWDYrm",
1542 "VSHUFPDYrmi",
1543 "VSHUFPSYrmi",
1544 "VUNPCKHPDYrm",
1545 "VUNPCKHPSYrm",
1546 "VUNPCKLPDYrm",
1547 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001548
1549def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1550 let Latency = 8;
1551 let NumMicroOps = 2;
1552 let ResourceCycles = [1,1];
1553}
Craig Topperfc179c62018-03-22 04:23:41 +00001554def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1555 "VPABSDYrm",
1556 "VPABSWYrm",
1557 "VPADDSBYrm",
1558 "VPADDSWYrm",
1559 "VPADDUSBYrm",
1560 "VPADDUSWYrm",
1561 "VPAVGBYrm",
1562 "VPAVGWYrm",
1563 "VPCMPEQBYrm",
1564 "VPCMPEQDYrm",
1565 "VPCMPEQQYrm",
1566 "VPCMPEQWYrm",
1567 "VPCMPGTBYrm",
1568 "VPCMPGTDYrm",
1569 "VPCMPGTWYrm",
1570 "VPMAXSBYrm",
1571 "VPMAXSDYrm",
1572 "VPMAXSWYrm",
1573 "VPMAXUBYrm",
1574 "VPMAXUDYrm",
1575 "VPMAXUWYrm",
1576 "VPMINSBYrm",
1577 "VPMINSDYrm",
1578 "VPMINSWYrm",
1579 "VPMINUBYrm",
1580 "VPMINUDYrm",
1581 "VPMINUWYrm",
1582 "VPSIGNBYrm",
1583 "VPSIGNDYrm",
1584 "VPSIGNWYrm",
1585 "VPSLLDYrm",
1586 "VPSLLQYrm",
1587 "VPSLLVDYrm",
1588 "VPSLLVQYrm",
1589 "VPSLLWYrm",
1590 "VPSRADYrm",
1591 "VPSRAVDYrm",
1592 "VPSRAWYrm",
1593 "VPSRLDYrm",
1594 "VPSRLQYrm",
1595 "VPSRLVDYrm",
1596 "VPSRLVQYrm",
1597 "VPSRLWYrm",
1598 "VPSUBSBYrm",
1599 "VPSUBSWYrm",
1600 "VPSUBUSBYrm",
1601 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001602
1603def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1604 let Latency = 8;
1605 let NumMicroOps = 2;
1606 let ResourceCycles = [1,1];
1607}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001608def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001609 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001610 "VPADDBYrm",
1611 "VPADDDYrm",
1612 "VPADDQYrm",
1613 "VPADDWYrm",
1614 "VPANDNYrm",
1615 "VPANDYrm",
1616 "VPBLENDDYrmi",
1617 "VPMASKMOVDYrm",
1618 "VPMASKMOVQYrm",
1619 "VPORYrm",
1620 "VPSUBBYrm",
1621 "VPSUBDYrm",
1622 "VPSUBQYrm",
1623 "VPSUBWYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001624 "VPXORYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001625
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001626def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1627 let Latency = 8;
1628 let NumMicroOps = 4;
1629 let ResourceCycles = [1,2,1];
1630}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001631def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001632
1633def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1634 let Latency = 8;
1635 let NumMicroOps = 4;
1636 let ResourceCycles = [2,1,1];
1637}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001638def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001639
Craig Topper58afb4e2018-03-22 21:10:07 +00001640def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001641 let Latency = 8;
1642 let NumMicroOps = 4;
1643 let ResourceCycles = [1,1,1,1];
1644}
1645def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1646
1647def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1648 let Latency = 8;
1649 let NumMicroOps = 5;
1650 let ResourceCycles = [1,1,3];
1651}
Craig Topper13a16502018-03-19 00:56:09 +00001652def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001653
1654def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1655 let Latency = 8;
1656 let NumMicroOps = 5;
1657 let ResourceCycles = [1,1,1,2];
1658}
Craig Topperfc179c62018-03-22 04:23:41 +00001659def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1660 "RCL(8|16|32|64)mi",
1661 "RCR(8|16|32|64)m1",
1662 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001663
1664def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1665 let Latency = 8;
1666 let NumMicroOps = 6;
1667 let ResourceCycles = [1,1,1,3];
1668}
Craig Topperfc179c62018-03-22 04:23:41 +00001669def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1670 "SAR(8|16|32|64)mCL",
1671 "SHL(8|16|32|64)mCL",
1672 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001673
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001674def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1675 let Latency = 8;
1676 let NumMicroOps = 6;
1677 let ResourceCycles = [1,1,1,2,1];
1678}
Craig Topper9f834812018-04-01 21:54:24 +00001679def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001680 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001681 "SBB(8|16|32|64)mi")>;
1682def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1683 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001684
1685def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1686 let Latency = 9;
1687 let NumMicroOps = 2;
1688 let ResourceCycles = [1,1];
1689}
Craig Topperfc179c62018-03-22 04:23:41 +00001690def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1691 "MMX_PMADDUBSWrm",
1692 "MMX_PMADDWDirm",
1693 "MMX_PMULHRSWrm",
1694 "MMX_PMULHUWirm",
1695 "MMX_PMULHWirm",
1696 "MMX_PMULLWirm",
1697 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001698 "VTESTPDYrm",
1699 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001700
1701def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1702 let Latency = 9;
1703 let NumMicroOps = 2;
1704 let ResourceCycles = [1,1];
1705}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001706def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001707 "VPMOVSXBWYrm",
1708 "VPMOVSXDQYrm",
1709 "VPMOVSXWDYrm",
1710 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001711 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001712
1713def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1714 let Latency = 9;
1715 let NumMicroOps = 2;
1716 let ResourceCycles = [1,1];
1717}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001718def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1719 "(V?)ADDSSrm",
1720 "(V?)CMPSDrm",
1721 "(V?)CMPSSrm",
1722 "(V?)MAX(C?)SDrm",
1723 "(V?)MAX(C?)SSrm",
1724 "(V?)MIN(C?)SDrm",
1725 "(V?)MIN(C?)SSrm",
1726 "(V?)MULSDrm",
1727 "(V?)MULSSrm",
1728 "(V?)SUBSDrm",
1729 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001730
Craig Topper58afb4e2018-03-22 21:10:07 +00001731def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001732 let Latency = 9;
1733 let NumMicroOps = 2;
1734 let ResourceCycles = [1,1];
1735}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001736def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001737 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001738 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001739 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001740
Craig Topper58afb4e2018-03-22 21:10:07 +00001741def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001742 let Latency = 9;
1743 let NumMicroOps = 3;
1744 let ResourceCycles = [1,2];
1745}
Craig Topperfc179c62018-03-22 04:23:41 +00001746def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001747
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001748def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1749 let Latency = 9;
1750 let NumMicroOps = 3;
1751 let ResourceCycles = [1,1,1];
1752}
Craig Topperfc179c62018-03-22 04:23:41 +00001753def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001754
1755def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1756 let Latency = 9;
1757 let NumMicroOps = 3;
1758 let ResourceCycles = [1,1,1];
1759}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001760def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001761
1762def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001763 let Latency = 9;
1764 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001765 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001766}
Craig Topperfc179c62018-03-22 04:23:41 +00001767def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1768 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001769
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001770def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1771 let Latency = 9;
1772 let NumMicroOps = 4;
1773 let ResourceCycles = [2,1,1];
1774}
Craig Topperfc179c62018-03-22 04:23:41 +00001775def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1776 "(V?)PHADDWrm",
1777 "(V?)PHSUBDrm",
1778 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001779
1780def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1781 let Latency = 9;
1782 let NumMicroOps = 4;
1783 let ResourceCycles = [1,1,1,1];
1784}
Craig Topperfc179c62018-03-22 04:23:41 +00001785def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1786 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001787
1788def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1789 let Latency = 9;
1790 let NumMicroOps = 5;
1791 let ResourceCycles = [1,2,1,1];
1792}
Craig Topperfc179c62018-03-22 04:23:41 +00001793def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1794 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001795
1796def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1797 let Latency = 10;
1798 let NumMicroOps = 2;
1799 let ResourceCycles = [1,1];
1800}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001801def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001802 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001803
1804def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1805 let Latency = 10;
1806 let NumMicroOps = 2;
1807 let ResourceCycles = [1,1];
1808}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001809def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1810 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001811 "VPCMPGTQYrm",
1812 "VPERM2F128rm",
1813 "VPERM2I128rm",
1814 "VPERMDYrm",
1815 "VPERMPDYmi",
1816 "VPERMPSYrm",
1817 "VPERMQYmi",
1818 "VPMOVZXBDYrm",
1819 "VPMOVZXBQYrm",
1820 "VPMOVZXBWYrm",
1821 "VPMOVZXDQYrm",
1822 "VPMOVZXWQYrm",
1823 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001824
1825def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1826 let Latency = 10;
1827 let NumMicroOps = 2;
1828 let ResourceCycles = [1,1];
1829}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001830def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1831 "(V?)ADDPSrm",
1832 "(V?)ADDSUBPDrm",
1833 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001834 "(V?)CVTDQ2PSrm",
1835 "(V?)CVTPH2PSYrm",
1836 "(V?)CVTPS2DQrm",
1837 "(V?)CVTSS2SDrm",
1838 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001839 "(V?)MULPDrm",
1840 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001841 "(V?)PMADDUBSWrm",
1842 "(V?)PMADDWDrm",
1843 "(V?)PMULDQrm",
1844 "(V?)PMULHRSWrm",
1845 "(V?)PMULHUWrm",
1846 "(V?)PMULHWrm",
1847 "(V?)PMULLWrm",
1848 "(V?)PMULUDQrm",
1849 "(V?)SUBPDrm",
1850 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001851
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001852def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1853 let Latency = 10;
1854 let NumMicroOps = 3;
1855 let ResourceCycles = [1,1,1];
1856}
Craig Topperfc179c62018-03-22 04:23:41 +00001857def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1858 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001859
Craig Topper58afb4e2018-03-22 21:10:07 +00001860def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001861 let Latency = 10;
1862 let NumMicroOps = 3;
1863 let ResourceCycles = [1,1,1];
1864}
Craig Topperfc179c62018-03-22 04:23:41 +00001865def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001866
1867def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001868 let Latency = 10;
1869 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001870 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001871}
Craig Topperfc179c62018-03-22 04:23:41 +00001872def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1873 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001874
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001875def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1876 let Latency = 10;
1877 let NumMicroOps = 4;
1878 let ResourceCycles = [2,1,1];
1879}
Craig Topperfc179c62018-03-22 04:23:41 +00001880def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1881 "VPHADDWYrm",
1882 "VPHSUBDYrm",
1883 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001884
1885def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001886 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001887 let NumMicroOps = 4;
1888 let ResourceCycles = [1,1,1,1];
1889}
Craig Topperf846e2d2018-04-19 05:34:05 +00001890def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001891
1892def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1893 let Latency = 10;
1894 let NumMicroOps = 8;
1895 let ResourceCycles = [1,1,1,1,1,3];
1896}
Craig Topper13a16502018-03-19 00:56:09 +00001897def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001898
1899def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001900 let Latency = 10;
1901 let NumMicroOps = 10;
1902 let ResourceCycles = [9,1];
1903}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001904def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001905
Craig Topper8104f262018-04-02 05:33:28 +00001906def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001907 let Latency = 11;
1908 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001909 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001910}
Craig Topper8104f262018-04-02 05:33:28 +00001911def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001912 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001913
Craig Topper8104f262018-04-02 05:33:28 +00001914def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1915 let Latency = 11;
1916 let NumMicroOps = 1;
1917 let ResourceCycles = [1,5];
1918}
1919def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1920
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001921def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001922 let Latency = 11;
1923 let NumMicroOps = 2;
1924 let ResourceCycles = [1,1];
1925}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001926def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001927 "VRCPPSYm",
1928 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001929
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001930def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1931 let Latency = 11;
1932 let NumMicroOps = 2;
1933 let ResourceCycles = [1,1];
1934}
Craig Topperfc179c62018-03-22 04:23:41 +00001935def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1936 "VADDPSYrm",
1937 "VADDSUBPDYrm",
1938 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001939 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001940 "VCMPPSYrmi",
1941 "VCVTDQ2PSYrm",
1942 "VCVTPS2DQYrm",
1943 "VCVTPS2PDYrm",
1944 "VCVTTPS2DQYrm",
1945 "VMAX(C?)PDYrm",
1946 "VMAX(C?)PSYrm",
1947 "VMIN(C?)PDYrm",
1948 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001949 "VMULPDYrm",
1950 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001951 "VPMADDUBSWYrm",
1952 "VPMADDWDYrm",
1953 "VPMULDQYrm",
1954 "VPMULHRSWYrm",
1955 "VPMULHUWYrm",
1956 "VPMULHWYrm",
1957 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001958 "VPMULUDQYrm",
1959 "VSUBPDYrm",
1960 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001961
1962def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1963 let Latency = 11;
1964 let NumMicroOps = 3;
1965 let ResourceCycles = [2,1];
1966}
Craig Topperfc179c62018-03-22 04:23:41 +00001967def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1968 "FICOM32m",
1969 "FICOMP16m",
1970 "FICOMP32m",
1971 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001972
1973def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1974 let Latency = 11;
1975 let NumMicroOps = 3;
1976 let ResourceCycles = [1,1,1];
1977}
Craig Topperfc179c62018-03-22 04:23:41 +00001978def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001979
Craig Topper58afb4e2018-03-22 21:10:07 +00001980def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001981 let Latency = 11;
1982 let NumMicroOps = 3;
1983 let ResourceCycles = [1,1,1];
1984}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001985def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1986 "(V?)CVTSD2SIrm",
1987 "(V?)CVTSS2SI64rm",
1988 "(V?)CVTSS2SIrm",
1989 "(V?)CVTTSD2SI64rm",
1990 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001991 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001992 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001993
Craig Topper58afb4e2018-03-22 21:10:07 +00001994def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001995 let Latency = 11;
1996 let NumMicroOps = 3;
1997 let ResourceCycles = [1,1,1];
1998}
Craig Topperfc179c62018-03-22 04:23:41 +00001999def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2000 "CVTPD2PSrm",
2001 "CVTTPD2DQrm",
2002 "MMX_CVTPD2PIirm",
2003 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002004
2005def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2006 let Latency = 11;
2007 let NumMicroOps = 6;
2008 let ResourceCycles = [1,1,1,2,1];
2009}
Craig Topperfc179c62018-03-22 04:23:41 +00002010def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2011 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002012
2013def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002014 let Latency = 11;
2015 let NumMicroOps = 7;
2016 let ResourceCycles = [2,3,2];
2017}
Craig Topperfc179c62018-03-22 04:23:41 +00002018def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2019 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002020
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002021def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002022 let Latency = 11;
2023 let NumMicroOps = 9;
2024 let ResourceCycles = [1,5,1,2];
2025}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002026def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002027
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002028def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002029 let Latency = 11;
2030 let NumMicroOps = 11;
2031 let ResourceCycles = [2,9];
2032}
Craig Topperfc179c62018-03-22 04:23:41 +00002033def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002034
Craig Topper8104f262018-04-02 05:33:28 +00002035def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002036 let Latency = 12;
2037 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002038 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002039}
Craig Topper8104f262018-04-02 05:33:28 +00002040def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002041 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002042
Craig Topper8104f262018-04-02 05:33:28 +00002043def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2044 let Latency = 12;
2045 let NumMicroOps = 1;
2046 let ResourceCycles = [1,6];
2047}
2048def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2049
Craig Topper58afb4e2018-03-22 21:10:07 +00002050def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002051 let Latency = 12;
2052 let NumMicroOps = 4;
2053 let ResourceCycles = [1,1,1,1];
2054}
2055def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2056
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002057def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002058 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002059 let NumMicroOps = 3;
2060 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002061}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002062def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002063
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002064def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2065 let Latency = 13;
2066 let NumMicroOps = 3;
2067 let ResourceCycles = [1,1,1];
2068}
2069def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2070
Craig Topper58afb4e2018-03-22 21:10:07 +00002071def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002072 let Latency = 13;
2073 let NumMicroOps = 4;
2074 let ResourceCycles = [1,3];
2075}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002076def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002077
Craig Topper8104f262018-04-02 05:33:28 +00002078def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002079 let Latency = 14;
2080 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002081 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002082}
Craig Topper8104f262018-04-02 05:33:28 +00002083def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002084 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002085
Craig Topper8104f262018-04-02 05:33:28 +00002086def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2087 let Latency = 14;
2088 let NumMicroOps = 1;
2089 let ResourceCycles = [1,5];
2090}
2091def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2092
Craig Topper58afb4e2018-03-22 21:10:07 +00002093def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002094 let Latency = 14;
2095 let NumMicroOps = 3;
2096 let ResourceCycles = [1,2];
2097}
Craig Topperfc179c62018-03-22 04:23:41 +00002098def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2099def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2100def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2101def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002102
2103def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2104 let Latency = 14;
2105 let NumMicroOps = 3;
2106 let ResourceCycles = [1,1,1];
2107}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002108def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002109
2110def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002111 let Latency = 14;
2112 let NumMicroOps = 10;
2113 let ResourceCycles = [2,4,1,3];
2114}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002115def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002116
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002117def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002118 let Latency = 15;
2119 let NumMicroOps = 1;
2120 let ResourceCycles = [1];
2121}
Craig Topperfc179c62018-03-22 04:23:41 +00002122def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2123 "DIVR_FST0r",
2124 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002125
Craig Topper58afb4e2018-03-22 21:10:07 +00002126def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002127 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002128 let NumMicroOps = 3;
2129 let ResourceCycles = [1,2];
2130}
Craig Topper40d3b322018-03-22 21:55:20 +00002131def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2132 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002133
Craig Topperd25f1ac2018-03-20 23:39:48 +00002134def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2135 let Latency = 17;
2136 let NumMicroOps = 3;
2137 let ResourceCycles = [1,2];
2138}
2139def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2140
Craig Topper58afb4e2018-03-22 21:10:07 +00002141def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002142 let Latency = 15;
2143 let NumMicroOps = 4;
2144 let ResourceCycles = [1,1,2];
2145}
Craig Topperfc179c62018-03-22 04:23:41 +00002146def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002147
2148def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2149 let Latency = 15;
2150 let NumMicroOps = 10;
2151 let ResourceCycles = [1,1,1,5,1,1];
2152}
Craig Topper13a16502018-03-19 00:56:09 +00002153def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002154
Craig Topper8104f262018-04-02 05:33:28 +00002155def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002156 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002157 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002158 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002159}
Craig Topperfc179c62018-03-22 04:23:41 +00002160def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002161
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002162def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2163 let Latency = 16;
2164 let NumMicroOps = 14;
2165 let ResourceCycles = [1,1,1,4,2,5];
2166}
2167def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2168
2169def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002170 let Latency = 16;
2171 let NumMicroOps = 16;
2172 let ResourceCycles = [16];
2173}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002174def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002175
Craig Topper8104f262018-04-02 05:33:28 +00002176def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002177 let Latency = 17;
2178 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002179 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002180}
Craig Topper8104f262018-04-02 05:33:28 +00002181def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2182
2183def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2184 let Latency = 17;
2185 let NumMicroOps = 2;
2186 let ResourceCycles = [1,1,3];
2187}
2188def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002189
2190def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002191 let Latency = 17;
2192 let NumMicroOps = 15;
2193 let ResourceCycles = [2,1,2,4,2,4];
2194}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002195def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002196
Craig Topper8104f262018-04-02 05:33:28 +00002197def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002198 let Latency = 18;
2199 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002200 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002201}
Craig Topper8104f262018-04-02 05:33:28 +00002202def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002203 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002204
Craig Topper8104f262018-04-02 05:33:28 +00002205def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2206 let Latency = 18;
2207 let NumMicroOps = 1;
2208 let ResourceCycles = [1,12];
2209}
2210def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2211
2212def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002213 let Latency = 18;
2214 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002215 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002216}
Craig Topper8104f262018-04-02 05:33:28 +00002217def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2218
2219def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2220 let Latency = 18;
2221 let NumMicroOps = 2;
2222 let ResourceCycles = [1,1,3];
2223}
2224def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002225
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002226def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002227 let Latency = 18;
2228 let NumMicroOps = 8;
2229 let ResourceCycles = [1,1,1,5];
2230}
Craig Topperfc179c62018-03-22 04:23:41 +00002231def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002232
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002233def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002234 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002235 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002236 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002237}
Craig Topper13a16502018-03-19 00:56:09 +00002238def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002239
Craig Topper8104f262018-04-02 05:33:28 +00002240def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002241 let Latency = 19;
2242 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002243 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002244}
Craig Topper8104f262018-04-02 05:33:28 +00002245def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2246
2247def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2248 let Latency = 19;
2249 let NumMicroOps = 2;
2250 let ResourceCycles = [1,1,6];
2251}
2252def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002253
Craig Topper58afb4e2018-03-22 21:10:07 +00002254def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002255 let Latency = 19;
2256 let NumMicroOps = 5;
2257 let ResourceCycles = [1,1,3];
2258}
Craig Topperfc179c62018-03-22 04:23:41 +00002259def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002260
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002261def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002262 let Latency = 20;
2263 let NumMicroOps = 1;
2264 let ResourceCycles = [1];
2265}
Craig Topperfc179c62018-03-22 04:23:41 +00002266def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2267 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002268 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002269
Craig Topper8104f262018-04-02 05:33:28 +00002270def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002271 let Latency = 20;
2272 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002273 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002274}
Craig Topperfc179c62018-03-22 04:23:41 +00002275def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002276
Craig Topper58afb4e2018-03-22 21:10:07 +00002277def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002278 let Latency = 20;
2279 let NumMicroOps = 5;
2280 let ResourceCycles = [1,1,3];
2281}
2282def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2283
2284def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2285 let Latency = 20;
2286 let NumMicroOps = 8;
2287 let ResourceCycles = [1,1,1,1,1,1,2];
2288}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002289def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002290
2291def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002292 let Latency = 20;
2293 let NumMicroOps = 10;
2294 let ResourceCycles = [1,2,7];
2295}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002296def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002297
Craig Topper8104f262018-04-02 05:33:28 +00002298def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002299 let Latency = 21;
2300 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002301 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002302}
2303def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2304
2305def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2306 let Latency = 22;
2307 let NumMicroOps = 2;
2308 let ResourceCycles = [1,1];
2309}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002310def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002311
2312def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2313 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002314 let NumMicroOps = 5;
2315 let ResourceCycles = [1,2,1,1];
2316}
Craig Topper17a31182017-12-16 18:35:29 +00002317def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2318 VGATHERDPDrm,
2319 VGATHERQPDrm,
2320 VGATHERQPSrm,
2321 VPGATHERDDrm,
2322 VPGATHERDQrm,
2323 VPGATHERQDrm,
2324 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002325
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002326def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2327 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002328 let NumMicroOps = 5;
2329 let ResourceCycles = [1,2,1,1];
2330}
Craig Topper17a31182017-12-16 18:35:29 +00002331def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2332 VGATHERQPDYrm,
2333 VGATHERQPSYrm,
2334 VPGATHERDDYrm,
2335 VPGATHERDQYrm,
2336 VPGATHERQDYrm,
2337 VPGATHERQQYrm,
2338 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002339
Craig Topper8104f262018-04-02 05:33:28 +00002340def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002341 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002342 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002343 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002344}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002345def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002346
2347def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2348 let Latency = 23;
2349 let NumMicroOps = 19;
2350 let ResourceCycles = [2,1,4,1,1,4,6];
2351}
2352def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2353
Craig Topper8104f262018-04-02 05:33:28 +00002354def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002355 let Latency = 24;
2356 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002357 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002358}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002359def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002360
Craig Topper8104f262018-04-02 05:33:28 +00002361def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002362 let Latency = 25;
2363 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002364 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002365}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002366def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002367
2368def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2369 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002370 let NumMicroOps = 3;
2371 let ResourceCycles = [1,1,1];
2372}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002373def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002374
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002375def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2376 let Latency = 27;
2377 let NumMicroOps = 2;
2378 let ResourceCycles = [1,1];
2379}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002380def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002381
2382def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2383 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002384 let NumMicroOps = 8;
2385 let ResourceCycles = [2,4,1,1];
2386}
Craig Topper13a16502018-03-19 00:56:09 +00002387def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002388
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002389def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002390 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002391 let NumMicroOps = 3;
2392 let ResourceCycles = [1,1,1];
2393}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002394def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002395
2396def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2397 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002398 let NumMicroOps = 23;
2399 let ResourceCycles = [1,5,3,4,10];
2400}
Craig Topperfc179c62018-03-22 04:23:41 +00002401def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2402 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002403
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002404def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2405 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002406 let NumMicroOps = 23;
2407 let ResourceCycles = [1,5,2,1,4,10];
2408}
Craig Topperfc179c62018-03-22 04:23:41 +00002409def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2410 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002411
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002412def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2413 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002414 let NumMicroOps = 31;
2415 let ResourceCycles = [1,8,1,21];
2416}
Craig Topper391c6f92017-12-10 01:24:08 +00002417def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002418
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002419def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2420 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002421 let NumMicroOps = 18;
2422 let ResourceCycles = [1,1,2,3,1,1,1,8];
2423}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002424def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002425
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002426def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2427 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002428 let NumMicroOps = 39;
2429 let ResourceCycles = [1,10,1,1,26];
2430}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002431def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002432
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002433def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002434 let Latency = 42;
2435 let NumMicroOps = 22;
2436 let ResourceCycles = [2,20];
2437}
Craig Topper2d451e72018-03-18 08:38:06 +00002438def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002439
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002440def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2441 let Latency = 42;
2442 let NumMicroOps = 40;
2443 let ResourceCycles = [1,11,1,1,26];
2444}
Craig Topper391c6f92017-12-10 01:24:08 +00002445def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002446
2447def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2448 let Latency = 46;
2449 let NumMicroOps = 44;
2450 let ResourceCycles = [1,11,1,1,30];
2451}
2452def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2453
2454def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2455 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002456 let NumMicroOps = 64;
2457 let ResourceCycles = [2,8,5,10,39];
2458}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002459def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002460
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002461def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2462 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002463 let NumMicroOps = 88;
2464 let ResourceCycles = [4,4,31,1,2,1,45];
2465}
Craig Topper2d451e72018-03-18 08:38:06 +00002466def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002467
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002468def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2469 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002470 let NumMicroOps = 90;
2471 let ResourceCycles = [4,2,33,1,2,1,47];
2472}
Craig Topper2d451e72018-03-18 08:38:06 +00002473def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002474
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002475def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476 let Latency = 75;
2477 let NumMicroOps = 15;
2478 let ResourceCycles = [6,3,6];
2479}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002480def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002481
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002482def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002483 let Latency = 76;
2484 let NumMicroOps = 32;
2485 let ResourceCycles = [7,2,8,3,1,11];
2486}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002487def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002488
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002489def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002490 let Latency = 102;
2491 let NumMicroOps = 66;
2492 let ResourceCycles = [4,2,4,8,14,34];
2493}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002494def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002495
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002496def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2497 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002498 let NumMicroOps = 100;
2499 let ResourceCycles = [9,1,11,16,1,11,21,30];
2500}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002501def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002502
2503} // SchedModel