blob: e1a8e40538373bf26f70ad867a24d8f057b2dd5d [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : SKLWriteResPair<WriteCMOV, [SKLPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [SKLPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [SKLPort06,SKLPort4,SKLPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
125defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
126defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
127defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
134defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
135
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteMove, [SKLPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
145// Branches don't produce values, so they have no latency, but they still
146// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000148
149// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000150def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
151def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
152def : WriteRes<WriteFMove, [SKLPort015]>;
153
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
156defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000157defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
158defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
159defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000160defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4>; // Floating point reciprocal estimate.
161defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4>; // Floating point reciprocal square root estimate.
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4, [1], 1, 6>; // Fused Multiply Add.
163defm : SKLWriteResPair<WriteFMAS, [SKLPort01], 4, [1], 1, 5>; // Fused Multiply Add (Scalar).
164defm : SKLWriteResPair<WriteFMAY, [SKLPort01], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000165defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000166defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
167defm : SKLWriteResPair<WriteFLogicY, [SKLPort015], 1, [1], 1, 7>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000170defm : SKLWriteResPair<WriteFVarShuffleY, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000171defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000172defm : SKLWriteResPair<WriteFBlendY, [SKLPort015], 1, [1], 1, 7>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000173defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000174defm : SKLWriteResPair<WriteFVarBlendY,[SKLPort015], 2, [2], 2, 7>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000175
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000176def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
177 let Latency = 6;
178 let NumMicroOps = 4;
179 let ResourceCycles = [1,1,1,1];
180}
181
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000182// FMA Scheduling helper class.
183// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
184
185// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000186def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
187def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
188def : WriteRes<WriteVecMove, [SKLPort015]>;
189
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000190defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000191defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000192defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
193defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000194defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000195defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000196defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000197defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000198defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000199defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000200defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000201defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000202
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000203// Vector insert/extract operations.
204def : WriteRes<WriteVecInsert, [SKLPort5]> {
205 let Latency = 2;
206 let NumMicroOps = 2;
207 let ResourceCycles = [2];
208}
209def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
210 let Latency = 6;
211 let NumMicroOps = 2;
212}
213
214def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
215 let Latency = 3;
216 let NumMicroOps = 2;
217}
218def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
219 let Latency = 2;
220 let NumMicroOps = 3;
221}
222
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000223// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000224defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
225defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
226defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000227
228// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000229
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000230// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
232 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000233 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000234 let ResourceCycles = [3];
235}
236def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000237 let Latency = 16;
238 let NumMicroOps = 4;
239 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000240}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000241
242// Packed Compare Explicit Length Strings, Return Mask
243def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
244 let Latency = 19;
245 let NumMicroOps = 9;
246 let ResourceCycles = [4,3,1,1];
247}
248def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
249 let Latency = 25;
250 let NumMicroOps = 10;
251 let ResourceCycles = [4,3,1,1,1];
252}
253
254// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000255def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000256 let Latency = 10;
257 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000258 let ResourceCycles = [3];
259}
260def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000261 let Latency = 16;
262 let NumMicroOps = 4;
263 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000264}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000265
266// Packed Compare Explicit Length Strings, Return Index
267def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
268 let Latency = 18;
269 let NumMicroOps = 8;
270 let ResourceCycles = [4,3,1];
271}
272def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
273 let Latency = 24;
274 let NumMicroOps = 9;
275 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000276}
277
Simon Pilgrima2f26782018-03-27 20:38:54 +0000278// MOVMSK Instructions.
279def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
280def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
281def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
282
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000283// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000284def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
285 let Latency = 4;
286 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000287 let ResourceCycles = [1];
288}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000289def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
290 let Latency = 10;
291 let NumMicroOps = 2;
292 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000293}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000294
295def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
296 let Latency = 8;
297 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000298 let ResourceCycles = [2];
299}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000300def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000301 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000302 let NumMicroOps = 3;
303 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000304}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000305
306def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
307 let Latency = 20;
308 let NumMicroOps = 11;
309 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000310}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000311def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
312 let Latency = 25;
313 let NumMicroOps = 11;
314 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000315}
316
317// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000318def : WriteRes<WriteCLMul, [SKLPort5]> {
319 let Latency = 6;
320 let NumMicroOps = 1;
321 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000322}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000323def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
324 let Latency = 12;
325 let NumMicroOps = 2;
326 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000327}
328
329// Catch-all for expensive system instructions.
330def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
331
332// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000333defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000334defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000335defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000336defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000337defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000338
339// Old microcoded instructions that nobody use.
340def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
341
342// Fence instructions.
343def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
344
Craig Topper05242bf2018-04-21 18:07:36 +0000345// Load/store MXCSR.
346def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
347def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
348
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000349// Nop, not very useful expect it provides a model for nops!
350def : WriteRes<WriteNop, []>;
351
352////////////////////////////////////////////////////////////////////////////////
353// Horizontal add/sub instructions.
354////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000355
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000356defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
357defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000358defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000359
360// Remaining instrs.
361
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000362def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000363 let Latency = 1;
364 let NumMicroOps = 1;
365 let ResourceCycles = [1];
366}
Craig Topperfc179c62018-03-22 04:23:41 +0000367def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
368 "MMX_PADDSWirr",
369 "MMX_PADDUSBirr",
370 "MMX_PADDUSWirr",
371 "MMX_PAVGBirr",
372 "MMX_PAVGWirr",
373 "MMX_PCMPEQBirr",
374 "MMX_PCMPEQDirr",
375 "MMX_PCMPEQWirr",
376 "MMX_PCMPGTBirr",
377 "MMX_PCMPGTDirr",
378 "MMX_PCMPGTWirr",
379 "MMX_PMAXSWirr",
380 "MMX_PMAXUBirr",
381 "MMX_PMINSWirr",
382 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000383 "MMX_PSUBSBirr",
384 "MMX_PSUBSWirr",
385 "MMX_PSUBUSBirr",
386 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000387
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000388def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000389 let Latency = 1;
390 let NumMicroOps = 1;
391 let ResourceCycles = [1];
392}
Craig Topperfc179c62018-03-22 04:23:41 +0000393def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
394 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000395 "MMX_MOVD64rr",
396 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000397 "UCOM_FPr",
398 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000399 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000400 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000401 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000402 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000403
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000404def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000405 let Latency = 1;
406 let NumMicroOps = 1;
407 let ResourceCycles = [1];
408}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000409def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000410
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000411def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000412 let Latency = 1;
413 let NumMicroOps = 1;
414 let ResourceCycles = [1];
415}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000416def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
417 "(V?)PABSD(Y?)rr",
418 "(V?)PABSW(Y?)rr",
419 "(V?)PADDSB(Y?)rr",
420 "(V?)PADDSW(Y?)rr",
421 "(V?)PADDUSB(Y?)rr",
422 "(V?)PADDUSW(Y?)rr",
423 "(V?)PAVGB(Y?)rr",
424 "(V?)PAVGW(Y?)rr",
425 "(V?)PCMPEQB(Y?)rr",
426 "(V?)PCMPEQD(Y?)rr",
427 "(V?)PCMPEQQ(Y?)rr",
428 "(V?)PCMPEQW(Y?)rr",
429 "(V?)PCMPGTB(Y?)rr",
430 "(V?)PCMPGTD(Y?)rr",
431 "(V?)PCMPGTW(Y?)rr",
432 "(V?)PMAXSB(Y?)rr",
433 "(V?)PMAXSD(Y?)rr",
434 "(V?)PMAXSW(Y?)rr",
435 "(V?)PMAXUB(Y?)rr",
436 "(V?)PMAXUD(Y?)rr",
437 "(V?)PMAXUW(Y?)rr",
438 "(V?)PMINSB(Y?)rr",
439 "(V?)PMINSD(Y?)rr",
440 "(V?)PMINSW(Y?)rr",
441 "(V?)PMINUB(Y?)rr",
442 "(V?)PMINUD(Y?)rr",
443 "(V?)PMINUW(Y?)rr",
444 "(V?)PSIGNB(Y?)rr",
445 "(V?)PSIGND(Y?)rr",
446 "(V?)PSIGNW(Y?)rr",
447 "(V?)PSLLD(Y?)ri",
448 "(V?)PSLLQ(Y?)ri",
449 "VPSLLVD(Y?)rr",
450 "VPSLLVQ(Y?)rr",
451 "(V?)PSLLW(Y?)ri",
452 "(V?)PSRAD(Y?)ri",
453 "VPSRAVD(Y?)rr",
454 "(V?)PSRAW(Y?)ri",
455 "(V?)PSRLD(Y?)ri",
456 "(V?)PSRLQ(Y?)ri",
457 "VPSRLVD(Y?)rr",
458 "VPSRLVQ(Y?)rr",
459 "(V?)PSRLW(Y?)ri",
460 "(V?)PSUBSB(Y?)rr",
461 "(V?)PSUBSW(Y?)rr",
462 "(V?)PSUBUSB(Y?)rr",
463 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000464
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000465def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000466 let Latency = 1;
467 let NumMicroOps = 1;
468 let ResourceCycles = [1];
469}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000470def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
471def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000472 "MMX_PABS(B|D|W)rr",
473 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000474 "MMX_PANDNirr",
475 "MMX_PANDirr",
476 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000477 "MMX_PSIGN(B|D|W)rr",
478 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000479 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000480
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000481def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000482 let Latency = 1;
483 let NumMicroOps = 1;
484 let ResourceCycles = [1];
485}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000486def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000487def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
488 "ADC(16|32|64)i",
489 "ADC(8|16|32|64)rr",
490 "ADCX(32|64)rr",
491 "ADOX(32|64)rr",
492 "BT(16|32|64)ri8",
493 "BT(16|32|64)rr",
494 "BTC(16|32|64)ri8",
495 "BTC(16|32|64)rr",
496 "BTR(16|32|64)ri8",
497 "BTR(16|32|64)rr",
498 "BTS(16|32|64)ri8",
499 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000500 "SAR(8|16|32|64)r1",
501 "SAR(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000502 "SBB(16|32|64)ri",
503 "SBB(16|32|64)i",
504 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000505 "SHL(8|16|32|64)r1",
506 "SHL(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000507 "SHR(8|16|32|64)r1",
Simon Pilgrimeb609092018-04-23 22:19:55 +0000508 "SHR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000509
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000510def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
511 let Latency = 1;
512 let NumMicroOps = 1;
513 let ResourceCycles = [1];
514}
Craig Topperfc179c62018-03-22 04:23:41 +0000515def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
516 "BLSI(32|64)rr",
517 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000518 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000519
520def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
521 let Latency = 1;
522 let NumMicroOps = 1;
523 let ResourceCycles = [1];
524}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000525def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000526 "(V?)PADDD(Y?)rr",
527 "(V?)PADDQ(Y?)rr",
528 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000529 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000530 "(V?)PSUBB(Y?)rr",
531 "(V?)PSUBD(Y?)rr",
532 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000533 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000534
535def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
536 let Latency = 1;
537 let NumMicroOps = 1;
538 let ResourceCycles = [1];
539}
Craig Topperfbe31322018-04-05 21:56:19 +0000540def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000541def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000542 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000543 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000544 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000545 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000546 "SGDT64m",
547 "SIDT64m",
548 "SLDT64m",
549 "SMSW16m",
550 "STC",
551 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000552 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000553
554def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000555 let Latency = 1;
556 let NumMicroOps = 2;
557 let ResourceCycles = [1,1];
558}
Craig Topperfc179c62018-03-22 04:23:41 +0000559def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
560 "MMX_MOVD64from64rm",
561 "MMX_MOVD64mr",
562 "MMX_MOVNTQmr",
563 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000564 "MOVNTI_64mr",
565 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000566 "ST_FP32m",
567 "ST_FP64m",
568 "ST_FP80m",
569 "VEXTRACTF128mr",
570 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000571 "(V?)MOVAPDYmr",
572 "(V?)MOVAPS(Y?)mr",
573 "(V?)MOVDQA(Y?)mr",
574 "(V?)MOVDQU(Y?)mr",
575 "(V?)MOVHPDmr",
576 "(V?)MOVHPSmr",
577 "(V?)MOVLPDmr",
578 "(V?)MOVLPSmr",
579 "(V?)MOVNTDQ(Y?)mr",
580 "(V?)MOVNTPD(Y?)mr",
581 "(V?)MOVNTPS(Y?)mr",
582 "(V?)MOVPDI2DImr",
583 "(V?)MOVPQI2QImr",
584 "(V?)MOVPQIto64mr",
585 "(V?)MOVSDmr",
586 "(V?)MOVSSmr",
587 "(V?)MOVUPD(Y?)mr",
588 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000589 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000590
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000591def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000592 let Latency = 2;
593 let NumMicroOps = 1;
594 let ResourceCycles = [1];
595}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000596def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000597 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000598 "(V?)MOVPDI2DIrr",
599 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000600 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000601 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000602
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000603def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000604 let Latency = 2;
605 let NumMicroOps = 2;
606 let ResourceCycles = [2];
607}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000608def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000609
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000610def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000611 let Latency = 2;
612 let NumMicroOps = 2;
613 let ResourceCycles = [2];
614}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000615def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
616def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000617
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000618def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000619 let Latency = 2;
620 let NumMicroOps = 2;
621 let ResourceCycles = [2];
622}
Craig Topperfc179c62018-03-22 04:23:41 +0000623def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
624 "ROL(8|16|32|64)r1",
625 "ROL(8|16|32|64)ri",
626 "ROR(8|16|32|64)r1",
627 "ROR(8|16|32|64)ri",
628 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000629
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000630def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000631 let Latency = 2;
632 let NumMicroOps = 2;
633 let ResourceCycles = [2];
634}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000635def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
636 WAIT,
637 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000638
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000639def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000640 let Latency = 2;
641 let NumMicroOps = 2;
642 let ResourceCycles = [1,1];
643}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000644def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
645 "VMASKMOVPS(Y?)mr",
646 "VPMASKMOVD(Y?)mr",
647 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000648
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000649def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000650 let Latency = 2;
651 let NumMicroOps = 2;
652 let ResourceCycles = [1,1];
653}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000654def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
655 "(V?)PSLLQrr",
656 "(V?)PSLLWrr",
657 "(V?)PSRADrr",
658 "(V?)PSRAWrr",
659 "(V?)PSRLDrr",
660 "(V?)PSRLQrr",
661 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000662
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000663def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000664 let Latency = 2;
665 let NumMicroOps = 2;
666 let ResourceCycles = [1,1];
667}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000668def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000669
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000670def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000671 let Latency = 2;
672 let NumMicroOps = 2;
673 let ResourceCycles = [1,1];
674}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000675def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000676
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000677def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000678 let Latency = 2;
679 let NumMicroOps = 2;
680 let ResourceCycles = [1,1];
681}
Craig Topper498875f2018-04-04 17:54:19 +0000682def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
683
684def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
685 let Latency = 1;
686 let NumMicroOps = 1;
687 let ResourceCycles = [1];
688}
689def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000690
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000691def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000692 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000693 let NumMicroOps = 2;
694 let ResourceCycles = [1,1];
695}
Craig Topper2d451e72018-03-18 08:38:06 +0000696def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000697def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000698def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
699 "ADC8ri",
700 "SBB8i8",
701 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000702
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000703def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
704 let Latency = 2;
705 let NumMicroOps = 3;
706 let ResourceCycles = [1,1,1];
707}
708def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
709
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000710def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
711 let Latency = 2;
712 let NumMicroOps = 3;
713 let ResourceCycles = [1,1,1];
714}
715def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
716
717def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
718 let Latency = 2;
719 let NumMicroOps = 3;
720 let ResourceCycles = [1,1,1];
721}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000722def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
723 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000724def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000725 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000726
727def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
728 let Latency = 3;
729 let NumMicroOps = 1;
730 let ResourceCycles = [1];
731}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000732def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000733 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000734 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000735 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000736
Clement Courbet327fac42018-03-07 08:14:02 +0000737def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000738 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000739 let NumMicroOps = 2;
740 let ResourceCycles = [1,1];
741}
Clement Courbet327fac42018-03-07 08:14:02 +0000742def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000743
744def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
745 let Latency = 3;
746 let NumMicroOps = 1;
747 let ResourceCycles = [1];
748}
Craig Topperfc179c62018-03-22 04:23:41 +0000749def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
750 "ADD_FST0r",
751 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000752 "SUBR_FPrST0",
753 "SUBR_FST0r",
754 "SUBR_FrST0",
755 "SUB_FPrST0",
756 "SUB_FST0r",
757 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000758 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000759 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000760 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000761 "VPMOVSXBDYrr",
762 "VPMOVSXBQYrr",
763 "VPMOVSXBWYrr",
764 "VPMOVSXDQYrr",
765 "VPMOVSXWDYrr",
766 "VPMOVSXWQYrr",
767 "VPMOVZXBDYrr",
768 "VPMOVZXBQYrr",
769 "VPMOVZXBWYrr",
770 "VPMOVZXDQYrr",
771 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000772 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000773
774def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
775 let Latency = 3;
776 let NumMicroOps = 2;
777 let ResourceCycles = [1,1];
778}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000779def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000780
781def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
782 let Latency = 3;
783 let NumMicroOps = 2;
784 let ResourceCycles = [1,1];
785}
786def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
787
788def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
789 let Latency = 3;
790 let NumMicroOps = 3;
791 let ResourceCycles = [3];
792}
Craig Topperfc179c62018-03-22 04:23:41 +0000793def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
794 "ROR(8|16|32|64)rCL",
795 "SAR(8|16|32|64)rCL",
796 "SHL(8|16|32|64)rCL",
797 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000798
799def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000800 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000801 let NumMicroOps = 3;
802 let ResourceCycles = [3];
803}
Craig Topperb5f26592018-04-19 18:00:17 +0000804def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
805 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
806 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000807
808def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
809 let Latency = 3;
810 let NumMicroOps = 3;
811 let ResourceCycles = [1,2];
812}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000813def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000814
815def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
816 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000817 let NumMicroOps = 3;
818 let ResourceCycles = [2,1];
819}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000820def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
821 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000822
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000823def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
824 let Latency = 3;
825 let NumMicroOps = 3;
826 let ResourceCycles = [2,1];
827}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000828def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000829
830def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
831 let Latency = 3;
832 let NumMicroOps = 3;
833 let ResourceCycles = [2,1];
834}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000835def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
836 "(V?)PHADDW(Y?)rr",
837 "(V?)PHSUBD(Y?)rr",
838 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000839
840def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
841 let Latency = 3;
842 let NumMicroOps = 3;
843 let ResourceCycles = [2,1];
844}
Craig Topperfc179c62018-03-22 04:23:41 +0000845def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
846 "MMX_PACKSSWBirr",
847 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000848
849def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
850 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000851 let NumMicroOps = 3;
852 let ResourceCycles = [1,2];
853}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000854def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000855
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000856def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
857 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000858 let NumMicroOps = 3;
859 let ResourceCycles = [1,2];
860}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000861def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000862
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000863def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
864 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000865 let NumMicroOps = 3;
866 let ResourceCycles = [1,2];
867}
Craig Topperfc179c62018-03-22 04:23:41 +0000868def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
869 "RCL(8|16|32|64)ri",
870 "RCR(8|16|32|64)r1",
871 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000872
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000873def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
874 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000875 let NumMicroOps = 3;
876 let ResourceCycles = [1,1,1];
877}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000878def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000879
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000880def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
881 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000882 let NumMicroOps = 4;
883 let ResourceCycles = [1,1,2];
884}
Craig Topperf4cd9082018-01-19 05:47:32 +0000885def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000886
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000887def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
888 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000889 let NumMicroOps = 4;
890 let ResourceCycles = [1,1,1,1];
891}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000892def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000893
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000894def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
895 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000896 let NumMicroOps = 4;
897 let ResourceCycles = [1,1,1,1];
898}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000899def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000900
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000901def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000902 let Latency = 4;
903 let NumMicroOps = 1;
904 let ResourceCycles = [1];
905}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000906def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000907 "MMX_PMADDWDirr",
908 "MMX_PMULHRSWrr",
909 "MMX_PMULHUWirr",
910 "MMX_PMULHWirr",
911 "MMX_PMULLWirr",
912 "MMX_PMULUDQirr",
913 "MUL_FPrST0",
914 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000915 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000916
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000917def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000918 let Latency = 4;
919 let NumMicroOps = 1;
920 let ResourceCycles = [1];
921}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000922def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
923 "(V?)ADDPS(Y?)rr",
924 "(V?)ADDSDrr",
925 "(V?)ADDSSrr",
926 "(V?)ADDSUBPD(Y?)rr",
927 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000928 "(V?)CVTDQ2PS(Y?)rr",
929 "(V?)CVTPS2DQ(Y?)rr",
930 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000931 "(V?)MULPD(Y?)rr",
932 "(V?)MULPS(Y?)rr",
933 "(V?)MULSDrr",
934 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000935 "(V?)PMADDUBSW(Y?)rr",
936 "(V?)PMADDWD(Y?)rr",
937 "(V?)PMULDQ(Y?)rr",
938 "(V?)PMULHRSW(Y?)rr",
939 "(V?)PMULHUW(Y?)rr",
940 "(V?)PMULHW(Y?)rr",
941 "(V?)PMULLW(Y?)rr",
942 "(V?)PMULUDQ(Y?)rr",
943 "(V?)SUBPD(Y?)rr",
944 "(V?)SUBPS(Y?)rr",
945 "(V?)SUBSDrr",
946 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000947
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000948def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000949 let Latency = 4;
950 let NumMicroOps = 2;
951 let ResourceCycles = [1,1];
952}
Craig Topperf846e2d2018-04-19 05:34:05 +0000953def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000954
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000955def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
956 let Latency = 4;
957 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000958 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000959}
Craig Topperfc179c62018-03-22 04:23:41 +0000960def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000961
962def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000963 let Latency = 4;
964 let NumMicroOps = 2;
965 let ResourceCycles = [1,1];
966}
Craig Topperfc179c62018-03-22 04:23:41 +0000967def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
968 "VPSLLQYrr",
969 "VPSLLWYrr",
970 "VPSRADYrr",
971 "VPSRAWYrr",
972 "VPSRLDYrr",
973 "VPSRLQYrr",
974 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000975
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000976def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000977 let Latency = 4;
978 let NumMicroOps = 3;
979 let ResourceCycles = [1,1,1];
980}
Craig Topperfc179c62018-03-22 04:23:41 +0000981def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
982 "ISTT_FP32m",
983 "ISTT_FP64m",
984 "IST_F16m",
985 "IST_F32m",
986 "IST_FP16m",
987 "IST_FP32m",
988 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000989
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000990def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000991 let Latency = 4;
992 let NumMicroOps = 4;
993 let ResourceCycles = [4];
994}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000995def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000996
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000997def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000998 let Latency = 4;
999 let NumMicroOps = 4;
1000 let ResourceCycles = [1,3];
1001}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001002def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001003
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001004def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001005 let Latency = 4;
1006 let NumMicroOps = 4;
1007 let ResourceCycles = [1,3];
1008}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001009def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001010
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001011def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001012 let Latency = 4;
1013 let NumMicroOps = 4;
1014 let ResourceCycles = [1,1,2];
1015}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001016def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001017
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001018def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1019 let Latency = 5;
1020 let NumMicroOps = 1;
1021 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001022}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001023def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001024 "MOVSX(16|32|64)rm32",
1025 "MOVSX(16|32|64)rm8",
1026 "MOVZX(16|32|64)rm16",
1027 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001028 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001029
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001030def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001031 let Latency = 5;
1032 let NumMicroOps = 2;
1033 let ResourceCycles = [1,1];
1034}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001035def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1036 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001037
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001038def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001039 let Latency = 5;
1040 let NumMicroOps = 2;
1041 let ResourceCycles = [1,1];
1042}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001043def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001044 "MMX_CVTPS2PIirr",
1045 "MMX_CVTTPD2PIirr",
1046 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001047 "(V?)CVTPD2DQrr",
1048 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001049 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001050 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001051 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001052 "(V?)CVTSD2SSrr",
1053 "(V?)CVTSI642SDrr",
1054 "(V?)CVTSI2SDrr",
1055 "(V?)CVTSI2SSrr",
1056 "(V?)CVTSS2SDrr",
1057 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001058
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001059def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001060 let Latency = 5;
1061 let NumMicroOps = 3;
1062 let ResourceCycles = [1,1,1];
1063}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001064def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001066def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001067 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001068 let NumMicroOps = 3;
1069 let ResourceCycles = [1,1,1];
1070}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001071def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001072
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001073def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001074 let Latency = 5;
1075 let NumMicroOps = 5;
1076 let ResourceCycles = [1,4];
1077}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001078def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001079
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001080def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001081 let Latency = 5;
1082 let NumMicroOps = 5;
1083 let ResourceCycles = [2,3];
1084}
Craig Topper13a16502018-03-19 00:56:09 +00001085def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001086
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001087def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001088 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001089 let NumMicroOps = 6;
1090 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001091}
Craig Topperfc179c62018-03-22 04:23:41 +00001092def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1093 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001094
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001095def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1096 let Latency = 6;
1097 let NumMicroOps = 1;
1098 let ResourceCycles = [1];
1099}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001100def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001101 "(V?)MOVSHDUPrm",
1102 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001103 "VPBROADCASTDrm",
1104 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001105
1106def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001107 let Latency = 6;
1108 let NumMicroOps = 2;
1109 let ResourceCycles = [2];
1110}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001111def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001112
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001113def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001114 let Latency = 6;
1115 let NumMicroOps = 2;
1116 let ResourceCycles = [1,1];
1117}
Craig Topperfc179c62018-03-22 04:23:41 +00001118def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1119 "MMX_PADDSWirm",
1120 "MMX_PADDUSBirm",
1121 "MMX_PADDUSWirm",
1122 "MMX_PAVGBirm",
1123 "MMX_PAVGWirm",
1124 "MMX_PCMPEQBirm",
1125 "MMX_PCMPEQDirm",
1126 "MMX_PCMPEQWirm",
1127 "MMX_PCMPGTBirm",
1128 "MMX_PCMPGTDirm",
1129 "MMX_PCMPGTWirm",
1130 "MMX_PMAXSWirm",
1131 "MMX_PMAXUBirm",
1132 "MMX_PMINSWirm",
1133 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001134 "MMX_PSUBSBirm",
1135 "MMX_PSUBSWirm",
1136 "MMX_PSUBUSBirm",
1137 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001138
Craig Topper58afb4e2018-03-22 21:10:07 +00001139def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001140 let Latency = 6;
1141 let NumMicroOps = 2;
1142 let ResourceCycles = [1,1];
1143}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001144def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1145 "(V?)CVTSD2SIrr",
1146 "(V?)CVTSS2SI64rr",
1147 "(V?)CVTSS2SIrr",
1148 "(V?)CVTTSD2SI64rr",
1149 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001150
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001151def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1152 let Latency = 6;
1153 let NumMicroOps = 2;
1154 let ResourceCycles = [1,1];
1155}
Craig Topperfc179c62018-03-22 04:23:41 +00001156def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1157 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001158
1159def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1160 let Latency = 6;
1161 let NumMicroOps = 2;
1162 let ResourceCycles = [1,1];
1163}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001164def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1165 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001166 "MMX_PANDNirm",
1167 "MMX_PANDirm",
1168 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001169 "MMX_PSIGN(B|D|W)rm",
1170 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001171 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001172
1173def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1174 let Latency = 6;
1175 let NumMicroOps = 2;
1176 let ResourceCycles = [1,1];
1177}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001178def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001179def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1180 ADCX32rm, ADCX64rm,
1181 ADOX32rm, ADOX64rm,
1182 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001183
1184def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1185 let Latency = 6;
1186 let NumMicroOps = 2;
1187 let ResourceCycles = [1,1];
1188}
Craig Topperfc179c62018-03-22 04:23:41 +00001189def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1190 "BLSI(32|64)rm",
1191 "BLSMSK(32|64)rm",
1192 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001193 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001194
1195def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1196 let Latency = 6;
1197 let NumMicroOps = 2;
1198 let ResourceCycles = [1,1];
1199}
Craig Topper2d451e72018-03-18 08:38:06 +00001200def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001201def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001202
Craig Topper58afb4e2018-03-22 21:10:07 +00001203def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001204 let Latency = 6;
1205 let NumMicroOps = 3;
1206 let ResourceCycles = [2,1];
1207}
Craig Topperfc179c62018-03-22 04:23:41 +00001208def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001209
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001210def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001211 let Latency = 6;
1212 let NumMicroOps = 4;
1213 let ResourceCycles = [1,2,1];
1214}
Craig Topperfc179c62018-03-22 04:23:41 +00001215def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1216 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001217
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001218def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001219 let Latency = 6;
1220 let NumMicroOps = 4;
1221 let ResourceCycles = [1,1,1,1];
1222}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001223def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001224
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001225def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1226 let Latency = 6;
1227 let NumMicroOps = 4;
1228 let ResourceCycles = [1,1,1,1];
1229}
Craig Topperfc179c62018-03-22 04:23:41 +00001230def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1231 "BTR(16|32|64)mi8",
1232 "BTS(16|32|64)mi8",
1233 "SAR(8|16|32|64)m1",
1234 "SAR(8|16|32|64)mi",
1235 "SHL(8|16|32|64)m1",
1236 "SHL(8|16|32|64)mi",
1237 "SHR(8|16|32|64)m1",
1238 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001239
1240def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1241 let Latency = 6;
1242 let NumMicroOps = 4;
1243 let ResourceCycles = [1,1,1,1];
1244}
Craig Topperf0d04262018-04-06 16:16:48 +00001245def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1246 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001247
1248def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001249 let Latency = 6;
1250 let NumMicroOps = 6;
1251 let ResourceCycles = [1,5];
1252}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001253def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001254
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001255def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1256 let Latency = 7;
1257 let NumMicroOps = 1;
1258 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001259}
Craig Topperfc179c62018-03-22 04:23:41 +00001260def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1261 "LD_F64m",
1262 "LD_F80m",
1263 "VBROADCASTF128",
1264 "VBROADCASTI128",
1265 "VBROADCASTSDYrm",
1266 "VBROADCASTSSYrm",
1267 "VLDDQUYrm",
1268 "VMOVAPDYrm",
1269 "VMOVAPSYrm",
1270 "VMOVDDUPYrm",
1271 "VMOVDQAYrm",
1272 "VMOVDQUYrm",
1273 "VMOVNTDQAYrm",
1274 "VMOVSHDUPYrm",
1275 "VMOVSLDUPYrm",
1276 "VMOVUPDYrm",
1277 "VMOVUPSYrm",
1278 "VPBROADCASTDYrm",
1279 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001280
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001281def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001282 let Latency = 7;
1283 let NumMicroOps = 2;
1284 let ResourceCycles = [1,1];
1285}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001286def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001287
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001288def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1289 let Latency = 7;
1290 let NumMicroOps = 2;
1291 let ResourceCycles = [1,1];
1292}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001293def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1294 "(V?)PACKSSDWrm",
1295 "(V?)PACKSSWBrm",
1296 "(V?)PACKUSDWrm",
1297 "(V?)PACKUSWBrm",
1298 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001299 "VPBROADCASTBrm",
1300 "VPBROADCASTWrm",
1301 "VPERMILPDmi",
1302 "VPERMILPDrm",
1303 "VPERMILPSmi",
1304 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001305 "(V?)PSHUFBrm",
1306 "(V?)PSHUFDmi",
1307 "(V?)PSHUFHWmi",
1308 "(V?)PSHUFLWmi",
1309 "(V?)PUNPCKHBWrm",
1310 "(V?)PUNPCKHDQrm",
1311 "(V?)PUNPCKHQDQrm",
1312 "(V?)PUNPCKHWDrm",
1313 "(V?)PUNPCKLBWrm",
1314 "(V?)PUNPCKLDQrm",
1315 "(V?)PUNPCKLQDQrm",
1316 "(V?)PUNPCKLWDrm",
1317 "(V?)SHUFPDrmi",
1318 "(V?)SHUFPSrmi",
1319 "(V?)UNPCKHPDrm",
1320 "(V?)UNPCKHPSrm",
1321 "(V?)UNPCKLPDrm",
1322 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001323
Craig Topper58afb4e2018-03-22 21:10:07 +00001324def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001325 let Latency = 7;
1326 let NumMicroOps = 2;
1327 let ResourceCycles = [1,1];
1328}
Craig Topperfc179c62018-03-22 04:23:41 +00001329def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1330 "VCVTPD2PSYrr",
1331 "VCVTPH2PSYrr",
1332 "VCVTPS2PDYrr",
1333 "VCVTPS2PHYrr",
1334 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001335
1336def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1337 let Latency = 7;
1338 let NumMicroOps = 2;
1339 let ResourceCycles = [1,1];
1340}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001341def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1342 "(V?)PABSDrm",
1343 "(V?)PABSWrm",
1344 "(V?)PADDSBrm",
1345 "(V?)PADDSWrm",
1346 "(V?)PADDUSBrm",
1347 "(V?)PADDUSWrm",
1348 "(V?)PAVGBrm",
1349 "(V?)PAVGWrm",
1350 "(V?)PCMPEQBrm",
1351 "(V?)PCMPEQDrm",
1352 "(V?)PCMPEQQrm",
1353 "(V?)PCMPEQWrm",
1354 "(V?)PCMPGTBrm",
1355 "(V?)PCMPGTDrm",
1356 "(V?)PCMPGTWrm",
1357 "(V?)PMAXSBrm",
1358 "(V?)PMAXSDrm",
1359 "(V?)PMAXSWrm",
1360 "(V?)PMAXUBrm",
1361 "(V?)PMAXUDrm",
1362 "(V?)PMAXUWrm",
1363 "(V?)PMINSBrm",
1364 "(V?)PMINSDrm",
1365 "(V?)PMINSWrm",
1366 "(V?)PMINUBrm",
1367 "(V?)PMINUDrm",
1368 "(V?)PMINUWrm",
1369 "(V?)PSIGNBrm",
1370 "(V?)PSIGNDrm",
1371 "(V?)PSIGNWrm",
1372 "(V?)PSLLDrm",
1373 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001374 "VPSLLVDrm",
1375 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001376 "(V?)PSLLWrm",
1377 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001378 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001379 "(V?)PSRAWrm",
1380 "(V?)PSRLDrm",
1381 "(V?)PSRLQrm",
1382 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001383 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001384 "(V?)PSRLWrm",
1385 "(V?)PSUBSBrm",
1386 "(V?)PSUBSWrm",
1387 "(V?)PSUBUSBrm",
1388 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001389
1390def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1391 let Latency = 7;
1392 let NumMicroOps = 2;
1393 let ResourceCycles = [1,1];
1394}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001395def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001396 "(V?)INSERTI128rm",
1397 "(V?)MASKMOVPDrm",
1398 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001399 "(V?)PADDBrm",
1400 "(V?)PADDDrm",
1401 "(V?)PADDQrm",
1402 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001403 "(V?)PBLENDDrmi",
1404 "(V?)PMASKMOVDrm",
1405 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001406 "(V?)PSUBBrm",
1407 "(V?)PSUBDrm",
1408 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001409 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001410
1411def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1412 let Latency = 7;
1413 let NumMicroOps = 3;
1414 let ResourceCycles = [2,1];
1415}
Craig Topperfc179c62018-03-22 04:23:41 +00001416def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1417 "MMX_PACKSSWBirm",
1418 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001419
1420def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1421 let Latency = 7;
1422 let NumMicroOps = 3;
1423 let ResourceCycles = [1,2];
1424}
Craig Topperf4cd9082018-01-19 05:47:32 +00001425def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001426
1427def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1428 let Latency = 7;
1429 let NumMicroOps = 3;
1430 let ResourceCycles = [1,2];
1431}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001432def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1433 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001434
Craig Topper58afb4e2018-03-22 21:10:07 +00001435def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001436 let Latency = 7;
1437 let NumMicroOps = 3;
1438 let ResourceCycles = [1,1,1];
1439}
Craig Topperfc179c62018-03-22 04:23:41 +00001440def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1441 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001442
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001443def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001444 let Latency = 7;
1445 let NumMicroOps = 3;
1446 let ResourceCycles = [1,1,1];
1447}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001448def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001449
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001450def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001451 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001452 let NumMicroOps = 3;
1453 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001454}
Craig Topperfc179c62018-03-22 04:23:41 +00001455def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1456 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001457
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001458def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1459 let Latency = 7;
1460 let NumMicroOps = 5;
1461 let ResourceCycles = [1,1,1,2];
1462}
Craig Topperfc179c62018-03-22 04:23:41 +00001463def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1464 "ROL(8|16|32|64)mi",
1465 "ROR(8|16|32|64)m1",
1466 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001467
1468def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1469 let Latency = 7;
1470 let NumMicroOps = 5;
1471 let ResourceCycles = [1,1,1,2];
1472}
Craig Topper13a16502018-03-19 00:56:09 +00001473def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001474
1475def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1476 let Latency = 7;
1477 let NumMicroOps = 5;
1478 let ResourceCycles = [1,1,1,1,1];
1479}
Craig Topperfc179c62018-03-22 04:23:41 +00001480def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1481 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001482
1483def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001484 let Latency = 7;
1485 let NumMicroOps = 7;
1486 let ResourceCycles = [1,3,1,2];
1487}
Craig Topper2d451e72018-03-18 08:38:06 +00001488def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001489
Craig Topper58afb4e2018-03-22 21:10:07 +00001490def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001491 let Latency = 8;
1492 let NumMicroOps = 2;
1493 let ResourceCycles = [2];
1494}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001495def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1496 "(V?)ROUNDPS(Y?)r",
1497 "(V?)ROUNDSDr",
1498 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001499
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001500def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001501 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001502 let NumMicroOps = 2;
1503 let ResourceCycles = [1,1];
1504}
Craig Topperfc179c62018-03-22 04:23:41 +00001505def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1506 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001507
1508def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1509 let Latency = 8;
1510 let NumMicroOps = 2;
1511 let ResourceCycles = [1,1];
1512}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001513def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1514 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001515
1516def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001517 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001518 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001519 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001520}
Craig Topperf846e2d2018-04-19 05:34:05 +00001521def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001522
Craig Topperf846e2d2018-04-19 05:34:05 +00001523def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1524 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001525 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001526 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001527}
Craig Topperfc179c62018-03-22 04:23:41 +00001528def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001529
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001530def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1531 let Latency = 8;
1532 let NumMicroOps = 2;
1533 let ResourceCycles = [1,1];
1534}
Craig Topperfc179c62018-03-22 04:23:41 +00001535def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1536 "FCOM64m",
1537 "FCOMP32m",
1538 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001539 "VPACKSSDWYrm",
1540 "VPACKSSWBYrm",
1541 "VPACKUSDWYrm",
1542 "VPACKUSWBYrm",
1543 "VPALIGNRYrmi",
1544 "VPBLENDWYrmi",
1545 "VPBROADCASTBYrm",
1546 "VPBROADCASTWYrm",
1547 "VPERMILPDYmi",
1548 "VPERMILPDYrm",
1549 "VPERMILPSYmi",
1550 "VPERMILPSYrm",
1551 "VPMOVSXBDYrm",
1552 "VPMOVSXBQYrm",
1553 "VPMOVSXWQYrm",
1554 "VPSHUFBYrm",
1555 "VPSHUFDYmi",
1556 "VPSHUFHWYmi",
1557 "VPSHUFLWYmi",
1558 "VPUNPCKHBWYrm",
1559 "VPUNPCKHDQYrm",
1560 "VPUNPCKHQDQYrm",
1561 "VPUNPCKHWDYrm",
1562 "VPUNPCKLBWYrm",
1563 "VPUNPCKLDQYrm",
1564 "VPUNPCKLQDQYrm",
1565 "VPUNPCKLWDYrm",
1566 "VSHUFPDYrmi",
1567 "VSHUFPSYrmi",
1568 "VUNPCKHPDYrm",
1569 "VUNPCKHPSYrm",
1570 "VUNPCKLPDYrm",
1571 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001572
1573def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1574 let Latency = 8;
1575 let NumMicroOps = 2;
1576 let ResourceCycles = [1,1];
1577}
Craig Topperfc179c62018-03-22 04:23:41 +00001578def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1579 "VPABSDYrm",
1580 "VPABSWYrm",
1581 "VPADDSBYrm",
1582 "VPADDSWYrm",
1583 "VPADDUSBYrm",
1584 "VPADDUSWYrm",
1585 "VPAVGBYrm",
1586 "VPAVGWYrm",
1587 "VPCMPEQBYrm",
1588 "VPCMPEQDYrm",
1589 "VPCMPEQQYrm",
1590 "VPCMPEQWYrm",
1591 "VPCMPGTBYrm",
1592 "VPCMPGTDYrm",
1593 "VPCMPGTWYrm",
1594 "VPMAXSBYrm",
1595 "VPMAXSDYrm",
1596 "VPMAXSWYrm",
1597 "VPMAXUBYrm",
1598 "VPMAXUDYrm",
1599 "VPMAXUWYrm",
1600 "VPMINSBYrm",
1601 "VPMINSDYrm",
1602 "VPMINSWYrm",
1603 "VPMINUBYrm",
1604 "VPMINUDYrm",
1605 "VPMINUWYrm",
1606 "VPSIGNBYrm",
1607 "VPSIGNDYrm",
1608 "VPSIGNWYrm",
1609 "VPSLLDYrm",
1610 "VPSLLQYrm",
1611 "VPSLLVDYrm",
1612 "VPSLLVQYrm",
1613 "VPSLLWYrm",
1614 "VPSRADYrm",
1615 "VPSRAVDYrm",
1616 "VPSRAWYrm",
1617 "VPSRLDYrm",
1618 "VPSRLQYrm",
1619 "VPSRLVDYrm",
1620 "VPSRLVQYrm",
1621 "VPSRLWYrm",
1622 "VPSUBSBYrm",
1623 "VPSUBSWYrm",
1624 "VPSUBUSBYrm",
1625 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001626
1627def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1628 let Latency = 8;
1629 let NumMicroOps = 2;
1630 let ResourceCycles = [1,1];
1631}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001632def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001633 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001634 "VPADDBYrm",
1635 "VPADDDYrm",
1636 "VPADDQYrm",
1637 "VPADDWYrm",
1638 "VPANDNYrm",
1639 "VPANDYrm",
1640 "VPBLENDDYrmi",
1641 "VPMASKMOVDYrm",
1642 "VPMASKMOVQYrm",
1643 "VPORYrm",
1644 "VPSUBBYrm",
1645 "VPSUBDYrm",
1646 "VPSUBQYrm",
1647 "VPSUBWYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001648 "VPXORYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001649
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001650def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1651 let Latency = 8;
1652 let NumMicroOps = 4;
1653 let ResourceCycles = [1,2,1];
1654}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001655def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001656
1657def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1658 let Latency = 8;
1659 let NumMicroOps = 4;
1660 let ResourceCycles = [2,1,1];
1661}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001662def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001663
Craig Topper58afb4e2018-03-22 21:10:07 +00001664def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001665 let Latency = 8;
1666 let NumMicroOps = 4;
1667 let ResourceCycles = [1,1,1,1];
1668}
1669def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1670
1671def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1672 let Latency = 8;
1673 let NumMicroOps = 5;
1674 let ResourceCycles = [1,1,3];
1675}
Craig Topper13a16502018-03-19 00:56:09 +00001676def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001677
1678def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1679 let Latency = 8;
1680 let NumMicroOps = 5;
1681 let ResourceCycles = [1,1,1,2];
1682}
Craig Topperfc179c62018-03-22 04:23:41 +00001683def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1684 "RCL(8|16|32|64)mi",
1685 "RCR(8|16|32|64)m1",
1686 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001687
1688def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1689 let Latency = 8;
1690 let NumMicroOps = 6;
1691 let ResourceCycles = [1,1,1,3];
1692}
Craig Topperfc179c62018-03-22 04:23:41 +00001693def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1694 "SAR(8|16|32|64)mCL",
1695 "SHL(8|16|32|64)mCL",
1696 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001697
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001698def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1699 let Latency = 8;
1700 let NumMicroOps = 6;
1701 let ResourceCycles = [1,1,1,2,1];
1702}
Craig Topper9f834812018-04-01 21:54:24 +00001703def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001704 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001705 "SBB(8|16|32|64)mi")>;
1706def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1707 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001708
1709def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1710 let Latency = 9;
1711 let NumMicroOps = 2;
1712 let ResourceCycles = [1,1];
1713}
Craig Topperfc179c62018-03-22 04:23:41 +00001714def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1715 "MMX_PMADDUBSWrm",
1716 "MMX_PMADDWDirm",
1717 "MMX_PMULHRSWrm",
1718 "MMX_PMULHUWirm",
1719 "MMX_PMULHWirm",
1720 "MMX_PMULLWirm",
1721 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001722 "VTESTPDYrm",
1723 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001724
1725def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1726 let Latency = 9;
1727 let NumMicroOps = 2;
1728 let ResourceCycles = [1,1];
1729}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001730def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001731 "VPMOVSXBWYrm",
1732 "VPMOVSXDQYrm",
1733 "VPMOVSXWDYrm",
1734 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001735 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001736
1737def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1738 let Latency = 9;
1739 let NumMicroOps = 2;
1740 let ResourceCycles = [1,1];
1741}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001742def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1743 "(V?)ADDSSrm",
1744 "(V?)CMPSDrm",
1745 "(V?)CMPSSrm",
1746 "(V?)MAX(C?)SDrm",
1747 "(V?)MAX(C?)SSrm",
1748 "(V?)MIN(C?)SDrm",
1749 "(V?)MIN(C?)SSrm",
1750 "(V?)MULSDrm",
1751 "(V?)MULSSrm",
1752 "(V?)SUBSDrm",
1753 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001754
Craig Topper58afb4e2018-03-22 21:10:07 +00001755def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001756 let Latency = 9;
1757 let NumMicroOps = 2;
1758 let ResourceCycles = [1,1];
1759}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001760def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001761 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001762 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001763 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001764
Craig Topper58afb4e2018-03-22 21:10:07 +00001765def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001766 let Latency = 9;
1767 let NumMicroOps = 3;
1768 let ResourceCycles = [1,2];
1769}
Craig Topperfc179c62018-03-22 04:23:41 +00001770def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001771
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001772def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1773 let Latency = 9;
1774 let NumMicroOps = 3;
1775 let ResourceCycles = [1,1,1];
1776}
Craig Topperfc179c62018-03-22 04:23:41 +00001777def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001778
1779def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1780 let Latency = 9;
1781 let NumMicroOps = 3;
1782 let ResourceCycles = [1,1,1];
1783}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001784def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001785
1786def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001787 let Latency = 9;
1788 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001789 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001790}
Craig Topperfc179c62018-03-22 04:23:41 +00001791def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1792 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001793
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001794def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1795 let Latency = 9;
1796 let NumMicroOps = 4;
1797 let ResourceCycles = [2,1,1];
1798}
Craig Topperfc179c62018-03-22 04:23:41 +00001799def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1800 "(V?)PHADDWrm",
1801 "(V?)PHSUBDrm",
1802 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001803
1804def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1805 let Latency = 9;
1806 let NumMicroOps = 4;
1807 let ResourceCycles = [1,1,1,1];
1808}
Craig Topperfc179c62018-03-22 04:23:41 +00001809def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1810 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001811
1812def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1813 let Latency = 9;
1814 let NumMicroOps = 5;
1815 let ResourceCycles = [1,2,1,1];
1816}
Craig Topperfc179c62018-03-22 04:23:41 +00001817def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1818 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001819
1820def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1821 let Latency = 10;
1822 let NumMicroOps = 2;
1823 let ResourceCycles = [1,1];
1824}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001825def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001826 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001827
1828def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1829 let Latency = 10;
1830 let NumMicroOps = 2;
1831 let ResourceCycles = [1,1];
1832}
Craig Topperfc179c62018-03-22 04:23:41 +00001833def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1834 "ADD_F64m",
1835 "ILD_F16m",
1836 "ILD_F32m",
1837 "ILD_F64m",
1838 "SUBR_F32m",
1839 "SUBR_F64m",
1840 "SUB_F32m",
1841 "SUB_F64m",
1842 "VPCMPGTQYrm",
1843 "VPERM2F128rm",
1844 "VPERM2I128rm",
1845 "VPERMDYrm",
1846 "VPERMPDYmi",
1847 "VPERMPSYrm",
1848 "VPERMQYmi",
1849 "VPMOVZXBDYrm",
1850 "VPMOVZXBQYrm",
1851 "VPMOVZXBWYrm",
1852 "VPMOVZXDQYrm",
1853 "VPMOVZXWQYrm",
1854 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001855
1856def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1857 let Latency = 10;
1858 let NumMicroOps = 2;
1859 let ResourceCycles = [1,1];
1860}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001861def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1862 "(V?)ADDPSrm",
1863 "(V?)ADDSUBPDrm",
1864 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001865 "(V?)CVTDQ2PSrm",
1866 "(V?)CVTPH2PSYrm",
1867 "(V?)CVTPS2DQrm",
1868 "(V?)CVTSS2SDrm",
1869 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001870 "(V?)MULPDrm",
1871 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001872 "(V?)PMADDUBSWrm",
1873 "(V?)PMADDWDrm",
1874 "(V?)PMULDQrm",
1875 "(V?)PMULHRSWrm",
1876 "(V?)PMULHUWrm",
1877 "(V?)PMULHWrm",
1878 "(V?)PMULLWrm",
1879 "(V?)PMULUDQrm",
1880 "(V?)SUBPDrm",
1881 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001882
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001883def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1884 let Latency = 10;
1885 let NumMicroOps = 3;
1886 let ResourceCycles = [1,1,1];
1887}
Craig Topperfc179c62018-03-22 04:23:41 +00001888def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1889 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001890
Craig Topper58afb4e2018-03-22 21:10:07 +00001891def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001892 let Latency = 10;
1893 let NumMicroOps = 3;
1894 let ResourceCycles = [1,1,1];
1895}
Craig Topperfc179c62018-03-22 04:23:41 +00001896def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001897
1898def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001899 let Latency = 10;
1900 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001901 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001902}
Craig Topperfc179c62018-03-22 04:23:41 +00001903def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1904 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001905
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001906def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1907 let Latency = 10;
1908 let NumMicroOps = 4;
1909 let ResourceCycles = [2,1,1];
1910}
Craig Topperfc179c62018-03-22 04:23:41 +00001911def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1912 "VPHADDWYrm",
1913 "VPHSUBDYrm",
1914 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001915
1916def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001917 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001918 let NumMicroOps = 4;
1919 let ResourceCycles = [1,1,1,1];
1920}
Craig Topperf846e2d2018-04-19 05:34:05 +00001921def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001922
1923def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1924 let Latency = 10;
1925 let NumMicroOps = 8;
1926 let ResourceCycles = [1,1,1,1,1,3];
1927}
Craig Topper13a16502018-03-19 00:56:09 +00001928def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001929
1930def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001931 let Latency = 10;
1932 let NumMicroOps = 10;
1933 let ResourceCycles = [9,1];
1934}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001935def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001936
Craig Topper8104f262018-04-02 05:33:28 +00001937def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001938 let Latency = 11;
1939 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001940 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001941}
Craig Topper8104f262018-04-02 05:33:28 +00001942def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001943 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001944
Craig Topper8104f262018-04-02 05:33:28 +00001945def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1946 let Latency = 11;
1947 let NumMicroOps = 1;
1948 let ResourceCycles = [1,5];
1949}
1950def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1951
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001952def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001953 let Latency = 11;
1954 let NumMicroOps = 2;
1955 let ResourceCycles = [1,1];
1956}
Craig Topperfc179c62018-03-22 04:23:41 +00001957def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
1958 "MUL_F64m",
1959 "VRCPPSYm",
1960 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001961
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001962def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1963 let Latency = 11;
1964 let NumMicroOps = 2;
1965 let ResourceCycles = [1,1];
1966}
Craig Topperfc179c62018-03-22 04:23:41 +00001967def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1968 "VADDPSYrm",
1969 "VADDSUBPDYrm",
1970 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001971 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001972 "VCMPPSYrmi",
1973 "VCVTDQ2PSYrm",
1974 "VCVTPS2DQYrm",
1975 "VCVTPS2PDYrm",
1976 "VCVTTPS2DQYrm",
1977 "VMAX(C?)PDYrm",
1978 "VMAX(C?)PSYrm",
1979 "VMIN(C?)PDYrm",
1980 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001981 "VMULPDYrm",
1982 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001983 "VPMADDUBSWYrm",
1984 "VPMADDWDYrm",
1985 "VPMULDQYrm",
1986 "VPMULHRSWYrm",
1987 "VPMULHUWYrm",
1988 "VPMULHWYrm",
1989 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001990 "VPMULUDQYrm",
1991 "VSUBPDYrm",
1992 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001993
1994def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1995 let Latency = 11;
1996 let NumMicroOps = 3;
1997 let ResourceCycles = [2,1];
1998}
Craig Topperfc179c62018-03-22 04:23:41 +00001999def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2000 "FICOM32m",
2001 "FICOMP16m",
2002 "FICOMP32m",
2003 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002004
2005def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2006 let Latency = 11;
2007 let NumMicroOps = 3;
2008 let ResourceCycles = [1,1,1];
2009}
Craig Topperfc179c62018-03-22 04:23:41 +00002010def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002011
Craig Topper58afb4e2018-03-22 21:10:07 +00002012def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002013 let Latency = 11;
2014 let NumMicroOps = 3;
2015 let ResourceCycles = [1,1,1];
2016}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002017def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2018 "(V?)CVTSD2SIrm",
2019 "(V?)CVTSS2SI64rm",
2020 "(V?)CVTSS2SIrm",
2021 "(V?)CVTTSD2SI64rm",
2022 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002023 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002024 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002025
Craig Topper58afb4e2018-03-22 21:10:07 +00002026def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002027 let Latency = 11;
2028 let NumMicroOps = 3;
2029 let ResourceCycles = [1,1,1];
2030}
Craig Topperfc179c62018-03-22 04:23:41 +00002031def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2032 "CVTPD2PSrm",
2033 "CVTTPD2DQrm",
2034 "MMX_CVTPD2PIirm",
2035 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002036
2037def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2038 let Latency = 11;
2039 let NumMicroOps = 6;
2040 let ResourceCycles = [1,1,1,2,1];
2041}
Craig Topperfc179c62018-03-22 04:23:41 +00002042def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2043 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002044
2045def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002046 let Latency = 11;
2047 let NumMicroOps = 7;
2048 let ResourceCycles = [2,3,2];
2049}
Craig Topperfc179c62018-03-22 04:23:41 +00002050def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2051 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002052
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002053def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002054 let Latency = 11;
2055 let NumMicroOps = 9;
2056 let ResourceCycles = [1,5,1,2];
2057}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002058def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002059
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002060def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002061 let Latency = 11;
2062 let NumMicroOps = 11;
2063 let ResourceCycles = [2,9];
2064}
Craig Topperfc179c62018-03-22 04:23:41 +00002065def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002066
Craig Topper8104f262018-04-02 05:33:28 +00002067def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002068 let Latency = 12;
2069 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002070 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002071}
Craig Topper8104f262018-04-02 05:33:28 +00002072def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002073 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002074
Craig Topper8104f262018-04-02 05:33:28 +00002075def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2076 let Latency = 12;
2077 let NumMicroOps = 1;
2078 let ResourceCycles = [1,6];
2079}
2080def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2081
Craig Topper58afb4e2018-03-22 21:10:07 +00002082def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002083 let Latency = 12;
2084 let NumMicroOps = 4;
2085 let ResourceCycles = [1,1,1,1];
2086}
2087def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2088
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002089def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002090 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002091 let NumMicroOps = 3;
2092 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002093}
Craig Topperfc179c62018-03-22 04:23:41 +00002094def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2095 "ADD_FI32m",
2096 "SUBR_FI16m",
2097 "SUBR_FI32m",
2098 "SUB_FI16m",
2099 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002100
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002101def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2102 let Latency = 13;
2103 let NumMicroOps = 3;
2104 let ResourceCycles = [1,1,1];
2105}
2106def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2107
Craig Topper58afb4e2018-03-22 21:10:07 +00002108def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002109 let Latency = 13;
2110 let NumMicroOps = 4;
2111 let ResourceCycles = [1,3];
2112}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002113def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002114
Craig Topper8104f262018-04-02 05:33:28 +00002115def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002116 let Latency = 14;
2117 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002118 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002119}
Craig Topper8104f262018-04-02 05:33:28 +00002120def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002121 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002122
Craig Topper8104f262018-04-02 05:33:28 +00002123def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2124 let Latency = 14;
2125 let NumMicroOps = 1;
2126 let ResourceCycles = [1,5];
2127}
2128def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2129
Craig Topper58afb4e2018-03-22 21:10:07 +00002130def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002131 let Latency = 14;
2132 let NumMicroOps = 3;
2133 let ResourceCycles = [1,2];
2134}
Craig Topperfc179c62018-03-22 04:23:41 +00002135def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2136def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2137def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2138def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002139
2140def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2141 let Latency = 14;
2142 let NumMicroOps = 3;
2143 let ResourceCycles = [1,1,1];
2144}
Craig Topperfc179c62018-03-22 04:23:41 +00002145def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2146 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002147
2148def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002149 let Latency = 14;
2150 let NumMicroOps = 10;
2151 let ResourceCycles = [2,4,1,3];
2152}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002153def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002154
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002155def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002156 let Latency = 15;
2157 let NumMicroOps = 1;
2158 let ResourceCycles = [1];
2159}
Craig Topperfc179c62018-03-22 04:23:41 +00002160def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2161 "DIVR_FST0r",
2162 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002163
Craig Topper58afb4e2018-03-22 21:10:07 +00002164def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002165 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002166 let NumMicroOps = 3;
2167 let ResourceCycles = [1,2];
2168}
Craig Topper40d3b322018-03-22 21:55:20 +00002169def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2170 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002171
Craig Topperd25f1ac2018-03-20 23:39:48 +00002172def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2173 let Latency = 17;
2174 let NumMicroOps = 3;
2175 let ResourceCycles = [1,2];
2176}
2177def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2178
Craig Topper58afb4e2018-03-22 21:10:07 +00002179def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002180 let Latency = 15;
2181 let NumMicroOps = 4;
2182 let ResourceCycles = [1,1,2];
2183}
Craig Topperfc179c62018-03-22 04:23:41 +00002184def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002185
2186def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2187 let Latency = 15;
2188 let NumMicroOps = 10;
2189 let ResourceCycles = [1,1,1,5,1,1];
2190}
Craig Topper13a16502018-03-19 00:56:09 +00002191def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002192
Craig Topper8104f262018-04-02 05:33:28 +00002193def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002194 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002195 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002196 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002197}
Craig Topperfc179c62018-03-22 04:23:41 +00002198def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002199
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002200def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2201 let Latency = 16;
2202 let NumMicroOps = 14;
2203 let ResourceCycles = [1,1,1,4,2,5];
2204}
2205def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2206
2207def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002208 let Latency = 16;
2209 let NumMicroOps = 16;
2210 let ResourceCycles = [16];
2211}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002212def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002213
Craig Topper8104f262018-04-02 05:33:28 +00002214def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002215 let Latency = 17;
2216 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002217 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002218}
Craig Topper8104f262018-04-02 05:33:28 +00002219def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2220
2221def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2222 let Latency = 17;
2223 let NumMicroOps = 2;
2224 let ResourceCycles = [1,1,3];
2225}
2226def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002227
2228def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002229 let Latency = 17;
2230 let NumMicroOps = 15;
2231 let ResourceCycles = [2,1,2,4,2,4];
2232}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002233def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002234
Craig Topper8104f262018-04-02 05:33:28 +00002235def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002236 let Latency = 18;
2237 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002238 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002239}
Craig Topper8104f262018-04-02 05:33:28 +00002240def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002241 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002242
Craig Topper8104f262018-04-02 05:33:28 +00002243def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2244 let Latency = 18;
2245 let NumMicroOps = 1;
2246 let ResourceCycles = [1,12];
2247}
2248def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2249
2250def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002251 let Latency = 18;
2252 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002253 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002254}
Craig Topper8104f262018-04-02 05:33:28 +00002255def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2256
2257def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2258 let Latency = 18;
2259 let NumMicroOps = 2;
2260 let ResourceCycles = [1,1,3];
2261}
2262def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002263
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002264def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002265 let Latency = 18;
2266 let NumMicroOps = 8;
2267 let ResourceCycles = [1,1,1,5];
2268}
Craig Topperfc179c62018-03-22 04:23:41 +00002269def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002270
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002271def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002272 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002273 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002274 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002275}
Craig Topper13a16502018-03-19 00:56:09 +00002276def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002277
Craig Topper8104f262018-04-02 05:33:28 +00002278def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002279 let Latency = 19;
2280 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002281 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002282}
Craig Topper8104f262018-04-02 05:33:28 +00002283def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2284
2285def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2286 let Latency = 19;
2287 let NumMicroOps = 2;
2288 let ResourceCycles = [1,1,6];
2289}
2290def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002291
Craig Topper58afb4e2018-03-22 21:10:07 +00002292def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002293 let Latency = 19;
2294 let NumMicroOps = 5;
2295 let ResourceCycles = [1,1,3];
2296}
Craig Topperfc179c62018-03-22 04:23:41 +00002297def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002298
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002299def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002300 let Latency = 20;
2301 let NumMicroOps = 1;
2302 let ResourceCycles = [1];
2303}
Craig Topperfc179c62018-03-22 04:23:41 +00002304def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2305 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002306 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002307
Craig Topper8104f262018-04-02 05:33:28 +00002308def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002309 let Latency = 20;
2310 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002311 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002312}
Craig Topperfc179c62018-03-22 04:23:41 +00002313def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002314
Craig Topper58afb4e2018-03-22 21:10:07 +00002315def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002316 let Latency = 20;
2317 let NumMicroOps = 5;
2318 let ResourceCycles = [1,1,3];
2319}
2320def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2321
2322def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2323 let Latency = 20;
2324 let NumMicroOps = 8;
2325 let ResourceCycles = [1,1,1,1,1,1,2];
2326}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002327def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002328
2329def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002330 let Latency = 20;
2331 let NumMicroOps = 10;
2332 let ResourceCycles = [1,2,7];
2333}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002334def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002335
Craig Topper8104f262018-04-02 05:33:28 +00002336def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002337 let Latency = 21;
2338 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002339 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002340}
2341def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2342
2343def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2344 let Latency = 22;
2345 let NumMicroOps = 2;
2346 let ResourceCycles = [1,1];
2347}
Craig Topperfc179c62018-03-22 04:23:41 +00002348def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2349 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002350
2351def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2352 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002353 let NumMicroOps = 5;
2354 let ResourceCycles = [1,2,1,1];
2355}
Craig Topper17a31182017-12-16 18:35:29 +00002356def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2357 VGATHERDPDrm,
2358 VGATHERQPDrm,
2359 VGATHERQPSrm,
2360 VPGATHERDDrm,
2361 VPGATHERDQrm,
2362 VPGATHERQDrm,
2363 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002364
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002365def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2366 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002367 let NumMicroOps = 5;
2368 let ResourceCycles = [1,2,1,1];
2369}
Craig Topper17a31182017-12-16 18:35:29 +00002370def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2371 VGATHERQPDYrm,
2372 VGATHERQPSYrm,
2373 VPGATHERDDYrm,
2374 VPGATHERDQYrm,
2375 VPGATHERQDYrm,
2376 VPGATHERQQYrm,
2377 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002378
Craig Topper8104f262018-04-02 05:33:28 +00002379def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002380 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002381 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002382 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002383}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002384def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002385
2386def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2387 let Latency = 23;
2388 let NumMicroOps = 19;
2389 let ResourceCycles = [2,1,4,1,1,4,6];
2390}
2391def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2392
Craig Topper8104f262018-04-02 05:33:28 +00002393def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002394 let Latency = 24;
2395 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002396 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002397}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002398def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002399
Craig Topper8104f262018-04-02 05:33:28 +00002400def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002401 let Latency = 25;
2402 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002403 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002404}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002405def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002406
2407def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2408 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002409 let NumMicroOps = 3;
2410 let ResourceCycles = [1,1,1];
2411}
Craig Topperfc179c62018-03-22 04:23:41 +00002412def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2413 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002414
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002415def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2416 let Latency = 27;
2417 let NumMicroOps = 2;
2418 let ResourceCycles = [1,1];
2419}
Craig Topperfc179c62018-03-22 04:23:41 +00002420def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2421 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002422
2423def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2424 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002425 let NumMicroOps = 8;
2426 let ResourceCycles = [2,4,1,1];
2427}
Craig Topper13a16502018-03-19 00:56:09 +00002428def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002429
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002430def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002431 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002432 let NumMicroOps = 3;
2433 let ResourceCycles = [1,1,1];
2434}
Craig Topperfc179c62018-03-22 04:23:41 +00002435def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2436 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002437
2438def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2439 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002440 let NumMicroOps = 23;
2441 let ResourceCycles = [1,5,3,4,10];
2442}
Craig Topperfc179c62018-03-22 04:23:41 +00002443def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2444 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002445
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002446def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2447 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002448 let NumMicroOps = 23;
2449 let ResourceCycles = [1,5,2,1,4,10];
2450}
Craig Topperfc179c62018-03-22 04:23:41 +00002451def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2452 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002453
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002454def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2455 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002456 let NumMicroOps = 31;
2457 let ResourceCycles = [1,8,1,21];
2458}
Craig Topper391c6f92017-12-10 01:24:08 +00002459def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002460
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002461def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2462 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002463 let NumMicroOps = 18;
2464 let ResourceCycles = [1,1,2,3,1,1,1,8];
2465}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002466def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002467
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002468def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2469 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002470 let NumMicroOps = 39;
2471 let ResourceCycles = [1,10,1,1,26];
2472}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002473def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002474
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002475def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476 let Latency = 42;
2477 let NumMicroOps = 22;
2478 let ResourceCycles = [2,20];
2479}
Craig Topper2d451e72018-03-18 08:38:06 +00002480def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002481
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002482def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2483 let Latency = 42;
2484 let NumMicroOps = 40;
2485 let ResourceCycles = [1,11,1,1,26];
2486}
Craig Topper391c6f92017-12-10 01:24:08 +00002487def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002488
2489def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2490 let Latency = 46;
2491 let NumMicroOps = 44;
2492 let ResourceCycles = [1,11,1,1,30];
2493}
2494def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2495
2496def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2497 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002498 let NumMicroOps = 64;
2499 let ResourceCycles = [2,8,5,10,39];
2500}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002501def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002502
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002503def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2504 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002505 let NumMicroOps = 88;
2506 let ResourceCycles = [4,4,31,1,2,1,45];
2507}
Craig Topper2d451e72018-03-18 08:38:06 +00002508def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002509
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002510def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2511 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002512 let NumMicroOps = 90;
2513 let ResourceCycles = [4,2,33,1,2,1,47];
2514}
Craig Topper2d451e72018-03-18 08:38:06 +00002515def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002516
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002517def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002518 let Latency = 75;
2519 let NumMicroOps = 15;
2520 let ResourceCycles = [6,3,6];
2521}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002522def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002523
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002524def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002525 let Latency = 76;
2526 let NumMicroOps = 32;
2527 let ResourceCycles = [7,2,8,3,1,11];
2528}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002529def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002530
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002531def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002532 let Latency = 102;
2533 let NumMicroOps = 66;
2534 let ResourceCycles = [4,2,4,8,14,34];
2535}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002536def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002537
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002538def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2539 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002540 let NumMicroOps = 100;
2541 let ResourceCycles = [9,1,11,16,1,11,21,30];
2542}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002543def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002544
2545} // SchedModel