blob: c52d147655db6667bc8ddc4931c891b307d7b439 [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : SKLWriteResPair<WriteCMOV, [SKLPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [SKLPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [SKLPort06,SKLPort4,SKLPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
125defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
126defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
127defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
134defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
135
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteMove, [SKLPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
145// Branches don't produce values, so they have no latency, but they still
146// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000148
149// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000150def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
151def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
152def : WriteRes<WriteFMove, [SKLPort015]>;
153
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
156defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000157defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
158defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
159defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000160defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4>; // Floating point reciprocal estimate.
161defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4>; // Floating point reciprocal square root estimate.
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4, [1], 1, 6>; // Fused Multiply Add.
163defm : SKLWriteResPair<WriteFMAS, [SKLPort01], 4, [1], 1, 5>; // Fused Multiply Add (Scalar).
164defm : SKLWriteResPair<WriteFMAY, [SKLPort01], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000165defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000166defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
167defm : SKLWriteResPair<WriteFLogicY, [SKLPort015], 1, [1], 1, 7>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000170defm : SKLWriteResPair<WriteFVarShuffleY, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000171defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000172defm : SKLWriteResPair<WriteFBlendY, [SKLPort015], 1, [1], 1, 7>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000173defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000174defm : SKLWriteResPair<WriteFVarBlendY,[SKLPort015], 2, [2], 2, 7>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000175
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000176def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
177 let Latency = 6;
178 let NumMicroOps = 4;
179 let ResourceCycles = [1,1,1,1];
180}
181
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000182// FMA Scheduling helper class.
183// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
184
185// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000186def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
187def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
188def : WriteRes<WriteVecMove, [SKLPort015]>;
189
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000190defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000191defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000192defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
193defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000194defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000195defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000196defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000197defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000198defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000199defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000200defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000201defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000202
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000203// Vector insert/extract operations.
204def : WriteRes<WriteVecInsert, [SKLPort5]> {
205 let Latency = 2;
206 let NumMicroOps = 2;
207 let ResourceCycles = [2];
208}
209def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
210 let Latency = 6;
211 let NumMicroOps = 2;
212}
213
214def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
215 let Latency = 3;
216 let NumMicroOps = 2;
217}
218def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
219 let Latency = 2;
220 let NumMicroOps = 3;
221}
222
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000223// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000224defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
225defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
226defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000227
228// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000230// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
232 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000233 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000234 let ResourceCycles = [3];
235}
236def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000237 let Latency = 16;
238 let NumMicroOps = 4;
239 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000240}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000241
242// Packed Compare Explicit Length Strings, Return Mask
243def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
244 let Latency = 19;
245 let NumMicroOps = 9;
246 let ResourceCycles = [4,3,1,1];
247}
248def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
249 let Latency = 25;
250 let NumMicroOps = 10;
251 let ResourceCycles = [4,3,1,1,1];
252}
253
254// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000255def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000256 let Latency = 10;
257 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000258 let ResourceCycles = [3];
259}
260def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000261 let Latency = 16;
262 let NumMicroOps = 4;
263 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000264}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000265
266// Packed Compare Explicit Length Strings, Return Index
267def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
268 let Latency = 18;
269 let NumMicroOps = 8;
270 let ResourceCycles = [4,3,1];
271}
272def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
273 let Latency = 24;
274 let NumMicroOps = 9;
275 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000276}
277
Simon Pilgrima2f26782018-03-27 20:38:54 +0000278// MOVMSK Instructions.
279def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
280def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
281def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
282
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000283// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000284def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
285 let Latency = 4;
286 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000287 let ResourceCycles = [1];
288}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000289def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
290 let Latency = 10;
291 let NumMicroOps = 2;
292 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000293}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000294
295def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
296 let Latency = 8;
297 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000298 let ResourceCycles = [2];
299}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000300def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000301 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000302 let NumMicroOps = 3;
303 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000304}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000305
306def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
307 let Latency = 20;
308 let NumMicroOps = 11;
309 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000310}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000311def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
312 let Latency = 25;
313 let NumMicroOps = 11;
314 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000315}
316
317// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000318def : WriteRes<WriteCLMul, [SKLPort5]> {
319 let Latency = 6;
320 let NumMicroOps = 1;
321 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000322}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000323def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
324 let Latency = 12;
325 let NumMicroOps = 2;
326 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000327}
328
329// Catch-all for expensive system instructions.
330def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
331
332// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000333defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000334defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000335defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000336defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000337defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000338
339// Old microcoded instructions that nobody use.
340def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
341
342// Fence instructions.
343def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
344
Craig Topper05242bf2018-04-21 18:07:36 +0000345// Load/store MXCSR.
346def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
347def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
348
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000349// Nop, not very useful expect it provides a model for nops!
350def : WriteRes<WriteNop, []>;
351
352////////////////////////////////////////////////////////////////////////////////
353// Horizontal add/sub instructions.
354////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000355
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000356defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
357defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000358defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000359
360// Remaining instrs.
361
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000362def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000363 let Latency = 1;
364 let NumMicroOps = 1;
365 let ResourceCycles = [1];
366}
Craig Topperfc179c62018-03-22 04:23:41 +0000367def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
368 "MMX_PADDSWirr",
369 "MMX_PADDUSBirr",
370 "MMX_PADDUSWirr",
371 "MMX_PAVGBirr",
372 "MMX_PAVGWirr",
373 "MMX_PCMPEQBirr",
374 "MMX_PCMPEQDirr",
375 "MMX_PCMPEQWirr",
376 "MMX_PCMPGTBirr",
377 "MMX_PCMPGTDirr",
378 "MMX_PCMPGTWirr",
379 "MMX_PMAXSWirr",
380 "MMX_PMAXUBirr",
381 "MMX_PMINSWirr",
382 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000383 "MMX_PSUBSBirr",
384 "MMX_PSUBSWirr",
385 "MMX_PSUBUSBirr",
386 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000387
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000388def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000389 let Latency = 1;
390 let NumMicroOps = 1;
391 let ResourceCycles = [1];
392}
Craig Topperfc179c62018-03-22 04:23:41 +0000393def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
394 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000395 "MMX_MOVD64rr",
396 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000397 "UCOM_FPr",
398 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000399 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000400 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000401 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000402 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000403
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000404def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000405 let Latency = 1;
406 let NumMicroOps = 1;
407 let ResourceCycles = [1];
408}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000409def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000410
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000411def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000412 let Latency = 1;
413 let NumMicroOps = 1;
414 let ResourceCycles = [1];
415}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000416def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
417 "(V?)PABSD(Y?)rr",
418 "(V?)PABSW(Y?)rr",
419 "(V?)PADDSB(Y?)rr",
420 "(V?)PADDSW(Y?)rr",
421 "(V?)PADDUSB(Y?)rr",
422 "(V?)PADDUSW(Y?)rr",
423 "(V?)PAVGB(Y?)rr",
424 "(V?)PAVGW(Y?)rr",
425 "(V?)PCMPEQB(Y?)rr",
426 "(V?)PCMPEQD(Y?)rr",
427 "(V?)PCMPEQQ(Y?)rr",
428 "(V?)PCMPEQW(Y?)rr",
429 "(V?)PCMPGTB(Y?)rr",
430 "(V?)PCMPGTD(Y?)rr",
431 "(V?)PCMPGTW(Y?)rr",
432 "(V?)PMAXSB(Y?)rr",
433 "(V?)PMAXSD(Y?)rr",
434 "(V?)PMAXSW(Y?)rr",
435 "(V?)PMAXUB(Y?)rr",
436 "(V?)PMAXUD(Y?)rr",
437 "(V?)PMAXUW(Y?)rr",
438 "(V?)PMINSB(Y?)rr",
439 "(V?)PMINSD(Y?)rr",
440 "(V?)PMINSW(Y?)rr",
441 "(V?)PMINUB(Y?)rr",
442 "(V?)PMINUD(Y?)rr",
443 "(V?)PMINUW(Y?)rr",
444 "(V?)PSIGNB(Y?)rr",
445 "(V?)PSIGND(Y?)rr",
446 "(V?)PSIGNW(Y?)rr",
447 "(V?)PSLLD(Y?)ri",
448 "(V?)PSLLQ(Y?)ri",
449 "VPSLLVD(Y?)rr",
450 "VPSLLVQ(Y?)rr",
451 "(V?)PSLLW(Y?)ri",
452 "(V?)PSRAD(Y?)ri",
453 "VPSRAVD(Y?)rr",
454 "(V?)PSRAW(Y?)ri",
455 "(V?)PSRLD(Y?)ri",
456 "(V?)PSRLQ(Y?)ri",
457 "VPSRLVD(Y?)rr",
458 "VPSRLVQ(Y?)rr",
459 "(V?)PSRLW(Y?)ri",
460 "(V?)PSUBSB(Y?)rr",
461 "(V?)PSUBSW(Y?)rr",
462 "(V?)PSUBUSB(Y?)rr",
463 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000464
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000465def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000466 let Latency = 1;
467 let NumMicroOps = 1;
468 let ResourceCycles = [1];
469}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000470def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
471def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000472 "MMX_PABS(B|D|W)rr",
473 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000474 "MMX_PANDNirr",
475 "MMX_PANDirr",
476 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000477 "MMX_PSIGN(B|D|W)rr",
478 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000479 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000480
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000481def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000482 let Latency = 1;
483 let NumMicroOps = 1;
484 let ResourceCycles = [1];
485}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000486def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000487def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
488 "ADC(16|32|64)i",
489 "ADC(8|16|32|64)rr",
490 "ADCX(32|64)rr",
491 "ADOX(32|64)rr",
492 "BT(16|32|64)ri8",
493 "BT(16|32|64)rr",
494 "BTC(16|32|64)ri8",
495 "BTC(16|32|64)rr",
496 "BTR(16|32|64)ri8",
497 "BTR(16|32|64)rr",
498 "BTS(16|32|64)ri8",
499 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000500 "SBB(16|32|64)ri",
501 "SBB(16|32|64)i",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000502 "SBB(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000503
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000504def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
505 let Latency = 1;
506 let NumMicroOps = 1;
507 let ResourceCycles = [1];
508}
Craig Topperfc179c62018-03-22 04:23:41 +0000509def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
510 "BLSI(32|64)rr",
511 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000512 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000513
514def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
515 let Latency = 1;
516 let NumMicroOps = 1;
517 let ResourceCycles = [1];
518}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000519def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000520 "(V?)PADDD(Y?)rr",
521 "(V?)PADDQ(Y?)rr",
522 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000523 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000524 "(V?)PSUBB(Y?)rr",
525 "(V?)PSUBD(Y?)rr",
526 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000527 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000528
529def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
530 let Latency = 1;
531 let NumMicroOps = 1;
532 let ResourceCycles = [1];
533}
Craig Topperfbe31322018-04-05 21:56:19 +0000534def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000535def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000536 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000537 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000538 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000539 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000540 "SGDT64m",
541 "SIDT64m",
542 "SLDT64m",
543 "SMSW16m",
544 "STC",
545 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000546 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000547
548def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000549 let Latency = 1;
550 let NumMicroOps = 2;
551 let ResourceCycles = [1,1];
552}
Craig Topperfc179c62018-03-22 04:23:41 +0000553def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
554 "MMX_MOVD64from64rm",
555 "MMX_MOVD64mr",
556 "MMX_MOVNTQmr",
557 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000558 "MOVNTI_64mr",
559 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000560 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000561 "VEXTRACTF128mr",
562 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000563 "(V?)MOVAPDYmr",
564 "(V?)MOVAPS(Y?)mr",
565 "(V?)MOVDQA(Y?)mr",
566 "(V?)MOVDQU(Y?)mr",
567 "(V?)MOVHPDmr",
568 "(V?)MOVHPSmr",
569 "(V?)MOVLPDmr",
570 "(V?)MOVLPSmr",
571 "(V?)MOVNTDQ(Y?)mr",
572 "(V?)MOVNTPD(Y?)mr",
573 "(V?)MOVNTPS(Y?)mr",
574 "(V?)MOVPDI2DImr",
575 "(V?)MOVPQI2QImr",
576 "(V?)MOVPQIto64mr",
577 "(V?)MOVSDmr",
578 "(V?)MOVSSmr",
579 "(V?)MOVUPD(Y?)mr",
580 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000581 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000582
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000583def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000584 let Latency = 2;
585 let NumMicroOps = 1;
586 let ResourceCycles = [1];
587}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000588def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000589 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000590 "(V?)MOVPDI2DIrr",
591 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000592 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000593 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000594
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000595def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000596 let Latency = 2;
597 let NumMicroOps = 2;
598 let ResourceCycles = [2];
599}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000600def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000601
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000602def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000603 let Latency = 2;
604 let NumMicroOps = 2;
605 let ResourceCycles = [2];
606}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000607def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
608def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000609
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000610def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000611 let Latency = 2;
612 let NumMicroOps = 2;
613 let ResourceCycles = [2];
614}
Craig Topperfc179c62018-03-22 04:23:41 +0000615def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
616 "ROL(8|16|32|64)r1",
617 "ROL(8|16|32|64)ri",
618 "ROR(8|16|32|64)r1",
619 "ROR(8|16|32|64)ri",
620 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000621
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000622def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000623 let Latency = 2;
624 let NumMicroOps = 2;
625 let ResourceCycles = [2];
626}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000627def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
628 WAIT,
629 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000630
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000631def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000632 let Latency = 2;
633 let NumMicroOps = 2;
634 let ResourceCycles = [1,1];
635}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000636def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
637 "VMASKMOVPS(Y?)mr",
638 "VPMASKMOVD(Y?)mr",
639 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000640
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000641def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000642 let Latency = 2;
643 let NumMicroOps = 2;
644 let ResourceCycles = [1,1];
645}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000646def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
647 "(V?)PSLLQrr",
648 "(V?)PSLLWrr",
649 "(V?)PSRADrr",
650 "(V?)PSRAWrr",
651 "(V?)PSRLDrr",
652 "(V?)PSRLQrr",
653 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000654
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000655def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000656 let Latency = 2;
657 let NumMicroOps = 2;
658 let ResourceCycles = [1,1];
659}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000660def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000661
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000662def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000663 let Latency = 2;
664 let NumMicroOps = 2;
665 let ResourceCycles = [1,1];
666}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000667def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000668
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000669def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000670 let Latency = 2;
671 let NumMicroOps = 2;
672 let ResourceCycles = [1,1];
673}
Craig Topper498875f2018-04-04 17:54:19 +0000674def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
675
676def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
677 let Latency = 1;
678 let NumMicroOps = 1;
679 let ResourceCycles = [1];
680}
681def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000682
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000683def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000684 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000685 let NumMicroOps = 2;
686 let ResourceCycles = [1,1];
687}
Craig Topper2d451e72018-03-18 08:38:06 +0000688def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000689def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000690def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
691 "ADC8ri",
692 "SBB8i8",
693 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000694
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000695def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
696 let Latency = 2;
697 let NumMicroOps = 3;
698 let ResourceCycles = [1,1,1];
699}
700def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
701
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000702def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
703 let Latency = 2;
704 let NumMicroOps = 3;
705 let ResourceCycles = [1,1,1];
706}
707def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
708
709def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
710 let Latency = 2;
711 let NumMicroOps = 3;
712 let ResourceCycles = [1,1,1];
713}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000714def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
715 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000716def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000717 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000718
719def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
720 let Latency = 3;
721 let NumMicroOps = 1;
722 let ResourceCycles = [1];
723}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000724def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000725 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000726 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000727 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000728
Clement Courbet327fac42018-03-07 08:14:02 +0000729def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000730 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000731 let NumMicroOps = 2;
732 let ResourceCycles = [1,1];
733}
Clement Courbet327fac42018-03-07 08:14:02 +0000734def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000735
736def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
737 let Latency = 3;
738 let NumMicroOps = 1;
739 let ResourceCycles = [1];
740}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000741def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
742 "(ADD|SUB|SUBR)_FST0r",
743 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000744 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000745 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000746 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000747 "VPMOVSXBDYrr",
748 "VPMOVSXBQYrr",
749 "VPMOVSXBWYrr",
750 "VPMOVSXDQYrr",
751 "VPMOVSXWDYrr",
752 "VPMOVSXWQYrr",
753 "VPMOVZXBDYrr",
754 "VPMOVZXBQYrr",
755 "VPMOVZXBWYrr",
756 "VPMOVZXDQYrr",
757 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000758 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000759
760def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
761 let Latency = 3;
762 let NumMicroOps = 2;
763 let ResourceCycles = [1,1];
764}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000765def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000766
767def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
768 let Latency = 3;
769 let NumMicroOps = 2;
770 let ResourceCycles = [1,1];
771}
772def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
773
774def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
775 let Latency = 3;
776 let NumMicroOps = 3;
777 let ResourceCycles = [3];
778}
Craig Topperfc179c62018-03-22 04:23:41 +0000779def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
780 "ROR(8|16|32|64)rCL",
781 "SAR(8|16|32|64)rCL",
782 "SHL(8|16|32|64)rCL",
783 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000784
785def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000786 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000787 let NumMicroOps = 3;
788 let ResourceCycles = [3];
789}
Craig Topperb5f26592018-04-19 18:00:17 +0000790def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
791 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
792 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000793
794def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
795 let Latency = 3;
796 let NumMicroOps = 3;
797 let ResourceCycles = [1,2];
798}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000799def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000800
801def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
802 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000803 let NumMicroOps = 3;
804 let ResourceCycles = [2,1];
805}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000806def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
807 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000808
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000809def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
810 let Latency = 3;
811 let NumMicroOps = 3;
812 let ResourceCycles = [2,1];
813}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000814def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000815
816def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
817 let Latency = 3;
818 let NumMicroOps = 3;
819 let ResourceCycles = [2,1];
820}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000821def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
822 "(V?)PHADDW(Y?)rr",
823 "(V?)PHSUBD(Y?)rr",
824 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000825
826def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
827 let Latency = 3;
828 let NumMicroOps = 3;
829 let ResourceCycles = [2,1];
830}
Craig Topperfc179c62018-03-22 04:23:41 +0000831def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
832 "MMX_PACKSSWBirr",
833 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000834
835def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
836 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000837 let NumMicroOps = 3;
838 let ResourceCycles = [1,2];
839}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000840def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000841
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000842def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
843 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000844 let NumMicroOps = 3;
845 let ResourceCycles = [1,2];
846}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000847def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000848
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000849def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
850 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000851 let NumMicroOps = 3;
852 let ResourceCycles = [1,2];
853}
Craig Topperfc179c62018-03-22 04:23:41 +0000854def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
855 "RCL(8|16|32|64)ri",
856 "RCR(8|16|32|64)r1",
857 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000858
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000859def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
860 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000861 let NumMicroOps = 3;
862 let ResourceCycles = [1,1,1];
863}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000864def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000865
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000866def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
867 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000868 let NumMicroOps = 4;
869 let ResourceCycles = [1,1,2];
870}
Craig Topperf4cd9082018-01-19 05:47:32 +0000871def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000872
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000873def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
874 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000875 let NumMicroOps = 4;
876 let ResourceCycles = [1,1,1,1];
877}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000878def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000879
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000880def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
881 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000882 let NumMicroOps = 4;
883 let ResourceCycles = [1,1,1,1];
884}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000885def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000886
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000887def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000888 let Latency = 4;
889 let NumMicroOps = 1;
890 let ResourceCycles = [1];
891}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000892def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000893 "MMX_PMADDWDirr",
894 "MMX_PMULHRSWrr",
895 "MMX_PMULHUWirr",
896 "MMX_PMULHWirr",
897 "MMX_PMULLWirr",
898 "MMX_PMULUDQirr",
899 "MUL_FPrST0",
900 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000901 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000902
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000903def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000904 let Latency = 4;
905 let NumMicroOps = 1;
906 let ResourceCycles = [1];
907}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000908def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
909 "(V?)ADDPS(Y?)rr",
910 "(V?)ADDSDrr",
911 "(V?)ADDSSrr",
912 "(V?)ADDSUBPD(Y?)rr",
913 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000914 "(V?)CVTDQ2PS(Y?)rr",
915 "(V?)CVTPS2DQ(Y?)rr",
916 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000917 "(V?)MULPD(Y?)rr",
918 "(V?)MULPS(Y?)rr",
919 "(V?)MULSDrr",
920 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000921 "(V?)PMADDUBSW(Y?)rr",
922 "(V?)PMADDWD(Y?)rr",
923 "(V?)PMULDQ(Y?)rr",
924 "(V?)PMULHRSW(Y?)rr",
925 "(V?)PMULHUW(Y?)rr",
926 "(V?)PMULHW(Y?)rr",
927 "(V?)PMULLW(Y?)rr",
928 "(V?)PMULUDQ(Y?)rr",
929 "(V?)SUBPD(Y?)rr",
930 "(V?)SUBPS(Y?)rr",
931 "(V?)SUBSDrr",
932 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000933
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000934def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000935 let Latency = 4;
936 let NumMicroOps = 2;
937 let ResourceCycles = [1,1];
938}
Craig Topperf846e2d2018-04-19 05:34:05 +0000939def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000940
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000941def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
942 let Latency = 4;
943 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000944 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000945}
Craig Topperfc179c62018-03-22 04:23:41 +0000946def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000947
948def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000949 let Latency = 4;
950 let NumMicroOps = 2;
951 let ResourceCycles = [1,1];
952}
Craig Topperfc179c62018-03-22 04:23:41 +0000953def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
954 "VPSLLQYrr",
955 "VPSLLWYrr",
956 "VPSRADYrr",
957 "VPSRAWYrr",
958 "VPSRLDYrr",
959 "VPSRLQYrr",
960 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000961
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000962def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000963 let Latency = 4;
964 let NumMicroOps = 3;
965 let ResourceCycles = [1,1,1];
966}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000967def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
968 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000969
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000970def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000971 let Latency = 4;
972 let NumMicroOps = 4;
973 let ResourceCycles = [4];
974}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000975def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000976
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000977def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000978 let Latency = 4;
979 let NumMicroOps = 4;
980 let ResourceCycles = [1,3];
981}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000982def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000983
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000984def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000985 let Latency = 4;
986 let NumMicroOps = 4;
987 let ResourceCycles = [1,3];
988}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000989def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000990
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000991def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000992 let Latency = 4;
993 let NumMicroOps = 4;
994 let ResourceCycles = [1,1,2];
995}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000996def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000997
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000998def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
999 let Latency = 5;
1000 let NumMicroOps = 1;
1001 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001002}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001003def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001004 "MOVSX(16|32|64)rm32",
1005 "MOVSX(16|32|64)rm8",
1006 "MOVZX(16|32|64)rm16",
1007 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001008 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001009
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001010def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001011 let Latency = 5;
1012 let NumMicroOps = 2;
1013 let ResourceCycles = [1,1];
1014}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001015def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1016 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001017
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001018def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001019 let Latency = 5;
1020 let NumMicroOps = 2;
1021 let ResourceCycles = [1,1];
1022}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001023def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001024 "MMX_CVTPS2PIirr",
1025 "MMX_CVTTPD2PIirr",
1026 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001027 "(V?)CVTPD2DQrr",
1028 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001029 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001030 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001031 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001032 "(V?)CVTSD2SSrr",
1033 "(V?)CVTSI642SDrr",
1034 "(V?)CVTSI2SDrr",
1035 "(V?)CVTSI2SSrr",
1036 "(V?)CVTSS2SDrr",
1037 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001038
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001039def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001040 let Latency = 5;
1041 let NumMicroOps = 3;
1042 let ResourceCycles = [1,1,1];
1043}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001044def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001045
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001046def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001047 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001048 let NumMicroOps = 3;
1049 let ResourceCycles = [1,1,1];
1050}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001051def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001052
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001053def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001054 let Latency = 5;
1055 let NumMicroOps = 5;
1056 let ResourceCycles = [1,4];
1057}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001058def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001059
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001060def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001061 let Latency = 5;
1062 let NumMicroOps = 5;
1063 let ResourceCycles = [2,3];
1064}
Craig Topper13a16502018-03-19 00:56:09 +00001065def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001066
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001067def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001068 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001069 let NumMicroOps = 6;
1070 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001071}
Craig Topperfc179c62018-03-22 04:23:41 +00001072def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1073 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001074
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001075def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1076 let Latency = 6;
1077 let NumMicroOps = 1;
1078 let ResourceCycles = [1];
1079}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001080def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001081 "(V?)MOVSHDUPrm",
1082 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001083 "VPBROADCASTDrm",
1084 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001085
1086def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001087 let Latency = 6;
1088 let NumMicroOps = 2;
1089 let ResourceCycles = [2];
1090}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001091def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001092
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001093def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001094 let Latency = 6;
1095 let NumMicroOps = 2;
1096 let ResourceCycles = [1,1];
1097}
Craig Topperfc179c62018-03-22 04:23:41 +00001098def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1099 "MMX_PADDSWirm",
1100 "MMX_PADDUSBirm",
1101 "MMX_PADDUSWirm",
1102 "MMX_PAVGBirm",
1103 "MMX_PAVGWirm",
1104 "MMX_PCMPEQBirm",
1105 "MMX_PCMPEQDirm",
1106 "MMX_PCMPEQWirm",
1107 "MMX_PCMPGTBirm",
1108 "MMX_PCMPGTDirm",
1109 "MMX_PCMPGTWirm",
1110 "MMX_PMAXSWirm",
1111 "MMX_PMAXUBirm",
1112 "MMX_PMINSWirm",
1113 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001114 "MMX_PSUBSBirm",
1115 "MMX_PSUBSWirm",
1116 "MMX_PSUBUSBirm",
1117 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001118
Craig Topper58afb4e2018-03-22 21:10:07 +00001119def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001120 let Latency = 6;
1121 let NumMicroOps = 2;
1122 let ResourceCycles = [1,1];
1123}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001124def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1125 "(V?)CVTSD2SIrr",
1126 "(V?)CVTSS2SI64rr",
1127 "(V?)CVTSS2SIrr",
1128 "(V?)CVTTSD2SI64rr",
1129 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001130
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001131def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1132 let Latency = 6;
1133 let NumMicroOps = 2;
1134 let ResourceCycles = [1,1];
1135}
Craig Topperfc179c62018-03-22 04:23:41 +00001136def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1137 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001138
1139def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1140 let Latency = 6;
1141 let NumMicroOps = 2;
1142 let ResourceCycles = [1,1];
1143}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001144def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1145 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001146 "MMX_PANDNirm",
1147 "MMX_PANDirm",
1148 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001149 "MMX_PSIGN(B|D|W)rm",
1150 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001151 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001152
1153def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1154 let Latency = 6;
1155 let NumMicroOps = 2;
1156 let ResourceCycles = [1,1];
1157}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001158def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001159def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1160 ADCX32rm, ADCX64rm,
1161 ADOX32rm, ADOX64rm,
1162 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001163
1164def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1165 let Latency = 6;
1166 let NumMicroOps = 2;
1167 let ResourceCycles = [1,1];
1168}
Craig Topperfc179c62018-03-22 04:23:41 +00001169def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1170 "BLSI(32|64)rm",
1171 "BLSMSK(32|64)rm",
1172 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001173 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001174
1175def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1176 let Latency = 6;
1177 let NumMicroOps = 2;
1178 let ResourceCycles = [1,1];
1179}
Craig Topper2d451e72018-03-18 08:38:06 +00001180def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001181def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001182
Craig Topper58afb4e2018-03-22 21:10:07 +00001183def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001184 let Latency = 6;
1185 let NumMicroOps = 3;
1186 let ResourceCycles = [2,1];
1187}
Craig Topperfc179c62018-03-22 04:23:41 +00001188def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001189
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001190def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001191 let Latency = 6;
1192 let NumMicroOps = 4;
1193 let ResourceCycles = [1,2,1];
1194}
Craig Topperfc179c62018-03-22 04:23:41 +00001195def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1196 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001197
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001198def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001199 let Latency = 6;
1200 let NumMicroOps = 4;
1201 let ResourceCycles = [1,1,1,1];
1202}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001203def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001204
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001205def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1206 let Latency = 6;
1207 let NumMicroOps = 4;
1208 let ResourceCycles = [1,1,1,1];
1209}
Craig Topperfc179c62018-03-22 04:23:41 +00001210def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1211 "BTR(16|32|64)mi8",
1212 "BTS(16|32|64)mi8",
1213 "SAR(8|16|32|64)m1",
1214 "SAR(8|16|32|64)mi",
1215 "SHL(8|16|32|64)m1",
1216 "SHL(8|16|32|64)mi",
1217 "SHR(8|16|32|64)m1",
1218 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001219
1220def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1221 let Latency = 6;
1222 let NumMicroOps = 4;
1223 let ResourceCycles = [1,1,1,1];
1224}
Craig Topperf0d04262018-04-06 16:16:48 +00001225def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1226 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001227
1228def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001229 let Latency = 6;
1230 let NumMicroOps = 6;
1231 let ResourceCycles = [1,5];
1232}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001233def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001234
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001235def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1236 let Latency = 7;
1237 let NumMicroOps = 1;
1238 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001239}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001240def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001241 "VBROADCASTF128",
1242 "VBROADCASTI128",
1243 "VBROADCASTSDYrm",
1244 "VBROADCASTSSYrm",
1245 "VLDDQUYrm",
1246 "VMOVAPDYrm",
1247 "VMOVAPSYrm",
1248 "VMOVDDUPYrm",
1249 "VMOVDQAYrm",
1250 "VMOVDQUYrm",
1251 "VMOVNTDQAYrm",
1252 "VMOVSHDUPYrm",
1253 "VMOVSLDUPYrm",
1254 "VMOVUPDYrm",
1255 "VMOVUPSYrm",
1256 "VPBROADCASTDYrm",
1257 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001258
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001259def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001260 let Latency = 7;
1261 let NumMicroOps = 2;
1262 let ResourceCycles = [1,1];
1263}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001264def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001265
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001266def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1267 let Latency = 7;
1268 let NumMicroOps = 2;
1269 let ResourceCycles = [1,1];
1270}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001271def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1272 "(V?)PACKSSDWrm",
1273 "(V?)PACKSSWBrm",
1274 "(V?)PACKUSDWrm",
1275 "(V?)PACKUSWBrm",
1276 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001277 "VPBROADCASTBrm",
1278 "VPBROADCASTWrm",
1279 "VPERMILPDmi",
1280 "VPERMILPDrm",
1281 "VPERMILPSmi",
1282 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001283 "(V?)PSHUFBrm",
1284 "(V?)PSHUFDmi",
1285 "(V?)PSHUFHWmi",
1286 "(V?)PSHUFLWmi",
1287 "(V?)PUNPCKHBWrm",
1288 "(V?)PUNPCKHDQrm",
1289 "(V?)PUNPCKHQDQrm",
1290 "(V?)PUNPCKHWDrm",
1291 "(V?)PUNPCKLBWrm",
1292 "(V?)PUNPCKLDQrm",
1293 "(V?)PUNPCKLQDQrm",
1294 "(V?)PUNPCKLWDrm",
1295 "(V?)SHUFPDrmi",
1296 "(V?)SHUFPSrmi",
1297 "(V?)UNPCKHPDrm",
1298 "(V?)UNPCKHPSrm",
1299 "(V?)UNPCKLPDrm",
1300 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001301
Craig Topper58afb4e2018-03-22 21:10:07 +00001302def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001303 let Latency = 7;
1304 let NumMicroOps = 2;
1305 let ResourceCycles = [1,1];
1306}
Craig Topperfc179c62018-03-22 04:23:41 +00001307def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1308 "VCVTPD2PSYrr",
1309 "VCVTPH2PSYrr",
1310 "VCVTPS2PDYrr",
1311 "VCVTPS2PHYrr",
1312 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001313
1314def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1315 let Latency = 7;
1316 let NumMicroOps = 2;
1317 let ResourceCycles = [1,1];
1318}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001319def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1320 "(V?)PABSDrm",
1321 "(V?)PABSWrm",
1322 "(V?)PADDSBrm",
1323 "(V?)PADDSWrm",
1324 "(V?)PADDUSBrm",
1325 "(V?)PADDUSWrm",
1326 "(V?)PAVGBrm",
1327 "(V?)PAVGWrm",
1328 "(V?)PCMPEQBrm",
1329 "(V?)PCMPEQDrm",
1330 "(V?)PCMPEQQrm",
1331 "(V?)PCMPEQWrm",
1332 "(V?)PCMPGTBrm",
1333 "(V?)PCMPGTDrm",
1334 "(V?)PCMPGTWrm",
1335 "(V?)PMAXSBrm",
1336 "(V?)PMAXSDrm",
1337 "(V?)PMAXSWrm",
1338 "(V?)PMAXUBrm",
1339 "(V?)PMAXUDrm",
1340 "(V?)PMAXUWrm",
1341 "(V?)PMINSBrm",
1342 "(V?)PMINSDrm",
1343 "(V?)PMINSWrm",
1344 "(V?)PMINUBrm",
1345 "(V?)PMINUDrm",
1346 "(V?)PMINUWrm",
1347 "(V?)PSIGNBrm",
1348 "(V?)PSIGNDrm",
1349 "(V?)PSIGNWrm",
1350 "(V?)PSLLDrm",
1351 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001352 "VPSLLVDrm",
1353 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001354 "(V?)PSLLWrm",
1355 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001356 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001357 "(V?)PSRAWrm",
1358 "(V?)PSRLDrm",
1359 "(V?)PSRLQrm",
1360 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001361 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001362 "(V?)PSRLWrm",
1363 "(V?)PSUBSBrm",
1364 "(V?)PSUBSWrm",
1365 "(V?)PSUBUSBrm",
1366 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001367
1368def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1369 let Latency = 7;
1370 let NumMicroOps = 2;
1371 let ResourceCycles = [1,1];
1372}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001373def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001374 "(V?)INSERTI128rm",
1375 "(V?)MASKMOVPDrm",
1376 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001377 "(V?)PADDBrm",
1378 "(V?)PADDDrm",
1379 "(V?)PADDQrm",
1380 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001381 "(V?)PBLENDDrmi",
1382 "(V?)PMASKMOVDrm",
1383 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001384 "(V?)PSUBBrm",
1385 "(V?)PSUBDrm",
1386 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001387 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001388
1389def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1390 let Latency = 7;
1391 let NumMicroOps = 3;
1392 let ResourceCycles = [2,1];
1393}
Craig Topperfc179c62018-03-22 04:23:41 +00001394def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1395 "MMX_PACKSSWBirm",
1396 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001397
1398def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1399 let Latency = 7;
1400 let NumMicroOps = 3;
1401 let ResourceCycles = [1,2];
1402}
Craig Topperf4cd9082018-01-19 05:47:32 +00001403def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001404
1405def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1406 let Latency = 7;
1407 let NumMicroOps = 3;
1408 let ResourceCycles = [1,2];
1409}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001410def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1411 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001412
Craig Topper58afb4e2018-03-22 21:10:07 +00001413def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001414 let Latency = 7;
1415 let NumMicroOps = 3;
1416 let ResourceCycles = [1,1,1];
1417}
Craig Topperfc179c62018-03-22 04:23:41 +00001418def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1419 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001420
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001421def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001422 let Latency = 7;
1423 let NumMicroOps = 3;
1424 let ResourceCycles = [1,1,1];
1425}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001426def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001427
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001428def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001429 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001430 let NumMicroOps = 3;
1431 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001432}
Craig Topperfc179c62018-03-22 04:23:41 +00001433def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1434 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001435
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001436def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1437 let Latency = 7;
1438 let NumMicroOps = 5;
1439 let ResourceCycles = [1,1,1,2];
1440}
Craig Topperfc179c62018-03-22 04:23:41 +00001441def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1442 "ROL(8|16|32|64)mi",
1443 "ROR(8|16|32|64)m1",
1444 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001445
1446def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1447 let Latency = 7;
1448 let NumMicroOps = 5;
1449 let ResourceCycles = [1,1,1,2];
1450}
Craig Topper13a16502018-03-19 00:56:09 +00001451def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001452
1453def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1454 let Latency = 7;
1455 let NumMicroOps = 5;
1456 let ResourceCycles = [1,1,1,1,1];
1457}
Craig Topperfc179c62018-03-22 04:23:41 +00001458def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1459 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001460
1461def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001462 let Latency = 7;
1463 let NumMicroOps = 7;
1464 let ResourceCycles = [1,3,1,2];
1465}
Craig Topper2d451e72018-03-18 08:38:06 +00001466def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001467
Craig Topper58afb4e2018-03-22 21:10:07 +00001468def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001469 let Latency = 8;
1470 let NumMicroOps = 2;
1471 let ResourceCycles = [2];
1472}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001473def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1474 "(V?)ROUNDPS(Y?)r",
1475 "(V?)ROUNDSDr",
1476 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001477
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001478def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001479 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001480 let NumMicroOps = 2;
1481 let ResourceCycles = [1,1];
1482}
Craig Topperfc179c62018-03-22 04:23:41 +00001483def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1484 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001485
1486def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1487 let Latency = 8;
1488 let NumMicroOps = 2;
1489 let ResourceCycles = [1,1];
1490}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001491def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1492 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001493
1494def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001495 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001496 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001497 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001498}
Craig Topperf846e2d2018-04-19 05:34:05 +00001499def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001500
Craig Topperf846e2d2018-04-19 05:34:05 +00001501def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1502 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001503 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001504 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001505}
Craig Topperfc179c62018-03-22 04:23:41 +00001506def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001507
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001508def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1509 let Latency = 8;
1510 let NumMicroOps = 2;
1511 let ResourceCycles = [1,1];
1512}
Craig Topperfc179c62018-03-22 04:23:41 +00001513def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1514 "FCOM64m",
1515 "FCOMP32m",
1516 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001517 "VPACKSSDWYrm",
1518 "VPACKSSWBYrm",
1519 "VPACKUSDWYrm",
1520 "VPACKUSWBYrm",
1521 "VPALIGNRYrmi",
1522 "VPBLENDWYrmi",
1523 "VPBROADCASTBYrm",
1524 "VPBROADCASTWYrm",
1525 "VPERMILPDYmi",
1526 "VPERMILPDYrm",
1527 "VPERMILPSYmi",
1528 "VPERMILPSYrm",
1529 "VPMOVSXBDYrm",
1530 "VPMOVSXBQYrm",
1531 "VPMOVSXWQYrm",
1532 "VPSHUFBYrm",
1533 "VPSHUFDYmi",
1534 "VPSHUFHWYmi",
1535 "VPSHUFLWYmi",
1536 "VPUNPCKHBWYrm",
1537 "VPUNPCKHDQYrm",
1538 "VPUNPCKHQDQYrm",
1539 "VPUNPCKHWDYrm",
1540 "VPUNPCKLBWYrm",
1541 "VPUNPCKLDQYrm",
1542 "VPUNPCKLQDQYrm",
1543 "VPUNPCKLWDYrm",
1544 "VSHUFPDYrmi",
1545 "VSHUFPSYrmi",
1546 "VUNPCKHPDYrm",
1547 "VUNPCKHPSYrm",
1548 "VUNPCKLPDYrm",
1549 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001550
1551def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1552 let Latency = 8;
1553 let NumMicroOps = 2;
1554 let ResourceCycles = [1,1];
1555}
Craig Topperfc179c62018-03-22 04:23:41 +00001556def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1557 "VPABSDYrm",
1558 "VPABSWYrm",
1559 "VPADDSBYrm",
1560 "VPADDSWYrm",
1561 "VPADDUSBYrm",
1562 "VPADDUSWYrm",
1563 "VPAVGBYrm",
1564 "VPAVGWYrm",
1565 "VPCMPEQBYrm",
1566 "VPCMPEQDYrm",
1567 "VPCMPEQQYrm",
1568 "VPCMPEQWYrm",
1569 "VPCMPGTBYrm",
1570 "VPCMPGTDYrm",
1571 "VPCMPGTWYrm",
1572 "VPMAXSBYrm",
1573 "VPMAXSDYrm",
1574 "VPMAXSWYrm",
1575 "VPMAXUBYrm",
1576 "VPMAXUDYrm",
1577 "VPMAXUWYrm",
1578 "VPMINSBYrm",
1579 "VPMINSDYrm",
1580 "VPMINSWYrm",
1581 "VPMINUBYrm",
1582 "VPMINUDYrm",
1583 "VPMINUWYrm",
1584 "VPSIGNBYrm",
1585 "VPSIGNDYrm",
1586 "VPSIGNWYrm",
1587 "VPSLLDYrm",
1588 "VPSLLQYrm",
1589 "VPSLLVDYrm",
1590 "VPSLLVQYrm",
1591 "VPSLLWYrm",
1592 "VPSRADYrm",
1593 "VPSRAVDYrm",
1594 "VPSRAWYrm",
1595 "VPSRLDYrm",
1596 "VPSRLQYrm",
1597 "VPSRLVDYrm",
1598 "VPSRLVQYrm",
1599 "VPSRLWYrm",
1600 "VPSUBSBYrm",
1601 "VPSUBSWYrm",
1602 "VPSUBUSBYrm",
1603 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001604
1605def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1606 let Latency = 8;
1607 let NumMicroOps = 2;
1608 let ResourceCycles = [1,1];
1609}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001610def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001611 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001612 "VPADDBYrm",
1613 "VPADDDYrm",
1614 "VPADDQYrm",
1615 "VPADDWYrm",
1616 "VPANDNYrm",
1617 "VPANDYrm",
1618 "VPBLENDDYrmi",
1619 "VPMASKMOVDYrm",
1620 "VPMASKMOVQYrm",
1621 "VPORYrm",
1622 "VPSUBBYrm",
1623 "VPSUBDYrm",
1624 "VPSUBQYrm",
1625 "VPSUBWYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001626 "VPXORYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001627
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001628def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1629 let Latency = 8;
1630 let NumMicroOps = 4;
1631 let ResourceCycles = [1,2,1];
1632}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001633def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001634
1635def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1636 let Latency = 8;
1637 let NumMicroOps = 4;
1638 let ResourceCycles = [2,1,1];
1639}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001640def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001641
Craig Topper58afb4e2018-03-22 21:10:07 +00001642def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001643 let Latency = 8;
1644 let NumMicroOps = 4;
1645 let ResourceCycles = [1,1,1,1];
1646}
1647def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1648
1649def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1650 let Latency = 8;
1651 let NumMicroOps = 5;
1652 let ResourceCycles = [1,1,3];
1653}
Craig Topper13a16502018-03-19 00:56:09 +00001654def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001655
1656def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1657 let Latency = 8;
1658 let NumMicroOps = 5;
1659 let ResourceCycles = [1,1,1,2];
1660}
Craig Topperfc179c62018-03-22 04:23:41 +00001661def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1662 "RCL(8|16|32|64)mi",
1663 "RCR(8|16|32|64)m1",
1664 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001665
1666def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1667 let Latency = 8;
1668 let NumMicroOps = 6;
1669 let ResourceCycles = [1,1,1,3];
1670}
Craig Topperfc179c62018-03-22 04:23:41 +00001671def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1672 "SAR(8|16|32|64)mCL",
1673 "SHL(8|16|32|64)mCL",
1674 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001675
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001676def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1677 let Latency = 8;
1678 let NumMicroOps = 6;
1679 let ResourceCycles = [1,1,1,2,1];
1680}
Craig Topper9f834812018-04-01 21:54:24 +00001681def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001682 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001683 "SBB(8|16|32|64)mi")>;
1684def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1685 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001686
1687def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1688 let Latency = 9;
1689 let NumMicroOps = 2;
1690 let ResourceCycles = [1,1];
1691}
Craig Topperfc179c62018-03-22 04:23:41 +00001692def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1693 "MMX_PMADDUBSWrm",
1694 "MMX_PMADDWDirm",
1695 "MMX_PMULHRSWrm",
1696 "MMX_PMULHUWirm",
1697 "MMX_PMULHWirm",
1698 "MMX_PMULLWirm",
1699 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001700 "VTESTPDYrm",
1701 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001702
1703def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1704 let Latency = 9;
1705 let NumMicroOps = 2;
1706 let ResourceCycles = [1,1];
1707}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001708def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001709 "VPMOVSXBWYrm",
1710 "VPMOVSXDQYrm",
1711 "VPMOVSXWDYrm",
1712 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001713 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001714
1715def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1716 let Latency = 9;
1717 let NumMicroOps = 2;
1718 let ResourceCycles = [1,1];
1719}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001720def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1721 "(V?)ADDSSrm",
1722 "(V?)CMPSDrm",
1723 "(V?)CMPSSrm",
1724 "(V?)MAX(C?)SDrm",
1725 "(V?)MAX(C?)SSrm",
1726 "(V?)MIN(C?)SDrm",
1727 "(V?)MIN(C?)SSrm",
1728 "(V?)MULSDrm",
1729 "(V?)MULSSrm",
1730 "(V?)SUBSDrm",
1731 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001732
Craig Topper58afb4e2018-03-22 21:10:07 +00001733def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001734 let Latency = 9;
1735 let NumMicroOps = 2;
1736 let ResourceCycles = [1,1];
1737}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001738def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001739 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001740 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001741 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001742
Craig Topper58afb4e2018-03-22 21:10:07 +00001743def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001744 let Latency = 9;
1745 let NumMicroOps = 3;
1746 let ResourceCycles = [1,2];
1747}
Craig Topperfc179c62018-03-22 04:23:41 +00001748def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001749
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001750def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1751 let Latency = 9;
1752 let NumMicroOps = 3;
1753 let ResourceCycles = [1,1,1];
1754}
Craig Topperfc179c62018-03-22 04:23:41 +00001755def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001756
1757def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1758 let Latency = 9;
1759 let NumMicroOps = 3;
1760 let ResourceCycles = [1,1,1];
1761}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001762def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001763
1764def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001765 let Latency = 9;
1766 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001767 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001768}
Craig Topperfc179c62018-03-22 04:23:41 +00001769def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1770 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001771
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001772def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1773 let Latency = 9;
1774 let NumMicroOps = 4;
1775 let ResourceCycles = [2,1,1];
1776}
Craig Topperfc179c62018-03-22 04:23:41 +00001777def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1778 "(V?)PHADDWrm",
1779 "(V?)PHSUBDrm",
1780 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001781
1782def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1783 let Latency = 9;
1784 let NumMicroOps = 4;
1785 let ResourceCycles = [1,1,1,1];
1786}
Craig Topperfc179c62018-03-22 04:23:41 +00001787def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1788 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001789
1790def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1791 let Latency = 9;
1792 let NumMicroOps = 5;
1793 let ResourceCycles = [1,2,1,1];
1794}
Craig Topperfc179c62018-03-22 04:23:41 +00001795def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1796 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001797
1798def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1799 let Latency = 10;
1800 let NumMicroOps = 2;
1801 let ResourceCycles = [1,1];
1802}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001803def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001804 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001805
1806def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1807 let Latency = 10;
1808 let NumMicroOps = 2;
1809 let ResourceCycles = [1,1];
1810}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001811def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1812 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001813 "VPCMPGTQYrm",
1814 "VPERM2F128rm",
1815 "VPERM2I128rm",
1816 "VPERMDYrm",
1817 "VPERMPDYmi",
1818 "VPERMPSYrm",
1819 "VPERMQYmi",
1820 "VPMOVZXBDYrm",
1821 "VPMOVZXBQYrm",
1822 "VPMOVZXBWYrm",
1823 "VPMOVZXDQYrm",
1824 "VPMOVZXWQYrm",
1825 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001826
1827def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1828 let Latency = 10;
1829 let NumMicroOps = 2;
1830 let ResourceCycles = [1,1];
1831}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001832def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1833 "(V?)ADDPSrm",
1834 "(V?)ADDSUBPDrm",
1835 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001836 "(V?)CVTDQ2PSrm",
1837 "(V?)CVTPH2PSYrm",
1838 "(V?)CVTPS2DQrm",
1839 "(V?)CVTSS2SDrm",
1840 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001841 "(V?)MULPDrm",
1842 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001843 "(V?)PMADDUBSWrm",
1844 "(V?)PMADDWDrm",
1845 "(V?)PMULDQrm",
1846 "(V?)PMULHRSWrm",
1847 "(V?)PMULHUWrm",
1848 "(V?)PMULHWrm",
1849 "(V?)PMULLWrm",
1850 "(V?)PMULUDQrm",
1851 "(V?)SUBPDrm",
1852 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001853
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001854def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1855 let Latency = 10;
1856 let NumMicroOps = 3;
1857 let ResourceCycles = [1,1,1];
1858}
Craig Topperfc179c62018-03-22 04:23:41 +00001859def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1860 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001861
Craig Topper58afb4e2018-03-22 21:10:07 +00001862def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001863 let Latency = 10;
1864 let NumMicroOps = 3;
1865 let ResourceCycles = [1,1,1];
1866}
Craig Topperfc179c62018-03-22 04:23:41 +00001867def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001868
1869def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001870 let Latency = 10;
1871 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001872 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001873}
Craig Topperfc179c62018-03-22 04:23:41 +00001874def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1875 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001876
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001877def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1878 let Latency = 10;
1879 let NumMicroOps = 4;
1880 let ResourceCycles = [2,1,1];
1881}
Craig Topperfc179c62018-03-22 04:23:41 +00001882def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1883 "VPHADDWYrm",
1884 "VPHSUBDYrm",
1885 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001886
1887def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001888 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001889 let NumMicroOps = 4;
1890 let ResourceCycles = [1,1,1,1];
1891}
Craig Topperf846e2d2018-04-19 05:34:05 +00001892def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001893
1894def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1895 let Latency = 10;
1896 let NumMicroOps = 8;
1897 let ResourceCycles = [1,1,1,1,1,3];
1898}
Craig Topper13a16502018-03-19 00:56:09 +00001899def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001900
1901def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001902 let Latency = 10;
1903 let NumMicroOps = 10;
1904 let ResourceCycles = [9,1];
1905}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001906def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001907
Craig Topper8104f262018-04-02 05:33:28 +00001908def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001909 let Latency = 11;
1910 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001911 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001912}
Craig Topper8104f262018-04-02 05:33:28 +00001913def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001914 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001915
Craig Topper8104f262018-04-02 05:33:28 +00001916def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1917 let Latency = 11;
1918 let NumMicroOps = 1;
1919 let ResourceCycles = [1,5];
1920}
1921def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1922
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001923def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001924 let Latency = 11;
1925 let NumMicroOps = 2;
1926 let ResourceCycles = [1,1];
1927}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001928def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001929 "VRCPPSYm",
1930 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001931
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001932def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1933 let Latency = 11;
1934 let NumMicroOps = 2;
1935 let ResourceCycles = [1,1];
1936}
Craig Topperfc179c62018-03-22 04:23:41 +00001937def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1938 "VADDPSYrm",
1939 "VADDSUBPDYrm",
1940 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001941 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001942 "VCMPPSYrmi",
1943 "VCVTDQ2PSYrm",
1944 "VCVTPS2DQYrm",
1945 "VCVTPS2PDYrm",
1946 "VCVTTPS2DQYrm",
1947 "VMAX(C?)PDYrm",
1948 "VMAX(C?)PSYrm",
1949 "VMIN(C?)PDYrm",
1950 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001951 "VMULPDYrm",
1952 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001953 "VPMADDUBSWYrm",
1954 "VPMADDWDYrm",
1955 "VPMULDQYrm",
1956 "VPMULHRSWYrm",
1957 "VPMULHUWYrm",
1958 "VPMULHWYrm",
1959 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001960 "VPMULUDQYrm",
1961 "VSUBPDYrm",
1962 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001963
1964def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1965 let Latency = 11;
1966 let NumMicroOps = 3;
1967 let ResourceCycles = [2,1];
1968}
Craig Topperfc179c62018-03-22 04:23:41 +00001969def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1970 "FICOM32m",
1971 "FICOMP16m",
1972 "FICOMP32m",
1973 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001974
1975def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1976 let Latency = 11;
1977 let NumMicroOps = 3;
1978 let ResourceCycles = [1,1,1];
1979}
Craig Topperfc179c62018-03-22 04:23:41 +00001980def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001981
Craig Topper58afb4e2018-03-22 21:10:07 +00001982def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001983 let Latency = 11;
1984 let NumMicroOps = 3;
1985 let ResourceCycles = [1,1,1];
1986}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001987def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1988 "(V?)CVTSD2SIrm",
1989 "(V?)CVTSS2SI64rm",
1990 "(V?)CVTSS2SIrm",
1991 "(V?)CVTTSD2SI64rm",
1992 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001993 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001994 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001995
Craig Topper58afb4e2018-03-22 21:10:07 +00001996def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001997 let Latency = 11;
1998 let NumMicroOps = 3;
1999 let ResourceCycles = [1,1,1];
2000}
Craig Topperfc179c62018-03-22 04:23:41 +00002001def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2002 "CVTPD2PSrm",
2003 "CVTTPD2DQrm",
2004 "MMX_CVTPD2PIirm",
2005 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002006
2007def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2008 let Latency = 11;
2009 let NumMicroOps = 6;
2010 let ResourceCycles = [1,1,1,2,1];
2011}
Craig Topperfc179c62018-03-22 04:23:41 +00002012def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2013 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002014
2015def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002016 let Latency = 11;
2017 let NumMicroOps = 7;
2018 let ResourceCycles = [2,3,2];
2019}
Craig Topperfc179c62018-03-22 04:23:41 +00002020def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2021 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002022
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002023def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002024 let Latency = 11;
2025 let NumMicroOps = 9;
2026 let ResourceCycles = [1,5,1,2];
2027}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002028def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002029
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002030def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002031 let Latency = 11;
2032 let NumMicroOps = 11;
2033 let ResourceCycles = [2,9];
2034}
Craig Topperfc179c62018-03-22 04:23:41 +00002035def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002036
Craig Topper8104f262018-04-02 05:33:28 +00002037def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002038 let Latency = 12;
2039 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002040 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002041}
Craig Topper8104f262018-04-02 05:33:28 +00002042def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002043 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002044
Craig Topper8104f262018-04-02 05:33:28 +00002045def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2046 let Latency = 12;
2047 let NumMicroOps = 1;
2048 let ResourceCycles = [1,6];
2049}
2050def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2051
Craig Topper58afb4e2018-03-22 21:10:07 +00002052def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002053 let Latency = 12;
2054 let NumMicroOps = 4;
2055 let ResourceCycles = [1,1,1,1];
2056}
2057def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2058
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002059def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002060 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002061 let NumMicroOps = 3;
2062 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002063}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002064def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002065
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002066def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2067 let Latency = 13;
2068 let NumMicroOps = 3;
2069 let ResourceCycles = [1,1,1];
2070}
2071def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2072
Craig Topper58afb4e2018-03-22 21:10:07 +00002073def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002074 let Latency = 13;
2075 let NumMicroOps = 4;
2076 let ResourceCycles = [1,3];
2077}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002078def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002079
Craig Topper8104f262018-04-02 05:33:28 +00002080def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002081 let Latency = 14;
2082 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002083 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002084}
Craig Topper8104f262018-04-02 05:33:28 +00002085def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002086 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002087
Craig Topper8104f262018-04-02 05:33:28 +00002088def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2089 let Latency = 14;
2090 let NumMicroOps = 1;
2091 let ResourceCycles = [1,5];
2092}
2093def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2094
Craig Topper58afb4e2018-03-22 21:10:07 +00002095def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002096 let Latency = 14;
2097 let NumMicroOps = 3;
2098 let ResourceCycles = [1,2];
2099}
Craig Topperfc179c62018-03-22 04:23:41 +00002100def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2101def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2102def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2103def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002104
2105def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2106 let Latency = 14;
2107 let NumMicroOps = 3;
2108 let ResourceCycles = [1,1,1];
2109}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002110def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002111
2112def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002113 let Latency = 14;
2114 let NumMicroOps = 10;
2115 let ResourceCycles = [2,4,1,3];
2116}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002117def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002118
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002119def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002120 let Latency = 15;
2121 let NumMicroOps = 1;
2122 let ResourceCycles = [1];
2123}
Craig Topperfc179c62018-03-22 04:23:41 +00002124def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2125 "DIVR_FST0r",
2126 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002127
Craig Topper58afb4e2018-03-22 21:10:07 +00002128def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002129 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002130 let NumMicroOps = 3;
2131 let ResourceCycles = [1,2];
2132}
Craig Topper40d3b322018-03-22 21:55:20 +00002133def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2134 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002135
Craig Topperd25f1ac2018-03-20 23:39:48 +00002136def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2137 let Latency = 17;
2138 let NumMicroOps = 3;
2139 let ResourceCycles = [1,2];
2140}
2141def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2142
Craig Topper58afb4e2018-03-22 21:10:07 +00002143def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002144 let Latency = 15;
2145 let NumMicroOps = 4;
2146 let ResourceCycles = [1,1,2];
2147}
Craig Topperfc179c62018-03-22 04:23:41 +00002148def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002149
2150def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2151 let Latency = 15;
2152 let NumMicroOps = 10;
2153 let ResourceCycles = [1,1,1,5,1,1];
2154}
Craig Topper13a16502018-03-19 00:56:09 +00002155def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002156
Craig Topper8104f262018-04-02 05:33:28 +00002157def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002158 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002159 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002160 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002161}
Craig Topperfc179c62018-03-22 04:23:41 +00002162def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002163
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002164def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2165 let Latency = 16;
2166 let NumMicroOps = 14;
2167 let ResourceCycles = [1,1,1,4,2,5];
2168}
2169def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2170
2171def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002172 let Latency = 16;
2173 let NumMicroOps = 16;
2174 let ResourceCycles = [16];
2175}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002176def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002177
Craig Topper8104f262018-04-02 05:33:28 +00002178def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002179 let Latency = 17;
2180 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002181 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002182}
Craig Topper8104f262018-04-02 05:33:28 +00002183def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2184
2185def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2186 let Latency = 17;
2187 let NumMicroOps = 2;
2188 let ResourceCycles = [1,1,3];
2189}
2190def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002191
2192def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002193 let Latency = 17;
2194 let NumMicroOps = 15;
2195 let ResourceCycles = [2,1,2,4,2,4];
2196}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002197def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002198
Craig Topper8104f262018-04-02 05:33:28 +00002199def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002200 let Latency = 18;
2201 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002202 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002203}
Craig Topper8104f262018-04-02 05:33:28 +00002204def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002205 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002206
Craig Topper8104f262018-04-02 05:33:28 +00002207def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2208 let Latency = 18;
2209 let NumMicroOps = 1;
2210 let ResourceCycles = [1,12];
2211}
2212def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2213
2214def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002215 let Latency = 18;
2216 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002217 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002218}
Craig Topper8104f262018-04-02 05:33:28 +00002219def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2220
2221def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2222 let Latency = 18;
2223 let NumMicroOps = 2;
2224 let ResourceCycles = [1,1,3];
2225}
2226def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002227
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002228def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002229 let Latency = 18;
2230 let NumMicroOps = 8;
2231 let ResourceCycles = [1,1,1,5];
2232}
Craig Topperfc179c62018-03-22 04:23:41 +00002233def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002234
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002235def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002236 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002237 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002238 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002239}
Craig Topper13a16502018-03-19 00:56:09 +00002240def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002241
Craig Topper8104f262018-04-02 05:33:28 +00002242def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002243 let Latency = 19;
2244 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002245 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002246}
Craig Topper8104f262018-04-02 05:33:28 +00002247def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2248
2249def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2250 let Latency = 19;
2251 let NumMicroOps = 2;
2252 let ResourceCycles = [1,1,6];
2253}
2254def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002255
Craig Topper58afb4e2018-03-22 21:10:07 +00002256def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002257 let Latency = 19;
2258 let NumMicroOps = 5;
2259 let ResourceCycles = [1,1,3];
2260}
Craig Topperfc179c62018-03-22 04:23:41 +00002261def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002262
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002263def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002264 let Latency = 20;
2265 let NumMicroOps = 1;
2266 let ResourceCycles = [1];
2267}
Craig Topperfc179c62018-03-22 04:23:41 +00002268def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2269 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002270 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002271
Craig Topper8104f262018-04-02 05:33:28 +00002272def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002273 let Latency = 20;
2274 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002275 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002276}
Craig Topperfc179c62018-03-22 04:23:41 +00002277def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002278
Craig Topper58afb4e2018-03-22 21:10:07 +00002279def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002280 let Latency = 20;
2281 let NumMicroOps = 5;
2282 let ResourceCycles = [1,1,3];
2283}
2284def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2285
2286def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2287 let Latency = 20;
2288 let NumMicroOps = 8;
2289 let ResourceCycles = [1,1,1,1,1,1,2];
2290}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002291def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002292
2293def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002294 let Latency = 20;
2295 let NumMicroOps = 10;
2296 let ResourceCycles = [1,2,7];
2297}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002298def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002299
Craig Topper8104f262018-04-02 05:33:28 +00002300def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002301 let Latency = 21;
2302 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002303 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002304}
2305def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2306
2307def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2308 let Latency = 22;
2309 let NumMicroOps = 2;
2310 let ResourceCycles = [1,1];
2311}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002312def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002313
2314def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2315 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002316 let NumMicroOps = 5;
2317 let ResourceCycles = [1,2,1,1];
2318}
Craig Topper17a31182017-12-16 18:35:29 +00002319def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2320 VGATHERDPDrm,
2321 VGATHERQPDrm,
2322 VGATHERQPSrm,
2323 VPGATHERDDrm,
2324 VPGATHERDQrm,
2325 VPGATHERQDrm,
2326 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002327
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002328def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2329 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002330 let NumMicroOps = 5;
2331 let ResourceCycles = [1,2,1,1];
2332}
Craig Topper17a31182017-12-16 18:35:29 +00002333def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2334 VGATHERQPDYrm,
2335 VGATHERQPSYrm,
2336 VPGATHERDDYrm,
2337 VPGATHERDQYrm,
2338 VPGATHERQDYrm,
2339 VPGATHERQQYrm,
2340 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002341
Craig Topper8104f262018-04-02 05:33:28 +00002342def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002343 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002344 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002345 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002346}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002347def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002348
2349def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2350 let Latency = 23;
2351 let NumMicroOps = 19;
2352 let ResourceCycles = [2,1,4,1,1,4,6];
2353}
2354def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2355
Craig Topper8104f262018-04-02 05:33:28 +00002356def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002357 let Latency = 24;
2358 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002359 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002360}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002361def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002362
Craig Topper8104f262018-04-02 05:33:28 +00002363def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002364 let Latency = 25;
2365 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002366 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002367}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002368def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002369
2370def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2371 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002372 let NumMicroOps = 3;
2373 let ResourceCycles = [1,1,1];
2374}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002375def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002376
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002377def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2378 let Latency = 27;
2379 let NumMicroOps = 2;
2380 let ResourceCycles = [1,1];
2381}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002382def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002383
2384def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2385 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002386 let NumMicroOps = 8;
2387 let ResourceCycles = [2,4,1,1];
2388}
Craig Topper13a16502018-03-19 00:56:09 +00002389def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002390
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002391def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002392 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002393 let NumMicroOps = 3;
2394 let ResourceCycles = [1,1,1];
2395}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002396def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002397
2398def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2399 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002400 let NumMicroOps = 23;
2401 let ResourceCycles = [1,5,3,4,10];
2402}
Craig Topperfc179c62018-03-22 04:23:41 +00002403def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2404 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002405
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002406def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2407 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002408 let NumMicroOps = 23;
2409 let ResourceCycles = [1,5,2,1,4,10];
2410}
Craig Topperfc179c62018-03-22 04:23:41 +00002411def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2412 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002413
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002414def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2415 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002416 let NumMicroOps = 31;
2417 let ResourceCycles = [1,8,1,21];
2418}
Craig Topper391c6f92017-12-10 01:24:08 +00002419def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002420
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002421def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2422 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002423 let NumMicroOps = 18;
2424 let ResourceCycles = [1,1,2,3,1,1,1,8];
2425}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002426def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002427
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002428def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2429 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002430 let NumMicroOps = 39;
2431 let ResourceCycles = [1,10,1,1,26];
2432}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002433def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002434
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002435def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002436 let Latency = 42;
2437 let NumMicroOps = 22;
2438 let ResourceCycles = [2,20];
2439}
Craig Topper2d451e72018-03-18 08:38:06 +00002440def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002441
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002442def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2443 let Latency = 42;
2444 let NumMicroOps = 40;
2445 let ResourceCycles = [1,11,1,1,26];
2446}
Craig Topper391c6f92017-12-10 01:24:08 +00002447def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002448
2449def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2450 let Latency = 46;
2451 let NumMicroOps = 44;
2452 let ResourceCycles = [1,11,1,1,30];
2453}
2454def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2455
2456def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2457 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002458 let NumMicroOps = 64;
2459 let ResourceCycles = [2,8,5,10,39];
2460}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002461def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002462
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002463def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2464 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002465 let NumMicroOps = 88;
2466 let ResourceCycles = [4,4,31,1,2,1,45];
2467}
Craig Topper2d451e72018-03-18 08:38:06 +00002468def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002469
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002470def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2471 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002472 let NumMicroOps = 90;
2473 let ResourceCycles = [4,2,33,1,2,1,47];
2474}
Craig Topper2d451e72018-03-18 08:38:06 +00002475def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002477def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002478 let Latency = 75;
2479 let NumMicroOps = 15;
2480 let ResourceCycles = [6,3,6];
2481}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002482def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002483
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002484def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002485 let Latency = 76;
2486 let NumMicroOps = 32;
2487 let ResourceCycles = [7,2,8,3,1,11];
2488}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002489def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002490
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002491def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002492 let Latency = 102;
2493 let NumMicroOps = 66;
2494 let ResourceCycles = [4,2,4,8,14,34];
2495}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002496def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002497
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002498def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2499 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002500 let NumMicroOps = 100;
2501 let ResourceCycles = [9,1,11,16,1,11,21,30];
2502}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002503def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002504
2505} // SchedModel