blob: 0b8e3504b2d7c0011ce87ced0d594e18b45685b5 [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 Pilgrim5269167f2018-05-01 16:13:42 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3, [1], 1, 5>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFAddY, [SKLPort1], 3, [1], 1, 7>; // Floating point add/sub (YMM/ZMM).
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000156defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
Simon Pilgrimc546f942018-05-01 16:50:16 +0000157defm : SKLWriteResPair<WriteFCmpY, [SKLPort01], 4, [1], 1, 7>; // Floating point compare (YMM/ZMM).
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000158defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000159defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
160defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
Simon Pilgrimc7088682018-05-01 18:06:07 +0000161defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15, [1], 1, 5>; // Floating point square root.
162defm : SKLWriteResPair<WriteFSqrtY, [SKLPort0], 15, [1], 1, 7>; // Floating point square root (YMM/ZMM).
163defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate.
164defm : SKLWriteResPair<WriteFRcpY, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate (YMM/ZMM).
165defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal square root estimate.
166defm : SKLWriteResPair<WriteFRsqrtY,[SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal square root estimate (YMM/ZMM).
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000167defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4, [1], 1, 6>; // Fused Multiply Add.
168defm : SKLWriteResPair<WriteFMAS, [SKLPort01], 4, [1], 1, 5>; // Fused Multiply Add (Scalar).
169defm : SKLWriteResPair<WriteFMAY, [SKLPort01], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000170defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000171defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
172defm : SKLWriteResPair<WriteFLogicY, [SKLPort015], 1, [1], 1, 7>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrimdd8eae12018-05-01 14:25:01 +0000173defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1, [1], 1, 5>; // Floating point vector shuffles.
174defm : SKLWriteResPair<WriteFShuffleY, [SKLPort5], 1, [1], 1, 7>; // Floating point vector shuffles (YMM/ZMM).
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000175defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000176defm : SKLWriteResPair<WriteFVarShuffleY, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000177defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000178defm : SKLWriteResPair<WriteFBlendY, [SKLPort015], 1, [1], 1, 7>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000179defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000180defm : SKLWriteResPair<WriteFVarBlendY,[SKLPort015], 2, [2], 2, 7>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000181
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000182def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
183 let Latency = 6;
184 let NumMicroOps = 4;
185 let ResourceCycles = [1,1,1,1];
186}
187
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000188// FMA Scheduling helper class.
189// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
190
191// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000192def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
193def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
194def : WriteRes<WriteVecMove, [SKLPort015]>;
195
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000196defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000197defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim57f2b182018-05-01 12:39:17 +0000198defm : SKLWriteResPair<WriteVecLogicY,[SKLPort015], 1, [1], 1, 7>; // Vector integer and/or/xor (YMM/ZMM).
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000199defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
200defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000201defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000202defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000203defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000204defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000205defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000206defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000207defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000208defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000209
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000210// Vector insert/extract operations.
211def : WriteRes<WriteVecInsert, [SKLPort5]> {
212 let Latency = 2;
213 let NumMicroOps = 2;
214 let ResourceCycles = [2];
215}
216def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
217 let Latency = 6;
218 let NumMicroOps = 2;
219}
220
221def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
222 let Latency = 3;
223 let NumMicroOps = 2;
224}
225def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
226 let Latency = 2;
227 let NumMicroOps = 3;
228}
229
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000230// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000231defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
232defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
233defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000234
235// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000236
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000237// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000238def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
239 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000240 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000241 let ResourceCycles = [3];
242}
243def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000244 let Latency = 16;
245 let NumMicroOps = 4;
246 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000247}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000248
249// Packed Compare Explicit Length Strings, Return Mask
250def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
251 let Latency = 19;
252 let NumMicroOps = 9;
253 let ResourceCycles = [4,3,1,1];
254}
255def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
256 let Latency = 25;
257 let NumMicroOps = 10;
258 let ResourceCycles = [4,3,1,1,1];
259}
260
261// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000262def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000263 let Latency = 10;
264 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265 let ResourceCycles = [3];
266}
267def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000268 let Latency = 16;
269 let NumMicroOps = 4;
270 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000272
273// Packed Compare Explicit Length Strings, Return Index
274def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
275 let Latency = 18;
276 let NumMicroOps = 8;
277 let ResourceCycles = [4,3,1];
278}
279def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
280 let Latency = 24;
281 let NumMicroOps = 9;
282 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000283}
284
Simon Pilgrima2f26782018-03-27 20:38:54 +0000285// MOVMSK Instructions.
286def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
287def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
288def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
289
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000290// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000291def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
292 let Latency = 4;
293 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000294 let ResourceCycles = [1];
295}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000296def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
297 let Latency = 10;
298 let NumMicroOps = 2;
299 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000300}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000301
302def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
303 let Latency = 8;
304 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305 let ResourceCycles = [2];
306}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000307def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000308 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000309 let NumMicroOps = 3;
310 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000311}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000312
313def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
314 let Latency = 20;
315 let NumMicroOps = 11;
316 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000317}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000318def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
319 let Latency = 25;
320 let NumMicroOps = 11;
321 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000322}
323
324// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000325def : WriteRes<WriteCLMul, [SKLPort5]> {
326 let Latency = 6;
327 let NumMicroOps = 1;
328 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000329}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000330def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
331 let Latency = 12;
332 let NumMicroOps = 2;
333 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000334}
335
336// Catch-all for expensive system instructions.
337def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
338
339// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000340defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000341defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000342defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000343defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000344defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000345
346// Old microcoded instructions that nobody use.
347def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
348
349// Fence instructions.
350def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
351
Craig Topper05242bf2018-04-21 18:07:36 +0000352// Load/store MXCSR.
353def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
354def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
355
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000356// Nop, not very useful expect it provides a model for nops!
357def : WriteRes<WriteNop, []>;
358
359////////////////////////////////////////////////////////////////////////////////
360// Horizontal add/sub instructions.
361////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000362
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000363defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
364defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000365defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000366
367// Remaining instrs.
368
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000369def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000370 let Latency = 1;
371 let NumMicroOps = 1;
372 let ResourceCycles = [1];
373}
Craig Topperfc179c62018-03-22 04:23:41 +0000374def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
375 "MMX_PADDSWirr",
376 "MMX_PADDUSBirr",
377 "MMX_PADDUSWirr",
378 "MMX_PAVGBirr",
379 "MMX_PAVGWirr",
380 "MMX_PCMPEQBirr",
381 "MMX_PCMPEQDirr",
382 "MMX_PCMPEQWirr",
383 "MMX_PCMPGTBirr",
384 "MMX_PCMPGTDirr",
385 "MMX_PCMPGTWirr",
386 "MMX_PMAXSWirr",
387 "MMX_PMAXUBirr",
388 "MMX_PMINSWirr",
389 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000390 "MMX_PSUBSBirr",
391 "MMX_PSUBSWirr",
392 "MMX_PSUBUSBirr",
393 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000394
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000395def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000396 let Latency = 1;
397 let NumMicroOps = 1;
398 let ResourceCycles = [1];
399}
Craig Topperfc179c62018-03-22 04:23:41 +0000400def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
401 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000402 "MMX_MOVD64rr",
403 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000404 "UCOM_FPr",
405 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000406 "(V?)MOV64toPQIrr",
Simon Pilgrimfc0c26f2018-05-01 11:05:42 +0000407 "(V?)MOVDI2PDIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000408
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000409def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000410 let Latency = 1;
411 let NumMicroOps = 1;
412 let ResourceCycles = [1];
413}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000414def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000415
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000416def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000417 let Latency = 1;
418 let NumMicroOps = 1;
419 let ResourceCycles = [1];
420}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000421def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
422 "(V?)PABSD(Y?)rr",
423 "(V?)PABSW(Y?)rr",
424 "(V?)PADDSB(Y?)rr",
425 "(V?)PADDSW(Y?)rr",
426 "(V?)PADDUSB(Y?)rr",
427 "(V?)PADDUSW(Y?)rr",
428 "(V?)PAVGB(Y?)rr",
429 "(V?)PAVGW(Y?)rr",
430 "(V?)PCMPEQB(Y?)rr",
431 "(V?)PCMPEQD(Y?)rr",
432 "(V?)PCMPEQQ(Y?)rr",
433 "(V?)PCMPEQW(Y?)rr",
434 "(V?)PCMPGTB(Y?)rr",
435 "(V?)PCMPGTD(Y?)rr",
436 "(V?)PCMPGTW(Y?)rr",
437 "(V?)PMAXSB(Y?)rr",
438 "(V?)PMAXSD(Y?)rr",
439 "(V?)PMAXSW(Y?)rr",
440 "(V?)PMAXUB(Y?)rr",
441 "(V?)PMAXUD(Y?)rr",
442 "(V?)PMAXUW(Y?)rr",
443 "(V?)PMINSB(Y?)rr",
444 "(V?)PMINSD(Y?)rr",
445 "(V?)PMINSW(Y?)rr",
446 "(V?)PMINUB(Y?)rr",
447 "(V?)PMINUD(Y?)rr",
448 "(V?)PMINUW(Y?)rr",
449 "(V?)PSIGNB(Y?)rr",
450 "(V?)PSIGND(Y?)rr",
451 "(V?)PSIGNW(Y?)rr",
452 "(V?)PSLLD(Y?)ri",
453 "(V?)PSLLQ(Y?)ri",
454 "VPSLLVD(Y?)rr",
455 "VPSLLVQ(Y?)rr",
456 "(V?)PSLLW(Y?)ri",
457 "(V?)PSRAD(Y?)ri",
458 "VPSRAVD(Y?)rr",
459 "(V?)PSRAW(Y?)ri",
460 "(V?)PSRLD(Y?)ri",
461 "(V?)PSRLQ(Y?)ri",
462 "VPSRLVD(Y?)rr",
463 "VPSRLVQ(Y?)rr",
464 "(V?)PSRLW(Y?)ri",
465 "(V?)PSUBSB(Y?)rr",
466 "(V?)PSUBSW(Y?)rr",
467 "(V?)PSUBUSB(Y?)rr",
468 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000469
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000470def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000471 let Latency = 1;
472 let NumMicroOps = 1;
473 let ResourceCycles = [1];
474}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000475def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
476def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000477 "MMX_PABS(B|D|W)rr",
478 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000479 "MMX_PANDNirr",
480 "MMX_PANDirr",
481 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000482 "MMX_PSIGN(B|D|W)rr",
483 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000484 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000485
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000486def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000487 let Latency = 1;
488 let NumMicroOps = 1;
489 let ResourceCycles = [1];
490}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000491def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000492def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
493 "ADC(16|32|64)i",
494 "ADC(8|16|32|64)rr",
495 "ADCX(32|64)rr",
496 "ADOX(32|64)rr",
497 "BT(16|32|64)ri8",
498 "BT(16|32|64)rr",
499 "BTC(16|32|64)ri8",
500 "BTC(16|32|64)rr",
501 "BTR(16|32|64)ri8",
502 "BTR(16|32|64)rr",
503 "BTS(16|32|64)ri8",
504 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000505 "SBB(16|32|64)ri",
506 "SBB(16|32|64)i",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000507 "SBB(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000508
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000509def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
510 let Latency = 1;
511 let NumMicroOps = 1;
512 let ResourceCycles = [1];
513}
Craig Topperfc179c62018-03-22 04:23:41 +0000514def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
515 "BLSI(32|64)rr",
516 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000517 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000518
519def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
520 let Latency = 1;
521 let NumMicroOps = 1;
522 let ResourceCycles = [1];
523}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000524def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000525 "(V?)PADDD(Y?)rr",
526 "(V?)PADDQ(Y?)rr",
527 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000528 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000529 "(V?)PSUBB(Y?)rr",
530 "(V?)PSUBD(Y?)rr",
531 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000532 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000533
534def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
535 let Latency = 1;
536 let NumMicroOps = 1;
537 let ResourceCycles = [1];
538}
Craig Topperfbe31322018-04-05 21:56:19 +0000539def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000540def: InstRW<[SKLWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000541def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000542 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000543 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000544 "SGDT64m",
545 "SIDT64m",
Craig Topperfc179c62018-03-22 04:23:41 +0000546 "SMSW16m",
547 "STC",
548 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000549 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000550
551def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000552 let Latency = 1;
553 let NumMicroOps = 2;
554 let ResourceCycles = [1,1];
555}
Craig Topperfc179c62018-03-22 04:23:41 +0000556def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
557 "MMX_MOVD64from64rm",
558 "MMX_MOVD64mr",
559 "MMX_MOVNTQmr",
560 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000561 "MOVNTI_64mr",
562 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000563 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000564 "VEXTRACTF128mr",
565 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000566 "(V?)MOVAPDYmr",
567 "(V?)MOVAPS(Y?)mr",
568 "(V?)MOVDQA(Y?)mr",
569 "(V?)MOVDQU(Y?)mr",
570 "(V?)MOVHPDmr",
571 "(V?)MOVHPSmr",
572 "(V?)MOVLPDmr",
573 "(V?)MOVLPSmr",
574 "(V?)MOVNTDQ(Y?)mr",
575 "(V?)MOVNTPD(Y?)mr",
576 "(V?)MOVNTPS(Y?)mr",
577 "(V?)MOVPDI2DImr",
578 "(V?)MOVPQI2QImr",
579 "(V?)MOVPQIto64mr",
580 "(V?)MOVSDmr",
581 "(V?)MOVSSmr",
582 "(V?)MOVUPD(Y?)mr",
583 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000584 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000585
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000586def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000587 let Latency = 2;
588 let NumMicroOps = 1;
589 let ResourceCycles = [1];
590}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000591def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000592 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000593 "(V?)MOVPDI2DIrr",
594 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000595 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000596 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000597
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000598def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000599 let Latency = 2;
600 let NumMicroOps = 2;
601 let ResourceCycles = [2];
602}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000603def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000604
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000605def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000606 let Latency = 2;
607 let NumMicroOps = 2;
608 let ResourceCycles = [2];
609}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000610def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
611def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000612
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000613def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000614 let Latency = 2;
615 let NumMicroOps = 2;
616 let ResourceCycles = [2];
617}
Craig Topperfc179c62018-03-22 04:23:41 +0000618def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
619 "ROL(8|16|32|64)r1",
620 "ROL(8|16|32|64)ri",
621 "ROR(8|16|32|64)r1",
622 "ROR(8|16|32|64)ri",
623 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000624
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000625def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000626 let Latency = 2;
627 let NumMicroOps = 2;
628 let ResourceCycles = [2];
629}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000630def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
631 WAIT,
632 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000633
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000634def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000635 let Latency = 2;
636 let NumMicroOps = 2;
637 let ResourceCycles = [1,1];
638}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000639def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
640 "VMASKMOVPS(Y?)mr",
641 "VPMASKMOVD(Y?)mr",
642 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000643
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000644def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000645 let Latency = 2;
646 let NumMicroOps = 2;
647 let ResourceCycles = [1,1];
648}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000649def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
650 "(V?)PSLLQrr",
651 "(V?)PSLLWrr",
652 "(V?)PSRADrr",
653 "(V?)PSRAWrr",
654 "(V?)PSRLDrr",
655 "(V?)PSRLQrr",
656 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000657
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000658def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000659 let Latency = 2;
660 let NumMicroOps = 2;
661 let ResourceCycles = [1,1];
662}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000663def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000664
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000665def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000666 let Latency = 2;
667 let NumMicroOps = 2;
668 let ResourceCycles = [1,1];
669}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000670def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000671
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000672def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000673 let Latency = 2;
674 let NumMicroOps = 2;
675 let ResourceCycles = [1,1];
676}
Craig Topper498875f2018-04-04 17:54:19 +0000677def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
678
679def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
680 let Latency = 1;
681 let NumMicroOps = 1;
682 let ResourceCycles = [1];
683}
684def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000685
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000686def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000687 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000688 let NumMicroOps = 2;
689 let ResourceCycles = [1,1];
690}
Craig Topper2d451e72018-03-18 08:38:06 +0000691def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000692def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000693def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
694 "ADC8ri",
695 "SBB8i8",
696 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000697
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000698def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
699 let Latency = 2;
700 let NumMicroOps = 3;
701 let ResourceCycles = [1,1,1];
702}
703def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
704
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000705def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
706 let Latency = 2;
707 let NumMicroOps = 3;
708 let ResourceCycles = [1,1,1];
709}
710def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
711
712def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
713 let Latency = 2;
714 let NumMicroOps = 3;
715 let ResourceCycles = [1,1,1];
716}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000717def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
718 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000719def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000720 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000721
722def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
723 let Latency = 3;
724 let NumMicroOps = 1;
725 let ResourceCycles = [1];
726}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000727def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000728 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000729 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000730 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000731
Clement Courbet327fac42018-03-07 08:14:02 +0000732def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000733 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000734 let NumMicroOps = 2;
735 let ResourceCycles = [1,1];
736}
Clement Courbet327fac42018-03-07 08:14:02 +0000737def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000738
739def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
740 let Latency = 3;
741 let NumMicroOps = 1;
742 let ResourceCycles = [1];
743}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000744def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
745 "(ADD|SUB|SUBR)_FST0r",
746 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000747 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000748 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000749 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000750 "VPMOVSXBDYrr",
751 "VPMOVSXBQYrr",
752 "VPMOVSXBWYrr",
753 "VPMOVSXDQYrr",
754 "VPMOVSXWDYrr",
755 "VPMOVSXWQYrr",
756 "VPMOVZXBDYrr",
757 "VPMOVZXBQYrr",
758 "VPMOVZXBWYrr",
759 "VPMOVZXDQYrr",
760 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000761 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000762
763def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
764 let Latency = 3;
765 let NumMicroOps = 2;
766 let ResourceCycles = [1,1];
767}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000768def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000769
770def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
771 let Latency = 3;
772 let NumMicroOps = 2;
773 let ResourceCycles = [1,1];
774}
775def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
776
777def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
778 let Latency = 3;
779 let NumMicroOps = 3;
780 let ResourceCycles = [3];
781}
Craig Topperfc179c62018-03-22 04:23:41 +0000782def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
783 "ROR(8|16|32|64)rCL",
784 "SAR(8|16|32|64)rCL",
785 "SHL(8|16|32|64)rCL",
786 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000787
788def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000789 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000790 let NumMicroOps = 3;
791 let ResourceCycles = [3];
792}
Craig Topperb5f26592018-04-19 18:00:17 +0000793def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
794 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
795 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000796
797def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
798 let Latency = 3;
799 let NumMicroOps = 3;
800 let ResourceCycles = [1,2];
801}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000802def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000803
804def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
805 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000806 let NumMicroOps = 3;
807 let ResourceCycles = [2,1];
808}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000809def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
810 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000811
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000812def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
813 let Latency = 3;
814 let NumMicroOps = 3;
815 let ResourceCycles = [2,1];
816}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000817def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000818
819def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
820 let Latency = 3;
821 let NumMicroOps = 3;
822 let ResourceCycles = [2,1];
823}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000824def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
825 "(V?)PHADDW(Y?)rr",
826 "(V?)PHSUBD(Y?)rr",
827 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000828
829def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
830 let Latency = 3;
831 let NumMicroOps = 3;
832 let ResourceCycles = [2,1];
833}
Craig Topperfc179c62018-03-22 04:23:41 +0000834def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
835 "MMX_PACKSSWBirr",
836 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000837
838def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
839 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000840 let NumMicroOps = 3;
841 let ResourceCycles = [1,2];
842}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000843def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000844
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000845def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
846 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000847 let NumMicroOps = 3;
848 let ResourceCycles = [1,2];
849}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000850def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000851
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000852def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
853 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000854 let NumMicroOps = 3;
855 let ResourceCycles = [1,2];
856}
Craig Topperfc179c62018-03-22 04:23:41 +0000857def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
858 "RCL(8|16|32|64)ri",
859 "RCR(8|16|32|64)r1",
860 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000861
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000862def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
863 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000864 let NumMicroOps = 3;
865 let ResourceCycles = [1,1,1];
866}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000867def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000868
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000869def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
870 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000871 let NumMicroOps = 4;
872 let ResourceCycles = [1,1,2];
873}
Craig Topperf4cd9082018-01-19 05:47:32 +0000874def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000875
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000876def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
877 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000878 let NumMicroOps = 4;
879 let ResourceCycles = [1,1,1,1];
880}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000881def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000882
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000883def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
884 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000885 let NumMicroOps = 4;
886 let ResourceCycles = [1,1,1,1];
887}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000888def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000889
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000890def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000891 let Latency = 4;
892 let NumMicroOps = 1;
893 let ResourceCycles = [1];
894}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000895def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000896 "MMX_PMADDWDirr",
897 "MMX_PMULHRSWrr",
898 "MMX_PMULHUWirr",
899 "MMX_PMULHWirr",
900 "MMX_PMULLWirr",
901 "MMX_PMULUDQirr",
902 "MUL_FPrST0",
903 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000904 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000905
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000906def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000907 let Latency = 4;
908 let NumMicroOps = 1;
909 let ResourceCycles = [1];
910}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000911def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
912 "(V?)ADDPS(Y?)rr",
913 "(V?)ADDSDrr",
914 "(V?)ADDSSrr",
915 "(V?)ADDSUBPD(Y?)rr",
916 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000917 "(V?)CVTDQ2PS(Y?)rr",
918 "(V?)CVTPS2DQ(Y?)rr",
919 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000920 "(V?)MULPD(Y?)rr",
921 "(V?)MULPS(Y?)rr",
922 "(V?)MULSDrr",
923 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000924 "(V?)PMADDUBSW(Y?)rr",
925 "(V?)PMADDWD(Y?)rr",
926 "(V?)PMULDQ(Y?)rr",
927 "(V?)PMULHRSW(Y?)rr",
928 "(V?)PMULHUW(Y?)rr",
929 "(V?)PMULHW(Y?)rr",
930 "(V?)PMULLW(Y?)rr",
931 "(V?)PMULUDQ(Y?)rr",
932 "(V?)SUBPD(Y?)rr",
933 "(V?)SUBPS(Y?)rr",
934 "(V?)SUBSDrr",
935 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000936
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000937def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000938 let Latency = 4;
939 let NumMicroOps = 2;
940 let ResourceCycles = [1,1];
941}
Craig Topperf846e2d2018-04-19 05:34:05 +0000942def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000943
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000944def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
945 let Latency = 4;
946 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000947 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000948}
Craig Topperfc179c62018-03-22 04:23:41 +0000949def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000950
951def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000952 let Latency = 4;
953 let NumMicroOps = 2;
954 let ResourceCycles = [1,1];
955}
Craig Topperfc179c62018-03-22 04:23:41 +0000956def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
957 "VPSLLQYrr",
958 "VPSLLWYrr",
959 "VPSRADYrr",
960 "VPSRAWYrr",
961 "VPSRLDYrr",
962 "VPSRLQYrr",
963 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000964
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000965def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000966 let Latency = 4;
967 let NumMicroOps = 3;
968 let ResourceCycles = [1,1,1];
969}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000970def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
971 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000972
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000973def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000974 let Latency = 4;
975 let NumMicroOps = 4;
976 let ResourceCycles = [4];
977}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000978def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000979
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000980def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000981 let Latency = 4;
982 let NumMicroOps = 4;
983 let ResourceCycles = [1,3];
984}
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000985def: InstRW<[SKLWriteResGroup55], (instrs PAUSE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000986
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000987def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000988 let Latency = 4;
989 let NumMicroOps = 4;
990 let ResourceCycles = [1,3];
991}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000992def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000993
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000994def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000995 let Latency = 4;
996 let NumMicroOps = 4;
997 let ResourceCycles = [1,1,2];
998}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000999def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001000
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001001def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1002 let Latency = 5;
1003 let NumMicroOps = 1;
1004 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001005}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001006def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001007 "MOVSX(16|32|64)rm32",
1008 "MOVSX(16|32|64)rm8",
1009 "MOVZX(16|32|64)rm16",
1010 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001011 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001012
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001013def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001014 let Latency = 5;
1015 let NumMicroOps = 2;
1016 let ResourceCycles = [1,1];
1017}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001018def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1019 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001020
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001021def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001022 let Latency = 5;
1023 let NumMicroOps = 2;
1024 let ResourceCycles = [1,1];
1025}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001026def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001027 "MMX_CVTPS2PIirr",
1028 "MMX_CVTTPD2PIirr",
1029 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001030 "(V?)CVTPD2DQrr",
1031 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001032 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001033 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001034 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001035 "(V?)CVTSD2SSrr",
1036 "(V?)CVTSI642SDrr",
1037 "(V?)CVTSI2SDrr",
1038 "(V?)CVTSI2SSrr",
1039 "(V?)CVTSS2SDrr",
1040 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001041
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001042def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001043 let Latency = 5;
1044 let NumMicroOps = 3;
1045 let ResourceCycles = [1,1,1];
1046}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001047def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001048
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001049def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001050 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001051 let NumMicroOps = 3;
1052 let ResourceCycles = [1,1,1];
1053}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001054def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001055
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001056def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001057 let Latency = 5;
1058 let NumMicroOps = 5;
1059 let ResourceCycles = [1,4];
1060}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001061def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001062
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001063def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001064 let Latency = 5;
1065 let NumMicroOps = 5;
1066 let ResourceCycles = [2,3];
1067}
Craig Topper13a16502018-03-19 00:56:09 +00001068def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001069
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001070def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001071 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001072 let NumMicroOps = 6;
1073 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001074}
Craig Topperfc179c62018-03-22 04:23:41 +00001075def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1076 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001077
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001078def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1079 let Latency = 6;
1080 let NumMicroOps = 1;
1081 let ResourceCycles = [1];
1082}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001083def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001084 "(V?)MOVSHDUPrm",
1085 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001086 "VPBROADCASTDrm",
1087 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001088
1089def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001090 let Latency = 6;
1091 let NumMicroOps = 2;
1092 let ResourceCycles = [2];
1093}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001094def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001095
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001096def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001097 let Latency = 6;
1098 let NumMicroOps = 2;
1099 let ResourceCycles = [1,1];
1100}
Craig Topperfc179c62018-03-22 04:23:41 +00001101def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1102 "MMX_PADDSWirm",
1103 "MMX_PADDUSBirm",
1104 "MMX_PADDUSWirm",
1105 "MMX_PAVGBirm",
1106 "MMX_PAVGWirm",
1107 "MMX_PCMPEQBirm",
1108 "MMX_PCMPEQDirm",
1109 "MMX_PCMPEQWirm",
1110 "MMX_PCMPGTBirm",
1111 "MMX_PCMPGTDirm",
1112 "MMX_PCMPGTWirm",
1113 "MMX_PMAXSWirm",
1114 "MMX_PMAXUBirm",
1115 "MMX_PMINSWirm",
1116 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001117 "MMX_PSUBSBirm",
1118 "MMX_PSUBSWirm",
1119 "MMX_PSUBUSBirm",
1120 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001121
Craig Topper58afb4e2018-03-22 21:10:07 +00001122def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001123 let Latency = 6;
1124 let NumMicroOps = 2;
1125 let ResourceCycles = [1,1];
1126}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001127def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1128 "(V?)CVTSD2SIrr",
1129 "(V?)CVTSS2SI64rr",
1130 "(V?)CVTSS2SIrr",
1131 "(V?)CVTTSD2SI64rr",
1132 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001133
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001134def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1135 let Latency = 6;
1136 let NumMicroOps = 2;
1137 let ResourceCycles = [1,1];
1138}
Craig Topperfc179c62018-03-22 04:23:41 +00001139def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1140 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001141
1142def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1143 let Latency = 6;
1144 let NumMicroOps = 2;
1145 let ResourceCycles = [1,1];
1146}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001147def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1148 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001149 "MMX_PANDNirm",
1150 "MMX_PANDirm",
1151 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001152 "MMX_PSIGN(B|D|W)rm",
1153 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001154 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001155
1156def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1157 let Latency = 6;
1158 let NumMicroOps = 2;
1159 let ResourceCycles = [1,1];
1160}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001161def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001162def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1163 ADCX32rm, ADCX64rm,
1164 ADOX32rm, ADOX64rm,
1165 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001166
1167def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1168 let Latency = 6;
1169 let NumMicroOps = 2;
1170 let ResourceCycles = [1,1];
1171}
Craig Topperfc179c62018-03-22 04:23:41 +00001172def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1173 "BLSI(32|64)rm",
1174 "BLSMSK(32|64)rm",
1175 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001176 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001177
1178def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1179 let Latency = 6;
1180 let NumMicroOps = 2;
1181 let ResourceCycles = [1,1];
1182}
Craig Topper2d451e72018-03-18 08:38:06 +00001183def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001184def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001185
Craig Topper58afb4e2018-03-22 21:10:07 +00001186def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001187 let Latency = 6;
1188 let NumMicroOps = 3;
1189 let ResourceCycles = [2,1];
1190}
Craig Topperfc179c62018-03-22 04:23:41 +00001191def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001192
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001193def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001194 let Latency = 6;
1195 let NumMicroOps = 4;
1196 let ResourceCycles = [1,2,1];
1197}
Craig Topperfc179c62018-03-22 04:23:41 +00001198def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1199 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001200
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001201def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001202 let Latency = 6;
1203 let NumMicroOps = 4;
1204 let ResourceCycles = [1,1,1,1];
1205}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001206def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001207
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001208def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1209 let Latency = 6;
1210 let NumMicroOps = 4;
1211 let ResourceCycles = [1,1,1,1];
1212}
Craig Topperfc179c62018-03-22 04:23:41 +00001213def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1214 "BTR(16|32|64)mi8",
1215 "BTS(16|32|64)mi8",
1216 "SAR(8|16|32|64)m1",
1217 "SAR(8|16|32|64)mi",
1218 "SHL(8|16|32|64)m1",
1219 "SHL(8|16|32|64)mi",
1220 "SHR(8|16|32|64)m1",
1221 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001222
1223def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1224 let Latency = 6;
1225 let NumMicroOps = 4;
1226 let ResourceCycles = [1,1,1,1];
1227}
Craig Topperf0d04262018-04-06 16:16:48 +00001228def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1229 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001230
1231def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001232 let Latency = 6;
1233 let NumMicroOps = 6;
1234 let ResourceCycles = [1,5];
1235}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001236def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001237
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001238def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1239 let Latency = 7;
1240 let NumMicroOps = 1;
1241 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001242}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001243def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001244 "VBROADCASTF128",
1245 "VBROADCASTI128",
1246 "VBROADCASTSDYrm",
1247 "VBROADCASTSSYrm",
1248 "VLDDQUYrm",
1249 "VMOVAPDYrm",
1250 "VMOVAPSYrm",
1251 "VMOVDDUPYrm",
1252 "VMOVDQAYrm",
1253 "VMOVDQUYrm",
1254 "VMOVNTDQAYrm",
1255 "VMOVSHDUPYrm",
1256 "VMOVSLDUPYrm",
1257 "VMOVUPDYrm",
1258 "VMOVUPSYrm",
1259 "VPBROADCASTDYrm",
1260 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001261
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001262def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001263 let Latency = 7;
1264 let NumMicroOps = 2;
1265 let ResourceCycles = [1,1];
1266}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001267def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001268
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001269def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1270 let Latency = 7;
1271 let NumMicroOps = 2;
1272 let ResourceCycles = [1,1];
1273}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001274def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1275 "(V?)PACKSSDWrm",
1276 "(V?)PACKSSWBrm",
1277 "(V?)PACKUSDWrm",
1278 "(V?)PACKUSWBrm",
1279 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001280 "VPBROADCASTBrm",
1281 "VPBROADCASTWrm",
1282 "VPERMILPDmi",
1283 "VPERMILPDrm",
1284 "VPERMILPSmi",
1285 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001286 "(V?)PSHUFBrm",
1287 "(V?)PSHUFDmi",
1288 "(V?)PSHUFHWmi",
1289 "(V?)PSHUFLWmi",
1290 "(V?)PUNPCKHBWrm",
1291 "(V?)PUNPCKHDQrm",
1292 "(V?)PUNPCKHQDQrm",
1293 "(V?)PUNPCKHWDrm",
1294 "(V?)PUNPCKLBWrm",
1295 "(V?)PUNPCKLDQrm",
1296 "(V?)PUNPCKLQDQrm",
1297 "(V?)PUNPCKLWDrm",
1298 "(V?)SHUFPDrmi",
1299 "(V?)SHUFPSrmi",
1300 "(V?)UNPCKHPDrm",
1301 "(V?)UNPCKHPSrm",
1302 "(V?)UNPCKLPDrm",
1303 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001304
Craig Topper58afb4e2018-03-22 21:10:07 +00001305def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001306 let Latency = 7;
1307 let NumMicroOps = 2;
1308 let ResourceCycles = [1,1];
1309}
Craig Topperfc179c62018-03-22 04:23:41 +00001310def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1311 "VCVTPD2PSYrr",
1312 "VCVTPH2PSYrr",
1313 "VCVTPS2PDYrr",
1314 "VCVTPS2PHYrr",
1315 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001316
1317def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1318 let Latency = 7;
1319 let NumMicroOps = 2;
1320 let ResourceCycles = [1,1];
1321}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001322def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1323 "(V?)PABSDrm",
1324 "(V?)PABSWrm",
1325 "(V?)PADDSBrm",
1326 "(V?)PADDSWrm",
1327 "(V?)PADDUSBrm",
1328 "(V?)PADDUSWrm",
1329 "(V?)PAVGBrm",
1330 "(V?)PAVGWrm",
1331 "(V?)PCMPEQBrm",
1332 "(V?)PCMPEQDrm",
1333 "(V?)PCMPEQQrm",
1334 "(V?)PCMPEQWrm",
1335 "(V?)PCMPGTBrm",
1336 "(V?)PCMPGTDrm",
1337 "(V?)PCMPGTWrm",
1338 "(V?)PMAXSBrm",
1339 "(V?)PMAXSDrm",
1340 "(V?)PMAXSWrm",
1341 "(V?)PMAXUBrm",
1342 "(V?)PMAXUDrm",
1343 "(V?)PMAXUWrm",
1344 "(V?)PMINSBrm",
1345 "(V?)PMINSDrm",
1346 "(V?)PMINSWrm",
1347 "(V?)PMINUBrm",
1348 "(V?)PMINUDrm",
1349 "(V?)PMINUWrm",
1350 "(V?)PSIGNBrm",
1351 "(V?)PSIGNDrm",
1352 "(V?)PSIGNWrm",
1353 "(V?)PSLLDrm",
1354 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001355 "VPSLLVDrm",
1356 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001357 "(V?)PSLLWrm",
1358 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001359 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001360 "(V?)PSRAWrm",
1361 "(V?)PSRLDrm",
1362 "(V?)PSRLQrm",
1363 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001364 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001365 "(V?)PSRLWrm",
1366 "(V?)PSUBSBrm",
1367 "(V?)PSUBSWrm",
1368 "(V?)PSUBUSBrm",
1369 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001370
1371def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1372 let Latency = 7;
1373 let NumMicroOps = 2;
1374 let ResourceCycles = [1,1];
1375}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001376def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001377 "(V?)INSERTI128rm",
1378 "(V?)MASKMOVPDrm",
1379 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001380 "(V?)PADDBrm",
1381 "(V?)PADDDrm",
1382 "(V?)PADDQrm",
1383 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001384 "(V?)PBLENDDrmi",
1385 "(V?)PMASKMOVDrm",
1386 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001387 "(V?)PSUBBrm",
1388 "(V?)PSUBDrm",
1389 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001390 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001391
1392def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1393 let Latency = 7;
1394 let NumMicroOps = 3;
1395 let ResourceCycles = [2,1];
1396}
Craig Topperfc179c62018-03-22 04:23:41 +00001397def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1398 "MMX_PACKSSWBirm",
1399 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001400
1401def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1402 let Latency = 7;
1403 let NumMicroOps = 3;
1404 let ResourceCycles = [1,2];
1405}
Craig Topperf4cd9082018-01-19 05:47:32 +00001406def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001407
1408def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1409 let Latency = 7;
1410 let NumMicroOps = 3;
1411 let ResourceCycles = [1,2];
1412}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001413def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1414 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001415
Craig Topper58afb4e2018-03-22 21:10:07 +00001416def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001417 let Latency = 7;
1418 let NumMicroOps = 3;
1419 let ResourceCycles = [1,1,1];
1420}
Craig Topperfc179c62018-03-22 04:23:41 +00001421def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1422 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001423
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001424def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001425 let Latency = 7;
1426 let NumMicroOps = 3;
1427 let ResourceCycles = [1,1,1];
1428}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001429def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001430
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001431def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001432 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001433 let NumMicroOps = 3;
1434 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001435}
Craig Topperfc179c62018-03-22 04:23:41 +00001436def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1437 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001438
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001439def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1440 let Latency = 7;
1441 let NumMicroOps = 5;
1442 let ResourceCycles = [1,1,1,2];
1443}
Craig Topperfc179c62018-03-22 04:23:41 +00001444def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1445 "ROL(8|16|32|64)mi",
1446 "ROR(8|16|32|64)m1",
1447 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001448
1449def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1450 let Latency = 7;
1451 let NumMicroOps = 5;
1452 let ResourceCycles = [1,1,1,2];
1453}
Craig Topper13a16502018-03-19 00:56:09 +00001454def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001455
1456def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1457 let Latency = 7;
1458 let NumMicroOps = 5;
1459 let ResourceCycles = [1,1,1,1,1];
1460}
Craig Topperfc179c62018-03-22 04:23:41 +00001461def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1462 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001463
1464def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001465 let Latency = 7;
1466 let NumMicroOps = 7;
1467 let ResourceCycles = [1,3,1,2];
1468}
Craig Topper2d451e72018-03-18 08:38:06 +00001469def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001470
Craig Topper58afb4e2018-03-22 21:10:07 +00001471def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001472 let Latency = 8;
1473 let NumMicroOps = 2;
1474 let ResourceCycles = [2];
1475}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001476def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1477 "(V?)ROUNDPS(Y?)r",
1478 "(V?)ROUNDSDr",
1479 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001480
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001481def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001482 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001483 let NumMicroOps = 2;
1484 let ResourceCycles = [1,1];
1485}
Craig Topperfc179c62018-03-22 04:23:41 +00001486def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1487 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001488
1489def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1490 let Latency = 8;
1491 let NumMicroOps = 2;
1492 let ResourceCycles = [1,1];
1493}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001494def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1495 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001496
1497def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001498 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001499 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001500 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001501}
Craig Topperf846e2d2018-04-19 05:34:05 +00001502def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001503
Craig Topperf846e2d2018-04-19 05:34:05 +00001504def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1505 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001506 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001507 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001508}
Craig Topperfc179c62018-03-22 04:23:41 +00001509def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001510
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001511def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1512 let Latency = 8;
1513 let NumMicroOps = 2;
1514 let ResourceCycles = [1,1];
1515}
Craig Topperfc179c62018-03-22 04:23:41 +00001516def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1517 "FCOM64m",
1518 "FCOMP32m",
1519 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001520 "VPACKSSDWYrm",
1521 "VPACKSSWBYrm",
1522 "VPACKUSDWYrm",
1523 "VPACKUSWBYrm",
1524 "VPALIGNRYrmi",
1525 "VPBLENDWYrmi",
1526 "VPBROADCASTBYrm",
1527 "VPBROADCASTWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001528 "VPERMILPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001529 "VPERMILPSYrm",
1530 "VPMOVSXBDYrm",
1531 "VPMOVSXBQYrm",
1532 "VPMOVSXWQYrm",
1533 "VPSHUFBYrm",
1534 "VPSHUFDYmi",
1535 "VPSHUFHWYmi",
1536 "VPSHUFLWYmi",
1537 "VPUNPCKHBWYrm",
1538 "VPUNPCKHDQYrm",
1539 "VPUNPCKHQDQYrm",
1540 "VPUNPCKHWDYrm",
1541 "VPUNPCKLBWYrm",
1542 "VPUNPCKLDQYrm",
1543 "VPUNPCKLQDQYrm",
Simon Pilgrimdd8eae12018-05-01 14:25:01 +00001544 "VPUNPCKLWDYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001545
1546def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1547 let Latency = 8;
1548 let NumMicroOps = 2;
1549 let ResourceCycles = [1,1];
1550}
Craig Topperfc179c62018-03-22 04:23:41 +00001551def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1552 "VPABSDYrm",
1553 "VPABSWYrm",
1554 "VPADDSBYrm",
1555 "VPADDSWYrm",
1556 "VPADDUSBYrm",
1557 "VPADDUSWYrm",
1558 "VPAVGBYrm",
1559 "VPAVGWYrm",
1560 "VPCMPEQBYrm",
1561 "VPCMPEQDYrm",
1562 "VPCMPEQQYrm",
1563 "VPCMPEQWYrm",
1564 "VPCMPGTBYrm",
1565 "VPCMPGTDYrm",
1566 "VPCMPGTWYrm",
1567 "VPMAXSBYrm",
1568 "VPMAXSDYrm",
1569 "VPMAXSWYrm",
1570 "VPMAXUBYrm",
1571 "VPMAXUDYrm",
1572 "VPMAXUWYrm",
1573 "VPMINSBYrm",
1574 "VPMINSDYrm",
1575 "VPMINSWYrm",
1576 "VPMINUBYrm",
1577 "VPMINUDYrm",
1578 "VPMINUWYrm",
1579 "VPSIGNBYrm",
1580 "VPSIGNDYrm",
1581 "VPSIGNWYrm",
1582 "VPSLLDYrm",
1583 "VPSLLQYrm",
1584 "VPSLLVDYrm",
1585 "VPSLLVQYrm",
1586 "VPSLLWYrm",
1587 "VPSRADYrm",
1588 "VPSRAVDYrm",
1589 "VPSRAWYrm",
1590 "VPSRLDYrm",
1591 "VPSRLQYrm",
1592 "VPSRLVDYrm",
1593 "VPSRLVQYrm",
1594 "VPSRLWYrm",
1595 "VPSUBSBYrm",
1596 "VPSUBSWYrm",
1597 "VPSUBUSBYrm",
1598 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001599
1600def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1601 let Latency = 8;
1602 let NumMicroOps = 2;
1603 let ResourceCycles = [1,1];
1604}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001605def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001606 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001607 "VPADDBYrm",
1608 "VPADDDYrm",
1609 "VPADDQYrm",
1610 "VPADDWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001611 "VPBLENDDYrmi",
1612 "VPMASKMOVDYrm",
1613 "VPMASKMOVQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001614 "VPSUBBYrm",
1615 "VPSUBDYrm",
1616 "VPSUBQYrm",
Simon Pilgrim57f2b182018-05-01 12:39:17 +00001617 "VPSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001618
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001619def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1620 let Latency = 8;
1621 let NumMicroOps = 4;
1622 let ResourceCycles = [1,2,1];
1623}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001624def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001625
1626def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1627 let Latency = 8;
1628 let NumMicroOps = 4;
1629 let ResourceCycles = [2,1,1];
1630}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001631def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001632
Craig Topper58afb4e2018-03-22 21:10:07 +00001633def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001634 let Latency = 8;
1635 let NumMicroOps = 4;
1636 let ResourceCycles = [1,1,1,1];
1637}
1638def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1639
1640def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1641 let Latency = 8;
1642 let NumMicroOps = 5;
1643 let ResourceCycles = [1,1,3];
1644}
Craig Topper13a16502018-03-19 00:56:09 +00001645def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001646
1647def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1648 let Latency = 8;
1649 let NumMicroOps = 5;
1650 let ResourceCycles = [1,1,1,2];
1651}
Craig Topperfc179c62018-03-22 04:23:41 +00001652def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1653 "RCL(8|16|32|64)mi",
1654 "RCR(8|16|32|64)m1",
1655 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001656
1657def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1658 let Latency = 8;
1659 let NumMicroOps = 6;
1660 let ResourceCycles = [1,1,1,3];
1661}
Craig Topperfc179c62018-03-22 04:23:41 +00001662def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1663 "SAR(8|16|32|64)mCL",
1664 "SHL(8|16|32|64)mCL",
1665 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001666
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001667def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1668 let Latency = 8;
1669 let NumMicroOps = 6;
1670 let ResourceCycles = [1,1,1,2,1];
1671}
Craig Topper9f834812018-04-01 21:54:24 +00001672def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001673 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001674 "SBB(8|16|32|64)mi")>;
1675def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1676 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001677
1678def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1679 let Latency = 9;
1680 let NumMicroOps = 2;
1681 let ResourceCycles = [1,1];
1682}
Craig Topperfc179c62018-03-22 04:23:41 +00001683def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1684 "MMX_PMADDUBSWrm",
1685 "MMX_PMADDWDirm",
1686 "MMX_PMULHRSWrm",
1687 "MMX_PMULHUWirm",
1688 "MMX_PMULHWirm",
1689 "MMX_PMULLWirm",
1690 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001691 "VTESTPDYrm",
1692 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001693
1694def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1695 let Latency = 9;
1696 let NumMicroOps = 2;
1697 let ResourceCycles = [1,1];
1698}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001699def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001700 "VPMOVSXBWYrm",
1701 "VPMOVSXDQYrm",
1702 "VPMOVSXWDYrm",
1703 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001704 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001705
1706def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1707 let Latency = 9;
1708 let NumMicroOps = 2;
1709 let ResourceCycles = [1,1];
1710}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001711def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1712 "(V?)ADDSSrm",
1713 "(V?)CMPSDrm",
1714 "(V?)CMPSSrm",
1715 "(V?)MAX(C?)SDrm",
1716 "(V?)MAX(C?)SSrm",
1717 "(V?)MIN(C?)SDrm",
1718 "(V?)MIN(C?)SSrm",
1719 "(V?)MULSDrm",
1720 "(V?)MULSSrm",
1721 "(V?)SUBSDrm",
1722 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001723
Craig Topper58afb4e2018-03-22 21:10:07 +00001724def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001725 let Latency = 9;
1726 let NumMicroOps = 2;
1727 let ResourceCycles = [1,1];
1728}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001729def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001730 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001731 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001732 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001733
Craig Topper58afb4e2018-03-22 21:10:07 +00001734def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001735 let Latency = 9;
1736 let NumMicroOps = 3;
1737 let ResourceCycles = [1,2];
1738}
Craig Topperfc179c62018-03-22 04:23:41 +00001739def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001740
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001741def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1742 let Latency = 9;
1743 let NumMicroOps = 3;
1744 let ResourceCycles = [1,1,1];
1745}
Craig Topperfc179c62018-03-22 04:23:41 +00001746def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001747
1748def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1749 let Latency = 9;
1750 let NumMicroOps = 3;
1751 let ResourceCycles = [1,1,1];
1752}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001753def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001754
1755def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001756 let Latency = 9;
1757 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001758 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001759}
Craig Topperfc179c62018-03-22 04:23:41 +00001760def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1761 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001762
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001763def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1764 let Latency = 9;
1765 let NumMicroOps = 4;
1766 let ResourceCycles = [2,1,1];
1767}
Craig Topperfc179c62018-03-22 04:23:41 +00001768def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1769 "(V?)PHADDWrm",
1770 "(V?)PHSUBDrm",
1771 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001772
1773def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1774 let Latency = 9;
1775 let NumMicroOps = 4;
1776 let ResourceCycles = [1,1,1,1];
1777}
Craig Topperfc179c62018-03-22 04:23:41 +00001778def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1779 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001780
1781def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1782 let Latency = 9;
1783 let NumMicroOps = 5;
1784 let ResourceCycles = [1,2,1,1];
1785}
Craig Topperfc179c62018-03-22 04:23:41 +00001786def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1787 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001788
1789def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1790 let Latency = 10;
1791 let NumMicroOps = 2;
1792 let ResourceCycles = [1,1];
1793}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001794def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001795 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001796
1797def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1798 let Latency = 10;
1799 let NumMicroOps = 2;
1800 let ResourceCycles = [1,1];
1801}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001802def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1803 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001804 "VPCMPGTQYrm",
1805 "VPERM2F128rm",
1806 "VPERM2I128rm",
1807 "VPERMDYrm",
1808 "VPERMPDYmi",
1809 "VPERMPSYrm",
1810 "VPERMQYmi",
1811 "VPMOVZXBDYrm",
1812 "VPMOVZXBQYrm",
1813 "VPMOVZXBWYrm",
1814 "VPMOVZXDQYrm",
1815 "VPMOVZXWQYrm",
1816 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001817
1818def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1819 let Latency = 10;
1820 let NumMicroOps = 2;
1821 let ResourceCycles = [1,1];
1822}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001823def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1824 "(V?)ADDPSrm",
1825 "(V?)ADDSUBPDrm",
1826 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001827 "(V?)CVTDQ2PSrm",
1828 "(V?)CVTPH2PSYrm",
1829 "(V?)CVTPS2DQrm",
1830 "(V?)CVTSS2SDrm",
1831 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001832 "(V?)MULPDrm",
1833 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001834 "(V?)PMADDUBSWrm",
1835 "(V?)PMADDWDrm",
1836 "(V?)PMULDQrm",
1837 "(V?)PMULHRSWrm",
1838 "(V?)PMULHUWrm",
1839 "(V?)PMULHWrm",
1840 "(V?)PMULLWrm",
1841 "(V?)PMULUDQrm",
1842 "(V?)SUBPDrm",
1843 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001844
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001845def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1846 let Latency = 10;
1847 let NumMicroOps = 3;
1848 let ResourceCycles = [1,1,1];
1849}
Craig Topperfc179c62018-03-22 04:23:41 +00001850def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1851 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001852
Craig Topper58afb4e2018-03-22 21:10:07 +00001853def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001854 let Latency = 10;
1855 let NumMicroOps = 3;
1856 let ResourceCycles = [1,1,1];
1857}
Craig Topperfc179c62018-03-22 04:23:41 +00001858def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001859
1860def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001861 let Latency = 10;
1862 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001863 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001864}
Craig Topperfc179c62018-03-22 04:23:41 +00001865def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1866 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001867
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001868def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1869 let Latency = 10;
1870 let NumMicroOps = 4;
1871 let ResourceCycles = [2,1,1];
1872}
Craig Topperfc179c62018-03-22 04:23:41 +00001873def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1874 "VPHADDWYrm",
1875 "VPHSUBDYrm",
1876 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001877
1878def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001879 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001880 let NumMicroOps = 4;
1881 let ResourceCycles = [1,1,1,1];
1882}
Craig Topperf846e2d2018-04-19 05:34:05 +00001883def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001884
1885def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1886 let Latency = 10;
1887 let NumMicroOps = 8;
1888 let ResourceCycles = [1,1,1,1,1,3];
1889}
Craig Topper13a16502018-03-19 00:56:09 +00001890def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001891
1892def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001893 let Latency = 10;
1894 let NumMicroOps = 10;
1895 let ResourceCycles = [9,1];
1896}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001897def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001898
Craig Topper8104f262018-04-02 05:33:28 +00001899def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001900 let Latency = 11;
1901 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001902 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001903}
Craig Topper8104f262018-04-02 05:33:28 +00001904def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001905 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001906
Craig Topper8104f262018-04-02 05:33:28 +00001907def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1908 let Latency = 11;
1909 let NumMicroOps = 1;
1910 let ResourceCycles = [1,5];
1911}
1912def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1913
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001914def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001915 let Latency = 11;
1916 let NumMicroOps = 2;
1917 let ResourceCycles = [1,1];
1918}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001919def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001920 "VRCPPSYm",
1921 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001922
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001923def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1924 let Latency = 11;
1925 let NumMicroOps = 2;
1926 let ResourceCycles = [1,1];
1927}
Craig Topperfc179c62018-03-22 04:23:41 +00001928def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1929 "VADDPSYrm",
1930 "VADDSUBPDYrm",
1931 "VADDSUBPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001932 "VCVTDQ2PSYrm",
1933 "VCVTPS2DQYrm",
1934 "VCVTPS2PDYrm",
1935 "VCVTTPS2DQYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001936 "VMULPDYrm",
1937 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001938 "VPMADDUBSWYrm",
1939 "VPMADDWDYrm",
1940 "VPMULDQYrm",
1941 "VPMULHRSWYrm",
1942 "VPMULHUWYrm",
1943 "VPMULHWYrm",
1944 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001945 "VPMULUDQYrm",
1946 "VSUBPDYrm",
1947 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001948
1949def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1950 let Latency = 11;
1951 let NumMicroOps = 3;
1952 let ResourceCycles = [2,1];
1953}
Craig Topperfc179c62018-03-22 04:23:41 +00001954def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1955 "FICOM32m",
1956 "FICOMP16m",
1957 "FICOMP32m",
1958 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001959
1960def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1961 let Latency = 11;
1962 let NumMicroOps = 3;
1963 let ResourceCycles = [1,1,1];
1964}
Craig Topperfc179c62018-03-22 04:23:41 +00001965def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001966
Craig Topper58afb4e2018-03-22 21:10:07 +00001967def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001968 let Latency = 11;
1969 let NumMicroOps = 3;
1970 let ResourceCycles = [1,1,1];
1971}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001972def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1973 "(V?)CVTSD2SIrm",
1974 "(V?)CVTSS2SI64rm",
1975 "(V?)CVTSS2SIrm",
1976 "(V?)CVTTSD2SI64rm",
1977 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001978 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001979 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001980
Craig Topper58afb4e2018-03-22 21:10:07 +00001981def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001982 let Latency = 11;
1983 let NumMicroOps = 3;
1984 let ResourceCycles = [1,1,1];
1985}
Craig Topperfc179c62018-03-22 04:23:41 +00001986def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
1987 "CVTPD2PSrm",
1988 "CVTTPD2DQrm",
1989 "MMX_CVTPD2PIirm",
1990 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001991
1992def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1993 let Latency = 11;
1994 let NumMicroOps = 6;
1995 let ResourceCycles = [1,1,1,2,1];
1996}
Craig Topperfc179c62018-03-22 04:23:41 +00001997def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
1998 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001999
2000def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002001 let Latency = 11;
2002 let NumMicroOps = 7;
2003 let ResourceCycles = [2,3,2];
2004}
Craig Topperfc179c62018-03-22 04:23:41 +00002005def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2006 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002007
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002008def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002009 let Latency = 11;
2010 let NumMicroOps = 9;
2011 let ResourceCycles = [1,5,1,2];
2012}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002013def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002014
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002015def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002016 let Latency = 11;
2017 let NumMicroOps = 11;
2018 let ResourceCycles = [2,9];
2019}
Craig Topperfc179c62018-03-22 04:23:41 +00002020def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002021
Craig Topper8104f262018-04-02 05:33:28 +00002022def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002023 let Latency = 12;
2024 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002025 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002026}
Craig Topper8104f262018-04-02 05:33:28 +00002027def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002028 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002029
Craig Topper8104f262018-04-02 05:33:28 +00002030def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2031 let Latency = 12;
2032 let NumMicroOps = 1;
2033 let ResourceCycles = [1,6];
2034}
2035def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2036
Craig Topper58afb4e2018-03-22 21:10:07 +00002037def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002038 let Latency = 12;
2039 let NumMicroOps = 4;
2040 let ResourceCycles = [1,1,1,1];
2041}
2042def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2043
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002044def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002045 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002046 let NumMicroOps = 3;
2047 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002048}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002049def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002050
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002051def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2052 let Latency = 13;
2053 let NumMicroOps = 3;
2054 let ResourceCycles = [1,1,1];
2055}
2056def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2057
Craig Topper58afb4e2018-03-22 21:10:07 +00002058def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002059 let Latency = 13;
2060 let NumMicroOps = 4;
2061 let ResourceCycles = [1,3];
2062}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002063def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002064
Craig Topper8104f262018-04-02 05:33:28 +00002065def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002066 let Latency = 14;
2067 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002068 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002069}
Craig Topper8104f262018-04-02 05:33:28 +00002070def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002071 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002072
Craig Topper8104f262018-04-02 05:33:28 +00002073def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2074 let Latency = 14;
2075 let NumMicroOps = 1;
2076 let ResourceCycles = [1,5];
2077}
2078def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2079
Craig Topper58afb4e2018-03-22 21:10:07 +00002080def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002081 let Latency = 14;
2082 let NumMicroOps = 3;
2083 let ResourceCycles = [1,2];
2084}
Craig Topperfc179c62018-03-22 04:23:41 +00002085def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2086def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2087def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2088def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002089
2090def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2091 let Latency = 14;
2092 let NumMicroOps = 3;
2093 let ResourceCycles = [1,1,1];
2094}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002095def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002096
2097def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002098 let Latency = 14;
2099 let NumMicroOps = 10;
2100 let ResourceCycles = [2,4,1,3];
2101}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002102def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002103
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002104def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002105 let Latency = 15;
2106 let NumMicroOps = 1;
2107 let ResourceCycles = [1];
2108}
Craig Topperfc179c62018-03-22 04:23:41 +00002109def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2110 "DIVR_FST0r",
2111 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002112
Craig Topper58afb4e2018-03-22 21:10:07 +00002113def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002114 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002115 let NumMicroOps = 3;
2116 let ResourceCycles = [1,2];
2117}
Craig Topper40d3b322018-03-22 21:55:20 +00002118def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2119 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002120
Craig Topperd25f1ac2018-03-20 23:39:48 +00002121def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2122 let Latency = 17;
2123 let NumMicroOps = 3;
2124 let ResourceCycles = [1,2];
2125}
2126def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2127
Craig Topper58afb4e2018-03-22 21:10:07 +00002128def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002129 let Latency = 15;
2130 let NumMicroOps = 4;
2131 let ResourceCycles = [1,1,2];
2132}
Craig Topperfc179c62018-03-22 04:23:41 +00002133def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002134
2135def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2136 let Latency = 15;
2137 let NumMicroOps = 10;
2138 let ResourceCycles = [1,1,1,5,1,1];
2139}
Craig Topper13a16502018-03-19 00:56:09 +00002140def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002141
Craig Topper8104f262018-04-02 05:33:28 +00002142def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002143 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002144 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002145 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002146}
Craig Topperfc179c62018-03-22 04:23:41 +00002147def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002148
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002149def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2150 let Latency = 16;
2151 let NumMicroOps = 14;
2152 let ResourceCycles = [1,1,1,4,2,5];
2153}
2154def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2155
2156def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002157 let Latency = 16;
2158 let NumMicroOps = 16;
2159 let ResourceCycles = [16];
2160}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002161def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002162
Craig Topper8104f262018-04-02 05:33:28 +00002163def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002164 let Latency = 17;
2165 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002166 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002167}
Craig Topper8104f262018-04-02 05:33:28 +00002168def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2169
2170def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2171 let Latency = 17;
2172 let NumMicroOps = 2;
2173 let ResourceCycles = [1,1,3];
2174}
2175def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002176
2177def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002178 let Latency = 17;
2179 let NumMicroOps = 15;
2180 let ResourceCycles = [2,1,2,4,2,4];
2181}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002182def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002183
Craig Topper8104f262018-04-02 05:33:28 +00002184def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002185 let Latency = 18;
2186 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002187 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002188}
Craig Topper8104f262018-04-02 05:33:28 +00002189def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002190 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002191
Craig Topper8104f262018-04-02 05:33:28 +00002192def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2193 let Latency = 18;
2194 let NumMicroOps = 1;
2195 let ResourceCycles = [1,12];
2196}
2197def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2198
2199def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002200 let Latency = 18;
2201 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002202 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002203}
Craig Topper8104f262018-04-02 05:33:28 +00002204def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2205
2206def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2207 let Latency = 18;
2208 let NumMicroOps = 2;
2209 let ResourceCycles = [1,1,3];
2210}
2211def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002212
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002213def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002214 let Latency = 18;
2215 let NumMicroOps = 8;
2216 let ResourceCycles = [1,1,1,5];
2217}
Craig Topperfc179c62018-03-22 04:23:41 +00002218def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002219
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002220def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002221 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002222 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002223 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002224}
Craig Topper13a16502018-03-19 00:56:09 +00002225def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002226
Craig Topper8104f262018-04-02 05:33:28 +00002227def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002228 let Latency = 19;
2229 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002230 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002231}
Craig Topper8104f262018-04-02 05:33:28 +00002232def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2233
2234def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2235 let Latency = 19;
2236 let NumMicroOps = 2;
2237 let ResourceCycles = [1,1,6];
2238}
2239def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002240
Craig Topper58afb4e2018-03-22 21:10:07 +00002241def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002242 let Latency = 19;
2243 let NumMicroOps = 5;
2244 let ResourceCycles = [1,1,3];
2245}
Craig Topperfc179c62018-03-22 04:23:41 +00002246def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002247
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002248def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002249 let Latency = 20;
2250 let NumMicroOps = 1;
2251 let ResourceCycles = [1];
2252}
Craig Topperfc179c62018-03-22 04:23:41 +00002253def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2254 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002255 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002256
Craig Topper8104f262018-04-02 05:33:28 +00002257def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002258 let Latency = 20;
2259 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002260 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002261}
Craig Topperfc179c62018-03-22 04:23:41 +00002262def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002263
Craig Topper58afb4e2018-03-22 21:10:07 +00002264def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002265 let Latency = 20;
2266 let NumMicroOps = 5;
2267 let ResourceCycles = [1,1,3];
2268}
2269def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2270
2271def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2272 let Latency = 20;
2273 let NumMicroOps = 8;
2274 let ResourceCycles = [1,1,1,1,1,1,2];
2275}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002276def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002277
2278def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002279 let Latency = 20;
2280 let NumMicroOps = 10;
2281 let ResourceCycles = [1,2,7];
2282}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002283def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002284
Craig Topper8104f262018-04-02 05:33:28 +00002285def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002286 let Latency = 21;
2287 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002288 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002289}
2290def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2291
2292def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2293 let Latency = 22;
2294 let NumMicroOps = 2;
2295 let ResourceCycles = [1,1];
2296}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002297def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002298
2299def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2300 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002301 let NumMicroOps = 5;
2302 let ResourceCycles = [1,2,1,1];
2303}
Craig Topper17a31182017-12-16 18:35:29 +00002304def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2305 VGATHERDPDrm,
2306 VGATHERQPDrm,
2307 VGATHERQPSrm,
2308 VPGATHERDDrm,
2309 VPGATHERDQrm,
2310 VPGATHERQDrm,
2311 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002312
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002313def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2314 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002315 let NumMicroOps = 5;
2316 let ResourceCycles = [1,2,1,1];
2317}
Craig Topper17a31182017-12-16 18:35:29 +00002318def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2319 VGATHERQPDYrm,
2320 VGATHERQPSYrm,
2321 VPGATHERDDYrm,
2322 VPGATHERDQYrm,
2323 VPGATHERQDYrm,
2324 VPGATHERQQYrm,
2325 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002326
Craig Topper8104f262018-04-02 05:33:28 +00002327def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002328 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002329 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002330 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002331}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002332def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002333
2334def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2335 let Latency = 23;
2336 let NumMicroOps = 19;
2337 let ResourceCycles = [2,1,4,1,1,4,6];
2338}
2339def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2340
Craig Topper8104f262018-04-02 05:33:28 +00002341def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002342 let Latency = 24;
2343 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002344 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002345}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002346def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002347
Craig Topper8104f262018-04-02 05:33:28 +00002348def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002349 let Latency = 25;
2350 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002351 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002352}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002353def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002354
2355def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2356 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002357 let NumMicroOps = 3;
2358 let ResourceCycles = [1,1,1];
2359}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002360def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002361
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002362def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2363 let Latency = 27;
2364 let NumMicroOps = 2;
2365 let ResourceCycles = [1,1];
2366}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002367def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002368
2369def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2370 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002371 let NumMicroOps = 8;
2372 let ResourceCycles = [2,4,1,1];
2373}
Craig Topper13a16502018-03-19 00:56:09 +00002374def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002375
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002376def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002377 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002378 let NumMicroOps = 3;
2379 let ResourceCycles = [1,1,1];
2380}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002381def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002382
2383def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2384 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002385 let NumMicroOps = 23;
2386 let ResourceCycles = [1,5,3,4,10];
2387}
Craig Topperfc179c62018-03-22 04:23:41 +00002388def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2389 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002390
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002391def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2392 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002393 let NumMicroOps = 23;
2394 let ResourceCycles = [1,5,2,1,4,10];
2395}
Craig Topperfc179c62018-03-22 04:23:41 +00002396def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2397 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002398
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002399def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2400 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002401 let NumMicroOps = 31;
2402 let ResourceCycles = [1,8,1,21];
2403}
Craig Topper391c6f92017-12-10 01:24:08 +00002404def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002405
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002406def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2407 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002408 let NumMicroOps = 18;
2409 let ResourceCycles = [1,1,2,3,1,1,1,8];
2410}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002411def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002412
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002413def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2414 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002415 let NumMicroOps = 39;
2416 let ResourceCycles = [1,10,1,1,26];
2417}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002418def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002419
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002420def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002421 let Latency = 42;
2422 let NumMicroOps = 22;
2423 let ResourceCycles = [2,20];
2424}
Craig Topper2d451e72018-03-18 08:38:06 +00002425def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002426
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002427def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2428 let Latency = 42;
2429 let NumMicroOps = 40;
2430 let ResourceCycles = [1,11,1,1,26];
2431}
Craig Topper391c6f92017-12-10 01:24:08 +00002432def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002433
2434def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2435 let Latency = 46;
2436 let NumMicroOps = 44;
2437 let ResourceCycles = [1,11,1,1,30];
2438}
2439def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2440
2441def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2442 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002443 let NumMicroOps = 64;
2444 let ResourceCycles = [2,8,5,10,39];
2445}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002446def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002447
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002448def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2449 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002450 let NumMicroOps = 88;
2451 let ResourceCycles = [4,4,31,1,2,1,45];
2452}
Craig Topper2d451e72018-03-18 08:38:06 +00002453def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002454
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002455def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2456 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002457 let NumMicroOps = 90;
2458 let ResourceCycles = [4,2,33,1,2,1,47];
2459}
Craig Topper2d451e72018-03-18 08:38:06 +00002460def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002461
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002462def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002463 let Latency = 75;
2464 let NumMicroOps = 15;
2465 let ResourceCycles = [6,3,6];
2466}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002467def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002468
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002469def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002470 let Latency = 76;
2471 let NumMicroOps = 32;
2472 let ResourceCycles = [7,2,8,3,1,11];
2473}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002474def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002475
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002476def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002477 let Latency = 102;
2478 let NumMicroOps = 66;
2479 let ResourceCycles = [4,2,4,8,14,34];
2480}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002481def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002482
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002483def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2484 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002485 let NumMicroOps = 100;
2486 let ResourceCycles = [9,1,11,16,1,11,21,30];
2487}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002488def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002489
2490} // SchedModel