blob: e6608bc627bd5ed21f3b93ee7dbdb7b2a65b4e86 [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",
Craig Topperfc179c62018-03-22 04:23:41 +0000542 "SMSW16m",
543 "STC",
544 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000545 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000546
547def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000548 let Latency = 1;
549 let NumMicroOps = 2;
550 let ResourceCycles = [1,1];
551}
Craig Topperfc179c62018-03-22 04:23:41 +0000552def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
553 "MMX_MOVD64from64rm",
554 "MMX_MOVD64mr",
555 "MMX_MOVNTQmr",
556 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000557 "MOVNTI_64mr",
558 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000559 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000560 "VEXTRACTF128mr",
561 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000562 "(V?)MOVAPDYmr",
563 "(V?)MOVAPS(Y?)mr",
564 "(V?)MOVDQA(Y?)mr",
565 "(V?)MOVDQU(Y?)mr",
566 "(V?)MOVHPDmr",
567 "(V?)MOVHPSmr",
568 "(V?)MOVLPDmr",
569 "(V?)MOVLPSmr",
570 "(V?)MOVNTDQ(Y?)mr",
571 "(V?)MOVNTPD(Y?)mr",
572 "(V?)MOVNTPS(Y?)mr",
573 "(V?)MOVPDI2DImr",
574 "(V?)MOVPQI2QImr",
575 "(V?)MOVPQIto64mr",
576 "(V?)MOVSDmr",
577 "(V?)MOVSSmr",
578 "(V?)MOVUPD(Y?)mr",
579 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000580 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000581
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000582def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000583 let Latency = 2;
584 let NumMicroOps = 1;
585 let ResourceCycles = [1];
586}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000587def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000588 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000589 "(V?)MOVPDI2DIrr",
590 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000591 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000592 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000593
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000594def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000595 let Latency = 2;
596 let NumMicroOps = 2;
597 let ResourceCycles = [2];
598}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000599def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000600
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000601def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000602 let Latency = 2;
603 let NumMicroOps = 2;
604 let ResourceCycles = [2];
605}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000606def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
607def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000608
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000609def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000610 let Latency = 2;
611 let NumMicroOps = 2;
612 let ResourceCycles = [2];
613}
Craig Topperfc179c62018-03-22 04:23:41 +0000614def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
615 "ROL(8|16|32|64)r1",
616 "ROL(8|16|32|64)ri",
617 "ROR(8|16|32|64)r1",
618 "ROR(8|16|32|64)ri",
619 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000620
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000621def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000622 let Latency = 2;
623 let NumMicroOps = 2;
624 let ResourceCycles = [2];
625}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000626def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
627 WAIT,
628 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000629
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000630def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000631 let Latency = 2;
632 let NumMicroOps = 2;
633 let ResourceCycles = [1,1];
634}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000635def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
636 "VMASKMOVPS(Y?)mr",
637 "VPMASKMOVD(Y?)mr",
638 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000639
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000640def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000641 let Latency = 2;
642 let NumMicroOps = 2;
643 let ResourceCycles = [1,1];
644}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000645def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
646 "(V?)PSLLQrr",
647 "(V?)PSLLWrr",
648 "(V?)PSRADrr",
649 "(V?)PSRAWrr",
650 "(V?)PSRLDrr",
651 "(V?)PSRLQrr",
652 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000653
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000654def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000655 let Latency = 2;
656 let NumMicroOps = 2;
657 let ResourceCycles = [1,1];
658}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000659def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000660
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000661def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000662 let Latency = 2;
663 let NumMicroOps = 2;
664 let ResourceCycles = [1,1];
665}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000666def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000667
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000668def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000669 let Latency = 2;
670 let NumMicroOps = 2;
671 let ResourceCycles = [1,1];
672}
Craig Topper498875f2018-04-04 17:54:19 +0000673def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
674
675def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
676 let Latency = 1;
677 let NumMicroOps = 1;
678 let ResourceCycles = [1];
679}
680def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000681
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000682def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000683 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000684 let NumMicroOps = 2;
685 let ResourceCycles = [1,1];
686}
Craig Topper2d451e72018-03-18 08:38:06 +0000687def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000688def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000689def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
690 "ADC8ri",
691 "SBB8i8",
692 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000693
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000694def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
695 let Latency = 2;
696 let NumMicroOps = 3;
697 let ResourceCycles = [1,1,1];
698}
699def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
700
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000701def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
702 let Latency = 2;
703 let NumMicroOps = 3;
704 let ResourceCycles = [1,1,1];
705}
706def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
707
708def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
709 let Latency = 2;
710 let NumMicroOps = 3;
711 let ResourceCycles = [1,1,1];
712}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000713def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
714 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000715def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000716 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000717
718def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
719 let Latency = 3;
720 let NumMicroOps = 1;
721 let ResourceCycles = [1];
722}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000723def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000724 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000725 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000726 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000727
Clement Courbet327fac42018-03-07 08:14:02 +0000728def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000729 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000730 let NumMicroOps = 2;
731 let ResourceCycles = [1,1];
732}
Clement Courbet327fac42018-03-07 08:14:02 +0000733def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000734
735def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
736 let Latency = 3;
737 let NumMicroOps = 1;
738 let ResourceCycles = [1];
739}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000740def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
741 "(ADD|SUB|SUBR)_FST0r",
742 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000743 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000744 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000745 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000746 "VPMOVSXBDYrr",
747 "VPMOVSXBQYrr",
748 "VPMOVSXBWYrr",
749 "VPMOVSXDQYrr",
750 "VPMOVSXWDYrr",
751 "VPMOVSXWQYrr",
752 "VPMOVZXBDYrr",
753 "VPMOVZXBQYrr",
754 "VPMOVZXBWYrr",
755 "VPMOVZXDQYrr",
756 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000757 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000758
759def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
760 let Latency = 3;
761 let NumMicroOps = 2;
762 let ResourceCycles = [1,1];
763}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000764def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000765
766def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
767 let Latency = 3;
768 let NumMicroOps = 2;
769 let ResourceCycles = [1,1];
770}
771def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
772
773def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
774 let Latency = 3;
775 let NumMicroOps = 3;
776 let ResourceCycles = [3];
777}
Craig Topperfc179c62018-03-22 04:23:41 +0000778def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
779 "ROR(8|16|32|64)rCL",
780 "SAR(8|16|32|64)rCL",
781 "SHL(8|16|32|64)rCL",
782 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000783
784def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000785 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000786 let NumMicroOps = 3;
787 let ResourceCycles = [3];
788}
Craig Topperb5f26592018-04-19 18:00:17 +0000789def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
790 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
791 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000792
793def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
794 let Latency = 3;
795 let NumMicroOps = 3;
796 let ResourceCycles = [1,2];
797}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000798def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000799
800def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
801 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000802 let NumMicroOps = 3;
803 let ResourceCycles = [2,1];
804}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000805def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
806 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000807
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000808def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
809 let Latency = 3;
810 let NumMicroOps = 3;
811 let ResourceCycles = [2,1];
812}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000813def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000814
815def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
816 let Latency = 3;
817 let NumMicroOps = 3;
818 let ResourceCycles = [2,1];
819}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000820def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
821 "(V?)PHADDW(Y?)rr",
822 "(V?)PHSUBD(Y?)rr",
823 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000824
825def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
826 let Latency = 3;
827 let NumMicroOps = 3;
828 let ResourceCycles = [2,1];
829}
Craig Topperfc179c62018-03-22 04:23:41 +0000830def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
831 "MMX_PACKSSWBirr",
832 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000833
834def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
835 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000836 let NumMicroOps = 3;
837 let ResourceCycles = [1,2];
838}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000839def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000840
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000841def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
842 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000843 let NumMicroOps = 3;
844 let ResourceCycles = [1,2];
845}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000846def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000847
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000848def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
849 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000850 let NumMicroOps = 3;
851 let ResourceCycles = [1,2];
852}
Craig Topperfc179c62018-03-22 04:23:41 +0000853def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
854 "RCL(8|16|32|64)ri",
855 "RCR(8|16|32|64)r1",
856 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000857
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000858def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
859 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000860 let NumMicroOps = 3;
861 let ResourceCycles = [1,1,1];
862}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000863def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000864
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000865def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
866 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000867 let NumMicroOps = 4;
868 let ResourceCycles = [1,1,2];
869}
Craig Topperf4cd9082018-01-19 05:47:32 +0000870def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000871
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000872def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
873 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000874 let NumMicroOps = 4;
875 let ResourceCycles = [1,1,1,1];
876}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000877def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000878
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000879def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
880 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000881 let NumMicroOps = 4;
882 let ResourceCycles = [1,1,1,1];
883}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000884def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000885
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000886def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000887 let Latency = 4;
888 let NumMicroOps = 1;
889 let ResourceCycles = [1];
890}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000891def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000892 "MMX_PMADDWDirr",
893 "MMX_PMULHRSWrr",
894 "MMX_PMULHUWirr",
895 "MMX_PMULHWirr",
896 "MMX_PMULLWirr",
897 "MMX_PMULUDQirr",
898 "MUL_FPrST0",
899 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000900 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000901
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000902def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000903 let Latency = 4;
904 let NumMicroOps = 1;
905 let ResourceCycles = [1];
906}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000907def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
908 "(V?)ADDPS(Y?)rr",
909 "(V?)ADDSDrr",
910 "(V?)ADDSSrr",
911 "(V?)ADDSUBPD(Y?)rr",
912 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000913 "(V?)CVTDQ2PS(Y?)rr",
914 "(V?)CVTPS2DQ(Y?)rr",
915 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000916 "(V?)MULPD(Y?)rr",
917 "(V?)MULPS(Y?)rr",
918 "(V?)MULSDrr",
919 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000920 "(V?)PMADDUBSW(Y?)rr",
921 "(V?)PMADDWD(Y?)rr",
922 "(V?)PMULDQ(Y?)rr",
923 "(V?)PMULHRSW(Y?)rr",
924 "(V?)PMULHUW(Y?)rr",
925 "(V?)PMULHW(Y?)rr",
926 "(V?)PMULLW(Y?)rr",
927 "(V?)PMULUDQ(Y?)rr",
928 "(V?)SUBPD(Y?)rr",
929 "(V?)SUBPS(Y?)rr",
930 "(V?)SUBSDrr",
931 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000932
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000933def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000934 let Latency = 4;
935 let NumMicroOps = 2;
936 let ResourceCycles = [1,1];
937}
Craig Topperf846e2d2018-04-19 05:34:05 +0000938def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000939
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000940def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
941 let Latency = 4;
942 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000943 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000944}
Craig Topperfc179c62018-03-22 04:23:41 +0000945def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000946
947def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000948 let Latency = 4;
949 let NumMicroOps = 2;
950 let ResourceCycles = [1,1];
951}
Craig Topperfc179c62018-03-22 04:23:41 +0000952def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
953 "VPSLLQYrr",
954 "VPSLLWYrr",
955 "VPSRADYrr",
956 "VPSRAWYrr",
957 "VPSRLDYrr",
958 "VPSRLQYrr",
959 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000960
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000961def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000962 let Latency = 4;
963 let NumMicroOps = 3;
964 let ResourceCycles = [1,1,1];
965}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000966def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
967 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000968
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000969def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000970 let Latency = 4;
971 let NumMicroOps = 4;
972 let ResourceCycles = [4];
973}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000974def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000975
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000976def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000977 let Latency = 4;
978 let NumMicroOps = 4;
979 let ResourceCycles = [1,3];
980}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000981def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000982
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000983def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000984 let Latency = 4;
985 let NumMicroOps = 4;
986 let ResourceCycles = [1,3];
987}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000988def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000989
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000990def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000991 let Latency = 4;
992 let NumMicroOps = 4;
993 let ResourceCycles = [1,1,2];
994}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000995def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000996
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000997def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
998 let Latency = 5;
999 let NumMicroOps = 1;
1000 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001001}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001002def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001003 "MOVSX(16|32|64)rm32",
1004 "MOVSX(16|32|64)rm8",
1005 "MOVZX(16|32|64)rm16",
1006 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001007 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001009def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001010 let Latency = 5;
1011 let NumMicroOps = 2;
1012 let ResourceCycles = [1,1];
1013}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001014def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1015 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001016
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001017def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001018 let Latency = 5;
1019 let NumMicroOps = 2;
1020 let ResourceCycles = [1,1];
1021}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001022def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001023 "MMX_CVTPS2PIirr",
1024 "MMX_CVTTPD2PIirr",
1025 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001026 "(V?)CVTPD2DQrr",
1027 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001028 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001029 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001030 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001031 "(V?)CVTSD2SSrr",
1032 "(V?)CVTSI642SDrr",
1033 "(V?)CVTSI2SDrr",
1034 "(V?)CVTSI2SSrr",
1035 "(V?)CVTSS2SDrr",
1036 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001037
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001038def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001039 let Latency = 5;
1040 let NumMicroOps = 3;
1041 let ResourceCycles = [1,1,1];
1042}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001043def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001044
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001045def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001046 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001047 let NumMicroOps = 3;
1048 let ResourceCycles = [1,1,1];
1049}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001050def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001051
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001052def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001053 let Latency = 5;
1054 let NumMicroOps = 5;
1055 let ResourceCycles = [1,4];
1056}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001057def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001058
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001059def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001060 let Latency = 5;
1061 let NumMicroOps = 5;
1062 let ResourceCycles = [2,3];
1063}
Craig Topper13a16502018-03-19 00:56:09 +00001064def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001066def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001067 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001068 let NumMicroOps = 6;
1069 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001070}
Craig Topperfc179c62018-03-22 04:23:41 +00001071def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1072 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001073
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001074def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1075 let Latency = 6;
1076 let NumMicroOps = 1;
1077 let ResourceCycles = [1];
1078}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001079def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001080 "(V?)MOVSHDUPrm",
1081 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001082 "VPBROADCASTDrm",
1083 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001084
1085def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001086 let Latency = 6;
1087 let NumMicroOps = 2;
1088 let ResourceCycles = [2];
1089}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001090def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001091
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001092def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001093 let Latency = 6;
1094 let NumMicroOps = 2;
1095 let ResourceCycles = [1,1];
1096}
Craig Topperfc179c62018-03-22 04:23:41 +00001097def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1098 "MMX_PADDSWirm",
1099 "MMX_PADDUSBirm",
1100 "MMX_PADDUSWirm",
1101 "MMX_PAVGBirm",
1102 "MMX_PAVGWirm",
1103 "MMX_PCMPEQBirm",
1104 "MMX_PCMPEQDirm",
1105 "MMX_PCMPEQWirm",
1106 "MMX_PCMPGTBirm",
1107 "MMX_PCMPGTDirm",
1108 "MMX_PCMPGTWirm",
1109 "MMX_PMAXSWirm",
1110 "MMX_PMAXUBirm",
1111 "MMX_PMINSWirm",
1112 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001113 "MMX_PSUBSBirm",
1114 "MMX_PSUBSWirm",
1115 "MMX_PSUBUSBirm",
1116 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001117
Craig Topper58afb4e2018-03-22 21:10:07 +00001118def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001119 let Latency = 6;
1120 let NumMicroOps = 2;
1121 let ResourceCycles = [1,1];
1122}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001123def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1124 "(V?)CVTSD2SIrr",
1125 "(V?)CVTSS2SI64rr",
1126 "(V?)CVTSS2SIrr",
1127 "(V?)CVTTSD2SI64rr",
1128 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001129
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001130def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1131 let Latency = 6;
1132 let NumMicroOps = 2;
1133 let ResourceCycles = [1,1];
1134}
Craig Topperfc179c62018-03-22 04:23:41 +00001135def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1136 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001137
1138def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1139 let Latency = 6;
1140 let NumMicroOps = 2;
1141 let ResourceCycles = [1,1];
1142}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001143def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1144 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001145 "MMX_PANDNirm",
1146 "MMX_PANDirm",
1147 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001148 "MMX_PSIGN(B|D|W)rm",
1149 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001150 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001151
1152def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1153 let Latency = 6;
1154 let NumMicroOps = 2;
1155 let ResourceCycles = [1,1];
1156}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001157def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001158def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1159 ADCX32rm, ADCX64rm,
1160 ADOX32rm, ADOX64rm,
1161 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001162
1163def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1164 let Latency = 6;
1165 let NumMicroOps = 2;
1166 let ResourceCycles = [1,1];
1167}
Craig Topperfc179c62018-03-22 04:23:41 +00001168def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1169 "BLSI(32|64)rm",
1170 "BLSMSK(32|64)rm",
1171 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001172 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001173
1174def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1175 let Latency = 6;
1176 let NumMicroOps = 2;
1177 let ResourceCycles = [1,1];
1178}
Craig Topper2d451e72018-03-18 08:38:06 +00001179def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001180def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001181
Craig Topper58afb4e2018-03-22 21:10:07 +00001182def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001183 let Latency = 6;
1184 let NumMicroOps = 3;
1185 let ResourceCycles = [2,1];
1186}
Craig Topperfc179c62018-03-22 04:23:41 +00001187def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001188
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001189def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001190 let Latency = 6;
1191 let NumMicroOps = 4;
1192 let ResourceCycles = [1,2,1];
1193}
Craig Topperfc179c62018-03-22 04:23:41 +00001194def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1195 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001196
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001197def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001198 let Latency = 6;
1199 let NumMicroOps = 4;
1200 let ResourceCycles = [1,1,1,1];
1201}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001202def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001203
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001204def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1205 let Latency = 6;
1206 let NumMicroOps = 4;
1207 let ResourceCycles = [1,1,1,1];
1208}
Craig Topperfc179c62018-03-22 04:23:41 +00001209def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1210 "BTR(16|32|64)mi8",
1211 "BTS(16|32|64)mi8",
1212 "SAR(8|16|32|64)m1",
1213 "SAR(8|16|32|64)mi",
1214 "SHL(8|16|32|64)m1",
1215 "SHL(8|16|32|64)mi",
1216 "SHR(8|16|32|64)m1",
1217 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001218
1219def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1220 let Latency = 6;
1221 let NumMicroOps = 4;
1222 let ResourceCycles = [1,1,1,1];
1223}
Craig Topperf0d04262018-04-06 16:16:48 +00001224def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1225 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001226
1227def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001228 let Latency = 6;
1229 let NumMicroOps = 6;
1230 let ResourceCycles = [1,5];
1231}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001232def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001233
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001234def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1235 let Latency = 7;
1236 let NumMicroOps = 1;
1237 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001238}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001239def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001240 "VBROADCASTF128",
1241 "VBROADCASTI128",
1242 "VBROADCASTSDYrm",
1243 "VBROADCASTSSYrm",
1244 "VLDDQUYrm",
1245 "VMOVAPDYrm",
1246 "VMOVAPSYrm",
1247 "VMOVDDUPYrm",
1248 "VMOVDQAYrm",
1249 "VMOVDQUYrm",
1250 "VMOVNTDQAYrm",
1251 "VMOVSHDUPYrm",
1252 "VMOVSLDUPYrm",
1253 "VMOVUPDYrm",
1254 "VMOVUPSYrm",
1255 "VPBROADCASTDYrm",
1256 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001257
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001258def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001259 let Latency = 7;
1260 let NumMicroOps = 2;
1261 let ResourceCycles = [1,1];
1262}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001263def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001264
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001265def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1266 let Latency = 7;
1267 let NumMicroOps = 2;
1268 let ResourceCycles = [1,1];
1269}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001270def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1271 "(V?)PACKSSDWrm",
1272 "(V?)PACKSSWBrm",
1273 "(V?)PACKUSDWrm",
1274 "(V?)PACKUSWBrm",
1275 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001276 "VPBROADCASTBrm",
1277 "VPBROADCASTWrm",
1278 "VPERMILPDmi",
1279 "VPERMILPDrm",
1280 "VPERMILPSmi",
1281 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001282 "(V?)PSHUFBrm",
1283 "(V?)PSHUFDmi",
1284 "(V?)PSHUFHWmi",
1285 "(V?)PSHUFLWmi",
1286 "(V?)PUNPCKHBWrm",
1287 "(V?)PUNPCKHDQrm",
1288 "(V?)PUNPCKHQDQrm",
1289 "(V?)PUNPCKHWDrm",
1290 "(V?)PUNPCKLBWrm",
1291 "(V?)PUNPCKLDQrm",
1292 "(V?)PUNPCKLQDQrm",
1293 "(V?)PUNPCKLWDrm",
1294 "(V?)SHUFPDrmi",
1295 "(V?)SHUFPSrmi",
1296 "(V?)UNPCKHPDrm",
1297 "(V?)UNPCKHPSrm",
1298 "(V?)UNPCKLPDrm",
1299 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001300
Craig Topper58afb4e2018-03-22 21:10:07 +00001301def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001302 let Latency = 7;
1303 let NumMicroOps = 2;
1304 let ResourceCycles = [1,1];
1305}
Craig Topperfc179c62018-03-22 04:23:41 +00001306def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1307 "VCVTPD2PSYrr",
1308 "VCVTPH2PSYrr",
1309 "VCVTPS2PDYrr",
1310 "VCVTPS2PHYrr",
1311 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001312
1313def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1314 let Latency = 7;
1315 let NumMicroOps = 2;
1316 let ResourceCycles = [1,1];
1317}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001318def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1319 "(V?)PABSDrm",
1320 "(V?)PABSWrm",
1321 "(V?)PADDSBrm",
1322 "(V?)PADDSWrm",
1323 "(V?)PADDUSBrm",
1324 "(V?)PADDUSWrm",
1325 "(V?)PAVGBrm",
1326 "(V?)PAVGWrm",
1327 "(V?)PCMPEQBrm",
1328 "(V?)PCMPEQDrm",
1329 "(V?)PCMPEQQrm",
1330 "(V?)PCMPEQWrm",
1331 "(V?)PCMPGTBrm",
1332 "(V?)PCMPGTDrm",
1333 "(V?)PCMPGTWrm",
1334 "(V?)PMAXSBrm",
1335 "(V?)PMAXSDrm",
1336 "(V?)PMAXSWrm",
1337 "(V?)PMAXUBrm",
1338 "(V?)PMAXUDrm",
1339 "(V?)PMAXUWrm",
1340 "(V?)PMINSBrm",
1341 "(V?)PMINSDrm",
1342 "(V?)PMINSWrm",
1343 "(V?)PMINUBrm",
1344 "(V?)PMINUDrm",
1345 "(V?)PMINUWrm",
1346 "(V?)PSIGNBrm",
1347 "(V?)PSIGNDrm",
1348 "(V?)PSIGNWrm",
1349 "(V?)PSLLDrm",
1350 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001351 "VPSLLVDrm",
1352 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001353 "(V?)PSLLWrm",
1354 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001355 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001356 "(V?)PSRAWrm",
1357 "(V?)PSRLDrm",
1358 "(V?)PSRLQrm",
1359 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001360 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001361 "(V?)PSRLWrm",
1362 "(V?)PSUBSBrm",
1363 "(V?)PSUBSWrm",
1364 "(V?)PSUBUSBrm",
1365 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001366
1367def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1368 let Latency = 7;
1369 let NumMicroOps = 2;
1370 let ResourceCycles = [1,1];
1371}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001372def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001373 "(V?)INSERTI128rm",
1374 "(V?)MASKMOVPDrm",
1375 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001376 "(V?)PADDBrm",
1377 "(V?)PADDDrm",
1378 "(V?)PADDQrm",
1379 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001380 "(V?)PBLENDDrmi",
1381 "(V?)PMASKMOVDrm",
1382 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001383 "(V?)PSUBBrm",
1384 "(V?)PSUBDrm",
1385 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001386 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001387
1388def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1389 let Latency = 7;
1390 let NumMicroOps = 3;
1391 let ResourceCycles = [2,1];
1392}
Craig Topperfc179c62018-03-22 04:23:41 +00001393def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1394 "MMX_PACKSSWBirm",
1395 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001396
1397def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1398 let Latency = 7;
1399 let NumMicroOps = 3;
1400 let ResourceCycles = [1,2];
1401}
Craig Topperf4cd9082018-01-19 05:47:32 +00001402def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001403
1404def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1405 let Latency = 7;
1406 let NumMicroOps = 3;
1407 let ResourceCycles = [1,2];
1408}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001409def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1410 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001411
Craig Topper58afb4e2018-03-22 21:10:07 +00001412def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001413 let Latency = 7;
1414 let NumMicroOps = 3;
1415 let ResourceCycles = [1,1,1];
1416}
Craig Topperfc179c62018-03-22 04:23:41 +00001417def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1418 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001419
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001420def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001421 let Latency = 7;
1422 let NumMicroOps = 3;
1423 let ResourceCycles = [1,1,1];
1424}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001425def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001426
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001427def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001428 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001429 let NumMicroOps = 3;
1430 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001431}
Craig Topperfc179c62018-03-22 04:23:41 +00001432def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1433 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001434
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001435def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1436 let Latency = 7;
1437 let NumMicroOps = 5;
1438 let ResourceCycles = [1,1,1,2];
1439}
Craig Topperfc179c62018-03-22 04:23:41 +00001440def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1441 "ROL(8|16|32|64)mi",
1442 "ROR(8|16|32|64)m1",
1443 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001444
1445def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1446 let Latency = 7;
1447 let NumMicroOps = 5;
1448 let ResourceCycles = [1,1,1,2];
1449}
Craig Topper13a16502018-03-19 00:56:09 +00001450def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001451
1452def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1453 let Latency = 7;
1454 let NumMicroOps = 5;
1455 let ResourceCycles = [1,1,1,1,1];
1456}
Craig Topperfc179c62018-03-22 04:23:41 +00001457def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1458 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001459
1460def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001461 let Latency = 7;
1462 let NumMicroOps = 7;
1463 let ResourceCycles = [1,3,1,2];
1464}
Craig Topper2d451e72018-03-18 08:38:06 +00001465def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001466
Craig Topper58afb4e2018-03-22 21:10:07 +00001467def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001468 let Latency = 8;
1469 let NumMicroOps = 2;
1470 let ResourceCycles = [2];
1471}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001472def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1473 "(V?)ROUNDPS(Y?)r",
1474 "(V?)ROUNDSDr",
1475 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001476
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001477def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001478 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001479 let NumMicroOps = 2;
1480 let ResourceCycles = [1,1];
1481}
Craig Topperfc179c62018-03-22 04:23:41 +00001482def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1483 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001484
1485def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1486 let Latency = 8;
1487 let NumMicroOps = 2;
1488 let ResourceCycles = [1,1];
1489}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001490def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1491 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001492
1493def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001494 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001495 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001496 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001497}
Craig Topperf846e2d2018-04-19 05:34:05 +00001498def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001499
Craig Topperf846e2d2018-04-19 05:34:05 +00001500def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1501 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001502 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001503 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001504}
Craig Topperfc179c62018-03-22 04:23:41 +00001505def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001506
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001507def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1508 let Latency = 8;
1509 let NumMicroOps = 2;
1510 let ResourceCycles = [1,1];
1511}
Craig Topperfc179c62018-03-22 04:23:41 +00001512def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1513 "FCOM64m",
1514 "FCOMP32m",
1515 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001516 "VPACKSSDWYrm",
1517 "VPACKSSWBYrm",
1518 "VPACKUSDWYrm",
1519 "VPACKUSWBYrm",
1520 "VPALIGNRYrmi",
1521 "VPBLENDWYrmi",
1522 "VPBROADCASTBYrm",
1523 "VPBROADCASTWYrm",
1524 "VPERMILPDYmi",
1525 "VPERMILPDYrm",
1526 "VPERMILPSYmi",
1527 "VPERMILPSYrm",
1528 "VPMOVSXBDYrm",
1529 "VPMOVSXBQYrm",
1530 "VPMOVSXWQYrm",
1531 "VPSHUFBYrm",
1532 "VPSHUFDYmi",
1533 "VPSHUFHWYmi",
1534 "VPSHUFLWYmi",
1535 "VPUNPCKHBWYrm",
1536 "VPUNPCKHDQYrm",
1537 "VPUNPCKHQDQYrm",
1538 "VPUNPCKHWDYrm",
1539 "VPUNPCKLBWYrm",
1540 "VPUNPCKLDQYrm",
1541 "VPUNPCKLQDQYrm",
1542 "VPUNPCKLWDYrm",
1543 "VSHUFPDYrmi",
1544 "VSHUFPSYrmi",
1545 "VUNPCKHPDYrm",
1546 "VUNPCKHPSYrm",
1547 "VUNPCKLPDYrm",
1548 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001549
1550def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1551 let Latency = 8;
1552 let NumMicroOps = 2;
1553 let ResourceCycles = [1,1];
1554}
Craig Topperfc179c62018-03-22 04:23:41 +00001555def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1556 "VPABSDYrm",
1557 "VPABSWYrm",
1558 "VPADDSBYrm",
1559 "VPADDSWYrm",
1560 "VPADDUSBYrm",
1561 "VPADDUSWYrm",
1562 "VPAVGBYrm",
1563 "VPAVGWYrm",
1564 "VPCMPEQBYrm",
1565 "VPCMPEQDYrm",
1566 "VPCMPEQQYrm",
1567 "VPCMPEQWYrm",
1568 "VPCMPGTBYrm",
1569 "VPCMPGTDYrm",
1570 "VPCMPGTWYrm",
1571 "VPMAXSBYrm",
1572 "VPMAXSDYrm",
1573 "VPMAXSWYrm",
1574 "VPMAXUBYrm",
1575 "VPMAXUDYrm",
1576 "VPMAXUWYrm",
1577 "VPMINSBYrm",
1578 "VPMINSDYrm",
1579 "VPMINSWYrm",
1580 "VPMINUBYrm",
1581 "VPMINUDYrm",
1582 "VPMINUWYrm",
1583 "VPSIGNBYrm",
1584 "VPSIGNDYrm",
1585 "VPSIGNWYrm",
1586 "VPSLLDYrm",
1587 "VPSLLQYrm",
1588 "VPSLLVDYrm",
1589 "VPSLLVQYrm",
1590 "VPSLLWYrm",
1591 "VPSRADYrm",
1592 "VPSRAVDYrm",
1593 "VPSRAWYrm",
1594 "VPSRLDYrm",
1595 "VPSRLQYrm",
1596 "VPSRLVDYrm",
1597 "VPSRLVQYrm",
1598 "VPSRLWYrm",
1599 "VPSUBSBYrm",
1600 "VPSUBSWYrm",
1601 "VPSUBUSBYrm",
1602 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001603
1604def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1605 let Latency = 8;
1606 let NumMicroOps = 2;
1607 let ResourceCycles = [1,1];
1608}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001609def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001610 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001611 "VPADDBYrm",
1612 "VPADDDYrm",
1613 "VPADDQYrm",
1614 "VPADDWYrm",
1615 "VPANDNYrm",
1616 "VPANDYrm",
1617 "VPBLENDDYrmi",
1618 "VPMASKMOVDYrm",
1619 "VPMASKMOVQYrm",
1620 "VPORYrm",
1621 "VPSUBBYrm",
1622 "VPSUBDYrm",
1623 "VPSUBQYrm",
1624 "VPSUBWYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001625 "VPXORYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001626
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001627def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1628 let Latency = 8;
1629 let NumMicroOps = 4;
1630 let ResourceCycles = [1,2,1];
1631}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001632def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001633
1634def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1635 let Latency = 8;
1636 let NumMicroOps = 4;
1637 let ResourceCycles = [2,1,1];
1638}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001639def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001640
Craig Topper58afb4e2018-03-22 21:10:07 +00001641def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001642 let Latency = 8;
1643 let NumMicroOps = 4;
1644 let ResourceCycles = [1,1,1,1];
1645}
1646def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1647
1648def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1649 let Latency = 8;
1650 let NumMicroOps = 5;
1651 let ResourceCycles = [1,1,3];
1652}
Craig Topper13a16502018-03-19 00:56:09 +00001653def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001654
1655def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1656 let Latency = 8;
1657 let NumMicroOps = 5;
1658 let ResourceCycles = [1,1,1,2];
1659}
Craig Topperfc179c62018-03-22 04:23:41 +00001660def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1661 "RCL(8|16|32|64)mi",
1662 "RCR(8|16|32|64)m1",
1663 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001664
1665def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1666 let Latency = 8;
1667 let NumMicroOps = 6;
1668 let ResourceCycles = [1,1,1,3];
1669}
Craig Topperfc179c62018-03-22 04:23:41 +00001670def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1671 "SAR(8|16|32|64)mCL",
1672 "SHL(8|16|32|64)mCL",
1673 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001674
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001675def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1676 let Latency = 8;
1677 let NumMicroOps = 6;
1678 let ResourceCycles = [1,1,1,2,1];
1679}
Craig Topper9f834812018-04-01 21:54:24 +00001680def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001681 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001682 "SBB(8|16|32|64)mi")>;
1683def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1684 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001685
1686def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1687 let Latency = 9;
1688 let NumMicroOps = 2;
1689 let ResourceCycles = [1,1];
1690}
Craig Topperfc179c62018-03-22 04:23:41 +00001691def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1692 "MMX_PMADDUBSWrm",
1693 "MMX_PMADDWDirm",
1694 "MMX_PMULHRSWrm",
1695 "MMX_PMULHUWirm",
1696 "MMX_PMULHWirm",
1697 "MMX_PMULLWirm",
1698 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001699 "VTESTPDYrm",
1700 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001701
1702def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1703 let Latency = 9;
1704 let NumMicroOps = 2;
1705 let ResourceCycles = [1,1];
1706}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001707def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001708 "VPMOVSXBWYrm",
1709 "VPMOVSXDQYrm",
1710 "VPMOVSXWDYrm",
1711 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001712 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001713
1714def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1715 let Latency = 9;
1716 let NumMicroOps = 2;
1717 let ResourceCycles = [1,1];
1718}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001719def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1720 "(V?)ADDSSrm",
1721 "(V?)CMPSDrm",
1722 "(V?)CMPSSrm",
1723 "(V?)MAX(C?)SDrm",
1724 "(V?)MAX(C?)SSrm",
1725 "(V?)MIN(C?)SDrm",
1726 "(V?)MIN(C?)SSrm",
1727 "(V?)MULSDrm",
1728 "(V?)MULSSrm",
1729 "(V?)SUBSDrm",
1730 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001731
Craig Topper58afb4e2018-03-22 21:10:07 +00001732def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001733 let Latency = 9;
1734 let NumMicroOps = 2;
1735 let ResourceCycles = [1,1];
1736}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001737def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001738 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001739 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001740 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001741
Craig Topper58afb4e2018-03-22 21:10:07 +00001742def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001743 let Latency = 9;
1744 let NumMicroOps = 3;
1745 let ResourceCycles = [1,2];
1746}
Craig Topperfc179c62018-03-22 04:23:41 +00001747def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001748
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001749def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1750 let Latency = 9;
1751 let NumMicroOps = 3;
1752 let ResourceCycles = [1,1,1];
1753}
Craig Topperfc179c62018-03-22 04:23:41 +00001754def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001755
1756def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1757 let Latency = 9;
1758 let NumMicroOps = 3;
1759 let ResourceCycles = [1,1,1];
1760}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001761def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001762
1763def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001764 let Latency = 9;
1765 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001766 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001767}
Craig Topperfc179c62018-03-22 04:23:41 +00001768def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1769 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001770
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001771def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1772 let Latency = 9;
1773 let NumMicroOps = 4;
1774 let ResourceCycles = [2,1,1];
1775}
Craig Topperfc179c62018-03-22 04:23:41 +00001776def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1777 "(V?)PHADDWrm",
1778 "(V?)PHSUBDrm",
1779 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001780
1781def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1782 let Latency = 9;
1783 let NumMicroOps = 4;
1784 let ResourceCycles = [1,1,1,1];
1785}
Craig Topperfc179c62018-03-22 04:23:41 +00001786def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1787 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001788
1789def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1790 let Latency = 9;
1791 let NumMicroOps = 5;
1792 let ResourceCycles = [1,2,1,1];
1793}
Craig Topperfc179c62018-03-22 04:23:41 +00001794def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1795 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001796
1797def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1798 let Latency = 10;
1799 let NumMicroOps = 2;
1800 let ResourceCycles = [1,1];
1801}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001802def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001803 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001804
1805def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1806 let Latency = 10;
1807 let NumMicroOps = 2;
1808 let ResourceCycles = [1,1];
1809}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001810def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1811 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001812 "VPCMPGTQYrm",
1813 "VPERM2F128rm",
1814 "VPERM2I128rm",
1815 "VPERMDYrm",
1816 "VPERMPDYmi",
1817 "VPERMPSYrm",
1818 "VPERMQYmi",
1819 "VPMOVZXBDYrm",
1820 "VPMOVZXBQYrm",
1821 "VPMOVZXBWYrm",
1822 "VPMOVZXDQYrm",
1823 "VPMOVZXWQYrm",
1824 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001825
1826def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1827 let Latency = 10;
1828 let NumMicroOps = 2;
1829 let ResourceCycles = [1,1];
1830}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001831def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1832 "(V?)ADDPSrm",
1833 "(V?)ADDSUBPDrm",
1834 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001835 "(V?)CVTDQ2PSrm",
1836 "(V?)CVTPH2PSYrm",
1837 "(V?)CVTPS2DQrm",
1838 "(V?)CVTSS2SDrm",
1839 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001840 "(V?)MULPDrm",
1841 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001842 "(V?)PMADDUBSWrm",
1843 "(V?)PMADDWDrm",
1844 "(V?)PMULDQrm",
1845 "(V?)PMULHRSWrm",
1846 "(V?)PMULHUWrm",
1847 "(V?)PMULHWrm",
1848 "(V?)PMULLWrm",
1849 "(V?)PMULUDQrm",
1850 "(V?)SUBPDrm",
1851 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001852
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001853def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1854 let Latency = 10;
1855 let NumMicroOps = 3;
1856 let ResourceCycles = [1,1,1];
1857}
Craig Topperfc179c62018-03-22 04:23:41 +00001858def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1859 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001860
Craig Topper58afb4e2018-03-22 21:10:07 +00001861def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001862 let Latency = 10;
1863 let NumMicroOps = 3;
1864 let ResourceCycles = [1,1,1];
1865}
Craig Topperfc179c62018-03-22 04:23:41 +00001866def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001867
1868def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001869 let Latency = 10;
1870 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001871 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001872}
Craig Topperfc179c62018-03-22 04:23:41 +00001873def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1874 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001875
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001876def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1877 let Latency = 10;
1878 let NumMicroOps = 4;
1879 let ResourceCycles = [2,1,1];
1880}
Craig Topperfc179c62018-03-22 04:23:41 +00001881def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1882 "VPHADDWYrm",
1883 "VPHSUBDYrm",
1884 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001885
1886def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001887 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001888 let NumMicroOps = 4;
1889 let ResourceCycles = [1,1,1,1];
1890}
Craig Topperf846e2d2018-04-19 05:34:05 +00001891def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001892
1893def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1894 let Latency = 10;
1895 let NumMicroOps = 8;
1896 let ResourceCycles = [1,1,1,1,1,3];
1897}
Craig Topper13a16502018-03-19 00:56:09 +00001898def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001899
1900def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001901 let Latency = 10;
1902 let NumMicroOps = 10;
1903 let ResourceCycles = [9,1];
1904}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001905def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001906
Craig Topper8104f262018-04-02 05:33:28 +00001907def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001908 let Latency = 11;
1909 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001910 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001911}
Craig Topper8104f262018-04-02 05:33:28 +00001912def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001913 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001914
Craig Topper8104f262018-04-02 05:33:28 +00001915def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1916 let Latency = 11;
1917 let NumMicroOps = 1;
1918 let ResourceCycles = [1,5];
1919}
1920def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1921
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001922def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001923 let Latency = 11;
1924 let NumMicroOps = 2;
1925 let ResourceCycles = [1,1];
1926}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001927def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001928 "VRCPPSYm",
1929 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001930
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001931def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1932 let Latency = 11;
1933 let NumMicroOps = 2;
1934 let ResourceCycles = [1,1];
1935}
Craig Topperfc179c62018-03-22 04:23:41 +00001936def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1937 "VADDPSYrm",
1938 "VADDSUBPDYrm",
1939 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001940 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001941 "VCMPPSYrmi",
1942 "VCVTDQ2PSYrm",
1943 "VCVTPS2DQYrm",
1944 "VCVTPS2PDYrm",
1945 "VCVTTPS2DQYrm",
1946 "VMAX(C?)PDYrm",
1947 "VMAX(C?)PSYrm",
1948 "VMIN(C?)PDYrm",
1949 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001950 "VMULPDYrm",
1951 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001952 "VPMADDUBSWYrm",
1953 "VPMADDWDYrm",
1954 "VPMULDQYrm",
1955 "VPMULHRSWYrm",
1956 "VPMULHUWYrm",
1957 "VPMULHWYrm",
1958 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001959 "VPMULUDQYrm",
1960 "VSUBPDYrm",
1961 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001962
1963def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1964 let Latency = 11;
1965 let NumMicroOps = 3;
1966 let ResourceCycles = [2,1];
1967}
Craig Topperfc179c62018-03-22 04:23:41 +00001968def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1969 "FICOM32m",
1970 "FICOMP16m",
1971 "FICOMP32m",
1972 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001973
1974def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1975 let Latency = 11;
1976 let NumMicroOps = 3;
1977 let ResourceCycles = [1,1,1];
1978}
Craig Topperfc179c62018-03-22 04:23:41 +00001979def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001980
Craig Topper58afb4e2018-03-22 21:10:07 +00001981def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001982 let Latency = 11;
1983 let NumMicroOps = 3;
1984 let ResourceCycles = [1,1,1];
1985}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001986def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1987 "(V?)CVTSD2SIrm",
1988 "(V?)CVTSS2SI64rm",
1989 "(V?)CVTSS2SIrm",
1990 "(V?)CVTTSD2SI64rm",
1991 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001992 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001993 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001994
Craig Topper58afb4e2018-03-22 21:10:07 +00001995def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001996 let Latency = 11;
1997 let NumMicroOps = 3;
1998 let ResourceCycles = [1,1,1];
1999}
Craig Topperfc179c62018-03-22 04:23:41 +00002000def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2001 "CVTPD2PSrm",
2002 "CVTTPD2DQrm",
2003 "MMX_CVTPD2PIirm",
2004 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002005
2006def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2007 let Latency = 11;
2008 let NumMicroOps = 6;
2009 let ResourceCycles = [1,1,1,2,1];
2010}
Craig Topperfc179c62018-03-22 04:23:41 +00002011def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2012 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002013
2014def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002015 let Latency = 11;
2016 let NumMicroOps = 7;
2017 let ResourceCycles = [2,3,2];
2018}
Craig Topperfc179c62018-03-22 04:23:41 +00002019def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2020 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002021
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002022def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002023 let Latency = 11;
2024 let NumMicroOps = 9;
2025 let ResourceCycles = [1,5,1,2];
2026}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002027def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002028
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002029def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002030 let Latency = 11;
2031 let NumMicroOps = 11;
2032 let ResourceCycles = [2,9];
2033}
Craig Topperfc179c62018-03-22 04:23:41 +00002034def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002035
Craig Topper8104f262018-04-02 05:33:28 +00002036def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002037 let Latency = 12;
2038 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002039 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002040}
Craig Topper8104f262018-04-02 05:33:28 +00002041def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002042 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002043
Craig Topper8104f262018-04-02 05:33:28 +00002044def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2045 let Latency = 12;
2046 let NumMicroOps = 1;
2047 let ResourceCycles = [1,6];
2048}
2049def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2050
Craig Topper58afb4e2018-03-22 21:10:07 +00002051def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002052 let Latency = 12;
2053 let NumMicroOps = 4;
2054 let ResourceCycles = [1,1,1,1];
2055}
2056def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2057
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002058def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002059 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002060 let NumMicroOps = 3;
2061 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002062}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002063def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002064
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002065def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2066 let Latency = 13;
2067 let NumMicroOps = 3;
2068 let ResourceCycles = [1,1,1];
2069}
2070def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2071
Craig Topper58afb4e2018-03-22 21:10:07 +00002072def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002073 let Latency = 13;
2074 let NumMicroOps = 4;
2075 let ResourceCycles = [1,3];
2076}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002077def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002078
Craig Topper8104f262018-04-02 05:33:28 +00002079def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002080 let Latency = 14;
2081 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002082 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002083}
Craig Topper8104f262018-04-02 05:33:28 +00002084def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002085 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002086
Craig Topper8104f262018-04-02 05:33:28 +00002087def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2088 let Latency = 14;
2089 let NumMicroOps = 1;
2090 let ResourceCycles = [1,5];
2091}
2092def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2093
Craig Topper58afb4e2018-03-22 21:10:07 +00002094def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002095 let Latency = 14;
2096 let NumMicroOps = 3;
2097 let ResourceCycles = [1,2];
2098}
Craig Topperfc179c62018-03-22 04:23:41 +00002099def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2100def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2101def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2102def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002103
2104def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2105 let Latency = 14;
2106 let NumMicroOps = 3;
2107 let ResourceCycles = [1,1,1];
2108}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002109def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002110
2111def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002112 let Latency = 14;
2113 let NumMicroOps = 10;
2114 let ResourceCycles = [2,4,1,3];
2115}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002116def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002117
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002118def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002119 let Latency = 15;
2120 let NumMicroOps = 1;
2121 let ResourceCycles = [1];
2122}
Craig Topperfc179c62018-03-22 04:23:41 +00002123def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2124 "DIVR_FST0r",
2125 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002126
Craig Topper58afb4e2018-03-22 21:10:07 +00002127def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002128 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002129 let NumMicroOps = 3;
2130 let ResourceCycles = [1,2];
2131}
Craig Topper40d3b322018-03-22 21:55:20 +00002132def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2133 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002134
Craig Topperd25f1ac2018-03-20 23:39:48 +00002135def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2136 let Latency = 17;
2137 let NumMicroOps = 3;
2138 let ResourceCycles = [1,2];
2139}
2140def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2141
Craig Topper58afb4e2018-03-22 21:10:07 +00002142def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002143 let Latency = 15;
2144 let NumMicroOps = 4;
2145 let ResourceCycles = [1,1,2];
2146}
Craig Topperfc179c62018-03-22 04:23:41 +00002147def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002148
2149def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2150 let Latency = 15;
2151 let NumMicroOps = 10;
2152 let ResourceCycles = [1,1,1,5,1,1];
2153}
Craig Topper13a16502018-03-19 00:56:09 +00002154def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002155
Craig Topper8104f262018-04-02 05:33:28 +00002156def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002157 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002158 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002159 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002160}
Craig Topperfc179c62018-03-22 04:23:41 +00002161def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002162
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002163def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2164 let Latency = 16;
2165 let NumMicroOps = 14;
2166 let ResourceCycles = [1,1,1,4,2,5];
2167}
2168def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2169
2170def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002171 let Latency = 16;
2172 let NumMicroOps = 16;
2173 let ResourceCycles = [16];
2174}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002175def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002176
Craig Topper8104f262018-04-02 05:33:28 +00002177def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002178 let Latency = 17;
2179 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002180 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002181}
Craig Topper8104f262018-04-02 05:33:28 +00002182def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2183
2184def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2185 let Latency = 17;
2186 let NumMicroOps = 2;
2187 let ResourceCycles = [1,1,3];
2188}
2189def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002190
2191def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002192 let Latency = 17;
2193 let NumMicroOps = 15;
2194 let ResourceCycles = [2,1,2,4,2,4];
2195}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002196def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002197
Craig Topper8104f262018-04-02 05:33:28 +00002198def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002199 let Latency = 18;
2200 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002201 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002202}
Craig Topper8104f262018-04-02 05:33:28 +00002203def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002204 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002205
Craig Topper8104f262018-04-02 05:33:28 +00002206def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2207 let Latency = 18;
2208 let NumMicroOps = 1;
2209 let ResourceCycles = [1,12];
2210}
2211def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2212
2213def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002214 let Latency = 18;
2215 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002216 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002217}
Craig Topper8104f262018-04-02 05:33:28 +00002218def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2219
2220def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2221 let Latency = 18;
2222 let NumMicroOps = 2;
2223 let ResourceCycles = [1,1,3];
2224}
2225def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002226
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002227def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002228 let Latency = 18;
2229 let NumMicroOps = 8;
2230 let ResourceCycles = [1,1,1,5];
2231}
Craig Topperfc179c62018-03-22 04:23:41 +00002232def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002233
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002234def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002235 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002236 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002237 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002238}
Craig Topper13a16502018-03-19 00:56:09 +00002239def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002240
Craig Topper8104f262018-04-02 05:33:28 +00002241def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002242 let Latency = 19;
2243 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002244 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002245}
Craig Topper8104f262018-04-02 05:33:28 +00002246def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2247
2248def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2249 let Latency = 19;
2250 let NumMicroOps = 2;
2251 let ResourceCycles = [1,1,6];
2252}
2253def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002254
Craig Topper58afb4e2018-03-22 21:10:07 +00002255def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002256 let Latency = 19;
2257 let NumMicroOps = 5;
2258 let ResourceCycles = [1,1,3];
2259}
Craig Topperfc179c62018-03-22 04:23:41 +00002260def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002261
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002262def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002263 let Latency = 20;
2264 let NumMicroOps = 1;
2265 let ResourceCycles = [1];
2266}
Craig Topperfc179c62018-03-22 04:23:41 +00002267def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2268 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002269 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002270
Craig Topper8104f262018-04-02 05:33:28 +00002271def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002272 let Latency = 20;
2273 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002274 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002275}
Craig Topperfc179c62018-03-22 04:23:41 +00002276def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002277
Craig Topper58afb4e2018-03-22 21:10:07 +00002278def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002279 let Latency = 20;
2280 let NumMicroOps = 5;
2281 let ResourceCycles = [1,1,3];
2282}
2283def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2284
2285def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2286 let Latency = 20;
2287 let NumMicroOps = 8;
2288 let ResourceCycles = [1,1,1,1,1,1,2];
2289}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002290def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002291
2292def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002293 let Latency = 20;
2294 let NumMicroOps = 10;
2295 let ResourceCycles = [1,2,7];
2296}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002297def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002298
Craig Topper8104f262018-04-02 05:33:28 +00002299def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002300 let Latency = 21;
2301 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002302 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002303}
2304def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2305
2306def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2307 let Latency = 22;
2308 let NumMicroOps = 2;
2309 let ResourceCycles = [1,1];
2310}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002311def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002312
2313def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2314 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002315 let NumMicroOps = 5;
2316 let ResourceCycles = [1,2,1,1];
2317}
Craig Topper17a31182017-12-16 18:35:29 +00002318def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2319 VGATHERDPDrm,
2320 VGATHERQPDrm,
2321 VGATHERQPSrm,
2322 VPGATHERDDrm,
2323 VPGATHERDQrm,
2324 VPGATHERQDrm,
2325 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002326
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002327def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2328 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002329 let NumMicroOps = 5;
2330 let ResourceCycles = [1,2,1,1];
2331}
Craig Topper17a31182017-12-16 18:35:29 +00002332def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2333 VGATHERQPDYrm,
2334 VGATHERQPSYrm,
2335 VPGATHERDDYrm,
2336 VPGATHERDQYrm,
2337 VPGATHERQDYrm,
2338 VPGATHERQQYrm,
2339 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002340
Craig Topper8104f262018-04-02 05:33:28 +00002341def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002342 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002343 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002344 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002345}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002346def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002347
2348def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2349 let Latency = 23;
2350 let NumMicroOps = 19;
2351 let ResourceCycles = [2,1,4,1,1,4,6];
2352}
2353def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2354
Craig Topper8104f262018-04-02 05:33:28 +00002355def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002356 let Latency = 24;
2357 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002358 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002359}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002360def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002361
Craig Topper8104f262018-04-02 05:33:28 +00002362def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002363 let Latency = 25;
2364 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002365 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002366}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002367def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002368
2369def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2370 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002371 let NumMicroOps = 3;
2372 let ResourceCycles = [1,1,1];
2373}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002374def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002375
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002376def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2377 let Latency = 27;
2378 let NumMicroOps = 2;
2379 let ResourceCycles = [1,1];
2380}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002381def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002382
2383def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2384 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002385 let NumMicroOps = 8;
2386 let ResourceCycles = [2,4,1,1];
2387}
Craig Topper13a16502018-03-19 00:56:09 +00002388def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002389
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002390def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002391 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002392 let NumMicroOps = 3;
2393 let ResourceCycles = [1,1,1];
2394}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002395def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002396
2397def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2398 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002399 let NumMicroOps = 23;
2400 let ResourceCycles = [1,5,3,4,10];
2401}
Craig Topperfc179c62018-03-22 04:23:41 +00002402def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2403 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002404
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002405def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2406 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002407 let NumMicroOps = 23;
2408 let ResourceCycles = [1,5,2,1,4,10];
2409}
Craig Topperfc179c62018-03-22 04:23:41 +00002410def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2411 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002412
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002413def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2414 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002415 let NumMicroOps = 31;
2416 let ResourceCycles = [1,8,1,21];
2417}
Craig Topper391c6f92017-12-10 01:24:08 +00002418def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002419
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002420def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2421 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002422 let NumMicroOps = 18;
2423 let ResourceCycles = [1,1,2,3,1,1,1,8];
2424}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002425def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002426
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002427def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2428 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002429 let NumMicroOps = 39;
2430 let ResourceCycles = [1,10,1,1,26];
2431}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002432def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002433
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002434def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002435 let Latency = 42;
2436 let NumMicroOps = 22;
2437 let ResourceCycles = [2,20];
2438}
Craig Topper2d451e72018-03-18 08:38:06 +00002439def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002440
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002441def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2442 let Latency = 42;
2443 let NumMicroOps = 40;
2444 let ResourceCycles = [1,11,1,1,26];
2445}
Craig Topper391c6f92017-12-10 01:24:08 +00002446def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002447
2448def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2449 let Latency = 46;
2450 let NumMicroOps = 44;
2451 let ResourceCycles = [1,11,1,1,30];
2452}
2453def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2454
2455def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2456 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002457 let NumMicroOps = 64;
2458 let ResourceCycles = [2,8,5,10,39];
2459}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002460def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002461
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002462def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2463 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002464 let NumMicroOps = 88;
2465 let ResourceCycles = [4,4,31,1,2,1,45];
2466}
Craig Topper2d451e72018-03-18 08:38:06 +00002467def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002468
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002469def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2470 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002471 let NumMicroOps = 90;
2472 let ResourceCycles = [4,2,33,1,2,1,47];
2473}
Craig Topper2d451e72018-03-18 08:38:06 +00002474def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002475
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002476def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002477 let Latency = 75;
2478 let NumMicroOps = 15;
2479 let ResourceCycles = [6,3,6];
2480}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002481def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002482
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002483def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002484 let Latency = 76;
2485 let NumMicroOps = 32;
2486 let ResourceCycles = [7,2,8,3,1,11];
2487}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002488def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002489
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002490def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002491 let Latency = 102;
2492 let NumMicroOps = 66;
2493 let ResourceCycles = [4,2,4,8,14,34];
2494}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002495def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002496
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002497def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2498 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002499 let NumMicroOps = 100;
2500 let ResourceCycles = [9,1,11,16,1,11,21,30];
2501}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002502def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002503
2504} // SchedModel