blob: 1081614f7a7f205b8a47ea0eae8a0a1d2aca387b [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 "SAR(8|16|32|64)r1",
501 "SAR(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000502 "SBB(16|32|64)ri",
503 "SBB(16|32|64)i",
504 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000505 "SHL(8|16|32|64)r1",
506 "SHL(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000507 "SHR(8|16|32|64)r1",
Simon Pilgrimeb609092018-04-23 22:19:55 +0000508 "SHR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000509
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000510def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
511 let Latency = 1;
512 let NumMicroOps = 1;
513 let ResourceCycles = [1];
514}
Craig Topperfc179c62018-03-22 04:23:41 +0000515def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
516 "BLSI(32|64)rr",
517 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000518 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000519
520def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
521 let Latency = 1;
522 let NumMicroOps = 1;
523 let ResourceCycles = [1];
524}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000525def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000526 "(V?)PADDD(Y?)rr",
527 "(V?)PADDQ(Y?)rr",
528 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000529 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000530 "(V?)PSUBB(Y?)rr",
531 "(V?)PSUBD(Y?)rr",
532 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000533 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000534
535def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
536 let Latency = 1;
537 let NumMicroOps = 1;
538 let ResourceCycles = [1];
539}
Craig Topperfbe31322018-04-05 21:56:19 +0000540def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000541def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000542 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000543 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000544 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000545 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000546 "SGDT64m",
547 "SIDT64m",
548 "SLDT64m",
549 "SMSW16m",
550 "STC",
551 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000552 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000553
554def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000555 let Latency = 1;
556 let NumMicroOps = 2;
557 let ResourceCycles = [1,1];
558}
Craig Topperfc179c62018-03-22 04:23:41 +0000559def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
560 "MMX_MOVD64from64rm",
561 "MMX_MOVD64mr",
562 "MMX_MOVNTQmr",
563 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000564 "MOVNTI_64mr",
565 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000566 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000567 "VEXTRACTF128mr",
568 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000569 "(V?)MOVAPDYmr",
570 "(V?)MOVAPS(Y?)mr",
571 "(V?)MOVDQA(Y?)mr",
572 "(V?)MOVDQU(Y?)mr",
573 "(V?)MOVHPDmr",
574 "(V?)MOVHPSmr",
575 "(V?)MOVLPDmr",
576 "(V?)MOVLPSmr",
577 "(V?)MOVNTDQ(Y?)mr",
578 "(V?)MOVNTPD(Y?)mr",
579 "(V?)MOVNTPS(Y?)mr",
580 "(V?)MOVPDI2DImr",
581 "(V?)MOVPQI2QImr",
582 "(V?)MOVPQIto64mr",
583 "(V?)MOVSDmr",
584 "(V?)MOVSSmr",
585 "(V?)MOVUPD(Y?)mr",
586 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000587 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000588
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000589def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000590 let Latency = 2;
591 let NumMicroOps = 1;
592 let ResourceCycles = [1];
593}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000594def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000595 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000596 "(V?)MOVPDI2DIrr",
597 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000598 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000599 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000600
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000601def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000602 let Latency = 2;
603 let NumMicroOps = 2;
604 let ResourceCycles = [2];
605}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000606def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000607
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000608def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000609 let Latency = 2;
610 let NumMicroOps = 2;
611 let ResourceCycles = [2];
612}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000613def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
614def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000615
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000616def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000617 let Latency = 2;
618 let NumMicroOps = 2;
619 let ResourceCycles = [2];
620}
Craig Topperfc179c62018-03-22 04:23:41 +0000621def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
622 "ROL(8|16|32|64)r1",
623 "ROL(8|16|32|64)ri",
624 "ROR(8|16|32|64)r1",
625 "ROR(8|16|32|64)ri",
626 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000627
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000628def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000629 let Latency = 2;
630 let NumMicroOps = 2;
631 let ResourceCycles = [2];
632}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000633def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
634 WAIT,
635 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000636
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000637def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000638 let Latency = 2;
639 let NumMicroOps = 2;
640 let ResourceCycles = [1,1];
641}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000642def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
643 "VMASKMOVPS(Y?)mr",
644 "VPMASKMOVD(Y?)mr",
645 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000646
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000647def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000648 let Latency = 2;
649 let NumMicroOps = 2;
650 let ResourceCycles = [1,1];
651}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000652def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
653 "(V?)PSLLQrr",
654 "(V?)PSLLWrr",
655 "(V?)PSRADrr",
656 "(V?)PSRAWrr",
657 "(V?)PSRLDrr",
658 "(V?)PSRLQrr",
659 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000660
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000661def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000662 let Latency = 2;
663 let NumMicroOps = 2;
664 let ResourceCycles = [1,1];
665}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000666def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000667
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000668def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000669 let Latency = 2;
670 let NumMicroOps = 2;
671 let ResourceCycles = [1,1];
672}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000673def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000674
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000675def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000676 let Latency = 2;
677 let NumMicroOps = 2;
678 let ResourceCycles = [1,1];
679}
Craig Topper498875f2018-04-04 17:54:19 +0000680def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
681
682def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
683 let Latency = 1;
684 let NumMicroOps = 1;
685 let ResourceCycles = [1];
686}
687def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000688
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000689def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000690 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000691 let NumMicroOps = 2;
692 let ResourceCycles = [1,1];
693}
Craig Topper2d451e72018-03-18 08:38:06 +0000694def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000695def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000696def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
697 "ADC8ri",
698 "SBB8i8",
699 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000700
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000701def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
702 let Latency = 2;
703 let NumMicroOps = 3;
704 let ResourceCycles = [1,1,1];
705}
706def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
707
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000708def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
709 let Latency = 2;
710 let NumMicroOps = 3;
711 let ResourceCycles = [1,1,1];
712}
713def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
714
715def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
716 let Latency = 2;
717 let NumMicroOps = 3;
718 let ResourceCycles = [1,1,1];
719}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000720def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
721 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000722def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000723 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000724
725def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
726 let Latency = 3;
727 let NumMicroOps = 1;
728 let ResourceCycles = [1];
729}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000730def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000731 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000732 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000733 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000734
Clement Courbet327fac42018-03-07 08:14:02 +0000735def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000736 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000737 let NumMicroOps = 2;
738 let ResourceCycles = [1,1];
739}
Clement Courbet327fac42018-03-07 08:14:02 +0000740def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000741
742def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
743 let Latency = 3;
744 let NumMicroOps = 1;
745 let ResourceCycles = [1];
746}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000747def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
748 "(ADD|SUB|SUBR)_FST0r",
749 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000750 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000751 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000752 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000753 "VPMOVSXBDYrr",
754 "VPMOVSXBQYrr",
755 "VPMOVSXBWYrr",
756 "VPMOVSXDQYrr",
757 "VPMOVSXWDYrr",
758 "VPMOVSXWQYrr",
759 "VPMOVZXBDYrr",
760 "VPMOVZXBQYrr",
761 "VPMOVZXBWYrr",
762 "VPMOVZXDQYrr",
763 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000764 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000765
766def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
767 let Latency = 3;
768 let NumMicroOps = 2;
769 let ResourceCycles = [1,1];
770}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000771def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000772
773def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
774 let Latency = 3;
775 let NumMicroOps = 2;
776 let ResourceCycles = [1,1];
777}
778def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
779
780def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
781 let Latency = 3;
782 let NumMicroOps = 3;
783 let ResourceCycles = [3];
784}
Craig Topperfc179c62018-03-22 04:23:41 +0000785def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
786 "ROR(8|16|32|64)rCL",
787 "SAR(8|16|32|64)rCL",
788 "SHL(8|16|32|64)rCL",
789 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000790
791def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000792 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000793 let NumMicroOps = 3;
794 let ResourceCycles = [3];
795}
Craig Topperb5f26592018-04-19 18:00:17 +0000796def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
797 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
798 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000799
800def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
801 let Latency = 3;
802 let NumMicroOps = 3;
803 let ResourceCycles = [1,2];
804}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000805def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000806
807def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
808 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000809 let NumMicroOps = 3;
810 let ResourceCycles = [2,1];
811}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000812def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
813 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000814
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000815def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
816 let Latency = 3;
817 let NumMicroOps = 3;
818 let ResourceCycles = [2,1];
819}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000820def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000821
822def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
823 let Latency = 3;
824 let NumMicroOps = 3;
825 let ResourceCycles = [2,1];
826}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000827def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
828 "(V?)PHADDW(Y?)rr",
829 "(V?)PHSUBD(Y?)rr",
830 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000831
832def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
833 let Latency = 3;
834 let NumMicroOps = 3;
835 let ResourceCycles = [2,1];
836}
Craig Topperfc179c62018-03-22 04:23:41 +0000837def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
838 "MMX_PACKSSWBirr",
839 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000840
841def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
842 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000843 let NumMicroOps = 3;
844 let ResourceCycles = [1,2];
845}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000846def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000847
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000848def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
849 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000850 let NumMicroOps = 3;
851 let ResourceCycles = [1,2];
852}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000853def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000854
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000855def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
856 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000857 let NumMicroOps = 3;
858 let ResourceCycles = [1,2];
859}
Craig Topperfc179c62018-03-22 04:23:41 +0000860def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
861 "RCL(8|16|32|64)ri",
862 "RCR(8|16|32|64)r1",
863 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000864
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000865def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
866 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000867 let NumMicroOps = 3;
868 let ResourceCycles = [1,1,1];
869}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000870def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000871
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000872def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
873 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000874 let NumMicroOps = 4;
875 let ResourceCycles = [1,1,2];
876}
Craig Topperf4cd9082018-01-19 05:47:32 +0000877def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000878
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000879def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
880 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000881 let NumMicroOps = 4;
882 let ResourceCycles = [1,1,1,1];
883}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000884def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000885
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000886def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
887 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000888 let NumMicroOps = 4;
889 let ResourceCycles = [1,1,1,1];
890}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000891def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000892
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000893def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000894 let Latency = 4;
895 let NumMicroOps = 1;
896 let ResourceCycles = [1];
897}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000898def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000899 "MMX_PMADDWDirr",
900 "MMX_PMULHRSWrr",
901 "MMX_PMULHUWirr",
902 "MMX_PMULHWirr",
903 "MMX_PMULLWirr",
904 "MMX_PMULUDQirr",
905 "MUL_FPrST0",
906 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000907 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000908
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000909def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000910 let Latency = 4;
911 let NumMicroOps = 1;
912 let ResourceCycles = [1];
913}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000914def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
915 "(V?)ADDPS(Y?)rr",
916 "(V?)ADDSDrr",
917 "(V?)ADDSSrr",
918 "(V?)ADDSUBPD(Y?)rr",
919 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000920 "(V?)CVTDQ2PS(Y?)rr",
921 "(V?)CVTPS2DQ(Y?)rr",
922 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000923 "(V?)MULPD(Y?)rr",
924 "(V?)MULPS(Y?)rr",
925 "(V?)MULSDrr",
926 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000927 "(V?)PMADDUBSW(Y?)rr",
928 "(V?)PMADDWD(Y?)rr",
929 "(V?)PMULDQ(Y?)rr",
930 "(V?)PMULHRSW(Y?)rr",
931 "(V?)PMULHUW(Y?)rr",
932 "(V?)PMULHW(Y?)rr",
933 "(V?)PMULLW(Y?)rr",
934 "(V?)PMULUDQ(Y?)rr",
935 "(V?)SUBPD(Y?)rr",
936 "(V?)SUBPS(Y?)rr",
937 "(V?)SUBSDrr",
938 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000939
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000940def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000941 let Latency = 4;
942 let NumMicroOps = 2;
943 let ResourceCycles = [1,1];
944}
Craig Topperf846e2d2018-04-19 05:34:05 +0000945def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000946
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000947def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
948 let Latency = 4;
949 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000950 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000951}
Craig Topperfc179c62018-03-22 04:23:41 +0000952def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000953
954def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000955 let Latency = 4;
956 let NumMicroOps = 2;
957 let ResourceCycles = [1,1];
958}
Craig Topperfc179c62018-03-22 04:23:41 +0000959def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
960 "VPSLLQYrr",
961 "VPSLLWYrr",
962 "VPSRADYrr",
963 "VPSRAWYrr",
964 "VPSRLDYrr",
965 "VPSRLQYrr",
966 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000967
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000968def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000969 let Latency = 4;
970 let NumMicroOps = 3;
971 let ResourceCycles = [1,1,1];
972}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000973def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
974 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000975
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000976def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000977 let Latency = 4;
978 let NumMicroOps = 4;
979 let ResourceCycles = [4];
980}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000981def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000982
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000983def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000984 let Latency = 4;
985 let NumMicroOps = 4;
986 let ResourceCycles = [1,3];
987}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000988def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000989
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000990def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000991 let Latency = 4;
992 let NumMicroOps = 4;
993 let ResourceCycles = [1,3];
994}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000995def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000996
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000997def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000998 let Latency = 4;
999 let NumMicroOps = 4;
1000 let ResourceCycles = [1,1,2];
1001}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001002def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001003
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001004def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1005 let Latency = 5;
1006 let NumMicroOps = 1;
1007 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001009def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001010 "MOVSX(16|32|64)rm32",
1011 "MOVSX(16|32|64)rm8",
1012 "MOVZX(16|32|64)rm16",
1013 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001014 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001015
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001016def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
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<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1022 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001023
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001024def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001025 let Latency = 5;
1026 let NumMicroOps = 2;
1027 let ResourceCycles = [1,1];
1028}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001029def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001030 "MMX_CVTPS2PIirr",
1031 "MMX_CVTTPD2PIirr",
1032 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001033 "(V?)CVTPD2DQrr",
1034 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001035 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001036 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001037 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001038 "(V?)CVTSD2SSrr",
1039 "(V?)CVTSI642SDrr",
1040 "(V?)CVTSI2SDrr",
1041 "(V?)CVTSI2SSrr",
1042 "(V?)CVTSS2SDrr",
1043 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001044
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001045def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001046 let Latency = 5;
1047 let NumMicroOps = 3;
1048 let ResourceCycles = [1,1,1];
1049}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001050def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001051
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001052def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001053 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001054 let NumMicroOps = 3;
1055 let ResourceCycles = [1,1,1];
1056}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001057def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001058
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001059def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001060 let Latency = 5;
1061 let NumMicroOps = 5;
1062 let ResourceCycles = [1,4];
1063}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001064def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001066def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001067 let Latency = 5;
1068 let NumMicroOps = 5;
1069 let ResourceCycles = [2,3];
1070}
Craig Topper13a16502018-03-19 00:56:09 +00001071def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001072
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001073def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001074 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001075 let NumMicroOps = 6;
1076 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001077}
Craig Topperfc179c62018-03-22 04:23:41 +00001078def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1079 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001080
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001081def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1082 let Latency = 6;
1083 let NumMicroOps = 1;
1084 let ResourceCycles = [1];
1085}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001086def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001087 "(V?)MOVSHDUPrm",
1088 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001089 "VPBROADCASTDrm",
1090 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001091
1092def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001093 let Latency = 6;
1094 let NumMicroOps = 2;
1095 let ResourceCycles = [2];
1096}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001097def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001098
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001099def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001100 let Latency = 6;
1101 let NumMicroOps = 2;
1102 let ResourceCycles = [1,1];
1103}
Craig Topperfc179c62018-03-22 04:23:41 +00001104def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1105 "MMX_PADDSWirm",
1106 "MMX_PADDUSBirm",
1107 "MMX_PADDUSWirm",
1108 "MMX_PAVGBirm",
1109 "MMX_PAVGWirm",
1110 "MMX_PCMPEQBirm",
1111 "MMX_PCMPEQDirm",
1112 "MMX_PCMPEQWirm",
1113 "MMX_PCMPGTBirm",
1114 "MMX_PCMPGTDirm",
1115 "MMX_PCMPGTWirm",
1116 "MMX_PMAXSWirm",
1117 "MMX_PMAXUBirm",
1118 "MMX_PMINSWirm",
1119 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001120 "MMX_PSUBSBirm",
1121 "MMX_PSUBSWirm",
1122 "MMX_PSUBUSBirm",
1123 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001124
Craig Topper58afb4e2018-03-22 21:10:07 +00001125def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001126 let Latency = 6;
1127 let NumMicroOps = 2;
1128 let ResourceCycles = [1,1];
1129}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001130def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1131 "(V?)CVTSD2SIrr",
1132 "(V?)CVTSS2SI64rr",
1133 "(V?)CVTSS2SIrr",
1134 "(V?)CVTTSD2SI64rr",
1135 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001136
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001137def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1138 let Latency = 6;
1139 let NumMicroOps = 2;
1140 let ResourceCycles = [1,1];
1141}
Craig Topperfc179c62018-03-22 04:23:41 +00001142def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1143 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001144
1145def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1146 let Latency = 6;
1147 let NumMicroOps = 2;
1148 let ResourceCycles = [1,1];
1149}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001150def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1151 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001152 "MMX_PANDNirm",
1153 "MMX_PANDirm",
1154 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001155 "MMX_PSIGN(B|D|W)rm",
1156 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001157 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001158
1159def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1160 let Latency = 6;
1161 let NumMicroOps = 2;
1162 let ResourceCycles = [1,1];
1163}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001164def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001165def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1166 ADCX32rm, ADCX64rm,
1167 ADOX32rm, ADOX64rm,
1168 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001169
1170def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1171 let Latency = 6;
1172 let NumMicroOps = 2;
1173 let ResourceCycles = [1,1];
1174}
Craig Topperfc179c62018-03-22 04:23:41 +00001175def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1176 "BLSI(32|64)rm",
1177 "BLSMSK(32|64)rm",
1178 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001179 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001180
1181def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1182 let Latency = 6;
1183 let NumMicroOps = 2;
1184 let ResourceCycles = [1,1];
1185}
Craig Topper2d451e72018-03-18 08:38:06 +00001186def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001187def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001188
Craig Topper58afb4e2018-03-22 21:10:07 +00001189def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001190 let Latency = 6;
1191 let NumMicroOps = 3;
1192 let ResourceCycles = [2,1];
1193}
Craig Topperfc179c62018-03-22 04:23:41 +00001194def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001195
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001196def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001197 let Latency = 6;
1198 let NumMicroOps = 4;
1199 let ResourceCycles = [1,2,1];
1200}
Craig Topperfc179c62018-03-22 04:23:41 +00001201def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1202 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001203
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001204def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001205 let Latency = 6;
1206 let NumMicroOps = 4;
1207 let ResourceCycles = [1,1,1,1];
1208}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001209def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001210
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001211def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1212 let Latency = 6;
1213 let NumMicroOps = 4;
1214 let ResourceCycles = [1,1,1,1];
1215}
Craig Topperfc179c62018-03-22 04:23:41 +00001216def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1217 "BTR(16|32|64)mi8",
1218 "BTS(16|32|64)mi8",
1219 "SAR(8|16|32|64)m1",
1220 "SAR(8|16|32|64)mi",
1221 "SHL(8|16|32|64)m1",
1222 "SHL(8|16|32|64)mi",
1223 "SHR(8|16|32|64)m1",
1224 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001225
1226def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1227 let Latency = 6;
1228 let NumMicroOps = 4;
1229 let ResourceCycles = [1,1,1,1];
1230}
Craig Topperf0d04262018-04-06 16:16:48 +00001231def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1232 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001233
1234def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001235 let Latency = 6;
1236 let NumMicroOps = 6;
1237 let ResourceCycles = [1,5];
1238}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001239def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001240
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001241def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1242 let Latency = 7;
1243 let NumMicroOps = 1;
1244 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001245}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001246def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001247 "VBROADCASTF128",
1248 "VBROADCASTI128",
1249 "VBROADCASTSDYrm",
1250 "VBROADCASTSSYrm",
1251 "VLDDQUYrm",
1252 "VMOVAPDYrm",
1253 "VMOVAPSYrm",
1254 "VMOVDDUPYrm",
1255 "VMOVDQAYrm",
1256 "VMOVDQUYrm",
1257 "VMOVNTDQAYrm",
1258 "VMOVSHDUPYrm",
1259 "VMOVSLDUPYrm",
1260 "VMOVUPDYrm",
1261 "VMOVUPSYrm",
1262 "VPBROADCASTDYrm",
1263 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001264
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001265def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001266 let Latency = 7;
1267 let NumMicroOps = 2;
1268 let ResourceCycles = [1,1];
1269}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001270def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001271
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001272def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1273 let Latency = 7;
1274 let NumMicroOps = 2;
1275 let ResourceCycles = [1,1];
1276}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001277def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1278 "(V?)PACKSSDWrm",
1279 "(V?)PACKSSWBrm",
1280 "(V?)PACKUSDWrm",
1281 "(V?)PACKUSWBrm",
1282 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001283 "VPBROADCASTBrm",
1284 "VPBROADCASTWrm",
1285 "VPERMILPDmi",
1286 "VPERMILPDrm",
1287 "VPERMILPSmi",
1288 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001289 "(V?)PSHUFBrm",
1290 "(V?)PSHUFDmi",
1291 "(V?)PSHUFHWmi",
1292 "(V?)PSHUFLWmi",
1293 "(V?)PUNPCKHBWrm",
1294 "(V?)PUNPCKHDQrm",
1295 "(V?)PUNPCKHQDQrm",
1296 "(V?)PUNPCKHWDrm",
1297 "(V?)PUNPCKLBWrm",
1298 "(V?)PUNPCKLDQrm",
1299 "(V?)PUNPCKLQDQrm",
1300 "(V?)PUNPCKLWDrm",
1301 "(V?)SHUFPDrmi",
1302 "(V?)SHUFPSrmi",
1303 "(V?)UNPCKHPDrm",
1304 "(V?)UNPCKHPSrm",
1305 "(V?)UNPCKLPDrm",
1306 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001307
Craig Topper58afb4e2018-03-22 21:10:07 +00001308def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001309 let Latency = 7;
1310 let NumMicroOps = 2;
1311 let ResourceCycles = [1,1];
1312}
Craig Topperfc179c62018-03-22 04:23:41 +00001313def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1314 "VCVTPD2PSYrr",
1315 "VCVTPH2PSYrr",
1316 "VCVTPS2PDYrr",
1317 "VCVTPS2PHYrr",
1318 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001319
1320def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1321 let Latency = 7;
1322 let NumMicroOps = 2;
1323 let ResourceCycles = [1,1];
1324}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001325def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1326 "(V?)PABSDrm",
1327 "(V?)PABSWrm",
1328 "(V?)PADDSBrm",
1329 "(V?)PADDSWrm",
1330 "(V?)PADDUSBrm",
1331 "(V?)PADDUSWrm",
1332 "(V?)PAVGBrm",
1333 "(V?)PAVGWrm",
1334 "(V?)PCMPEQBrm",
1335 "(V?)PCMPEQDrm",
1336 "(V?)PCMPEQQrm",
1337 "(V?)PCMPEQWrm",
1338 "(V?)PCMPGTBrm",
1339 "(V?)PCMPGTDrm",
1340 "(V?)PCMPGTWrm",
1341 "(V?)PMAXSBrm",
1342 "(V?)PMAXSDrm",
1343 "(V?)PMAXSWrm",
1344 "(V?)PMAXUBrm",
1345 "(V?)PMAXUDrm",
1346 "(V?)PMAXUWrm",
1347 "(V?)PMINSBrm",
1348 "(V?)PMINSDrm",
1349 "(V?)PMINSWrm",
1350 "(V?)PMINUBrm",
1351 "(V?)PMINUDrm",
1352 "(V?)PMINUWrm",
1353 "(V?)PSIGNBrm",
1354 "(V?)PSIGNDrm",
1355 "(V?)PSIGNWrm",
1356 "(V?)PSLLDrm",
1357 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001358 "VPSLLVDrm",
1359 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001360 "(V?)PSLLWrm",
1361 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001362 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001363 "(V?)PSRAWrm",
1364 "(V?)PSRLDrm",
1365 "(V?)PSRLQrm",
1366 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001367 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001368 "(V?)PSRLWrm",
1369 "(V?)PSUBSBrm",
1370 "(V?)PSUBSWrm",
1371 "(V?)PSUBUSBrm",
1372 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001373
1374def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1375 let Latency = 7;
1376 let NumMicroOps = 2;
1377 let ResourceCycles = [1,1];
1378}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001379def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001380 "(V?)INSERTI128rm",
1381 "(V?)MASKMOVPDrm",
1382 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001383 "(V?)PADDBrm",
1384 "(V?)PADDDrm",
1385 "(V?)PADDQrm",
1386 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001387 "(V?)PBLENDDrmi",
1388 "(V?)PMASKMOVDrm",
1389 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001390 "(V?)PSUBBrm",
1391 "(V?)PSUBDrm",
1392 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001393 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001394
1395def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1396 let Latency = 7;
1397 let NumMicroOps = 3;
1398 let ResourceCycles = [2,1];
1399}
Craig Topperfc179c62018-03-22 04:23:41 +00001400def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1401 "MMX_PACKSSWBirm",
1402 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001403
1404def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1405 let Latency = 7;
1406 let NumMicroOps = 3;
1407 let ResourceCycles = [1,2];
1408}
Craig Topperf4cd9082018-01-19 05:47:32 +00001409def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001410
1411def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1412 let Latency = 7;
1413 let NumMicroOps = 3;
1414 let ResourceCycles = [1,2];
1415}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001416def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1417 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001418
Craig Topper58afb4e2018-03-22 21:10:07 +00001419def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001420 let Latency = 7;
1421 let NumMicroOps = 3;
1422 let ResourceCycles = [1,1,1];
1423}
Craig Topperfc179c62018-03-22 04:23:41 +00001424def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1425 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001426
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001427def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001428 let Latency = 7;
1429 let NumMicroOps = 3;
1430 let ResourceCycles = [1,1,1];
1431}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001432def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001433
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001434def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001435 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001436 let NumMicroOps = 3;
1437 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001438}
Craig Topperfc179c62018-03-22 04:23:41 +00001439def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1440 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001441
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001442def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1443 let Latency = 7;
1444 let NumMicroOps = 5;
1445 let ResourceCycles = [1,1,1,2];
1446}
Craig Topperfc179c62018-03-22 04:23:41 +00001447def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1448 "ROL(8|16|32|64)mi",
1449 "ROR(8|16|32|64)m1",
1450 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001451
1452def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1453 let Latency = 7;
1454 let NumMicroOps = 5;
1455 let ResourceCycles = [1,1,1,2];
1456}
Craig Topper13a16502018-03-19 00:56:09 +00001457def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001458
1459def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1460 let Latency = 7;
1461 let NumMicroOps = 5;
1462 let ResourceCycles = [1,1,1,1,1];
1463}
Craig Topperfc179c62018-03-22 04:23:41 +00001464def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1465 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001466
1467def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001468 let Latency = 7;
1469 let NumMicroOps = 7;
1470 let ResourceCycles = [1,3,1,2];
1471}
Craig Topper2d451e72018-03-18 08:38:06 +00001472def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001473
Craig Topper58afb4e2018-03-22 21:10:07 +00001474def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001475 let Latency = 8;
1476 let NumMicroOps = 2;
1477 let ResourceCycles = [2];
1478}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001479def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1480 "(V?)ROUNDPS(Y?)r",
1481 "(V?)ROUNDSDr",
1482 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001483
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001484def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001485 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001486 let NumMicroOps = 2;
1487 let ResourceCycles = [1,1];
1488}
Craig Topperfc179c62018-03-22 04:23:41 +00001489def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1490 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001491
1492def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1493 let Latency = 8;
1494 let NumMicroOps = 2;
1495 let ResourceCycles = [1,1];
1496}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001497def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1498 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001499
1500def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001501 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001502 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001503 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001504}
Craig Topperf846e2d2018-04-19 05:34:05 +00001505def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001506
Craig Topperf846e2d2018-04-19 05:34:05 +00001507def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1508 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001509 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001510 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001511}
Craig Topperfc179c62018-03-22 04:23:41 +00001512def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001513
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001514def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1515 let Latency = 8;
1516 let NumMicroOps = 2;
1517 let ResourceCycles = [1,1];
1518}
Craig Topperfc179c62018-03-22 04:23:41 +00001519def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1520 "FCOM64m",
1521 "FCOMP32m",
1522 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001523 "VPACKSSDWYrm",
1524 "VPACKSSWBYrm",
1525 "VPACKUSDWYrm",
1526 "VPACKUSWBYrm",
1527 "VPALIGNRYrmi",
1528 "VPBLENDWYrmi",
1529 "VPBROADCASTBYrm",
1530 "VPBROADCASTWYrm",
1531 "VPERMILPDYmi",
1532 "VPERMILPDYrm",
1533 "VPERMILPSYmi",
1534 "VPERMILPSYrm",
1535 "VPMOVSXBDYrm",
1536 "VPMOVSXBQYrm",
1537 "VPMOVSXWQYrm",
1538 "VPSHUFBYrm",
1539 "VPSHUFDYmi",
1540 "VPSHUFHWYmi",
1541 "VPSHUFLWYmi",
1542 "VPUNPCKHBWYrm",
1543 "VPUNPCKHDQYrm",
1544 "VPUNPCKHQDQYrm",
1545 "VPUNPCKHWDYrm",
1546 "VPUNPCKLBWYrm",
1547 "VPUNPCKLDQYrm",
1548 "VPUNPCKLQDQYrm",
1549 "VPUNPCKLWDYrm",
1550 "VSHUFPDYrmi",
1551 "VSHUFPSYrmi",
1552 "VUNPCKHPDYrm",
1553 "VUNPCKHPSYrm",
1554 "VUNPCKLPDYrm",
1555 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001556
1557def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1558 let Latency = 8;
1559 let NumMicroOps = 2;
1560 let ResourceCycles = [1,1];
1561}
Craig Topperfc179c62018-03-22 04:23:41 +00001562def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1563 "VPABSDYrm",
1564 "VPABSWYrm",
1565 "VPADDSBYrm",
1566 "VPADDSWYrm",
1567 "VPADDUSBYrm",
1568 "VPADDUSWYrm",
1569 "VPAVGBYrm",
1570 "VPAVGWYrm",
1571 "VPCMPEQBYrm",
1572 "VPCMPEQDYrm",
1573 "VPCMPEQQYrm",
1574 "VPCMPEQWYrm",
1575 "VPCMPGTBYrm",
1576 "VPCMPGTDYrm",
1577 "VPCMPGTWYrm",
1578 "VPMAXSBYrm",
1579 "VPMAXSDYrm",
1580 "VPMAXSWYrm",
1581 "VPMAXUBYrm",
1582 "VPMAXUDYrm",
1583 "VPMAXUWYrm",
1584 "VPMINSBYrm",
1585 "VPMINSDYrm",
1586 "VPMINSWYrm",
1587 "VPMINUBYrm",
1588 "VPMINUDYrm",
1589 "VPMINUWYrm",
1590 "VPSIGNBYrm",
1591 "VPSIGNDYrm",
1592 "VPSIGNWYrm",
1593 "VPSLLDYrm",
1594 "VPSLLQYrm",
1595 "VPSLLVDYrm",
1596 "VPSLLVQYrm",
1597 "VPSLLWYrm",
1598 "VPSRADYrm",
1599 "VPSRAVDYrm",
1600 "VPSRAWYrm",
1601 "VPSRLDYrm",
1602 "VPSRLQYrm",
1603 "VPSRLVDYrm",
1604 "VPSRLVQYrm",
1605 "VPSRLWYrm",
1606 "VPSUBSBYrm",
1607 "VPSUBSWYrm",
1608 "VPSUBUSBYrm",
1609 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001610
1611def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1612 let Latency = 8;
1613 let NumMicroOps = 2;
1614 let ResourceCycles = [1,1];
1615}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001616def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001617 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001618 "VPADDBYrm",
1619 "VPADDDYrm",
1620 "VPADDQYrm",
1621 "VPADDWYrm",
1622 "VPANDNYrm",
1623 "VPANDYrm",
1624 "VPBLENDDYrmi",
1625 "VPMASKMOVDYrm",
1626 "VPMASKMOVQYrm",
1627 "VPORYrm",
1628 "VPSUBBYrm",
1629 "VPSUBDYrm",
1630 "VPSUBQYrm",
1631 "VPSUBWYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001632 "VPXORYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001633
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001634def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1635 let Latency = 8;
1636 let NumMicroOps = 4;
1637 let ResourceCycles = [1,2,1];
1638}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001639def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001640
1641def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1642 let Latency = 8;
1643 let NumMicroOps = 4;
1644 let ResourceCycles = [2,1,1];
1645}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001646def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001647
Craig Topper58afb4e2018-03-22 21:10:07 +00001648def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001649 let Latency = 8;
1650 let NumMicroOps = 4;
1651 let ResourceCycles = [1,1,1,1];
1652}
1653def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1654
1655def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1656 let Latency = 8;
1657 let NumMicroOps = 5;
1658 let ResourceCycles = [1,1,3];
1659}
Craig Topper13a16502018-03-19 00:56:09 +00001660def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001661
1662def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1663 let Latency = 8;
1664 let NumMicroOps = 5;
1665 let ResourceCycles = [1,1,1,2];
1666}
Craig Topperfc179c62018-03-22 04:23:41 +00001667def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1668 "RCL(8|16|32|64)mi",
1669 "RCR(8|16|32|64)m1",
1670 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001671
1672def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1673 let Latency = 8;
1674 let NumMicroOps = 6;
1675 let ResourceCycles = [1,1,1,3];
1676}
Craig Topperfc179c62018-03-22 04:23:41 +00001677def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1678 "SAR(8|16|32|64)mCL",
1679 "SHL(8|16|32|64)mCL",
1680 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001681
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001682def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1683 let Latency = 8;
1684 let NumMicroOps = 6;
1685 let ResourceCycles = [1,1,1,2,1];
1686}
Craig Topper9f834812018-04-01 21:54:24 +00001687def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001688 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001689 "SBB(8|16|32|64)mi")>;
1690def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1691 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001692
1693def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1694 let Latency = 9;
1695 let NumMicroOps = 2;
1696 let ResourceCycles = [1,1];
1697}
Craig Topperfc179c62018-03-22 04:23:41 +00001698def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1699 "MMX_PMADDUBSWrm",
1700 "MMX_PMADDWDirm",
1701 "MMX_PMULHRSWrm",
1702 "MMX_PMULHUWirm",
1703 "MMX_PMULHWirm",
1704 "MMX_PMULLWirm",
1705 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001706 "VTESTPDYrm",
1707 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001708
1709def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1710 let Latency = 9;
1711 let NumMicroOps = 2;
1712 let ResourceCycles = [1,1];
1713}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001714def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001715 "VPMOVSXBWYrm",
1716 "VPMOVSXDQYrm",
1717 "VPMOVSXWDYrm",
1718 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001719 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001720
1721def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1722 let Latency = 9;
1723 let NumMicroOps = 2;
1724 let ResourceCycles = [1,1];
1725}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001726def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1727 "(V?)ADDSSrm",
1728 "(V?)CMPSDrm",
1729 "(V?)CMPSSrm",
1730 "(V?)MAX(C?)SDrm",
1731 "(V?)MAX(C?)SSrm",
1732 "(V?)MIN(C?)SDrm",
1733 "(V?)MIN(C?)SSrm",
1734 "(V?)MULSDrm",
1735 "(V?)MULSSrm",
1736 "(V?)SUBSDrm",
1737 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001738
Craig Topper58afb4e2018-03-22 21:10:07 +00001739def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001740 let Latency = 9;
1741 let NumMicroOps = 2;
1742 let ResourceCycles = [1,1];
1743}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001744def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001745 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001746 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001747 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001748
Craig Topper58afb4e2018-03-22 21:10:07 +00001749def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001750 let Latency = 9;
1751 let NumMicroOps = 3;
1752 let ResourceCycles = [1,2];
1753}
Craig Topperfc179c62018-03-22 04:23:41 +00001754def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001755
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001756def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1757 let Latency = 9;
1758 let NumMicroOps = 3;
1759 let ResourceCycles = [1,1,1];
1760}
Craig Topperfc179c62018-03-22 04:23:41 +00001761def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001762
1763def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1764 let Latency = 9;
1765 let NumMicroOps = 3;
1766 let ResourceCycles = [1,1,1];
1767}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001768def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001769
1770def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001771 let Latency = 9;
1772 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001773 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001774}
Craig Topperfc179c62018-03-22 04:23:41 +00001775def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1776 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001777
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001778def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1779 let Latency = 9;
1780 let NumMicroOps = 4;
1781 let ResourceCycles = [2,1,1];
1782}
Craig Topperfc179c62018-03-22 04:23:41 +00001783def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1784 "(V?)PHADDWrm",
1785 "(V?)PHSUBDrm",
1786 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001787
1788def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1789 let Latency = 9;
1790 let NumMicroOps = 4;
1791 let ResourceCycles = [1,1,1,1];
1792}
Craig Topperfc179c62018-03-22 04:23:41 +00001793def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1794 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001795
1796def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1797 let Latency = 9;
1798 let NumMicroOps = 5;
1799 let ResourceCycles = [1,2,1,1];
1800}
Craig Topperfc179c62018-03-22 04:23:41 +00001801def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1802 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001803
1804def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1805 let Latency = 10;
1806 let NumMicroOps = 2;
1807 let ResourceCycles = [1,1];
1808}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001809def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001810 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001811
1812def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1813 let Latency = 10;
1814 let NumMicroOps = 2;
1815 let ResourceCycles = [1,1];
1816}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001817def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1818 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001819 "VPCMPGTQYrm",
1820 "VPERM2F128rm",
1821 "VPERM2I128rm",
1822 "VPERMDYrm",
1823 "VPERMPDYmi",
1824 "VPERMPSYrm",
1825 "VPERMQYmi",
1826 "VPMOVZXBDYrm",
1827 "VPMOVZXBQYrm",
1828 "VPMOVZXBWYrm",
1829 "VPMOVZXDQYrm",
1830 "VPMOVZXWQYrm",
1831 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001832
1833def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1834 let Latency = 10;
1835 let NumMicroOps = 2;
1836 let ResourceCycles = [1,1];
1837}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001838def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1839 "(V?)ADDPSrm",
1840 "(V?)ADDSUBPDrm",
1841 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001842 "(V?)CVTDQ2PSrm",
1843 "(V?)CVTPH2PSYrm",
1844 "(V?)CVTPS2DQrm",
1845 "(V?)CVTSS2SDrm",
1846 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001847 "(V?)MULPDrm",
1848 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001849 "(V?)PMADDUBSWrm",
1850 "(V?)PMADDWDrm",
1851 "(V?)PMULDQrm",
1852 "(V?)PMULHRSWrm",
1853 "(V?)PMULHUWrm",
1854 "(V?)PMULHWrm",
1855 "(V?)PMULLWrm",
1856 "(V?)PMULUDQrm",
1857 "(V?)SUBPDrm",
1858 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001859
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001860def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1861 let Latency = 10;
1862 let NumMicroOps = 3;
1863 let ResourceCycles = [1,1,1];
1864}
Craig Topperfc179c62018-03-22 04:23:41 +00001865def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1866 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001867
Craig Topper58afb4e2018-03-22 21:10:07 +00001868def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001869 let Latency = 10;
1870 let NumMicroOps = 3;
1871 let ResourceCycles = [1,1,1];
1872}
Craig Topperfc179c62018-03-22 04:23:41 +00001873def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001874
1875def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001876 let Latency = 10;
1877 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001878 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001879}
Craig Topperfc179c62018-03-22 04:23:41 +00001880def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1881 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001882
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001883def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1884 let Latency = 10;
1885 let NumMicroOps = 4;
1886 let ResourceCycles = [2,1,1];
1887}
Craig Topperfc179c62018-03-22 04:23:41 +00001888def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1889 "VPHADDWYrm",
1890 "VPHSUBDYrm",
1891 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001892
1893def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001894 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001895 let NumMicroOps = 4;
1896 let ResourceCycles = [1,1,1,1];
1897}
Craig Topperf846e2d2018-04-19 05:34:05 +00001898def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001899
1900def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1901 let Latency = 10;
1902 let NumMicroOps = 8;
1903 let ResourceCycles = [1,1,1,1,1,3];
1904}
Craig Topper13a16502018-03-19 00:56:09 +00001905def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001906
1907def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001908 let Latency = 10;
1909 let NumMicroOps = 10;
1910 let ResourceCycles = [9,1];
1911}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001912def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001913
Craig Topper8104f262018-04-02 05:33:28 +00001914def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001915 let Latency = 11;
1916 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001917 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001918}
Craig Topper8104f262018-04-02 05:33:28 +00001919def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001920 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001921
Craig Topper8104f262018-04-02 05:33:28 +00001922def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1923 let Latency = 11;
1924 let NumMicroOps = 1;
1925 let ResourceCycles = [1,5];
1926}
1927def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1928
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001929def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001930 let Latency = 11;
1931 let NumMicroOps = 2;
1932 let ResourceCycles = [1,1];
1933}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001934def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001935 "VRCPPSYm",
1936 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001937
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001938def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1939 let Latency = 11;
1940 let NumMicroOps = 2;
1941 let ResourceCycles = [1,1];
1942}
Craig Topperfc179c62018-03-22 04:23:41 +00001943def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1944 "VADDPSYrm",
1945 "VADDSUBPDYrm",
1946 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001947 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001948 "VCMPPSYrmi",
1949 "VCVTDQ2PSYrm",
1950 "VCVTPS2DQYrm",
1951 "VCVTPS2PDYrm",
1952 "VCVTTPS2DQYrm",
1953 "VMAX(C?)PDYrm",
1954 "VMAX(C?)PSYrm",
1955 "VMIN(C?)PDYrm",
1956 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001957 "VMULPDYrm",
1958 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001959 "VPMADDUBSWYrm",
1960 "VPMADDWDYrm",
1961 "VPMULDQYrm",
1962 "VPMULHRSWYrm",
1963 "VPMULHUWYrm",
1964 "VPMULHWYrm",
1965 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001966 "VPMULUDQYrm",
1967 "VSUBPDYrm",
1968 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001969
1970def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1971 let Latency = 11;
1972 let NumMicroOps = 3;
1973 let ResourceCycles = [2,1];
1974}
Craig Topperfc179c62018-03-22 04:23:41 +00001975def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1976 "FICOM32m",
1977 "FICOMP16m",
1978 "FICOMP32m",
1979 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001980
1981def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1982 let Latency = 11;
1983 let NumMicroOps = 3;
1984 let ResourceCycles = [1,1,1];
1985}
Craig Topperfc179c62018-03-22 04:23:41 +00001986def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001987
Craig Topper58afb4e2018-03-22 21:10:07 +00001988def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001989 let Latency = 11;
1990 let NumMicroOps = 3;
1991 let ResourceCycles = [1,1,1];
1992}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001993def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1994 "(V?)CVTSD2SIrm",
1995 "(V?)CVTSS2SI64rm",
1996 "(V?)CVTSS2SIrm",
1997 "(V?)CVTTSD2SI64rm",
1998 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001999 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002000 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002001
Craig Topper58afb4e2018-03-22 21:10:07 +00002002def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002003 let Latency = 11;
2004 let NumMicroOps = 3;
2005 let ResourceCycles = [1,1,1];
2006}
Craig Topperfc179c62018-03-22 04:23:41 +00002007def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2008 "CVTPD2PSrm",
2009 "CVTTPD2DQrm",
2010 "MMX_CVTPD2PIirm",
2011 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002012
2013def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2014 let Latency = 11;
2015 let NumMicroOps = 6;
2016 let ResourceCycles = [1,1,1,2,1];
2017}
Craig Topperfc179c62018-03-22 04:23:41 +00002018def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2019 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002020
2021def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002022 let Latency = 11;
2023 let NumMicroOps = 7;
2024 let ResourceCycles = [2,3,2];
2025}
Craig Topperfc179c62018-03-22 04:23:41 +00002026def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2027 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002028
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002029def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002030 let Latency = 11;
2031 let NumMicroOps = 9;
2032 let ResourceCycles = [1,5,1,2];
2033}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002034def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002035
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002036def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002037 let Latency = 11;
2038 let NumMicroOps = 11;
2039 let ResourceCycles = [2,9];
2040}
Craig Topperfc179c62018-03-22 04:23:41 +00002041def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002042
Craig Topper8104f262018-04-02 05:33:28 +00002043def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002044 let Latency = 12;
2045 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002046 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002047}
Craig Topper8104f262018-04-02 05:33:28 +00002048def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002049 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002050
Craig Topper8104f262018-04-02 05:33:28 +00002051def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2052 let Latency = 12;
2053 let NumMicroOps = 1;
2054 let ResourceCycles = [1,6];
2055}
2056def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2057
Craig Topper58afb4e2018-03-22 21:10:07 +00002058def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002059 let Latency = 12;
2060 let NumMicroOps = 4;
2061 let ResourceCycles = [1,1,1,1];
2062}
2063def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2064
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002065def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002066 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002067 let NumMicroOps = 3;
2068 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002069}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002070def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002071
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002072def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2073 let Latency = 13;
2074 let NumMicroOps = 3;
2075 let ResourceCycles = [1,1,1];
2076}
2077def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2078
Craig Topper58afb4e2018-03-22 21:10:07 +00002079def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002080 let Latency = 13;
2081 let NumMicroOps = 4;
2082 let ResourceCycles = [1,3];
2083}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002084def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002085
Craig Topper8104f262018-04-02 05:33:28 +00002086def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002087 let Latency = 14;
2088 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002089 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002090}
Craig Topper8104f262018-04-02 05:33:28 +00002091def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002092 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002093
Craig Topper8104f262018-04-02 05:33:28 +00002094def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2095 let Latency = 14;
2096 let NumMicroOps = 1;
2097 let ResourceCycles = [1,5];
2098}
2099def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2100
Craig Topper58afb4e2018-03-22 21:10:07 +00002101def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002102 let Latency = 14;
2103 let NumMicroOps = 3;
2104 let ResourceCycles = [1,2];
2105}
Craig Topperfc179c62018-03-22 04:23:41 +00002106def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2107def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2108def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2109def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002110
2111def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2112 let Latency = 14;
2113 let NumMicroOps = 3;
2114 let ResourceCycles = [1,1,1];
2115}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002116def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002117
2118def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002119 let Latency = 14;
2120 let NumMicroOps = 10;
2121 let ResourceCycles = [2,4,1,3];
2122}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002123def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002124
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002125def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002126 let Latency = 15;
2127 let NumMicroOps = 1;
2128 let ResourceCycles = [1];
2129}
Craig Topperfc179c62018-03-22 04:23:41 +00002130def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2131 "DIVR_FST0r",
2132 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002133
Craig Topper58afb4e2018-03-22 21:10:07 +00002134def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002135 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002136 let NumMicroOps = 3;
2137 let ResourceCycles = [1,2];
2138}
Craig Topper40d3b322018-03-22 21:55:20 +00002139def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2140 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002141
Craig Topperd25f1ac2018-03-20 23:39:48 +00002142def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2143 let Latency = 17;
2144 let NumMicroOps = 3;
2145 let ResourceCycles = [1,2];
2146}
2147def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2148
Craig Topper58afb4e2018-03-22 21:10:07 +00002149def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002150 let Latency = 15;
2151 let NumMicroOps = 4;
2152 let ResourceCycles = [1,1,2];
2153}
Craig Topperfc179c62018-03-22 04:23:41 +00002154def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002155
2156def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2157 let Latency = 15;
2158 let NumMicroOps = 10;
2159 let ResourceCycles = [1,1,1,5,1,1];
2160}
Craig Topper13a16502018-03-19 00:56:09 +00002161def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002162
Craig Topper8104f262018-04-02 05:33:28 +00002163def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002164 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002165 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002166 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002167}
Craig Topperfc179c62018-03-22 04:23:41 +00002168def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002169
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002170def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2171 let Latency = 16;
2172 let NumMicroOps = 14;
2173 let ResourceCycles = [1,1,1,4,2,5];
2174}
2175def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2176
2177def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002178 let Latency = 16;
2179 let NumMicroOps = 16;
2180 let ResourceCycles = [16];
2181}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002182def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002183
Craig Topper8104f262018-04-02 05:33:28 +00002184def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002185 let Latency = 17;
2186 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002187 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002188}
Craig Topper8104f262018-04-02 05:33:28 +00002189def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2190
2191def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2192 let Latency = 17;
2193 let NumMicroOps = 2;
2194 let ResourceCycles = [1,1,3];
2195}
2196def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002197
2198def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002199 let Latency = 17;
2200 let NumMicroOps = 15;
2201 let ResourceCycles = [2,1,2,4,2,4];
2202}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002203def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002204
Craig Topper8104f262018-04-02 05:33:28 +00002205def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002206 let Latency = 18;
2207 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002208 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002209}
Craig Topper8104f262018-04-02 05:33:28 +00002210def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002211 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002212
Craig Topper8104f262018-04-02 05:33:28 +00002213def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2214 let Latency = 18;
2215 let NumMicroOps = 1;
2216 let ResourceCycles = [1,12];
2217}
2218def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2219
2220def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002221 let Latency = 18;
2222 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002223 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002224}
Craig Topper8104f262018-04-02 05:33:28 +00002225def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2226
2227def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2228 let Latency = 18;
2229 let NumMicroOps = 2;
2230 let ResourceCycles = [1,1,3];
2231}
2232def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002233
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002234def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002235 let Latency = 18;
2236 let NumMicroOps = 8;
2237 let ResourceCycles = [1,1,1,5];
2238}
Craig Topperfc179c62018-03-22 04:23:41 +00002239def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002240
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002241def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002242 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002243 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002244 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002245}
Craig Topper13a16502018-03-19 00:56:09 +00002246def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002247
Craig Topper8104f262018-04-02 05:33:28 +00002248def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002249 let Latency = 19;
2250 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002251 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002252}
Craig Topper8104f262018-04-02 05:33:28 +00002253def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2254
2255def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2256 let Latency = 19;
2257 let NumMicroOps = 2;
2258 let ResourceCycles = [1,1,6];
2259}
2260def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002261
Craig Topper58afb4e2018-03-22 21:10:07 +00002262def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002263 let Latency = 19;
2264 let NumMicroOps = 5;
2265 let ResourceCycles = [1,1,3];
2266}
Craig Topperfc179c62018-03-22 04:23:41 +00002267def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002268
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002269def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002270 let Latency = 20;
2271 let NumMicroOps = 1;
2272 let ResourceCycles = [1];
2273}
Craig Topperfc179c62018-03-22 04:23:41 +00002274def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2275 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002276 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002277
Craig Topper8104f262018-04-02 05:33:28 +00002278def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002279 let Latency = 20;
2280 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002281 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002282}
Craig Topperfc179c62018-03-22 04:23:41 +00002283def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002284
Craig Topper58afb4e2018-03-22 21:10:07 +00002285def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002286 let Latency = 20;
2287 let NumMicroOps = 5;
2288 let ResourceCycles = [1,1,3];
2289}
2290def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2291
2292def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2293 let Latency = 20;
2294 let NumMicroOps = 8;
2295 let ResourceCycles = [1,1,1,1,1,1,2];
2296}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002297def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002298
2299def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002300 let Latency = 20;
2301 let NumMicroOps = 10;
2302 let ResourceCycles = [1,2,7];
2303}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002304def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002305
Craig Topper8104f262018-04-02 05:33:28 +00002306def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002307 let Latency = 21;
2308 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002309 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002310}
2311def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2312
2313def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2314 let Latency = 22;
2315 let NumMicroOps = 2;
2316 let ResourceCycles = [1,1];
2317}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002318def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002319
2320def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2321 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002322 let NumMicroOps = 5;
2323 let ResourceCycles = [1,2,1,1];
2324}
Craig Topper17a31182017-12-16 18:35:29 +00002325def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2326 VGATHERDPDrm,
2327 VGATHERQPDrm,
2328 VGATHERQPSrm,
2329 VPGATHERDDrm,
2330 VPGATHERDQrm,
2331 VPGATHERQDrm,
2332 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002333
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002334def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2335 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002336 let NumMicroOps = 5;
2337 let ResourceCycles = [1,2,1,1];
2338}
Craig Topper17a31182017-12-16 18:35:29 +00002339def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2340 VGATHERQPDYrm,
2341 VGATHERQPSYrm,
2342 VPGATHERDDYrm,
2343 VPGATHERDQYrm,
2344 VPGATHERQDYrm,
2345 VPGATHERQQYrm,
2346 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002347
Craig Topper8104f262018-04-02 05:33:28 +00002348def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002349 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002350 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002351 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002352}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002353def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002354
2355def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2356 let Latency = 23;
2357 let NumMicroOps = 19;
2358 let ResourceCycles = [2,1,4,1,1,4,6];
2359}
2360def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2361
Craig Topper8104f262018-04-02 05:33:28 +00002362def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002363 let Latency = 24;
2364 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002365 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002366}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002367def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002368
Craig Topper8104f262018-04-02 05:33:28 +00002369def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002370 let Latency = 25;
2371 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002372 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002373}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002374def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002375
2376def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2377 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002378 let NumMicroOps = 3;
2379 let ResourceCycles = [1,1,1];
2380}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002381def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002382
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002383def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2384 let Latency = 27;
2385 let NumMicroOps = 2;
2386 let ResourceCycles = [1,1];
2387}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002388def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002389
2390def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2391 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002392 let NumMicroOps = 8;
2393 let ResourceCycles = [2,4,1,1];
2394}
Craig Topper13a16502018-03-19 00:56:09 +00002395def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002396
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002397def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002398 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002399 let NumMicroOps = 3;
2400 let ResourceCycles = [1,1,1];
2401}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002402def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002403
2404def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2405 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002406 let NumMicroOps = 23;
2407 let ResourceCycles = [1,5,3,4,10];
2408}
Craig Topperfc179c62018-03-22 04:23:41 +00002409def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2410 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002411
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002412def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2413 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002414 let NumMicroOps = 23;
2415 let ResourceCycles = [1,5,2,1,4,10];
2416}
Craig Topperfc179c62018-03-22 04:23:41 +00002417def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2418 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002419
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002420def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2421 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002422 let NumMicroOps = 31;
2423 let ResourceCycles = [1,8,1,21];
2424}
Craig Topper391c6f92017-12-10 01:24:08 +00002425def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002426
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002427def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2428 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002429 let NumMicroOps = 18;
2430 let ResourceCycles = [1,1,2,3,1,1,1,8];
2431}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002432def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002433
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002434def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2435 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002436 let NumMicroOps = 39;
2437 let ResourceCycles = [1,10,1,1,26];
2438}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002439def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002440
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002441def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002442 let Latency = 42;
2443 let NumMicroOps = 22;
2444 let ResourceCycles = [2,20];
2445}
Craig Topper2d451e72018-03-18 08:38:06 +00002446def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002447
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002448def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2449 let Latency = 42;
2450 let NumMicroOps = 40;
2451 let ResourceCycles = [1,11,1,1,26];
2452}
Craig Topper391c6f92017-12-10 01:24:08 +00002453def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002454
2455def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2456 let Latency = 46;
2457 let NumMicroOps = 44;
2458 let ResourceCycles = [1,11,1,1,30];
2459}
2460def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2461
2462def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2463 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002464 let NumMicroOps = 64;
2465 let ResourceCycles = [2,8,5,10,39];
2466}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002467def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002468
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002469def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2470 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002471 let NumMicroOps = 88;
2472 let ResourceCycles = [4,4,31,1,2,1,45];
2473}
Craig Topper2d451e72018-03-18 08:38:06 +00002474def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002475
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002476def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2477 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002478 let NumMicroOps = 90;
2479 let ResourceCycles = [4,2,33,1,2,1,47];
2480}
Craig Topper2d451e72018-03-18 08:38:06 +00002481def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002482
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002483def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002484 let Latency = 75;
2485 let NumMicroOps = 15;
2486 let ResourceCycles = [6,3,6];
2487}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002488def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002489
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002490def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002491 let Latency = 76;
2492 let NumMicroOps = 32;
2493 let ResourceCycles = [7,2,8,3,1,11];
2494}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002495def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002496
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002497def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002498 let Latency = 102;
2499 let NumMicroOps = 66;
2500 let ResourceCycles = [4,2,4,8,14,34];
2501}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002502def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002503
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002504def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2505 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002506 let NumMicroOps = 100;
2507 let ResourceCycles = [9,1,11,16,1,11,21,30];
2508}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002509def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002510
2511} // SchedModel