blob: b76369da99cfc85b74cab27cb6f8f2f9d0ab209f [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 Pilgrime93fd5f2018-05-02 09:18:49 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort01], 4, [1], 1, 6>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFAddY, [SKLPort01], 4, [1], 1, 7>; // Floating point add/sub (YMM/ZMM).
Simon Pilgrim21caf012018-05-01 18:22:53 +0000156defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
157defm : SKLWriteResPair<WriteFCmpY, [SKLPort01], 4, [1], 1, 7>; // Floating point compare (YMM/ZMM).
158defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim86d9f232018-05-02 14:25:32 +0000159defm : SKLWriteResPair<WriteFMul, [SKLPort01], 4, [1], 1, 6>; // Floating point multiplication.
160defm : SKLWriteResPair<WriteFMulY, [SKLPort01], 4, [1], 1, 7>; // Floating point multiplication (YMM/ZMM).
Simon Pilgrim21caf012018-05-01 18:22:53 +0000161defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12, [1], 1, 5>; // 10-14 cycles. // Floating point division.
162defm : SKLWriteResPair<WriteFDivY, [SKLPort0], 12, [1], 1, 7>; // 10-14 cycles. // Floating point division (YMM/ZMM).
Simon Pilgrimc7088682018-05-01 18:06:07 +0000163defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15, [1], 1, 5>; // Floating point square root.
164defm : SKLWriteResPair<WriteFSqrtY, [SKLPort0], 15, [1], 1, 7>; // Floating point square root (YMM/ZMM).
165defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate.
166defm : SKLWriteResPair<WriteFRcpY, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate (YMM/ZMM).
167defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal square root estimate.
168defm : SKLWriteResPair<WriteFRsqrtY,[SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal square root estimate (YMM/ZMM).
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000169defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4, [1], 1, 6>; // Fused Multiply Add.
170defm : SKLWriteResPair<WriteFMAS, [SKLPort01], 4, [1], 1, 5>; // Fused Multiply Add (Scalar).
171defm : SKLWriteResPair<WriteFMAY, [SKLPort01], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000172defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000173defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
174defm : SKLWriteResPair<WriteFLogicY, [SKLPort015], 1, [1], 1, 7>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000175defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1, [1], 1, 6>; // Floating point vector shuffles.
Simon Pilgrimdd8eae12018-05-01 14:25:01 +0000176defm : SKLWriteResPair<WriteFShuffleY, [SKLPort5], 1, [1], 1, 7>; // Floating point vector shuffles (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000177defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1, [1], 1, 6>; // Floating point vector shuffles.
178defm : SKLWriteResPair<WriteFVarShuffleY, [SKLPort5], 1, [1], 1, 7>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000179defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000180defm : SKLWriteResPair<WriteFBlendY, [SKLPort015], 1, [1], 1, 7>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000181defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000182defm : SKLWriteResPair<WriteFVarBlendY,[SKLPort015], 2, [2], 2, 7>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000183
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000184def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
185 let Latency = 6;
186 let NumMicroOps = 4;
187 let ResourceCycles = [1,1,1,1];
188}
189
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190// FMA Scheduling helper class.
191// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
192
193// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000194def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
195def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
196def : WriteRes<WriteVecMove, [SKLPort015]>;
197
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000198defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000199defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim57f2b182018-05-01 12:39:17 +0000200defm : SKLWriteResPair<WriteVecLogicY,[SKLPort015], 1, [1], 1, 7>; // Vector integer and/or/xor (YMM/ZMM).
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000201defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
202defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000203defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim819f2182018-05-02 17:58:50 +0000204defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1, [1], 1, 5>; // Vector shuffles.
205defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1, [1], 1, 5>; // Vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000206defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000207defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000208defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000209defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000210defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000211
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000212// Vector insert/extract operations.
213def : WriteRes<WriteVecInsert, [SKLPort5]> {
214 let Latency = 2;
215 let NumMicroOps = 2;
216 let ResourceCycles = [2];
217}
218def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
219 let Latency = 6;
220 let NumMicroOps = 2;
221}
Simon Pilgrim819f2182018-05-02 17:58:50 +0000222def: InstRW<[WriteVecInsertLd], (instregex "(V?)MOV(H|L)(PD|PS)rm")>;
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000223
224def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
225 let Latency = 3;
226 let NumMicroOps = 2;
227}
228def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
229 let Latency = 2;
230 let NumMicroOps = 3;
231}
232
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000233// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000234defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
235defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
236defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000237
238// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000239
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000240// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000241def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
242 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000243 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000244 let ResourceCycles = [3];
245}
246def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000247 let Latency = 16;
248 let NumMicroOps = 4;
249 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000250}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000251
252// Packed Compare Explicit Length Strings, Return Mask
253def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
254 let Latency = 19;
255 let NumMicroOps = 9;
256 let ResourceCycles = [4,3,1,1];
257}
258def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
259 let Latency = 25;
260 let NumMicroOps = 10;
261 let ResourceCycles = [4,3,1,1,1];
262}
263
264// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000266 let Latency = 10;
267 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000268 let ResourceCycles = [3];
269}
270def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000271 let Latency = 16;
272 let NumMicroOps = 4;
273 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000274}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000275
276// Packed Compare Explicit Length Strings, Return Index
277def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
278 let Latency = 18;
279 let NumMicroOps = 8;
280 let ResourceCycles = [4,3,1];
281}
282def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
283 let Latency = 24;
284 let NumMicroOps = 9;
285 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000286}
287
Simon Pilgrima2f26782018-03-27 20:38:54 +0000288// MOVMSK Instructions.
289def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
290def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
291def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
292
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000293// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000294def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
295 let Latency = 4;
296 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000297 let ResourceCycles = [1];
298}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000299def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
300 let Latency = 10;
301 let NumMicroOps = 2;
302 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000303}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000304
305def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
306 let Latency = 8;
307 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000308 let ResourceCycles = [2];
309}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000310def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000311 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000312 let NumMicroOps = 3;
313 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000314}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000315
316def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
317 let Latency = 20;
318 let NumMicroOps = 11;
319 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000320}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000321def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
322 let Latency = 25;
323 let NumMicroOps = 11;
324 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000325}
326
327// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000328def : WriteRes<WriteCLMul, [SKLPort5]> {
329 let Latency = 6;
330 let NumMicroOps = 1;
331 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000332}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000333def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
334 let Latency = 12;
335 let NumMicroOps = 2;
336 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000337}
338
339// Catch-all for expensive system instructions.
340def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
341
342// AVX2.
Simon Pilgrim819f2182018-05-02 17:58:50 +0000343defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector shuffles.
344defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector variable shuffles.
345defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector shuffles.
346defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000347defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000348
349// Old microcoded instructions that nobody use.
350def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
351
352// Fence instructions.
353def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
354
Craig Topper05242bf2018-04-21 18:07:36 +0000355// Load/store MXCSR.
356def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
357def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
358
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000359// Nop, not very useful expect it provides a model for nops!
360def : WriteRes<WriteNop, []>;
361
362////////////////////////////////////////////////////////////////////////////////
363// Horizontal add/sub instructions.
364////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000365
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000366defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
367defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000368defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000369
370// Remaining instrs.
371
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000372def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000373 let Latency = 1;
374 let NumMicroOps = 1;
375 let ResourceCycles = [1];
376}
Craig Topperfc179c62018-03-22 04:23:41 +0000377def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
378 "MMX_PADDSWirr",
379 "MMX_PADDUSBirr",
380 "MMX_PADDUSWirr",
381 "MMX_PAVGBirr",
382 "MMX_PAVGWirr",
383 "MMX_PCMPEQBirr",
384 "MMX_PCMPEQDirr",
385 "MMX_PCMPEQWirr",
386 "MMX_PCMPGTBirr",
387 "MMX_PCMPGTDirr",
388 "MMX_PCMPGTWirr",
389 "MMX_PMAXSWirr",
390 "MMX_PMAXUBirr",
391 "MMX_PMINSWirr",
392 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000393 "MMX_PSUBSBirr",
394 "MMX_PSUBSWirr",
395 "MMX_PSUBUSBirr",
396 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000397
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000398def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000399 let Latency = 1;
400 let NumMicroOps = 1;
401 let ResourceCycles = [1];
402}
Craig Topperfc179c62018-03-22 04:23:41 +0000403def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
404 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000405 "MMX_MOVD64rr",
406 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000407 "UCOM_FPr",
408 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000409 "(V?)MOV64toPQIrr",
Simon Pilgrimfc0c26f2018-05-01 11:05:42 +0000410 "(V?)MOVDI2PDIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000411
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000412def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000413 let Latency = 1;
414 let NumMicroOps = 1;
415 let ResourceCycles = [1];
416}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000417def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000418
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000419def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000420 let Latency = 1;
421 let NumMicroOps = 1;
422 let ResourceCycles = [1];
423}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000424def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
425 "(V?)PABSD(Y?)rr",
426 "(V?)PABSW(Y?)rr",
427 "(V?)PADDSB(Y?)rr",
428 "(V?)PADDSW(Y?)rr",
429 "(V?)PADDUSB(Y?)rr",
430 "(V?)PADDUSW(Y?)rr",
431 "(V?)PAVGB(Y?)rr",
432 "(V?)PAVGW(Y?)rr",
433 "(V?)PCMPEQB(Y?)rr",
434 "(V?)PCMPEQD(Y?)rr",
435 "(V?)PCMPEQQ(Y?)rr",
436 "(V?)PCMPEQW(Y?)rr",
437 "(V?)PCMPGTB(Y?)rr",
438 "(V?)PCMPGTD(Y?)rr",
439 "(V?)PCMPGTW(Y?)rr",
440 "(V?)PMAXSB(Y?)rr",
441 "(V?)PMAXSD(Y?)rr",
442 "(V?)PMAXSW(Y?)rr",
443 "(V?)PMAXUB(Y?)rr",
444 "(V?)PMAXUD(Y?)rr",
445 "(V?)PMAXUW(Y?)rr",
446 "(V?)PMINSB(Y?)rr",
447 "(V?)PMINSD(Y?)rr",
448 "(V?)PMINSW(Y?)rr",
449 "(V?)PMINUB(Y?)rr",
450 "(V?)PMINUD(Y?)rr",
451 "(V?)PMINUW(Y?)rr",
452 "(V?)PSIGNB(Y?)rr",
453 "(V?)PSIGND(Y?)rr",
454 "(V?)PSIGNW(Y?)rr",
455 "(V?)PSLLD(Y?)ri",
456 "(V?)PSLLQ(Y?)ri",
457 "VPSLLVD(Y?)rr",
458 "VPSLLVQ(Y?)rr",
459 "(V?)PSLLW(Y?)ri",
460 "(V?)PSRAD(Y?)ri",
461 "VPSRAVD(Y?)rr",
462 "(V?)PSRAW(Y?)ri",
463 "(V?)PSRLD(Y?)ri",
464 "(V?)PSRLQ(Y?)ri",
465 "VPSRLVD(Y?)rr",
466 "VPSRLVQ(Y?)rr",
467 "(V?)PSRLW(Y?)ri",
468 "(V?)PSUBSB(Y?)rr",
469 "(V?)PSUBSW(Y?)rr",
470 "(V?)PSUBUSB(Y?)rr",
471 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000472
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000473def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000474 let Latency = 1;
475 let NumMicroOps = 1;
476 let ResourceCycles = [1];
477}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000478def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
479def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000480 "MMX_PABS(B|D|W)rr",
481 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000482 "MMX_PANDNirr",
483 "MMX_PANDirr",
484 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000485 "MMX_PSIGN(B|D|W)rr",
486 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000487 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000488
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000489def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000490 let Latency = 1;
491 let NumMicroOps = 1;
492 let ResourceCycles = [1];
493}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000494def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000495def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
496 "ADC(16|32|64)i",
497 "ADC(8|16|32|64)rr",
498 "ADCX(32|64)rr",
499 "ADOX(32|64)rr",
500 "BT(16|32|64)ri8",
501 "BT(16|32|64)rr",
502 "BTC(16|32|64)ri8",
503 "BTC(16|32|64)rr",
504 "BTR(16|32|64)ri8",
505 "BTR(16|32|64)rr",
506 "BTS(16|32|64)ri8",
507 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000508 "SBB(16|32|64)ri",
509 "SBB(16|32|64)i",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000510 "SBB(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000511
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000512def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
513 let Latency = 1;
514 let NumMicroOps = 1;
515 let ResourceCycles = [1];
516}
Craig Topperfc179c62018-03-22 04:23:41 +0000517def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
518 "BLSI(32|64)rr",
519 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000520 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000521
522def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
523 let Latency = 1;
524 let NumMicroOps = 1;
525 let ResourceCycles = [1];
526}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000527def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000528 "(V?)PADDD(Y?)rr",
529 "(V?)PADDQ(Y?)rr",
530 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000531 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000532 "(V?)PSUBB(Y?)rr",
533 "(V?)PSUBD(Y?)rr",
534 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000535 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000536
537def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
538 let Latency = 1;
539 let NumMicroOps = 1;
540 let ResourceCycles = [1];
541}
Craig Topperfbe31322018-04-05 21:56:19 +0000542def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000543def: InstRW<[SKLWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000544def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000545 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000546 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000547 "SGDT64m",
548 "SIDT64m",
Craig Topperfc179c62018-03-22 04:23:41 +0000549 "SMSW16m",
550 "STC",
551 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000552 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000553
554def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000555 let Latency = 1;
556 let NumMicroOps = 2;
557 let ResourceCycles = [1,1];
558}
Craig Topperfc179c62018-03-22 04:23:41 +0000559def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
560 "MMX_MOVD64from64rm",
561 "MMX_MOVD64mr",
562 "MMX_MOVNTQmr",
563 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000564 "MOVNTI_64mr",
565 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000566 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000567 "VEXTRACTF128mr",
568 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000569 "(V?)MOVAPDYmr",
570 "(V?)MOVAPS(Y?)mr",
571 "(V?)MOVDQA(Y?)mr",
572 "(V?)MOVDQU(Y?)mr",
573 "(V?)MOVHPDmr",
574 "(V?)MOVHPSmr",
575 "(V?)MOVLPDmr",
576 "(V?)MOVLPSmr",
577 "(V?)MOVNTDQ(Y?)mr",
578 "(V?)MOVNTPD(Y?)mr",
579 "(V?)MOVNTPS(Y?)mr",
580 "(V?)MOVPDI2DImr",
581 "(V?)MOVPQI2QImr",
582 "(V?)MOVPQIto64mr",
583 "(V?)MOVSDmr",
584 "(V?)MOVSSmr",
585 "(V?)MOVUPD(Y?)mr",
586 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000587 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000588
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000589def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000590 let Latency = 2;
591 let NumMicroOps = 1;
592 let ResourceCycles = [1];
593}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000594def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000595 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000596 "(V?)MOVPDI2DIrr",
597 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000598 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000599 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000600
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000601def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000602 let Latency = 2;
603 let NumMicroOps = 2;
604 let ResourceCycles = [2];
605}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000606def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000607
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000608def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000609 let Latency = 2;
610 let NumMicroOps = 2;
611 let ResourceCycles = [2];
612}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000613def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
614def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000615
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000616def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000617 let Latency = 2;
618 let NumMicroOps = 2;
619 let ResourceCycles = [2];
620}
Craig Topperfc179c62018-03-22 04:23:41 +0000621def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
622 "ROL(8|16|32|64)r1",
623 "ROL(8|16|32|64)ri",
624 "ROR(8|16|32|64)r1",
625 "ROR(8|16|32|64)ri",
626 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000627
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000628def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000629 let Latency = 2;
630 let NumMicroOps = 2;
631 let ResourceCycles = [2];
632}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000633def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
634 WAIT,
635 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000636
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000637def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000638 let Latency = 2;
639 let NumMicroOps = 2;
640 let ResourceCycles = [1,1];
641}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000642def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
643 "VMASKMOVPS(Y?)mr",
644 "VPMASKMOVD(Y?)mr",
645 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000646
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000647def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000648 let Latency = 2;
649 let NumMicroOps = 2;
650 let ResourceCycles = [1,1];
651}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000652def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
653 "(V?)PSLLQrr",
654 "(V?)PSLLWrr",
655 "(V?)PSRADrr",
656 "(V?)PSRAWrr",
657 "(V?)PSRLDrr",
658 "(V?)PSRLQrr",
659 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000660
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000661def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000662 let Latency = 2;
663 let NumMicroOps = 2;
664 let ResourceCycles = [1,1];
665}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000666def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000667
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000668def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000669 let Latency = 2;
670 let NumMicroOps = 2;
671 let ResourceCycles = [1,1];
672}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000673def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000674
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000675def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000676 let Latency = 2;
677 let NumMicroOps = 2;
678 let ResourceCycles = [1,1];
679}
Craig Topper498875f2018-04-04 17:54:19 +0000680def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
681
682def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
683 let Latency = 1;
684 let NumMicroOps = 1;
685 let ResourceCycles = [1];
686}
687def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000688
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000689def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000690 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000691 let NumMicroOps = 2;
692 let ResourceCycles = [1,1];
693}
Craig Topper2d451e72018-03-18 08:38:06 +0000694def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000695def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000696def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
697 "ADC8ri",
698 "SBB8i8",
699 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000700
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000701def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
702 let Latency = 2;
703 let NumMicroOps = 3;
704 let ResourceCycles = [1,1,1];
705}
706def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
707
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000708def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
709 let Latency = 2;
710 let NumMicroOps = 3;
711 let ResourceCycles = [1,1,1];
712}
713def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
714
715def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
716 let Latency = 2;
717 let NumMicroOps = 3;
718 let ResourceCycles = [1,1,1];
719}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000720def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
721 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000722def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000723 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000724
725def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
726 let Latency = 3;
727 let NumMicroOps = 1;
728 let ResourceCycles = [1];
729}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000730def: InstRW<[SKLWriteResGroup29], (instregex "CMOV(N?)(B|BE|E|P)_F",
731 "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000732 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000733 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000734 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000735
Clement Courbet327fac42018-03-07 08:14:02 +0000736def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000737 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000738 let NumMicroOps = 2;
739 let ResourceCycles = [1,1];
740}
Clement Courbet327fac42018-03-07 08:14:02 +0000741def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000742
743def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
744 let Latency = 3;
745 let NumMicroOps = 1;
746 let ResourceCycles = [1];
747}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000748def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
749 "(ADD|SUB|SUBR)_FST0r",
750 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000751 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000752 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000753 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000754 "VPMOVSXBDYrr",
755 "VPMOVSXBQYrr",
756 "VPMOVSXBWYrr",
757 "VPMOVSXDQYrr",
758 "VPMOVSXWDYrr",
759 "VPMOVSXWQYrr",
760 "VPMOVZXBDYrr",
761 "VPMOVZXBQYrr",
762 "VPMOVZXBWYrr",
763 "VPMOVZXDQYrr",
764 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000765 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000766
767def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
768 let Latency = 3;
769 let NumMicroOps = 2;
770 let ResourceCycles = [1,1];
771}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000772def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000773
774def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
775 let Latency = 3;
776 let NumMicroOps = 2;
777 let ResourceCycles = [1,1];
778}
779def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
780
781def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
782 let Latency = 3;
783 let NumMicroOps = 3;
784 let ResourceCycles = [3];
785}
Craig Topperfc179c62018-03-22 04:23:41 +0000786def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
787 "ROR(8|16|32|64)rCL",
788 "SAR(8|16|32|64)rCL",
789 "SHL(8|16|32|64)rCL",
790 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000791
792def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000793 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000794 let NumMicroOps = 3;
795 let ResourceCycles = [3];
796}
Craig Topperb5f26592018-04-19 18:00:17 +0000797def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
798 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
799 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000800
801def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
802 let Latency = 3;
803 let NumMicroOps = 3;
804 let ResourceCycles = [1,2];
805}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000806def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000807
808def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
809 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000810 let NumMicroOps = 3;
811 let ResourceCycles = [2,1];
812}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000813def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
814 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000815
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000816def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
817 let Latency = 3;
818 let NumMicroOps = 3;
819 let ResourceCycles = [2,1];
820}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000821def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000822
823def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
824 let Latency = 3;
825 let NumMicroOps = 3;
826 let ResourceCycles = [2,1];
827}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000828def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
829 "(V?)PHADDW(Y?)rr",
830 "(V?)PHSUBD(Y?)rr",
831 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000832
833def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
834 let Latency = 3;
835 let NumMicroOps = 3;
836 let ResourceCycles = [2,1];
837}
Craig Topperfc179c62018-03-22 04:23:41 +0000838def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
839 "MMX_PACKSSWBirr",
840 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000841
842def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
843 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000844 let NumMicroOps = 3;
845 let ResourceCycles = [1,2];
846}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000847def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000848
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000849def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
850 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000851 let NumMicroOps = 3;
852 let ResourceCycles = [1,2];
853}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000854def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000855
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000856def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
857 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000858 let NumMicroOps = 3;
859 let ResourceCycles = [1,2];
860}
Craig Topperfc179c62018-03-22 04:23:41 +0000861def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
862 "RCL(8|16|32|64)ri",
863 "RCR(8|16|32|64)r1",
864 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000865
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000866def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
867 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000868 let NumMicroOps = 3;
869 let ResourceCycles = [1,1,1];
870}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000871def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000872
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000873def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
874 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000875 let NumMicroOps = 4;
876 let ResourceCycles = [1,1,2];
877}
Craig Topperf4cd9082018-01-19 05:47:32 +0000878def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000879
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000880def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
881 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000882 let NumMicroOps = 4;
883 let ResourceCycles = [1,1,1,1];
884}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000885def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000886
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000887def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
888 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000889 let NumMicroOps = 4;
890 let ResourceCycles = [1,1,1,1];
891}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000892def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000893
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000894def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000895 let Latency = 4;
896 let NumMicroOps = 1;
897 let ResourceCycles = [1];
898}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000899def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000900 "MMX_PMADDWDirr",
901 "MMX_PMULHRSWrr",
902 "MMX_PMULHUWirr",
903 "MMX_PMULHWirr",
904 "MMX_PMULLWirr",
905 "MMX_PMULUDQirr",
906 "MUL_FPrST0",
907 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000908 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000909
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000910def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000911 let Latency = 4;
912 let NumMicroOps = 1;
913 let ResourceCycles = [1];
914}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000915def: InstRW<[SKLWriteResGroup48], (instregex "(V?)CVTDQ2PS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000916 "(V?)CVTPS2DQ(Y?)rr",
917 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000918 "(V?)PMADDUBSW(Y?)rr",
919 "(V?)PMADDWD(Y?)rr",
920 "(V?)PMULDQ(Y?)rr",
921 "(V?)PMULHRSW(Y?)rr",
922 "(V?)PMULHUW(Y?)rr",
923 "(V?)PMULHW(Y?)rr",
924 "(V?)PMULLW(Y?)rr",
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000925 "(V?)PMULUDQ(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000926
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000927def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000928 let Latency = 4;
929 let NumMicroOps = 2;
930 let ResourceCycles = [1,1];
931}
Craig Topperf846e2d2018-04-19 05:34:05 +0000932def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000933
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000934def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
935 let Latency = 4;
936 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000937 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000938}
Craig Topperfc179c62018-03-22 04:23:41 +0000939def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000940
941def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000942 let Latency = 4;
943 let NumMicroOps = 2;
944 let ResourceCycles = [1,1];
945}
Craig Topperfc179c62018-03-22 04:23:41 +0000946def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
947 "VPSLLQYrr",
948 "VPSLLWYrr",
949 "VPSRADYrr",
950 "VPSRAWYrr",
951 "VPSRLDYrr",
952 "VPSRLQYrr",
953 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000954
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000955def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000956 let Latency = 4;
957 let NumMicroOps = 3;
958 let ResourceCycles = [1,1,1];
959}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000960def: InstRW<[SKLWriteResGroup53], (instregex "IST(T?)_FP(16|32|64)m",
961 "IST_F(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000962
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000963def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000964 let Latency = 4;
965 let NumMicroOps = 4;
966 let ResourceCycles = [4];
967}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000968def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000969
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000970def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000971 let Latency = 4;
972 let NumMicroOps = 4;
973 let ResourceCycles = [1,3];
974}
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000975def: InstRW<[SKLWriteResGroup55], (instrs PAUSE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000976
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000977def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000978 let Latency = 4;
979 let NumMicroOps = 4;
980 let ResourceCycles = [1,3];
981}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000982def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000983
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000984def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000985 let Latency = 4;
986 let NumMicroOps = 4;
987 let ResourceCycles = [1,1,2];
988}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000989def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000990
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000991def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
992 let Latency = 5;
993 let NumMicroOps = 1;
994 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000995}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000996def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +0000997 "MOVSX(16|32|64)rm32",
998 "MOVSX(16|32|64)rm8",
999 "MOVZX(16|32|64)rm16",
1000 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001001 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001002
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001003def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001004 let Latency = 5;
1005 let NumMicroOps = 2;
1006 let ResourceCycles = [1,1];
1007}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001008def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1009 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001010
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001011def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001012 let Latency = 5;
1013 let NumMicroOps = 2;
1014 let ResourceCycles = [1,1];
1015}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001016def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001017 "MMX_CVTPS2PIirr",
1018 "MMX_CVTTPD2PIirr",
1019 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001020 "(V?)CVTPD2DQrr",
1021 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001022 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001023 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001024 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001025 "(V?)CVTSD2SSrr",
1026 "(V?)CVTSI642SDrr",
1027 "(V?)CVTSI2SDrr",
1028 "(V?)CVTSI2SSrr",
1029 "(V?)CVTSS2SDrr",
1030 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001031
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001032def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001033 let Latency = 5;
1034 let NumMicroOps = 3;
1035 let ResourceCycles = [1,1,1];
1036}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001037def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001038
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001039def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001040 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001041 let NumMicroOps = 3;
1042 let ResourceCycles = [1,1,1];
1043}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001044def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001045
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001046def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001047 let Latency = 5;
1048 let NumMicroOps = 5;
1049 let ResourceCycles = [1,4];
1050}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001051def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001052
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001053def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001054 let Latency = 5;
1055 let NumMicroOps = 5;
1056 let ResourceCycles = [2,3];
1057}
Craig Topper13a16502018-03-19 00:56:09 +00001058def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001059
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001060def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001061 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001062 let NumMicroOps = 6;
1063 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001064}
Craig Topperfc179c62018-03-22 04:23:41 +00001065def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1066 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001067
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001068def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1069 let Latency = 6;
1070 let NumMicroOps = 1;
1071 let ResourceCycles = [1];
1072}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001073def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001074 "(V?)MOVSHDUPrm",
1075 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001076 "VPBROADCASTDrm",
1077 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001078
1079def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001080 let Latency = 6;
1081 let NumMicroOps = 2;
1082 let ResourceCycles = [2];
1083}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001084def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001085
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001086def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001087 let Latency = 6;
1088 let NumMicroOps = 2;
1089 let ResourceCycles = [1,1];
1090}
Craig Topperfc179c62018-03-22 04:23:41 +00001091def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1092 "MMX_PADDSWirm",
1093 "MMX_PADDUSBirm",
1094 "MMX_PADDUSWirm",
1095 "MMX_PAVGBirm",
1096 "MMX_PAVGWirm",
1097 "MMX_PCMPEQBirm",
1098 "MMX_PCMPEQDirm",
1099 "MMX_PCMPEQWirm",
1100 "MMX_PCMPGTBirm",
1101 "MMX_PCMPGTDirm",
1102 "MMX_PCMPGTWirm",
1103 "MMX_PMAXSWirm",
1104 "MMX_PMAXUBirm",
1105 "MMX_PMINSWirm",
1106 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001107 "MMX_PSUBSBirm",
1108 "MMX_PSUBSWirm",
1109 "MMX_PSUBUSBirm",
1110 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001111
Craig Topper58afb4e2018-03-22 21:10:07 +00001112def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001113 let Latency = 6;
1114 let NumMicroOps = 2;
1115 let ResourceCycles = [1,1];
1116}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001117def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1118 "(V?)CVTSD2SIrr",
1119 "(V?)CVTSS2SI64rr",
1120 "(V?)CVTSS2SIrr",
1121 "(V?)CVTTSD2SI64rr",
1122 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001123
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001124def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1125 let Latency = 6;
1126 let NumMicroOps = 2;
1127 let ResourceCycles = [1,1];
1128}
Craig Topperfc179c62018-03-22 04:23:41 +00001129def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1130 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001131
1132def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1133 let Latency = 6;
1134 let NumMicroOps = 2;
1135 let ResourceCycles = [1,1];
1136}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001137def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1138 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001139 "MMX_PANDNirm",
1140 "MMX_PANDirm",
1141 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001142 "MMX_PSIGN(B|D|W)rm",
1143 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001144 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001145
1146def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1147 let Latency = 6;
1148 let NumMicroOps = 2;
1149 let ResourceCycles = [1,1];
1150}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001151def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001152def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1153 ADCX32rm, ADCX64rm,
1154 ADOX32rm, ADOX64rm,
1155 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001156
1157def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1158 let Latency = 6;
1159 let NumMicroOps = 2;
1160 let ResourceCycles = [1,1];
1161}
Craig Topperfc179c62018-03-22 04:23:41 +00001162def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1163 "BLSI(32|64)rm",
1164 "BLSMSK(32|64)rm",
1165 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001166 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001167
1168def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1169 let Latency = 6;
1170 let NumMicroOps = 2;
1171 let ResourceCycles = [1,1];
1172}
Craig Topper2d451e72018-03-18 08:38:06 +00001173def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001174def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001175
Craig Topper58afb4e2018-03-22 21:10:07 +00001176def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001177 let Latency = 6;
1178 let NumMicroOps = 3;
1179 let ResourceCycles = [2,1];
1180}
Craig Topperfc179c62018-03-22 04:23:41 +00001181def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001182
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001183def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001184 let Latency = 6;
1185 let NumMicroOps = 4;
1186 let ResourceCycles = [1,2,1];
1187}
Craig Topperfc179c62018-03-22 04:23:41 +00001188def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1189 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001190
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001191def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001192 let Latency = 6;
1193 let NumMicroOps = 4;
1194 let ResourceCycles = [1,1,1,1];
1195}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001196def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001197
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001198def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1199 let Latency = 6;
1200 let NumMicroOps = 4;
1201 let ResourceCycles = [1,1,1,1];
1202}
Craig Topperfc179c62018-03-22 04:23:41 +00001203def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1204 "BTR(16|32|64)mi8",
1205 "BTS(16|32|64)mi8",
1206 "SAR(8|16|32|64)m1",
1207 "SAR(8|16|32|64)mi",
1208 "SHL(8|16|32|64)m1",
1209 "SHL(8|16|32|64)mi",
1210 "SHR(8|16|32|64)m1",
1211 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001212
1213def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1214 let Latency = 6;
1215 let NumMicroOps = 4;
1216 let ResourceCycles = [1,1,1,1];
1217}
Craig Topperf0d04262018-04-06 16:16:48 +00001218def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1219 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001220
1221def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001222 let Latency = 6;
1223 let NumMicroOps = 6;
1224 let ResourceCycles = [1,5];
1225}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001226def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001227
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001228def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1229 let Latency = 7;
1230 let NumMicroOps = 1;
1231 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001232}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001233def: InstRW<[SKLWriteResGroup85], (instregex "LD_F(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001234 "VBROADCASTF128",
1235 "VBROADCASTI128",
1236 "VBROADCASTSDYrm",
1237 "VBROADCASTSSYrm",
1238 "VLDDQUYrm",
1239 "VMOVAPDYrm",
1240 "VMOVAPSYrm",
1241 "VMOVDDUPYrm",
1242 "VMOVDQAYrm",
1243 "VMOVDQUYrm",
1244 "VMOVNTDQAYrm",
1245 "VMOVSHDUPYrm",
1246 "VMOVSLDUPYrm",
1247 "VMOVUPDYrm",
1248 "VMOVUPSYrm",
1249 "VPBROADCASTDYrm",
1250 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001251
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001252def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001253 let Latency = 7;
1254 let NumMicroOps = 2;
1255 let ResourceCycles = [1,1];
1256}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001257def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001258
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001259def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1260 let Latency = 7;
1261 let NumMicroOps = 2;
1262 let ResourceCycles = [1,1];
1263}
Simon Pilgrim819f2182018-05-02 17:58:50 +00001264def: InstRW<[SKLWriteResGroup88], (instregex "(V?)PACKSSDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001265 "(V?)PACKSSWBrm",
1266 "(V?)PACKUSDWrm",
1267 "(V?)PACKUSWBrm",
1268 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001269 "VPBROADCASTBrm",
1270 "VPBROADCASTWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001271 "(V?)PSHUFBrm",
1272 "(V?)PSHUFDmi",
1273 "(V?)PSHUFHWmi",
1274 "(V?)PSHUFLWmi",
1275 "(V?)PUNPCKHBWrm",
1276 "(V?)PUNPCKHDQrm",
1277 "(V?)PUNPCKHQDQrm",
1278 "(V?)PUNPCKHWDrm",
1279 "(V?)PUNPCKLBWrm",
1280 "(V?)PUNPCKLDQrm",
1281 "(V?)PUNPCKLQDQrm",
Simon Pilgrim819f2182018-05-02 17:58:50 +00001282 "(V?)PUNPCKLWDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001283
Craig Topper58afb4e2018-03-22 21:10:07 +00001284def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001285 let Latency = 7;
1286 let NumMicroOps = 2;
1287 let ResourceCycles = [1,1];
1288}
Craig Topperfc179c62018-03-22 04:23:41 +00001289def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1290 "VCVTPD2PSYrr",
1291 "VCVTPH2PSYrr",
1292 "VCVTPS2PDYrr",
1293 "VCVTPS2PHYrr",
1294 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001295
1296def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1297 let Latency = 7;
1298 let NumMicroOps = 2;
1299 let ResourceCycles = [1,1];
1300}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001301def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1302 "(V?)PABSDrm",
1303 "(V?)PABSWrm",
1304 "(V?)PADDSBrm",
1305 "(V?)PADDSWrm",
1306 "(V?)PADDUSBrm",
1307 "(V?)PADDUSWrm",
1308 "(V?)PAVGBrm",
1309 "(V?)PAVGWrm",
1310 "(V?)PCMPEQBrm",
1311 "(V?)PCMPEQDrm",
1312 "(V?)PCMPEQQrm",
1313 "(V?)PCMPEQWrm",
1314 "(V?)PCMPGTBrm",
1315 "(V?)PCMPGTDrm",
1316 "(V?)PCMPGTWrm",
1317 "(V?)PMAXSBrm",
1318 "(V?)PMAXSDrm",
1319 "(V?)PMAXSWrm",
1320 "(V?)PMAXUBrm",
1321 "(V?)PMAXUDrm",
1322 "(V?)PMAXUWrm",
1323 "(V?)PMINSBrm",
1324 "(V?)PMINSDrm",
1325 "(V?)PMINSWrm",
1326 "(V?)PMINUBrm",
1327 "(V?)PMINUDrm",
1328 "(V?)PMINUWrm",
1329 "(V?)PSIGNBrm",
1330 "(V?)PSIGNDrm",
1331 "(V?)PSIGNWrm",
1332 "(V?)PSLLDrm",
1333 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001334 "VPSLLVDrm",
1335 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001336 "(V?)PSLLWrm",
1337 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001338 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001339 "(V?)PSRAWrm",
1340 "(V?)PSRLDrm",
1341 "(V?)PSRLQrm",
1342 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001343 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001344 "(V?)PSRLWrm",
1345 "(V?)PSUBSBrm",
1346 "(V?)PSUBSWrm",
1347 "(V?)PSUBUSBrm",
1348 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001349
1350def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1351 let Latency = 7;
1352 let NumMicroOps = 2;
1353 let ResourceCycles = [1,1];
1354}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001355def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001356 "(V?)INSERTI128rm",
1357 "(V?)MASKMOVPDrm",
1358 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001359 "(V?)PADDBrm",
1360 "(V?)PADDDrm",
1361 "(V?)PADDQrm",
1362 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001363 "(V?)PBLENDDrmi",
1364 "(V?)PMASKMOVDrm",
1365 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001366 "(V?)PSUBBrm",
1367 "(V?)PSUBDrm",
1368 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001369 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001370
1371def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1372 let Latency = 7;
1373 let NumMicroOps = 3;
1374 let ResourceCycles = [2,1];
1375}
Craig Topperfc179c62018-03-22 04:23:41 +00001376def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1377 "MMX_PACKSSWBirm",
1378 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001379
1380def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1381 let Latency = 7;
1382 let NumMicroOps = 3;
1383 let ResourceCycles = [1,2];
1384}
Craig Topperf4cd9082018-01-19 05:47:32 +00001385def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001386
1387def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1388 let Latency = 7;
1389 let NumMicroOps = 3;
1390 let ResourceCycles = [1,2];
1391}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001392def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1393 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001394
Craig Topper58afb4e2018-03-22 21:10:07 +00001395def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001396 let Latency = 7;
1397 let NumMicroOps = 3;
1398 let ResourceCycles = [1,1,1];
1399}
Craig Topperfc179c62018-03-22 04:23:41 +00001400def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1401 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001402
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001403def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001404 let Latency = 7;
1405 let NumMicroOps = 3;
1406 let ResourceCycles = [1,1,1];
1407}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001408def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001409
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001410def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001411 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001412 let NumMicroOps = 3;
1413 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001414}
Craig Topperfc179c62018-03-22 04:23:41 +00001415def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1416 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001417
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001418def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1419 let Latency = 7;
1420 let NumMicroOps = 5;
1421 let ResourceCycles = [1,1,1,2];
1422}
Craig Topperfc179c62018-03-22 04:23:41 +00001423def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1424 "ROL(8|16|32|64)mi",
1425 "ROR(8|16|32|64)m1",
1426 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001427
1428def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1429 let Latency = 7;
1430 let NumMicroOps = 5;
1431 let ResourceCycles = [1,1,1,2];
1432}
Craig Topper13a16502018-03-19 00:56:09 +00001433def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001434
1435def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1436 let Latency = 7;
1437 let NumMicroOps = 5;
1438 let ResourceCycles = [1,1,1,1,1];
1439}
Craig Topperfc179c62018-03-22 04:23:41 +00001440def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1441 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001442
1443def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001444 let Latency = 7;
1445 let NumMicroOps = 7;
1446 let ResourceCycles = [1,3,1,2];
1447}
Craig Topper2d451e72018-03-18 08:38:06 +00001448def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001449
Craig Topper58afb4e2018-03-22 21:10:07 +00001450def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001451 let Latency = 8;
1452 let NumMicroOps = 2;
1453 let ResourceCycles = [2];
1454}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001455def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1456 "(V?)ROUNDPS(Y?)r",
1457 "(V?)ROUNDSDr",
1458 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001459
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001460def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001461 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001462 let NumMicroOps = 2;
1463 let ResourceCycles = [1,1];
1464}
Craig Topperfc179c62018-03-22 04:23:41 +00001465def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1466 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001467
1468def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1469 let Latency = 8;
1470 let NumMicroOps = 2;
1471 let ResourceCycles = [1,1];
1472}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001473def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1474 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001475
1476def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001477 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001478 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001479 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001480}
Craig Topperf846e2d2018-04-19 05:34:05 +00001481def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001482
Craig Topperf846e2d2018-04-19 05:34:05 +00001483def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1484 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001485 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001486 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001487}
Craig Topperfc179c62018-03-22 04:23:41 +00001488def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001489
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001490def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1491 let Latency = 8;
1492 let NumMicroOps = 2;
1493 let ResourceCycles = [1,1];
1494}
Craig Topperfc179c62018-03-22 04:23:41 +00001495def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1496 "FCOM64m",
1497 "FCOMP32m",
1498 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001499 "VPACKSSDWYrm",
1500 "VPACKSSWBYrm",
1501 "VPACKUSDWYrm",
1502 "VPACKUSWBYrm",
1503 "VPALIGNRYrmi",
1504 "VPBLENDWYrmi",
1505 "VPBROADCASTBYrm",
1506 "VPBROADCASTWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001507 "VPMOVSXBDYrm",
1508 "VPMOVSXBQYrm",
1509 "VPMOVSXWQYrm",
1510 "VPSHUFBYrm",
1511 "VPSHUFDYmi",
1512 "VPSHUFHWYmi",
1513 "VPSHUFLWYmi",
1514 "VPUNPCKHBWYrm",
1515 "VPUNPCKHDQYrm",
1516 "VPUNPCKHQDQYrm",
1517 "VPUNPCKHWDYrm",
1518 "VPUNPCKLBWYrm",
1519 "VPUNPCKLDQYrm",
1520 "VPUNPCKLQDQYrm",
Simon Pilgrimdd8eae12018-05-01 14:25:01 +00001521 "VPUNPCKLWDYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001522
1523def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1524 let Latency = 8;
1525 let NumMicroOps = 2;
1526 let ResourceCycles = [1,1];
1527}
Craig Topperfc179c62018-03-22 04:23:41 +00001528def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1529 "VPABSDYrm",
1530 "VPABSWYrm",
1531 "VPADDSBYrm",
1532 "VPADDSWYrm",
1533 "VPADDUSBYrm",
1534 "VPADDUSWYrm",
1535 "VPAVGBYrm",
1536 "VPAVGWYrm",
1537 "VPCMPEQBYrm",
1538 "VPCMPEQDYrm",
1539 "VPCMPEQQYrm",
1540 "VPCMPEQWYrm",
1541 "VPCMPGTBYrm",
1542 "VPCMPGTDYrm",
1543 "VPCMPGTWYrm",
1544 "VPMAXSBYrm",
1545 "VPMAXSDYrm",
1546 "VPMAXSWYrm",
1547 "VPMAXUBYrm",
1548 "VPMAXUDYrm",
1549 "VPMAXUWYrm",
1550 "VPMINSBYrm",
1551 "VPMINSDYrm",
1552 "VPMINSWYrm",
1553 "VPMINUBYrm",
1554 "VPMINUDYrm",
1555 "VPMINUWYrm",
1556 "VPSIGNBYrm",
1557 "VPSIGNDYrm",
1558 "VPSIGNWYrm",
1559 "VPSLLDYrm",
1560 "VPSLLQYrm",
1561 "VPSLLVDYrm",
1562 "VPSLLVQYrm",
1563 "VPSLLWYrm",
1564 "VPSRADYrm",
1565 "VPSRAVDYrm",
1566 "VPSRAWYrm",
1567 "VPSRLDYrm",
1568 "VPSRLQYrm",
1569 "VPSRLVDYrm",
1570 "VPSRLVQYrm",
1571 "VPSRLWYrm",
1572 "VPSUBSBYrm",
1573 "VPSUBSWYrm",
1574 "VPSUBUSBYrm",
1575 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001576
1577def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1578 let Latency = 8;
1579 let NumMicroOps = 2;
1580 let ResourceCycles = [1,1];
1581}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001582def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001583 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001584 "VPADDBYrm",
1585 "VPADDDYrm",
1586 "VPADDQYrm",
1587 "VPADDWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001588 "VPBLENDDYrmi",
1589 "VPMASKMOVDYrm",
1590 "VPMASKMOVQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001591 "VPSUBBYrm",
1592 "VPSUBDYrm",
1593 "VPSUBQYrm",
Simon Pilgrim57f2b182018-05-01 12:39:17 +00001594 "VPSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001595
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001596def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1597 let Latency = 8;
1598 let NumMicroOps = 4;
1599 let ResourceCycles = [1,2,1];
1600}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001601def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001602
1603def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1604 let Latency = 8;
1605 let NumMicroOps = 4;
1606 let ResourceCycles = [2,1,1];
1607}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001608def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001609
Craig Topper58afb4e2018-03-22 21:10:07 +00001610def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001611 let Latency = 8;
1612 let NumMicroOps = 4;
1613 let ResourceCycles = [1,1,1,1];
1614}
1615def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1616
1617def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1618 let Latency = 8;
1619 let NumMicroOps = 5;
1620 let ResourceCycles = [1,1,3];
1621}
Craig Topper13a16502018-03-19 00:56:09 +00001622def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001623
1624def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1625 let Latency = 8;
1626 let NumMicroOps = 5;
1627 let ResourceCycles = [1,1,1,2];
1628}
Craig Topperfc179c62018-03-22 04:23:41 +00001629def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1630 "RCL(8|16|32|64)mi",
1631 "RCR(8|16|32|64)m1",
1632 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001633
1634def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1635 let Latency = 8;
1636 let NumMicroOps = 6;
1637 let ResourceCycles = [1,1,1,3];
1638}
Craig Topperfc179c62018-03-22 04:23:41 +00001639def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1640 "SAR(8|16|32|64)mCL",
1641 "SHL(8|16|32|64)mCL",
1642 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001643
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001644def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1645 let Latency = 8;
1646 let NumMicroOps = 6;
1647 let ResourceCycles = [1,1,1,2,1];
1648}
Craig Topper9f834812018-04-01 21:54:24 +00001649def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001650 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001651 "SBB(8|16|32|64)mi")>;
1652def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1653 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001654
1655def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1656 let Latency = 9;
1657 let NumMicroOps = 2;
1658 let ResourceCycles = [1,1];
1659}
Craig Topperfc179c62018-03-22 04:23:41 +00001660def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1661 "MMX_PMADDUBSWrm",
1662 "MMX_PMADDWDirm",
1663 "MMX_PMULHRSWrm",
1664 "MMX_PMULHUWirm",
1665 "MMX_PMULHWirm",
1666 "MMX_PMULLWirm",
1667 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001668 "VTESTPDYrm",
1669 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001670
1671def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1672 let Latency = 9;
1673 let NumMicroOps = 2;
1674 let ResourceCycles = [1,1];
1675}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001676def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001677 "VPMOVSXBWYrm",
1678 "VPMOVSXDQYrm",
1679 "VPMOVSXWDYrm",
1680 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001681 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001682
1683def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1684 let Latency = 9;
1685 let NumMicroOps = 2;
1686 let ResourceCycles = [1,1];
1687}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001688def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1689 "(V?)ADDSSrm",
1690 "(V?)CMPSDrm",
1691 "(V?)CMPSSrm",
1692 "(V?)MAX(C?)SDrm",
1693 "(V?)MAX(C?)SSrm",
1694 "(V?)MIN(C?)SDrm",
1695 "(V?)MIN(C?)SSrm",
1696 "(V?)MULSDrm",
1697 "(V?)MULSSrm",
1698 "(V?)SUBSDrm",
1699 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001700
Craig Topper58afb4e2018-03-22 21:10:07 +00001701def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001702 let Latency = 9;
1703 let NumMicroOps = 2;
1704 let ResourceCycles = [1,1];
1705}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001706def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001707 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001708 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001709 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001710
Craig Topper58afb4e2018-03-22 21:10:07 +00001711def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001712 let Latency = 9;
1713 let NumMicroOps = 3;
1714 let ResourceCycles = [1,2];
1715}
Craig Topperfc179c62018-03-22 04:23:41 +00001716def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001717
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001718def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1719 let Latency = 9;
1720 let NumMicroOps = 3;
1721 let ResourceCycles = [1,1,1];
1722}
Craig Topperfc179c62018-03-22 04:23:41 +00001723def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001724
1725def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1726 let Latency = 9;
1727 let NumMicroOps = 3;
1728 let ResourceCycles = [1,1,1];
1729}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001730def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001731
1732def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001733 let Latency = 9;
1734 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001735 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001736}
Craig Topperfc179c62018-03-22 04:23:41 +00001737def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1738 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001739
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001740def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1741 let Latency = 9;
1742 let NumMicroOps = 4;
1743 let ResourceCycles = [2,1,1];
1744}
Craig Topperfc179c62018-03-22 04:23:41 +00001745def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1746 "(V?)PHADDWrm",
1747 "(V?)PHSUBDrm",
1748 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001749
1750def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1751 let Latency = 9;
1752 let NumMicroOps = 4;
1753 let ResourceCycles = [1,1,1,1];
1754}
Craig Topperfc179c62018-03-22 04:23:41 +00001755def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1756 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001757
1758def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1759 let Latency = 9;
1760 let NumMicroOps = 5;
1761 let ResourceCycles = [1,2,1,1];
1762}
Craig Topperfc179c62018-03-22 04:23:41 +00001763def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1764 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001765
1766def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1767 let Latency = 10;
1768 let NumMicroOps = 2;
1769 let ResourceCycles = [1,1];
1770}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001771def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001772 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001773
1774def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1775 let Latency = 10;
1776 let NumMicroOps = 2;
1777 let ResourceCycles = [1,1];
1778}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001779def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1780 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001781 "VPCMPGTQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001782 "VPMOVZXBDYrm",
1783 "VPMOVZXBQYrm",
1784 "VPMOVZXBWYrm",
1785 "VPMOVZXDQYrm",
1786 "VPMOVZXWQYrm",
1787 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001788
1789def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1790 let Latency = 10;
1791 let NumMicroOps = 2;
1792 let ResourceCycles = [1,1];
1793}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001794def: InstRW<[SKLWriteResGroup134], (instregex "(V?)CVTDQ2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001795 "(V?)CVTPH2PSYrm",
1796 "(V?)CVTPS2DQrm",
1797 "(V?)CVTSS2SDrm",
1798 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001799 "(V?)PMADDUBSWrm",
1800 "(V?)PMADDWDrm",
1801 "(V?)PMULDQrm",
1802 "(V?)PMULHRSWrm",
1803 "(V?)PMULHUWrm",
1804 "(V?)PMULHWrm",
1805 "(V?)PMULLWrm",
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001806 "(V?)PMULUDQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001807
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001808def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1809 let Latency = 10;
1810 let NumMicroOps = 3;
1811 let ResourceCycles = [1,1,1];
1812}
Craig Topperfc179c62018-03-22 04:23:41 +00001813def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1814 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001815
Craig Topper58afb4e2018-03-22 21:10:07 +00001816def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001817 let Latency = 10;
1818 let NumMicroOps = 3;
1819 let ResourceCycles = [1,1,1];
1820}
Craig Topperfc179c62018-03-22 04:23:41 +00001821def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001822
1823def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001824 let Latency = 10;
1825 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001826 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001827}
Craig Topperfc179c62018-03-22 04:23:41 +00001828def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1829 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001830
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001831def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1832 let Latency = 10;
1833 let NumMicroOps = 4;
1834 let ResourceCycles = [2,1,1];
1835}
Craig Topperfc179c62018-03-22 04:23:41 +00001836def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1837 "VPHADDWYrm",
1838 "VPHSUBDYrm",
1839 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001840
1841def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001842 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001843 let NumMicroOps = 4;
1844 let ResourceCycles = [1,1,1,1];
1845}
Craig Topperf846e2d2018-04-19 05:34:05 +00001846def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001847
1848def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1849 let Latency = 10;
1850 let NumMicroOps = 8;
1851 let ResourceCycles = [1,1,1,1,1,3];
1852}
Craig Topper13a16502018-03-19 00:56:09 +00001853def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001854
1855def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001856 let Latency = 10;
1857 let NumMicroOps = 10;
1858 let ResourceCycles = [9,1];
1859}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001860def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001861
Craig Topper8104f262018-04-02 05:33:28 +00001862def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001863 let Latency = 11;
1864 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001865 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001866}
Craig Topper8104f262018-04-02 05:33:28 +00001867def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001868 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001869
Craig Topper8104f262018-04-02 05:33:28 +00001870def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1871 let Latency = 11;
1872 let NumMicroOps = 1;
1873 let ResourceCycles = [1,5];
1874}
1875def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1876
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001877def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001878 let Latency = 11;
1879 let NumMicroOps = 2;
1880 let ResourceCycles = [1,1];
1881}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001882def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001883 "VRCPPSYm",
1884 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001885
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001886def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1887 let Latency = 11;
1888 let NumMicroOps = 2;
1889 let ResourceCycles = [1,1];
1890}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001891def: InstRW<[SKLWriteResGroup147], (instregex "VCVTDQ2PSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001892 "VCVTPS2DQYrm",
1893 "VCVTPS2PDYrm",
1894 "VCVTTPS2DQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001895 "VPMADDUBSWYrm",
1896 "VPMADDWDYrm",
1897 "VPMULDQYrm",
1898 "VPMULHRSWYrm",
1899 "VPMULHUWYrm",
1900 "VPMULHWYrm",
1901 "VPMULLWYrm",
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001902 "VPMULUDQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001903
1904def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1905 let Latency = 11;
1906 let NumMicroOps = 3;
1907 let ResourceCycles = [2,1];
1908}
Craig Topperfc179c62018-03-22 04:23:41 +00001909def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1910 "FICOM32m",
1911 "FICOMP16m",
1912 "FICOMP32m",
1913 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001914
1915def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1916 let Latency = 11;
1917 let NumMicroOps = 3;
1918 let ResourceCycles = [1,1,1];
1919}
Craig Topperfc179c62018-03-22 04:23:41 +00001920def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001921
Craig Topper58afb4e2018-03-22 21:10:07 +00001922def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001923 let Latency = 11;
1924 let NumMicroOps = 3;
1925 let ResourceCycles = [1,1,1];
1926}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001927def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1928 "(V?)CVTSD2SIrm",
1929 "(V?)CVTSS2SI64rm",
1930 "(V?)CVTSS2SIrm",
1931 "(V?)CVTTSD2SI64rm",
1932 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001933 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001934 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001935
Craig Topper58afb4e2018-03-22 21:10:07 +00001936def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001937 let Latency = 11;
1938 let NumMicroOps = 3;
1939 let ResourceCycles = [1,1,1];
1940}
Craig Topperfc179c62018-03-22 04:23:41 +00001941def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
1942 "CVTPD2PSrm",
1943 "CVTTPD2DQrm",
1944 "MMX_CVTPD2PIirm",
1945 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001946
1947def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1948 let Latency = 11;
1949 let NumMicroOps = 6;
1950 let ResourceCycles = [1,1,1,2,1];
1951}
Craig Topperfc179c62018-03-22 04:23:41 +00001952def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
1953 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001954
1955def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001956 let Latency = 11;
1957 let NumMicroOps = 7;
1958 let ResourceCycles = [2,3,2];
1959}
Craig Topperfc179c62018-03-22 04:23:41 +00001960def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
1961 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001962
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001963def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001964 let Latency = 11;
1965 let NumMicroOps = 9;
1966 let ResourceCycles = [1,5,1,2];
1967}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001968def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001969
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001970def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001971 let Latency = 11;
1972 let NumMicroOps = 11;
1973 let ResourceCycles = [2,9];
1974}
Craig Topperfc179c62018-03-22 04:23:41 +00001975def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001976
Craig Topper8104f262018-04-02 05:33:28 +00001977def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001978 let Latency = 12;
1979 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001980 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001981}
Craig Topper8104f262018-04-02 05:33:28 +00001982def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001983 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001984
Craig Topper8104f262018-04-02 05:33:28 +00001985def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1986 let Latency = 12;
1987 let NumMicroOps = 1;
1988 let ResourceCycles = [1,6];
1989}
1990def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
1991
Craig Topper58afb4e2018-03-22 21:10:07 +00001992def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001993 let Latency = 12;
1994 let NumMicroOps = 4;
1995 let ResourceCycles = [1,1,1,1];
1996}
1997def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
1998
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001999def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002000 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002001 let NumMicroOps = 3;
2002 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002003}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002004def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002005
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002006def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2007 let Latency = 13;
2008 let NumMicroOps = 3;
2009 let ResourceCycles = [1,1,1];
2010}
2011def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2012
Craig Topper58afb4e2018-03-22 21:10:07 +00002013def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002014 let Latency = 13;
2015 let NumMicroOps = 4;
2016 let ResourceCycles = [1,3];
2017}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002018def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002019
Craig Topper8104f262018-04-02 05:33:28 +00002020def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002021 let Latency = 14;
2022 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002023 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002024}
Craig Topper8104f262018-04-02 05:33:28 +00002025def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002026 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002027
Craig Topper8104f262018-04-02 05:33:28 +00002028def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2029 let Latency = 14;
2030 let NumMicroOps = 1;
2031 let ResourceCycles = [1,5];
2032}
2033def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2034
Craig Topper58afb4e2018-03-22 21:10:07 +00002035def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002036 let Latency = 14;
2037 let NumMicroOps = 3;
2038 let ResourceCycles = [1,2];
2039}
Craig Topperfc179c62018-03-22 04:23:41 +00002040def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2041def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2042def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2043def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002044
2045def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2046 let Latency = 14;
2047 let NumMicroOps = 3;
2048 let ResourceCycles = [1,1,1];
2049}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002050def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002051
2052def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002053 let Latency = 14;
2054 let NumMicroOps = 10;
2055 let ResourceCycles = [2,4,1,3];
2056}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002057def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002058
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002059def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002060 let Latency = 15;
2061 let NumMicroOps = 1;
2062 let ResourceCycles = [1];
2063}
Craig Topperfc179c62018-03-22 04:23:41 +00002064def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2065 "DIVR_FST0r",
2066 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002067
Craig Topper58afb4e2018-03-22 21:10:07 +00002068def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002069 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002070 let NumMicroOps = 3;
2071 let ResourceCycles = [1,2];
2072}
Craig Topper40d3b322018-03-22 21:55:20 +00002073def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2074 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002075
Craig Topperd25f1ac2018-03-20 23:39:48 +00002076def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2077 let Latency = 17;
2078 let NumMicroOps = 3;
2079 let ResourceCycles = [1,2];
2080}
2081def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2082
Craig Topper58afb4e2018-03-22 21:10:07 +00002083def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002084 let Latency = 15;
2085 let NumMicroOps = 4;
2086 let ResourceCycles = [1,1,2];
2087}
Craig Topperfc179c62018-03-22 04:23:41 +00002088def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002089
2090def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2091 let Latency = 15;
2092 let NumMicroOps = 10;
2093 let ResourceCycles = [1,1,1,5,1,1];
2094}
Craig Topper13a16502018-03-19 00:56:09 +00002095def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002096
Craig Topper8104f262018-04-02 05:33:28 +00002097def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002098 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002099 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002100 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002101}
Craig Topperfc179c62018-03-22 04:23:41 +00002102def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002103
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002104def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2105 let Latency = 16;
2106 let NumMicroOps = 14;
2107 let ResourceCycles = [1,1,1,4,2,5];
2108}
2109def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2110
2111def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002112 let Latency = 16;
2113 let NumMicroOps = 16;
2114 let ResourceCycles = [16];
2115}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002116def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002117
Craig Topper8104f262018-04-02 05:33:28 +00002118def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002119 let Latency = 17;
2120 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002121 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002122}
Craig Topper8104f262018-04-02 05:33:28 +00002123def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2124
2125def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2126 let Latency = 17;
2127 let NumMicroOps = 2;
2128 let ResourceCycles = [1,1,3];
2129}
2130def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002131
2132def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002133 let Latency = 17;
2134 let NumMicroOps = 15;
2135 let ResourceCycles = [2,1,2,4,2,4];
2136}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002137def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002138
Craig Topper8104f262018-04-02 05:33:28 +00002139def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002140 let Latency = 18;
2141 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002142 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002143}
Craig Topper8104f262018-04-02 05:33:28 +00002144def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002145 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002146
Craig Topper8104f262018-04-02 05:33:28 +00002147def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2148 let Latency = 18;
2149 let NumMicroOps = 1;
2150 let ResourceCycles = [1,12];
2151}
2152def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2153
2154def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002155 let Latency = 18;
2156 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002157 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002158}
Craig Topper8104f262018-04-02 05:33:28 +00002159def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2160
2161def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2162 let Latency = 18;
2163 let NumMicroOps = 2;
2164 let ResourceCycles = [1,1,3];
2165}
2166def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002167
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002168def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002169 let Latency = 18;
2170 let NumMicroOps = 8;
2171 let ResourceCycles = [1,1,1,5];
2172}
Craig Topperfc179c62018-03-22 04:23:41 +00002173def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002174
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002175def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002176 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002177 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002178 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002179}
Craig Topper13a16502018-03-19 00:56:09 +00002180def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002181
Craig Topper8104f262018-04-02 05:33:28 +00002182def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002183 let Latency = 19;
2184 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002185 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002186}
Craig Topper8104f262018-04-02 05:33:28 +00002187def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2188
2189def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2190 let Latency = 19;
2191 let NumMicroOps = 2;
2192 let ResourceCycles = [1,1,6];
2193}
2194def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002195
Craig Topper58afb4e2018-03-22 21:10:07 +00002196def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002197 let Latency = 19;
2198 let NumMicroOps = 5;
2199 let ResourceCycles = [1,1,3];
2200}
Craig Topperfc179c62018-03-22 04:23:41 +00002201def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002202
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002203def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002204 let Latency = 20;
2205 let NumMicroOps = 1;
2206 let ResourceCycles = [1];
2207}
Craig Topperfc179c62018-03-22 04:23:41 +00002208def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2209 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002210 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002211
Craig Topper8104f262018-04-02 05:33:28 +00002212def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002213 let Latency = 20;
2214 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002215 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002216}
Craig Topperfc179c62018-03-22 04:23:41 +00002217def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002218
Craig Topper58afb4e2018-03-22 21:10:07 +00002219def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002220 let Latency = 20;
2221 let NumMicroOps = 5;
2222 let ResourceCycles = [1,1,3];
2223}
2224def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2225
2226def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2227 let Latency = 20;
2228 let NumMicroOps = 8;
2229 let ResourceCycles = [1,1,1,1,1,1,2];
2230}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002231def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002232
2233def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002234 let Latency = 20;
2235 let NumMicroOps = 10;
2236 let ResourceCycles = [1,2,7];
2237}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002238def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002239
Craig Topper8104f262018-04-02 05:33:28 +00002240def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002241 let Latency = 21;
2242 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002243 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002244}
2245def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2246
2247def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2248 let Latency = 22;
2249 let NumMicroOps = 2;
2250 let ResourceCycles = [1,1];
2251}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002252def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002253
2254def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2255 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002256 let NumMicroOps = 5;
2257 let ResourceCycles = [1,2,1,1];
2258}
Craig Topper17a31182017-12-16 18:35:29 +00002259def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2260 VGATHERDPDrm,
2261 VGATHERQPDrm,
2262 VGATHERQPSrm,
2263 VPGATHERDDrm,
2264 VPGATHERDQrm,
2265 VPGATHERQDrm,
2266 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002267
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002268def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2269 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002270 let NumMicroOps = 5;
2271 let ResourceCycles = [1,2,1,1];
2272}
Craig Topper17a31182017-12-16 18:35:29 +00002273def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2274 VGATHERQPDYrm,
2275 VGATHERQPSYrm,
2276 VPGATHERDDYrm,
2277 VPGATHERDQYrm,
2278 VPGATHERQDYrm,
2279 VPGATHERQQYrm,
2280 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002281
Craig Topper8104f262018-04-02 05:33:28 +00002282def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002283 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002284 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002285 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002286}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002287def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002288
2289def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2290 let Latency = 23;
2291 let NumMicroOps = 19;
2292 let ResourceCycles = [2,1,4,1,1,4,6];
2293}
2294def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2295
Craig Topper8104f262018-04-02 05:33:28 +00002296def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002297 let Latency = 24;
2298 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002299 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002300}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002301def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002302
Craig Topper8104f262018-04-02 05:33:28 +00002303def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002304 let Latency = 25;
2305 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002306 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002307}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002308def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002309
2310def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2311 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002312 let NumMicroOps = 3;
2313 let ResourceCycles = [1,1,1];
2314}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002315def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002316
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002317def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2318 let Latency = 27;
2319 let NumMicroOps = 2;
2320 let ResourceCycles = [1,1];
2321}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002322def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002323
2324def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2325 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002326 let NumMicroOps = 8;
2327 let ResourceCycles = [2,4,1,1];
2328}
Craig Topper13a16502018-03-19 00:56:09 +00002329def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002330
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002331def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002332 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002333 let NumMicroOps = 3;
2334 let ResourceCycles = [1,1,1];
2335}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002336def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002337
2338def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2339 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002340 let NumMicroOps = 23;
2341 let ResourceCycles = [1,5,3,4,10];
2342}
Craig Topperfc179c62018-03-22 04:23:41 +00002343def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2344 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002345
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002346def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2347 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002348 let NumMicroOps = 23;
2349 let ResourceCycles = [1,5,2,1,4,10];
2350}
Craig Topperfc179c62018-03-22 04:23:41 +00002351def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2352 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002353
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002354def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2355 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002356 let NumMicroOps = 31;
2357 let ResourceCycles = [1,8,1,21];
2358}
Craig Topper391c6f92017-12-10 01:24:08 +00002359def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002360
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002361def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2362 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002363 let NumMicroOps = 18;
2364 let ResourceCycles = [1,1,2,3,1,1,1,8];
2365}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002366def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002367
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002368def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2369 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002370 let NumMicroOps = 39;
2371 let ResourceCycles = [1,10,1,1,26];
2372}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002373def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002374
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002375def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002376 let Latency = 42;
2377 let NumMicroOps = 22;
2378 let ResourceCycles = [2,20];
2379}
Craig Topper2d451e72018-03-18 08:38:06 +00002380def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002381
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002382def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2383 let Latency = 42;
2384 let NumMicroOps = 40;
2385 let ResourceCycles = [1,11,1,1,26];
2386}
Craig Topper391c6f92017-12-10 01:24:08 +00002387def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002388
2389def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2390 let Latency = 46;
2391 let NumMicroOps = 44;
2392 let ResourceCycles = [1,11,1,1,30];
2393}
2394def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2395
2396def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2397 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002398 let NumMicroOps = 64;
2399 let ResourceCycles = [2,8,5,10,39];
2400}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002401def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002402
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002403def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2404 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002405 let NumMicroOps = 88;
2406 let ResourceCycles = [4,4,31,1,2,1,45];
2407}
Craig Topper2d451e72018-03-18 08:38:06 +00002408def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002409
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002410def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2411 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002412 let NumMicroOps = 90;
2413 let ResourceCycles = [4,2,33,1,2,1,47];
2414}
Craig Topper2d451e72018-03-18 08:38:06 +00002415def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002416
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002417def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002418 let Latency = 75;
2419 let NumMicroOps = 15;
2420 let ResourceCycles = [6,3,6];
2421}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002422def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002423
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002424def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002425 let Latency = 76;
2426 let NumMicroOps = 32;
2427 let ResourceCycles = [7,2,8,3,1,11];
2428}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002429def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002430
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002431def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002432 let Latency = 102;
2433 let NumMicroOps = 66;
2434 let ResourceCycles = [4,2,4,8,14,34];
2435}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002436def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002437
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002438def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2439 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002440 let NumMicroOps = 100;
2441 let ResourceCycles = [9,1,11,16,1,11,21,30];
2442}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002443def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002444
2445} // SchedModel