blob: 32fd51bdfcf0ef3c831b60b9c7baf3ed6c020dc1 [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.
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000202defm : SKLWriteResPair<WriteVecIMul, [SKLPort01], 4, [1], 1, 6>; // Vector integer multiply.
203defm : SKLWriteResPair<WriteVecIMulY, [SKLPort01], 4, [1], 1, 7>; // Vector integer multiply (YMM/ZMM).
204defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>; // Vector PMULLD.
205defm : SKLWriteResPair<WritePMULLDY, [SKLPort01], 10, [2], 2, 7>; // Vector PMULLD (YMM/ZMM).
Simon Pilgrim819f2182018-05-02 17:58:50 +0000206defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1, [1], 1, 5>; // Vector shuffles.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000207defm : SKLWriteResPair<WriteShuffleY, [SKLPort5], 1, [1], 1, 7>; // Vector shuffles (YMM/ZMM).
208defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1, [1], 1, 6>; // Vector shuffles.
209defm : SKLWriteResPair<WriteVarShuffleY, [SKLPort5], 1, [1], 1, 7>; // Vector shuffles (YMM/ZMM).
Simon Pilgrim06e16542018-04-22 18:35:53 +0000210defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000211defm : SKLWriteResPair<WriteBlendY, [SKLPort5], 1, [1], 1, 7>; // Vector blends (YMM/ZMM).
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000212defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrim6732f6e2018-05-02 18:48:23 +0000213defm : SKLWriteResPair<WriteVarBlendY, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends (YMM/ZMM).
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000214defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000215defm : SKLWriteResPair<WriteMPSADY, [SKLPort5], 4, [2], 2, 7>; // Vector MPSAD.
216defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3, [1], 1, 6>; // Vector PSADBW.
217defm : SKLWriteResPair<WritePSADBWY, [SKLPort5], 3, [1], 1, 7>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000218defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000219
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000220// Vector insert/extract operations.
221def : WriteRes<WriteVecInsert, [SKLPort5]> {
222 let Latency = 2;
223 let NumMicroOps = 2;
224 let ResourceCycles = [2];
225}
226def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
227 let Latency = 6;
228 let NumMicroOps = 2;
229}
Simon Pilgrim819f2182018-05-02 17:58:50 +0000230def: InstRW<[WriteVecInsertLd], (instregex "(V?)MOV(H|L)(PD|PS)rm")>;
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000231
232def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
233 let Latency = 3;
234 let NumMicroOps = 2;
235}
236def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
237 let Latency = 2;
238 let NumMicroOps = 3;
239}
240
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000241// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000242defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
243defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
244defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000245
246// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000247
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000248// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000249def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
250 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000251 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000252 let ResourceCycles = [3];
253}
254def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000255 let Latency = 16;
256 let NumMicroOps = 4;
257 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000258}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000259
260// Packed Compare Explicit Length Strings, Return Mask
261def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
262 let Latency = 19;
263 let NumMicroOps = 9;
264 let ResourceCycles = [4,3,1,1];
265}
266def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
267 let Latency = 25;
268 let NumMicroOps = 10;
269 let ResourceCycles = [4,3,1,1,1];
270}
271
272// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000273def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000274 let Latency = 10;
275 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000276 let ResourceCycles = [3];
277}
278def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000279 let Latency = 16;
280 let NumMicroOps = 4;
281 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000282}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000283
284// Packed Compare Explicit Length Strings, Return Index
285def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
286 let Latency = 18;
287 let NumMicroOps = 8;
288 let ResourceCycles = [4,3,1];
289}
290def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
291 let Latency = 24;
292 let NumMicroOps = 9;
293 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000294}
295
Simon Pilgrima2f26782018-03-27 20:38:54 +0000296// MOVMSK Instructions.
297def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
298def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
299def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
300
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000301// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000302def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
303 let Latency = 4;
304 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305 let ResourceCycles = [1];
306}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000307def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
308 let Latency = 10;
309 let NumMicroOps = 2;
310 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000311}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000312
313def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
314 let Latency = 8;
315 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000316 let ResourceCycles = [2];
317}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000318def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000319 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000320 let NumMicroOps = 3;
321 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000322}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000323
324def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
325 let Latency = 20;
326 let NumMicroOps = 11;
327 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000328}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000329def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
330 let Latency = 25;
331 let NumMicroOps = 11;
332 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000333}
334
335// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000336def : WriteRes<WriteCLMul, [SKLPort5]> {
337 let Latency = 6;
338 let NumMicroOps = 1;
339 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000340}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000341def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
342 let Latency = 12;
343 let NumMicroOps = 2;
344 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000345}
346
347// Catch-all for expensive system instructions.
348def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
349
350// AVX2.
Simon Pilgrim819f2182018-05-02 17:58:50 +0000351defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector shuffles.
352defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // Fp 256-bit width vector variable shuffles.
353defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector shuffles.
354defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000355defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000356
357// Old microcoded instructions that nobody use.
358def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
359
360// Fence instructions.
361def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
362
Craig Topper05242bf2018-04-21 18:07:36 +0000363// Load/store MXCSR.
364def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
365def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
366
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000367// Nop, not very useful expect it provides a model for nops!
368def : WriteRes<WriteNop, []>;
369
370////////////////////////////////////////////////////////////////////////////////
371// Horizontal add/sub instructions.
372////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000373
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000374defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
375defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000376defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000377
378// Remaining instrs.
379
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000380def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000381 let Latency = 1;
382 let NumMicroOps = 1;
383 let ResourceCycles = [1];
384}
Craig Topperfc179c62018-03-22 04:23:41 +0000385def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
386 "MMX_PADDSWirr",
387 "MMX_PADDUSBirr",
388 "MMX_PADDUSWirr",
389 "MMX_PAVGBirr",
390 "MMX_PAVGWirr",
391 "MMX_PCMPEQBirr",
392 "MMX_PCMPEQDirr",
393 "MMX_PCMPEQWirr",
394 "MMX_PCMPGTBirr",
395 "MMX_PCMPGTDirr",
396 "MMX_PCMPGTWirr",
397 "MMX_PMAXSWirr",
398 "MMX_PMAXUBirr",
399 "MMX_PMINSWirr",
400 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000401 "MMX_PSUBSBirr",
402 "MMX_PSUBSWirr",
403 "MMX_PSUBUSBirr",
404 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000405
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000406def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000407 let Latency = 1;
408 let NumMicroOps = 1;
409 let ResourceCycles = [1];
410}
Craig Topperfc179c62018-03-22 04:23:41 +0000411def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
412 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000413 "MMX_MOVD64rr",
414 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000415 "UCOM_FPr",
416 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000417 "(V?)MOV64toPQIrr",
Simon Pilgrimfc0c26f2018-05-01 11:05:42 +0000418 "(V?)MOVDI2PDIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000419
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000420def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000421 let Latency = 1;
422 let NumMicroOps = 1;
423 let ResourceCycles = [1];
424}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000425def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000426
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000427def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000428 let Latency = 1;
429 let NumMicroOps = 1;
430 let ResourceCycles = [1];
431}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000432def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
433 "(V?)PABSD(Y?)rr",
434 "(V?)PABSW(Y?)rr",
435 "(V?)PADDSB(Y?)rr",
436 "(V?)PADDSW(Y?)rr",
437 "(V?)PADDUSB(Y?)rr",
438 "(V?)PADDUSW(Y?)rr",
439 "(V?)PAVGB(Y?)rr",
440 "(V?)PAVGW(Y?)rr",
441 "(V?)PCMPEQB(Y?)rr",
442 "(V?)PCMPEQD(Y?)rr",
443 "(V?)PCMPEQQ(Y?)rr",
444 "(V?)PCMPEQW(Y?)rr",
445 "(V?)PCMPGTB(Y?)rr",
446 "(V?)PCMPGTD(Y?)rr",
447 "(V?)PCMPGTW(Y?)rr",
448 "(V?)PMAXSB(Y?)rr",
449 "(V?)PMAXSD(Y?)rr",
450 "(V?)PMAXSW(Y?)rr",
451 "(V?)PMAXUB(Y?)rr",
452 "(V?)PMAXUD(Y?)rr",
453 "(V?)PMAXUW(Y?)rr",
454 "(V?)PMINSB(Y?)rr",
455 "(V?)PMINSD(Y?)rr",
456 "(V?)PMINSW(Y?)rr",
457 "(V?)PMINUB(Y?)rr",
458 "(V?)PMINUD(Y?)rr",
459 "(V?)PMINUW(Y?)rr",
460 "(V?)PSIGNB(Y?)rr",
461 "(V?)PSIGND(Y?)rr",
462 "(V?)PSIGNW(Y?)rr",
463 "(V?)PSLLD(Y?)ri",
464 "(V?)PSLLQ(Y?)ri",
465 "VPSLLVD(Y?)rr",
466 "VPSLLVQ(Y?)rr",
467 "(V?)PSLLW(Y?)ri",
468 "(V?)PSRAD(Y?)ri",
469 "VPSRAVD(Y?)rr",
470 "(V?)PSRAW(Y?)ri",
471 "(V?)PSRLD(Y?)ri",
472 "(V?)PSRLQ(Y?)ri",
473 "VPSRLVD(Y?)rr",
474 "VPSRLVQ(Y?)rr",
475 "(V?)PSRLW(Y?)ri",
476 "(V?)PSUBSB(Y?)rr",
477 "(V?)PSUBSW(Y?)rr",
478 "(V?)PSUBUSB(Y?)rr",
479 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000480
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000481def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000482 let Latency = 1;
483 let NumMicroOps = 1;
484 let ResourceCycles = [1];
485}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000486def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
487def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000488 "MMX_PABS(B|D|W)rr",
489 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000490 "MMX_PANDNirr",
491 "MMX_PANDirr",
492 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000493 "MMX_PSIGN(B|D|W)rr",
494 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000495 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000496
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000497def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000498 let Latency = 1;
499 let NumMicroOps = 1;
500 let ResourceCycles = [1];
501}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000502def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000503def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
504 "ADC(16|32|64)i",
505 "ADC(8|16|32|64)rr",
506 "ADCX(32|64)rr",
507 "ADOX(32|64)rr",
508 "BT(16|32|64)ri8",
509 "BT(16|32|64)rr",
510 "BTC(16|32|64)ri8",
511 "BTC(16|32|64)rr",
512 "BTR(16|32|64)ri8",
513 "BTR(16|32|64)rr",
514 "BTS(16|32|64)ri8",
515 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000516 "SBB(16|32|64)ri",
517 "SBB(16|32|64)i",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000518 "SBB(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000519
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000520def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
521 let Latency = 1;
522 let NumMicroOps = 1;
523 let ResourceCycles = [1];
524}
Craig Topperfc179c62018-03-22 04:23:41 +0000525def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
526 "BLSI(32|64)rr",
527 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000528 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000529
530def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
531 let Latency = 1;
532 let NumMicroOps = 1;
533 let ResourceCycles = [1];
534}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000535def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000536 "(V?)PADDD(Y?)rr",
537 "(V?)PADDQ(Y?)rr",
538 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000539 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000540 "(V?)PSUBB(Y?)rr",
541 "(V?)PSUBD(Y?)rr",
542 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000543 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000544
545def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
546 let Latency = 1;
547 let NumMicroOps = 1;
548 let ResourceCycles = [1];
549}
Craig Topperfbe31322018-04-05 21:56:19 +0000550def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000551def: InstRW<[SKLWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000552def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000553 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000554 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000555 "SGDT64m",
556 "SIDT64m",
Craig Topperfc179c62018-03-22 04:23:41 +0000557 "SMSW16m",
558 "STC",
559 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000560 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000561
562def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000563 let Latency = 1;
564 let NumMicroOps = 2;
565 let ResourceCycles = [1,1];
566}
Craig Topperfc179c62018-03-22 04:23:41 +0000567def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
568 "MMX_MOVD64from64rm",
569 "MMX_MOVD64mr",
570 "MMX_MOVNTQmr",
571 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000572 "MOVNTI_64mr",
573 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000574 "ST_FP(32|64|80)m",
Craig Topperfc179c62018-03-22 04:23:41 +0000575 "VEXTRACTF128mr",
576 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000577 "(V?)MOVAPDYmr",
578 "(V?)MOVAPS(Y?)mr",
579 "(V?)MOVDQA(Y?)mr",
580 "(V?)MOVDQU(Y?)mr",
581 "(V?)MOVHPDmr",
582 "(V?)MOVHPSmr",
583 "(V?)MOVLPDmr",
584 "(V?)MOVLPSmr",
585 "(V?)MOVNTDQ(Y?)mr",
586 "(V?)MOVNTPD(Y?)mr",
587 "(V?)MOVNTPS(Y?)mr",
588 "(V?)MOVPDI2DImr",
589 "(V?)MOVPQI2QImr",
590 "(V?)MOVPQIto64mr",
591 "(V?)MOVSDmr",
592 "(V?)MOVSSmr",
593 "(V?)MOVUPD(Y?)mr",
594 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000595 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000596
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000597def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000598 let Latency = 2;
599 let NumMicroOps = 1;
600 let ResourceCycles = [1];
601}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000602def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000603 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000604 "(V?)MOVPDI2DIrr",
605 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000606 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000607 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000608
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000609def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000610 let Latency = 2;
611 let NumMicroOps = 2;
612 let ResourceCycles = [2];
613}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000614def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000615
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000616def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000617 let Latency = 2;
618 let NumMicroOps = 2;
619 let ResourceCycles = [2];
620}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000621def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
622def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000623
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000624def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000625 let Latency = 2;
626 let NumMicroOps = 2;
627 let ResourceCycles = [2];
628}
Craig Topperfc179c62018-03-22 04:23:41 +0000629def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
630 "ROL(8|16|32|64)r1",
631 "ROL(8|16|32|64)ri",
632 "ROR(8|16|32|64)r1",
633 "ROR(8|16|32|64)ri",
634 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000635
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000636def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000637 let Latency = 2;
638 let NumMicroOps = 2;
639 let ResourceCycles = [2];
640}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000641def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
642 WAIT,
643 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000644
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000645def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000646 let Latency = 2;
647 let NumMicroOps = 2;
648 let ResourceCycles = [1,1];
649}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000650def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
651 "VMASKMOVPS(Y?)mr",
652 "VPMASKMOVD(Y?)mr",
653 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000654
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000655def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000656 let Latency = 2;
657 let NumMicroOps = 2;
658 let ResourceCycles = [1,1];
659}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000660def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
661 "(V?)PSLLQrr",
662 "(V?)PSLLWrr",
663 "(V?)PSRADrr",
664 "(V?)PSRAWrr",
665 "(V?)PSRLDrr",
666 "(V?)PSRLQrr",
667 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000668
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000669def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000670 let Latency = 2;
671 let NumMicroOps = 2;
672 let ResourceCycles = [1,1];
673}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000674def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000675
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000676def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000677 let Latency = 2;
678 let NumMicroOps = 2;
679 let ResourceCycles = [1,1];
680}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000681def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000682
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000683def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000684 let Latency = 2;
685 let NumMicroOps = 2;
686 let ResourceCycles = [1,1];
687}
Craig Topper498875f2018-04-04 17:54:19 +0000688def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
689
690def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
691 let Latency = 1;
692 let NumMicroOps = 1;
693 let ResourceCycles = [1];
694}
695def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000696
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000697def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000698 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000699 let NumMicroOps = 2;
700 let ResourceCycles = [1,1];
701}
Craig Topper2d451e72018-03-18 08:38:06 +0000702def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000703def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000704def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
705 "ADC8ri",
706 "SBB8i8",
707 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000708
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000709def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
710 let Latency = 2;
711 let NumMicroOps = 3;
712 let ResourceCycles = [1,1,1];
713}
714def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
715
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000716def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
717 let Latency = 2;
718 let NumMicroOps = 3;
719 let ResourceCycles = [1,1,1];
720}
721def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
722
723def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
724 let Latency = 2;
725 let NumMicroOps = 3;
726 let ResourceCycles = [1,1,1];
727}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000728def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
729 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000730def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000731 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000732
733def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
734 let Latency = 3;
735 let NumMicroOps = 1;
736 let ResourceCycles = [1];
737}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000738def: InstRW<[SKLWriteResGroup29], (instregex "CMOV(N?)(B|BE|E|P)_F",
739 "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000740 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000741 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000742 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000743
Clement Courbet327fac42018-03-07 08:14:02 +0000744def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000745 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000746 let NumMicroOps = 2;
747 let ResourceCycles = [1,1];
748}
Clement Courbet327fac42018-03-07 08:14:02 +0000749def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000750
751def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
752 let Latency = 3;
753 let NumMicroOps = 1;
754 let ResourceCycles = [1];
755}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000756def: InstRW<[SKLWriteResGroup30], (instregex "(ADD|SUB|SUBR)_FPrST0",
757 "(ADD|SUB|SUBR)_FST0r",
758 "(ADD|SUB|SUBR)_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000759 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000760 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000761 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000762 "VPMOVSXBDYrr",
763 "VPMOVSXBQYrr",
764 "VPMOVSXBWYrr",
765 "VPMOVSXDQYrr",
766 "VPMOVSXWDYrr",
767 "VPMOVSXWQYrr",
768 "VPMOVZXBDYrr",
769 "VPMOVZXBQYrr",
770 "VPMOVZXBWYrr",
771 "VPMOVZXDQYrr",
772 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000773 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000774
775def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
776 let Latency = 3;
777 let NumMicroOps = 2;
778 let ResourceCycles = [1,1];
779}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000780def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000781
782def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
783 let Latency = 3;
784 let NumMicroOps = 2;
785 let ResourceCycles = [1,1];
786}
787def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
788
789def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
790 let Latency = 3;
791 let NumMicroOps = 3;
792 let ResourceCycles = [3];
793}
Craig Topperfc179c62018-03-22 04:23:41 +0000794def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
795 "ROR(8|16|32|64)rCL",
796 "SAR(8|16|32|64)rCL",
797 "SHL(8|16|32|64)rCL",
798 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000799
800def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000801 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000802 let NumMicroOps = 3;
803 let ResourceCycles = [3];
804}
Craig Topperb5f26592018-04-19 18:00:17 +0000805def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
806 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
807 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000808
809def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
810 let Latency = 3;
811 let NumMicroOps = 3;
812 let ResourceCycles = [1,2];
813}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000814def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000815
816def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
817 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000818 let NumMicroOps = 3;
819 let ResourceCycles = [2,1];
820}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000821def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
822 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000823
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000824def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
825 let Latency = 3;
826 let NumMicroOps = 3;
827 let ResourceCycles = [2,1];
828}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000829def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000830
831def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
832 let Latency = 3;
833 let NumMicroOps = 3;
834 let ResourceCycles = [2,1];
835}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000836def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
837 "(V?)PHADDW(Y?)rr",
838 "(V?)PHSUBD(Y?)rr",
839 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000840
841def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
842 let Latency = 3;
843 let NumMicroOps = 3;
844 let ResourceCycles = [2,1];
845}
Craig Topperfc179c62018-03-22 04:23:41 +0000846def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
847 "MMX_PACKSSWBirr",
848 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000849
850def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
851 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000852 let NumMicroOps = 3;
853 let ResourceCycles = [1,2];
854}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000855def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000856
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000857def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
858 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000859 let NumMicroOps = 3;
860 let ResourceCycles = [1,2];
861}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000862def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000863
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000864def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
865 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000866 let NumMicroOps = 3;
867 let ResourceCycles = [1,2];
868}
Craig Topperfc179c62018-03-22 04:23:41 +0000869def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
870 "RCL(8|16|32|64)ri",
871 "RCR(8|16|32|64)r1",
872 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000873
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000874def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
875 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000876 let NumMicroOps = 3;
877 let ResourceCycles = [1,1,1];
878}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000879def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000880
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000881def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
882 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000883 let NumMicroOps = 4;
884 let ResourceCycles = [1,1,2];
885}
Craig Topperf4cd9082018-01-19 05:47:32 +0000886def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000887
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000888def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
889 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000890 let NumMicroOps = 4;
891 let ResourceCycles = [1,1,1,1];
892}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000893def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000894
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000895def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
896 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000897 let NumMicroOps = 4;
898 let ResourceCycles = [1,1,1,1];
899}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000900def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000901
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000902def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000903 let Latency = 4;
904 let NumMicroOps = 1;
905 let ResourceCycles = [1];
906}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000907def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000908 "MMX_PMADDWDirr",
909 "MMX_PMULHRSWrr",
910 "MMX_PMULHUWirr",
911 "MMX_PMULHWirr",
912 "MMX_PMULLWirr",
913 "MMX_PMULUDQirr",
914 "MUL_FPrST0",
915 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000916 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000917
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000918def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000919 let Latency = 4;
920 let NumMicroOps = 1;
921 let ResourceCycles = [1];
922}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +0000923def: InstRW<[SKLWriteResGroup48], (instregex "(V?)CVTDQ2PS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000924 "(V?)CVTPS2DQ(Y?)rr",
Simon Pilgrim93c878c2018-05-03 10:31:20 +0000925 "(V?)CVTTPS2DQ(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?)PSHUFDmi",
1272 "(V?)PSHUFHWmi",
1273 "(V?)PSHUFLWmi",
1274 "(V?)PUNPCKHBWrm",
1275 "(V?)PUNPCKHDQrm",
1276 "(V?)PUNPCKHQDQrm",
1277 "(V?)PUNPCKHWDrm",
1278 "(V?)PUNPCKLBWrm",
1279 "(V?)PUNPCKLDQrm",
1280 "(V?)PUNPCKLQDQrm",
Simon Pilgrim819f2182018-05-02 17:58:50 +00001281 "(V?)PUNPCKLWDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001282
Simon Pilgrim6732f6e2018-05-02 18:48:23 +00001283def SKLWriteResGroup88a : SchedWriteRes<[SKLPort5,SKLPort23]> {
1284 let Latency = 6;
1285 let NumMicroOps = 2;
1286 let ResourceCycles = [1,1];
1287}
1288def: InstRW<[SKLWriteResGroup88a], (instregex "MMX_PSHUFBrm")>;
1289
Craig Topper58afb4e2018-03-22 21:10:07 +00001290def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001291 let Latency = 7;
1292 let NumMicroOps = 2;
1293 let ResourceCycles = [1,1];
1294}
Craig Topperfc179c62018-03-22 04:23:41 +00001295def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1296 "VCVTPD2PSYrr",
1297 "VCVTPH2PSYrr",
1298 "VCVTPS2PDYrr",
1299 "VCVTPS2PHYrr",
1300 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001301
1302def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1303 let Latency = 7;
1304 let NumMicroOps = 2;
1305 let ResourceCycles = [1,1];
1306}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001307def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1308 "(V?)PABSDrm",
1309 "(V?)PABSWrm",
1310 "(V?)PADDSBrm",
1311 "(V?)PADDSWrm",
1312 "(V?)PADDUSBrm",
1313 "(V?)PADDUSWrm",
1314 "(V?)PAVGBrm",
1315 "(V?)PAVGWrm",
1316 "(V?)PCMPEQBrm",
1317 "(V?)PCMPEQDrm",
1318 "(V?)PCMPEQQrm",
1319 "(V?)PCMPEQWrm",
1320 "(V?)PCMPGTBrm",
1321 "(V?)PCMPGTDrm",
1322 "(V?)PCMPGTWrm",
1323 "(V?)PMAXSBrm",
1324 "(V?)PMAXSDrm",
1325 "(V?)PMAXSWrm",
1326 "(V?)PMAXUBrm",
1327 "(V?)PMAXUDrm",
1328 "(V?)PMAXUWrm",
1329 "(V?)PMINSBrm",
1330 "(V?)PMINSDrm",
1331 "(V?)PMINSWrm",
1332 "(V?)PMINUBrm",
1333 "(V?)PMINUDrm",
1334 "(V?)PMINUWrm",
1335 "(V?)PSIGNBrm",
1336 "(V?)PSIGNDrm",
1337 "(V?)PSIGNWrm",
1338 "(V?)PSLLDrm",
1339 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001340 "VPSLLVDrm",
1341 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001342 "(V?)PSLLWrm",
1343 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001344 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001345 "(V?)PSRAWrm",
1346 "(V?)PSRLDrm",
1347 "(V?)PSRLQrm",
1348 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001349 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001350 "(V?)PSRLWrm",
1351 "(V?)PSUBSBrm",
1352 "(V?)PSUBSWrm",
1353 "(V?)PSUBUSBrm",
1354 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001355
1356def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1357 let Latency = 7;
1358 let NumMicroOps = 2;
1359 let ResourceCycles = [1,1];
1360}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001361def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001362 "(V?)INSERTI128rm",
1363 "(V?)MASKMOVPDrm",
1364 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001365 "(V?)PADDBrm",
1366 "(V?)PADDDrm",
1367 "(V?)PADDQrm",
1368 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001369 "(V?)PBLENDDrmi",
1370 "(V?)PMASKMOVDrm",
1371 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001372 "(V?)PSUBBrm",
1373 "(V?)PSUBDrm",
1374 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001375 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001376
1377def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1378 let Latency = 7;
1379 let NumMicroOps = 3;
1380 let ResourceCycles = [2,1];
1381}
Craig Topperfc179c62018-03-22 04:23:41 +00001382def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1383 "MMX_PACKSSWBirm",
1384 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001385
1386def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1387 let Latency = 7;
1388 let NumMicroOps = 3;
1389 let ResourceCycles = [1,2];
1390}
Craig Topperf4cd9082018-01-19 05:47:32 +00001391def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001392
1393def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1394 let Latency = 7;
1395 let NumMicroOps = 3;
1396 let ResourceCycles = [1,2];
1397}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001398def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1399 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001400
Craig Topper58afb4e2018-03-22 21:10:07 +00001401def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001402 let Latency = 7;
1403 let NumMicroOps = 3;
1404 let ResourceCycles = [1,1,1];
1405}
Craig Topperfc179c62018-03-22 04:23:41 +00001406def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1407 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001408
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001409def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001410 let Latency = 7;
1411 let NumMicroOps = 3;
1412 let ResourceCycles = [1,1,1];
1413}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001414def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001415
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001416def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001417 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001418 let NumMicroOps = 3;
1419 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001420}
Craig Topperfc179c62018-03-22 04:23:41 +00001421def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1422 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001423
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001424def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1425 let Latency = 7;
1426 let NumMicroOps = 5;
1427 let ResourceCycles = [1,1,1,2];
1428}
Craig Topperfc179c62018-03-22 04:23:41 +00001429def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1430 "ROL(8|16|32|64)mi",
1431 "ROR(8|16|32|64)m1",
1432 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001433
1434def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1435 let Latency = 7;
1436 let NumMicroOps = 5;
1437 let ResourceCycles = [1,1,1,2];
1438}
Craig Topper13a16502018-03-19 00:56:09 +00001439def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001440
1441def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1442 let Latency = 7;
1443 let NumMicroOps = 5;
1444 let ResourceCycles = [1,1,1,1,1];
1445}
Craig Topperfc179c62018-03-22 04:23:41 +00001446def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1447 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001448
1449def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001450 let Latency = 7;
1451 let NumMicroOps = 7;
1452 let ResourceCycles = [1,3,1,2];
1453}
Craig Topper2d451e72018-03-18 08:38:06 +00001454def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001455
Craig Topper58afb4e2018-03-22 21:10:07 +00001456def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001457 let Latency = 8;
1458 let NumMicroOps = 2;
1459 let ResourceCycles = [2];
1460}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001461def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1462 "(V?)ROUNDPS(Y?)r",
1463 "(V?)ROUNDSDr",
1464 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001465
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001466def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001467 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001468 let NumMicroOps = 2;
1469 let ResourceCycles = [1,1];
1470}
Craig Topperfc179c62018-03-22 04:23:41 +00001471def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1472 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001473
1474def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1475 let Latency = 8;
1476 let NumMicroOps = 2;
1477 let ResourceCycles = [1,1];
1478}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001479def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1480 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001481
1482def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001483 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001484 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001485 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001486}
Craig Topperf846e2d2018-04-19 05:34:05 +00001487def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001488
Craig Topperf846e2d2018-04-19 05:34:05 +00001489def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1490 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001491 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001492 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001493}
Craig Topperfc179c62018-03-22 04:23:41 +00001494def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001495
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001496def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1497 let Latency = 8;
1498 let NumMicroOps = 2;
1499 let ResourceCycles = [1,1];
1500}
Craig Topperfc179c62018-03-22 04:23:41 +00001501def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1502 "FCOM64m",
1503 "FCOMP32m",
1504 "FCOMP64m",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001505 "MMX_PSADBWirm", // TODO - SKLWriteResGroup120??
Craig Topperfc179c62018-03-22 04:23:41 +00001506 "VPBROADCASTBYrm",
1507 "VPBROADCASTWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001508 "VPMOVSXBDYrm",
1509 "VPMOVSXBQYrm",
Simon Pilgrim6732f6e2018-05-02 18:48:23 +00001510 "VPMOVSXWQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001511
1512def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1513 let Latency = 8;
1514 let NumMicroOps = 2;
1515 let ResourceCycles = [1,1];
1516}
Craig Topperfc179c62018-03-22 04:23:41 +00001517def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1518 "VPABSDYrm",
1519 "VPABSWYrm",
1520 "VPADDSBYrm",
1521 "VPADDSWYrm",
1522 "VPADDUSBYrm",
1523 "VPADDUSWYrm",
1524 "VPAVGBYrm",
1525 "VPAVGWYrm",
1526 "VPCMPEQBYrm",
1527 "VPCMPEQDYrm",
1528 "VPCMPEQQYrm",
1529 "VPCMPEQWYrm",
1530 "VPCMPGTBYrm",
1531 "VPCMPGTDYrm",
1532 "VPCMPGTWYrm",
1533 "VPMAXSBYrm",
1534 "VPMAXSDYrm",
1535 "VPMAXSWYrm",
1536 "VPMAXUBYrm",
1537 "VPMAXUDYrm",
1538 "VPMAXUWYrm",
1539 "VPMINSBYrm",
1540 "VPMINSDYrm",
1541 "VPMINSWYrm",
1542 "VPMINUBYrm",
1543 "VPMINUDYrm",
1544 "VPMINUWYrm",
1545 "VPSIGNBYrm",
1546 "VPSIGNDYrm",
1547 "VPSIGNWYrm",
1548 "VPSLLDYrm",
1549 "VPSLLQYrm",
1550 "VPSLLVDYrm",
1551 "VPSLLVQYrm",
1552 "VPSLLWYrm",
1553 "VPSRADYrm",
1554 "VPSRAVDYrm",
1555 "VPSRAWYrm",
1556 "VPSRLDYrm",
1557 "VPSRLQYrm",
1558 "VPSRLVDYrm",
1559 "VPSRLVQYrm",
1560 "VPSRLWYrm",
1561 "VPSUBSBYrm",
1562 "VPSUBSWYrm",
1563 "VPSUBUSBYrm",
1564 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001565
1566def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1567 let Latency = 8;
1568 let NumMicroOps = 2;
1569 let ResourceCycles = [1,1];
1570}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001571def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001572 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001573 "VPADDBYrm",
1574 "VPADDDYrm",
1575 "VPADDQYrm",
1576 "VPADDWYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001577 "VPBLENDDYrmi",
1578 "VPMASKMOVDYrm",
1579 "VPMASKMOVQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001580 "VPSUBBYrm",
1581 "VPSUBDYrm",
1582 "VPSUBQYrm",
Simon Pilgrim57f2b182018-05-01 12:39:17 +00001583 "VPSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001584
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001585def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1586 let Latency = 8;
1587 let NumMicroOps = 4;
1588 let ResourceCycles = [1,2,1];
1589}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001590def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001591
1592def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1593 let Latency = 8;
1594 let NumMicroOps = 4;
1595 let ResourceCycles = [2,1,1];
1596}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001597def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001598
Craig Topper58afb4e2018-03-22 21:10:07 +00001599def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001600 let Latency = 8;
1601 let NumMicroOps = 4;
1602 let ResourceCycles = [1,1,1,1];
1603}
1604def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1605
1606def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1607 let Latency = 8;
1608 let NumMicroOps = 5;
1609 let ResourceCycles = [1,1,3];
1610}
Craig Topper13a16502018-03-19 00:56:09 +00001611def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001612
1613def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1614 let Latency = 8;
1615 let NumMicroOps = 5;
1616 let ResourceCycles = [1,1,1,2];
1617}
Craig Topperfc179c62018-03-22 04:23:41 +00001618def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1619 "RCL(8|16|32|64)mi",
1620 "RCR(8|16|32|64)m1",
1621 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001622
1623def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1624 let Latency = 8;
1625 let NumMicroOps = 6;
1626 let ResourceCycles = [1,1,1,3];
1627}
Craig Topperfc179c62018-03-22 04:23:41 +00001628def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1629 "SAR(8|16|32|64)mCL",
1630 "SHL(8|16|32|64)mCL",
1631 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001632
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001633def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1634 let Latency = 8;
1635 let NumMicroOps = 6;
1636 let ResourceCycles = [1,1,1,2,1];
1637}
Craig Topper9f834812018-04-01 21:54:24 +00001638def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001639 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001640 "SBB(8|16|32|64)mi")>;
1641def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1642 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001643
1644def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1645 let Latency = 9;
1646 let NumMicroOps = 2;
1647 let ResourceCycles = [1,1];
1648}
Craig Topperfc179c62018-03-22 04:23:41 +00001649def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1650 "MMX_PMADDUBSWrm",
1651 "MMX_PMADDWDirm",
1652 "MMX_PMULHRSWrm",
1653 "MMX_PMULHUWirm",
1654 "MMX_PMULHWirm",
1655 "MMX_PMULLWirm",
1656 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001657 "VTESTPDYrm",
1658 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001659
1660def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1661 let Latency = 9;
1662 let NumMicroOps = 2;
1663 let ResourceCycles = [1,1];
1664}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001665def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001666 "VPMOVSXBWYrm",
1667 "VPMOVSXDQYrm",
1668 "VPMOVSXWDYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001669 "VPMOVZXWDYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001670
1671def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1672 let Latency = 9;
1673 let NumMicroOps = 2;
1674 let ResourceCycles = [1,1];
1675}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001676def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1677 "(V?)ADDSSrm",
1678 "(V?)CMPSDrm",
1679 "(V?)CMPSSrm",
1680 "(V?)MAX(C?)SDrm",
1681 "(V?)MAX(C?)SSrm",
1682 "(V?)MIN(C?)SDrm",
1683 "(V?)MIN(C?)SSrm",
1684 "(V?)MULSDrm",
1685 "(V?)MULSSrm",
1686 "(V?)SUBSDrm",
1687 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001688
Craig Topper58afb4e2018-03-22 21:10:07 +00001689def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001690 let Latency = 9;
1691 let NumMicroOps = 2;
1692 let ResourceCycles = [1,1];
1693}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001694def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001695 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001696 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001697 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001698
Craig Topper58afb4e2018-03-22 21:10:07 +00001699def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001700 let Latency = 9;
1701 let NumMicroOps = 3;
1702 let ResourceCycles = [1,2];
1703}
Craig Topperfc179c62018-03-22 04:23:41 +00001704def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001705
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001706def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1707 let Latency = 9;
1708 let NumMicroOps = 3;
1709 let ResourceCycles = [1,1,1];
1710}
Craig Topperfc179c62018-03-22 04:23:41 +00001711def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001712
1713def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1714 let Latency = 9;
1715 let NumMicroOps = 3;
1716 let ResourceCycles = [1,1,1];
1717}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001718def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001719
1720def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001721 let Latency = 9;
1722 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001723 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001724}
Craig Topperfc179c62018-03-22 04:23:41 +00001725def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1726 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001727
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001728def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1729 let Latency = 9;
1730 let NumMicroOps = 4;
1731 let ResourceCycles = [2,1,1];
1732}
Craig Topperfc179c62018-03-22 04:23:41 +00001733def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1734 "(V?)PHADDWrm",
1735 "(V?)PHSUBDrm",
1736 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001737
1738def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1739 let Latency = 9;
1740 let NumMicroOps = 4;
1741 let ResourceCycles = [1,1,1,1];
1742}
Craig Topperfc179c62018-03-22 04:23:41 +00001743def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1744 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001745
1746def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1747 let Latency = 9;
1748 let NumMicroOps = 5;
1749 let ResourceCycles = [1,2,1,1];
1750}
Craig Topperfc179c62018-03-22 04:23:41 +00001751def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1752 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001753
1754def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1755 let Latency = 10;
1756 let NumMicroOps = 2;
1757 let ResourceCycles = [1,1];
1758}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001759def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001760 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001761
1762def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1763 let Latency = 10;
1764 let NumMicroOps = 2;
1765 let ResourceCycles = [1,1];
1766}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001767def: InstRW<[SKLWriteResGroup133], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1768 "ILD_F(16|32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001769 "VPCMPGTQYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001770 "VPMOVZXBDYrm",
1771 "VPMOVZXBQYrm",
1772 "VPMOVZXBWYrm",
1773 "VPMOVZXDQYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001774 "VPMOVZXWQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001775
1776def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1777 let Latency = 10;
1778 let NumMicroOps = 2;
1779 let ResourceCycles = [1,1];
1780}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001781def: InstRW<[SKLWriteResGroup134], (instregex "(V?)CVTDQ2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001782 "(V?)CVTPH2PSYrm",
1783 "(V?)CVTPS2DQrm",
1784 "(V?)CVTSS2SDrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001785 "(V?)CVTTPS2DQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001786
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001787def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1788 let Latency = 10;
1789 let NumMicroOps = 3;
1790 let ResourceCycles = [1,1,1];
1791}
Craig Topperfc179c62018-03-22 04:23:41 +00001792def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1793 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001794
Craig Topper58afb4e2018-03-22 21:10:07 +00001795def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001796 let Latency = 10;
1797 let NumMicroOps = 3;
1798 let ResourceCycles = [1,1,1];
1799}
Craig Topperfc179c62018-03-22 04:23:41 +00001800def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001801
1802def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001803 let Latency = 10;
1804 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001805 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001806}
Craig Topperfc179c62018-03-22 04:23:41 +00001807def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1808 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001809
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001810def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1811 let Latency = 10;
1812 let NumMicroOps = 4;
1813 let ResourceCycles = [2,1,1];
1814}
Craig Topperfc179c62018-03-22 04:23:41 +00001815def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1816 "VPHADDWYrm",
1817 "VPHSUBDYrm",
1818 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001819
1820def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001821 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001822 let NumMicroOps = 4;
1823 let ResourceCycles = [1,1,1,1];
1824}
Craig Topperf846e2d2018-04-19 05:34:05 +00001825def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001826
1827def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1828 let Latency = 10;
1829 let NumMicroOps = 8;
1830 let ResourceCycles = [1,1,1,1,1,3];
1831}
Craig Topper13a16502018-03-19 00:56:09 +00001832def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001833
1834def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001835 let Latency = 10;
1836 let NumMicroOps = 10;
1837 let ResourceCycles = [9,1];
1838}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001839def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001840
Craig Topper8104f262018-04-02 05:33:28 +00001841def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001842 let Latency = 11;
1843 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001844 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001845}
Craig Topper8104f262018-04-02 05:33:28 +00001846def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001847 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001848
Craig Topper8104f262018-04-02 05:33:28 +00001849def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1850 let Latency = 11;
1851 let NumMicroOps = 1;
1852 let ResourceCycles = [1,5];
1853}
1854def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1855
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001856def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001857 let Latency = 11;
1858 let NumMicroOps = 2;
1859 let ResourceCycles = [1,1];
1860}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001861def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F(32|64)m",
Craig Topperfc179c62018-03-22 04:23:41 +00001862 "VRCPPSYm",
1863 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001864
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001865def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1866 let Latency = 11;
1867 let NumMicroOps = 2;
1868 let ResourceCycles = [1,1];
1869}
Simon Pilgrime93fd5f2018-05-02 09:18:49 +00001870def: InstRW<[SKLWriteResGroup147], (instregex "VCVTDQ2PSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001871 "VCVTPS2DQYrm",
1872 "VCVTPS2PDYrm",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001873 "VCVTTPS2DQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001874
1875def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1876 let Latency = 11;
1877 let NumMicroOps = 3;
1878 let ResourceCycles = [2,1];
1879}
Craig Topperfc179c62018-03-22 04:23:41 +00001880def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
1881 "FICOM32m",
1882 "FICOMP16m",
Simon Pilgrim93c878c2018-05-03 10:31:20 +00001883 "FICOMP32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001884
1885def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1886 let Latency = 11;
1887 let NumMicroOps = 3;
1888 let ResourceCycles = [1,1,1];
1889}
Craig Topperfc179c62018-03-22 04:23:41 +00001890def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001891
Craig Topper58afb4e2018-03-22 21:10:07 +00001892def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001893 let Latency = 11;
1894 let NumMicroOps = 3;
1895 let ResourceCycles = [1,1,1];
1896}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001897def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
1898 "(V?)CVTSD2SIrm",
1899 "(V?)CVTSS2SI64rm",
1900 "(V?)CVTSS2SIrm",
1901 "(V?)CVTTSD2SI64rm",
1902 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001903 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001904 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001905
Craig Topper58afb4e2018-03-22 21:10:07 +00001906def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001907 let Latency = 11;
1908 let NumMicroOps = 3;
1909 let ResourceCycles = [1,1,1];
1910}
Craig Topperfc179c62018-03-22 04:23:41 +00001911def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
1912 "CVTPD2PSrm",
1913 "CVTTPD2DQrm",
1914 "MMX_CVTPD2PIirm",
1915 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001916
1917def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1918 let Latency = 11;
1919 let NumMicroOps = 6;
1920 let ResourceCycles = [1,1,1,2,1];
1921}
Craig Topperfc179c62018-03-22 04:23:41 +00001922def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
1923 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001924
1925def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001926 let Latency = 11;
1927 let NumMicroOps = 7;
1928 let ResourceCycles = [2,3,2];
1929}
Craig Topperfc179c62018-03-22 04:23:41 +00001930def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
1931 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001932
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001933def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001934 let Latency = 11;
1935 let NumMicroOps = 9;
1936 let ResourceCycles = [1,5,1,2];
1937}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001938def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001939
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001940def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001941 let Latency = 11;
1942 let NumMicroOps = 11;
1943 let ResourceCycles = [2,9];
1944}
Craig Topperfc179c62018-03-22 04:23:41 +00001945def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001946
Craig Topper8104f262018-04-02 05:33:28 +00001947def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001948 let Latency = 12;
1949 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001950 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001951}
Craig Topper8104f262018-04-02 05:33:28 +00001952def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001953 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001954
Craig Topper8104f262018-04-02 05:33:28 +00001955def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1956 let Latency = 12;
1957 let NumMicroOps = 1;
1958 let ResourceCycles = [1,6];
1959}
1960def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
1961
Craig Topper58afb4e2018-03-22 21:10:07 +00001962def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001963 let Latency = 12;
1964 let NumMicroOps = 4;
1965 let ResourceCycles = [1,1,1,1];
1966}
1967def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
1968
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001969def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001970 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001971 let NumMicroOps = 3;
1972 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001973}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001974def: InstRW<[SKLWriteResGroup162], (instregex "(ADD|SUB|SUBR)_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001975
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001976def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1977 let Latency = 13;
1978 let NumMicroOps = 3;
1979 let ResourceCycles = [1,1,1];
1980}
1981def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
1982
Craig Topper58afb4e2018-03-22 21:10:07 +00001983def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001984 let Latency = 13;
1985 let NumMicroOps = 4;
1986 let ResourceCycles = [1,3];
1987}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001988def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001989
Craig Topper8104f262018-04-02 05:33:28 +00001990def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001991 let Latency = 14;
1992 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001993 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001994}
Craig Topper8104f262018-04-02 05:33:28 +00001995def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001996 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001997
Craig Topper8104f262018-04-02 05:33:28 +00001998def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1999 let Latency = 14;
2000 let NumMicroOps = 1;
2001 let ResourceCycles = [1,5];
2002}
2003def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2004
Craig Topper58afb4e2018-03-22 21:10:07 +00002005def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002006 let Latency = 14;
2007 let NumMicroOps = 3;
2008 let ResourceCycles = [1,2];
2009}
Craig Topperfc179c62018-03-22 04:23:41 +00002010def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2011def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2012def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2013def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002014
2015def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2016 let Latency = 14;
2017 let NumMicroOps = 3;
2018 let ResourceCycles = [1,1,1];
2019}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002020def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002021
2022def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002023 let Latency = 14;
2024 let NumMicroOps = 10;
2025 let ResourceCycles = [2,4,1,3];
2026}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002027def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002028
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002029def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002030 let Latency = 15;
2031 let NumMicroOps = 1;
2032 let ResourceCycles = [1];
2033}
Craig Topperfc179c62018-03-22 04:23:41 +00002034def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2035 "DIVR_FST0r",
2036 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002037
Craig Topper58afb4e2018-03-22 21:10:07 +00002038def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002039 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002040 let NumMicroOps = 3;
2041 let ResourceCycles = [1,2];
2042}
Craig Topper40d3b322018-03-22 21:55:20 +00002043def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2044 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002045
Craig Topper58afb4e2018-03-22 21:10:07 +00002046def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002047 let Latency = 15;
2048 let NumMicroOps = 4;
2049 let ResourceCycles = [1,1,2];
2050}
Craig Topperfc179c62018-03-22 04:23:41 +00002051def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002052
2053def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2054 let Latency = 15;
2055 let NumMicroOps = 10;
2056 let ResourceCycles = [1,1,1,5,1,1];
2057}
Craig Topper13a16502018-03-19 00:56:09 +00002058def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002059
Craig Topper8104f262018-04-02 05:33:28 +00002060def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002061 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002062 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002063 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002064}
Craig Topperfc179c62018-03-22 04:23:41 +00002065def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002066
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002067def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2068 let Latency = 16;
2069 let NumMicroOps = 14;
2070 let ResourceCycles = [1,1,1,4,2,5];
2071}
2072def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2073
2074def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002075 let Latency = 16;
2076 let NumMicroOps = 16;
2077 let ResourceCycles = [16];
2078}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002079def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002080
Craig Topper8104f262018-04-02 05:33:28 +00002081def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002082 let Latency = 17;
2083 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002084 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002085}
Craig Topper8104f262018-04-02 05:33:28 +00002086def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2087
2088def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2089 let Latency = 17;
2090 let NumMicroOps = 2;
2091 let ResourceCycles = [1,1,3];
2092}
2093def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002094
2095def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002096 let Latency = 17;
2097 let NumMicroOps = 15;
2098 let ResourceCycles = [2,1,2,4,2,4];
2099}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002100def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002101
Craig Topper8104f262018-04-02 05:33:28 +00002102def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002103 let Latency = 18;
2104 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002105 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002106}
Craig Topper8104f262018-04-02 05:33:28 +00002107def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002108 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002109
Craig Topper8104f262018-04-02 05:33:28 +00002110def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2111 let Latency = 18;
2112 let NumMicroOps = 1;
2113 let ResourceCycles = [1,12];
2114}
2115def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2116
2117def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002118 let Latency = 18;
2119 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002120 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002121}
Craig Topper8104f262018-04-02 05:33:28 +00002122def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2123
2124def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2125 let Latency = 18;
2126 let NumMicroOps = 2;
2127 let ResourceCycles = [1,1,3];
2128}
2129def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002130
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002131def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002132 let Latency = 18;
2133 let NumMicroOps = 8;
2134 let ResourceCycles = [1,1,1,5];
2135}
Craig Topperfc179c62018-03-22 04:23:41 +00002136def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002137
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002138def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002139 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002140 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002141 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002142}
Craig Topper13a16502018-03-19 00:56:09 +00002143def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002144
Craig Topper8104f262018-04-02 05:33:28 +00002145def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002146 let Latency = 19;
2147 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002148 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002149}
Craig Topper8104f262018-04-02 05:33:28 +00002150def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2151
2152def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2153 let Latency = 19;
2154 let NumMicroOps = 2;
2155 let ResourceCycles = [1,1,6];
2156}
2157def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002158
Craig Topper58afb4e2018-03-22 21:10:07 +00002159def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002160 let Latency = 19;
2161 let NumMicroOps = 5;
2162 let ResourceCycles = [1,1,3];
2163}
Craig Topperfc179c62018-03-22 04:23:41 +00002164def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002165
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002166def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002167 let Latency = 20;
2168 let NumMicroOps = 1;
2169 let ResourceCycles = [1];
2170}
Craig Topperfc179c62018-03-22 04:23:41 +00002171def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2172 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002173 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002174
Craig Topper8104f262018-04-02 05:33:28 +00002175def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002176 let Latency = 20;
2177 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002178 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002179}
Craig Topperfc179c62018-03-22 04:23:41 +00002180def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002181
Craig Topper58afb4e2018-03-22 21:10:07 +00002182def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002183 let Latency = 20;
2184 let NumMicroOps = 5;
2185 let ResourceCycles = [1,1,3];
2186}
2187def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2188
2189def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2190 let Latency = 20;
2191 let NumMicroOps = 8;
2192 let ResourceCycles = [1,1,1,1,1,1,2];
2193}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002194def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002195
2196def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002197 let Latency = 20;
2198 let NumMicroOps = 10;
2199 let ResourceCycles = [1,2,7];
2200}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002201def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002202
Craig Topper8104f262018-04-02 05:33:28 +00002203def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002204 let Latency = 21;
2205 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002206 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002207}
2208def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2209
2210def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2211 let Latency = 22;
2212 let NumMicroOps = 2;
2213 let ResourceCycles = [1,1];
2214}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002215def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002216
2217def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2218 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002219 let NumMicroOps = 5;
2220 let ResourceCycles = [1,2,1,1];
2221}
Craig Topper17a31182017-12-16 18:35:29 +00002222def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2223 VGATHERDPDrm,
2224 VGATHERQPDrm,
2225 VGATHERQPSrm,
2226 VPGATHERDDrm,
2227 VPGATHERDQrm,
2228 VPGATHERQDrm,
2229 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002230
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002231def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2232 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002233 let NumMicroOps = 5;
2234 let ResourceCycles = [1,2,1,1];
2235}
Craig Topper17a31182017-12-16 18:35:29 +00002236def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2237 VGATHERQPDYrm,
2238 VGATHERQPSYrm,
2239 VPGATHERDDYrm,
2240 VPGATHERDQYrm,
2241 VPGATHERQDYrm,
2242 VPGATHERQQYrm,
2243 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002244
Craig Topper8104f262018-04-02 05:33:28 +00002245def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002246 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002247 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002248 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002249}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002250def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002251
2252def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2253 let Latency = 23;
2254 let NumMicroOps = 19;
2255 let ResourceCycles = [2,1,4,1,1,4,6];
2256}
2257def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2258
Craig Topper8104f262018-04-02 05:33:28 +00002259def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002260 let Latency = 24;
2261 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002262 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002263}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002264def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002265
Craig Topper8104f262018-04-02 05:33:28 +00002266def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002267 let Latency = 25;
2268 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002269 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002270}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002271def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002272
2273def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2274 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002275 let NumMicroOps = 3;
2276 let ResourceCycles = [1,1,1];
2277}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002278def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI(16|32)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002279
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002280def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2281 let Latency = 27;
2282 let NumMicroOps = 2;
2283 let ResourceCycles = [1,1];
2284}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002285def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F(32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002286
2287def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2288 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002289 let NumMicroOps = 8;
2290 let ResourceCycles = [2,4,1,1];
2291}
Craig Topper13a16502018-03-19 00:56:09 +00002292def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002293
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002294def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002295 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002296 let NumMicroOps = 3;
2297 let ResourceCycles = [1,1,1];
2298}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002299def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI(16|32)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002300
2301def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2302 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002303 let NumMicroOps = 23;
2304 let ResourceCycles = [1,5,3,4,10];
2305}
Craig Topperfc179c62018-03-22 04:23:41 +00002306def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2307 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002308
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002309def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2310 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002311 let NumMicroOps = 23;
2312 let ResourceCycles = [1,5,2,1,4,10];
2313}
Craig Topperfc179c62018-03-22 04:23:41 +00002314def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2315 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002316
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002317def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2318 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002319 let NumMicroOps = 31;
2320 let ResourceCycles = [1,8,1,21];
2321}
Craig Topper391c6f92017-12-10 01:24:08 +00002322def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002323
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002324def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2325 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002326 let NumMicroOps = 18;
2327 let ResourceCycles = [1,1,2,3,1,1,1,8];
2328}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002329def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002330
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002331def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2332 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002333 let NumMicroOps = 39;
2334 let ResourceCycles = [1,10,1,1,26];
2335}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002336def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002337
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002338def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002339 let Latency = 42;
2340 let NumMicroOps = 22;
2341 let ResourceCycles = [2,20];
2342}
Craig Topper2d451e72018-03-18 08:38:06 +00002343def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002344
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002345def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2346 let Latency = 42;
2347 let NumMicroOps = 40;
2348 let ResourceCycles = [1,11,1,1,26];
2349}
Craig Topper391c6f92017-12-10 01:24:08 +00002350def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002351
2352def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2353 let Latency = 46;
2354 let NumMicroOps = 44;
2355 let ResourceCycles = [1,11,1,1,30];
2356}
2357def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2358
2359def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2360 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002361 let NumMicroOps = 64;
2362 let ResourceCycles = [2,8,5,10,39];
2363}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002364def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002365
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002366def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2367 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002368 let NumMicroOps = 88;
2369 let ResourceCycles = [4,4,31,1,2,1,45];
2370}
Craig Topper2d451e72018-03-18 08:38:06 +00002371def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002372
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002373def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2374 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002375 let NumMicroOps = 90;
2376 let ResourceCycles = [4,2,33,1,2,1,47];
2377}
Craig Topper2d451e72018-03-18 08:38:06 +00002378def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002379
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002380def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002381 let Latency = 75;
2382 let NumMicroOps = 15;
2383 let ResourceCycles = [6,3,6];
2384}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002385def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002386
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002387def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002388 let Latency = 76;
2389 let NumMicroOps = 32;
2390 let ResourceCycles = [7,2,8,3,1,11];
2391}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002392def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002393
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002394def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002395 let Latency = 102;
2396 let NumMicroOps = 66;
2397 let ResourceCycles = [4,2,4,8,14,34];
2398}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002399def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002400
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002401def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2402 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002403 let NumMicroOps = 100;
2404 let ResourceCycles = [9,1,11,16,1,11,21,30];
2405}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002406def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002407
2408} // SchedModel