blob: ee4e4ddb0cc379bf18bbde34066e6424b76eb692 [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Craig Topperb7baa352018-04-08 17:53:18 +0000116defm : SKLWriteResPair<WriteCMOV, [SKLPort06], 1>; // Conditional move.
117def : WriteRes<WriteSETCC, [SKLPort06]>; // Setcc.
118def : WriteRes<WriteSETCCStore, [SKLPort06,SKLPort4,SKLPort237]> {
119 let Latency = 2;
120 let NumMicroOps = 3;
121}
122
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000123// Bit counts.
124defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
125defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
126defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
127defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000130defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000131
Craig Topper89310f52018-03-29 20:41:39 +0000132// BMI1 BEXTR, BMI2 BZHI
133defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
134defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
135
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000136// Loads, stores, and moves, not folded with other operations.
137def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
138def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteMove, [SKLPort0156]>;
140
141// Idioms that clear a register, like xorps %xmm0, %xmm0.
142// These can often bypass execution ports completely.
143def : WriteRes<WriteZero, []>;
144
145// Branches don't produce values, so they have no latency, but they still
146// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000148
149// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000150def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
151def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
152def : WriteRes<WriteFMove, [SKLPort015]>;
153
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000154defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub.
155defm : SKLWriteResPair<WriteFCmp, [SKLPort01], 4, [1], 1, 6>; // Floating point compare.
156defm : SKLWriteResPair<WriteFCom, [SKLPort0], 2>; // Floating point compare to flags.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000157defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
158defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
159defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000160defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4>; // Floating point reciprocal estimate.
161defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 4>; // Floating point reciprocal square root estimate.
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000162defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4, [1], 1, 6>; // Fused Multiply Add.
163defm : SKLWriteResPair<WriteFMAS, [SKLPort01], 4, [1], 1, 5>; // Fused Multiply Add (Scalar).
164defm : SKLWriteResPair<WriteFMAY, [SKLPort01], 4, [1], 1, 7>; // Fused Multiply Add (YMM/ZMM).
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000165defm : SKLWriteResPair<WriteFSign, [SKLPort0], 1>; // Floating point fabs/fchs.
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000166defm : SKLWriteResPair<WriteFLogic, [SKLPort015], 1, [1], 1, 6>; // Floating point and/or/xor logicals.
167defm : SKLWriteResPair<WriteFLogicY, [SKLPort015], 1, [1], 1, 7>; // Floating point and/or/xor logicals (YMM/ZMM).
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : SKLWriteResPair<WriteFVarShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000170defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1, [1], 1, 6>; // Floating point vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000171defm : SKLWriteResPair<WriteFVarBlend, [SKLPort015], 2, [2], 2, 6>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000172
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000173def : WriteRes<WriteCvtF2FSt, [SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
174 let Latency = 6;
175 let NumMicroOps = 4;
176 let ResourceCycles = [1,1,1,1];
177}
178
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000179// FMA Scheduling helper class.
180// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
181
182// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000183def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
184def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
185def : WriteRes<WriteVecMove, [SKLPort015]>;
186
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000187defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000188defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1, [1], 1, 6>; // Vector integer and/or/xor.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000189defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
190defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000191defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000192defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000193defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1>; // Vector shuffles.
Simon Pilgrim06e16542018-04-22 18:35:53 +0000194defm : SKLWriteResPair<WriteBlend, [SKLPort5], 1, [1], 1, 6>; // Vector blends.
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000195defm : SKLWriteResPair<WriteVarBlend, [SKLPort015], 2, [2], 2, 6>; // Vector variable blends.
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000196defm : SKLWriteResPair<WriteMPSAD, [SKLPort5], 4, [2], 2, 6>; // Vector MPSAD.
Craig Toppere56a2fc2018-04-17 19:35:19 +0000197defm : SKLWriteResPair<WritePSADBW, [SKLPort5], 3>; // Vector PSADBW.
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000198defm : SKLWriteResPair<WritePHMINPOS, [SKLPort01], 4, [1], 1, 6>; // Vector PHMINPOS.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000199
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000200// Vector insert/extract operations.
201def : WriteRes<WriteVecInsert, [SKLPort5]> {
202 let Latency = 2;
203 let NumMicroOps = 2;
204 let ResourceCycles = [2];
205}
206def : WriteRes<WriteVecInsertLd, [SKLPort5,SKLPort23]> {
207 let Latency = 6;
208 let NumMicroOps = 2;
209}
210
211def : WriteRes<WriteVecExtract, [SKLPort0,SKLPort5]> {
212 let Latency = 3;
213 let NumMicroOps = 2;
214}
215def : WriteRes<WriteVecExtractSt, [SKLPort4,SKLPort5,SKLPort237]> {
216 let Latency = 2;
217 let NumMicroOps = 3;
218}
219
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000220// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000221defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
222defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
223defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000224
225// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000226
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000227// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000228def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
229 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000230 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231 let ResourceCycles = [3];
232}
233def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000234 let Latency = 16;
235 let NumMicroOps = 4;
236 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000237}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000238
239// Packed Compare Explicit Length Strings, Return Mask
240def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
241 let Latency = 19;
242 let NumMicroOps = 9;
243 let ResourceCycles = [4,3,1,1];
244}
245def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
246 let Latency = 25;
247 let NumMicroOps = 10;
248 let ResourceCycles = [4,3,1,1,1];
249}
250
251// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000252def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000253 let Latency = 10;
254 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000255 let ResourceCycles = [3];
256}
257def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000258 let Latency = 16;
259 let NumMicroOps = 4;
260 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000261}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000262
263// Packed Compare Explicit Length Strings, Return Index
264def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
265 let Latency = 18;
266 let NumMicroOps = 8;
267 let ResourceCycles = [4,3,1];
268}
269def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
270 let Latency = 24;
271 let NumMicroOps = 9;
272 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000273}
274
Simon Pilgrima2f26782018-03-27 20:38:54 +0000275// MOVMSK Instructions.
276def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
277def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
278def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
279
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000280// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000281def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
282 let Latency = 4;
283 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000284 let ResourceCycles = [1];
285}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000286def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
287 let Latency = 10;
288 let NumMicroOps = 2;
289 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000290}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000291
292def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
293 let Latency = 8;
294 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000295 let ResourceCycles = [2];
296}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000297def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000298 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000299 let NumMicroOps = 3;
300 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000301}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000302
303def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
304 let Latency = 20;
305 let NumMicroOps = 11;
306 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000307}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000308def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
309 let Latency = 25;
310 let NumMicroOps = 11;
311 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000312}
313
314// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000315def : WriteRes<WriteCLMul, [SKLPort5]> {
316 let Latency = 6;
317 let NumMicroOps = 1;
318 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000319}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000320def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
321 let Latency = 12;
322 let NumMicroOps = 2;
323 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000324}
325
326// Catch-all for expensive system instructions.
327def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
328
329// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000330defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000331defm : SKLWriteResPair<WriteFVarShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000332defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000333defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3>; // 256-bit width vector variable shuffles.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000334defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000335
336// Old microcoded instructions that nobody use.
337def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
338
339// Fence instructions.
340def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
341
Craig Topper05242bf2018-04-21 18:07:36 +0000342// Load/store MXCSR.
343def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
344def : WriteRes<WriteSTMXCSR, [SKLPort4,SKLPort5,SKLPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
345
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000346// Nop, not very useful expect it provides a model for nops!
347def : WriteRes<WriteNop, []>;
348
349////////////////////////////////////////////////////////////////////////////////
350// Horizontal add/sub instructions.
351////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000352
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000353defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
354defm : SKLWriteResPair<WriteFHAddY, [SKLPort5,SKLPort01], 6, [2,1], 3, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000355defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000356
357// Remaining instrs.
358
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000359def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000360 let Latency = 1;
361 let NumMicroOps = 1;
362 let ResourceCycles = [1];
363}
Craig Topperfc179c62018-03-22 04:23:41 +0000364def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
365 "MMX_PADDSWirr",
366 "MMX_PADDUSBirr",
367 "MMX_PADDUSWirr",
368 "MMX_PAVGBirr",
369 "MMX_PAVGWirr",
370 "MMX_PCMPEQBirr",
371 "MMX_PCMPEQDirr",
372 "MMX_PCMPEQWirr",
373 "MMX_PCMPGTBirr",
374 "MMX_PCMPGTDirr",
375 "MMX_PCMPGTWirr",
376 "MMX_PMAXSWirr",
377 "MMX_PMAXUBirr",
378 "MMX_PMINSWirr",
379 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000380 "MMX_PSUBSBirr",
381 "MMX_PSUBSWirr",
382 "MMX_PSUBUSBirr",
383 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000384
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000385def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000386 let Latency = 1;
387 let NumMicroOps = 1;
388 let ResourceCycles = [1];
389}
Craig Topperfc179c62018-03-22 04:23:41 +0000390def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
391 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000392 "MMX_MOVD64rr",
393 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000394 "UCOM_FPr",
395 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000396 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000397 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000398 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000399 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000400
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000401def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000402 let Latency = 1;
403 let NumMicroOps = 1;
404 let ResourceCycles = [1];
405}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000406def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000407
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000408def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000409 let Latency = 1;
410 let NumMicroOps = 1;
411 let ResourceCycles = [1];
412}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000413def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
414 "(V?)PABSD(Y?)rr",
415 "(V?)PABSW(Y?)rr",
416 "(V?)PADDSB(Y?)rr",
417 "(V?)PADDSW(Y?)rr",
418 "(V?)PADDUSB(Y?)rr",
419 "(V?)PADDUSW(Y?)rr",
420 "(V?)PAVGB(Y?)rr",
421 "(V?)PAVGW(Y?)rr",
422 "(V?)PCMPEQB(Y?)rr",
423 "(V?)PCMPEQD(Y?)rr",
424 "(V?)PCMPEQQ(Y?)rr",
425 "(V?)PCMPEQW(Y?)rr",
426 "(V?)PCMPGTB(Y?)rr",
427 "(V?)PCMPGTD(Y?)rr",
428 "(V?)PCMPGTW(Y?)rr",
429 "(V?)PMAXSB(Y?)rr",
430 "(V?)PMAXSD(Y?)rr",
431 "(V?)PMAXSW(Y?)rr",
432 "(V?)PMAXUB(Y?)rr",
433 "(V?)PMAXUD(Y?)rr",
434 "(V?)PMAXUW(Y?)rr",
435 "(V?)PMINSB(Y?)rr",
436 "(V?)PMINSD(Y?)rr",
437 "(V?)PMINSW(Y?)rr",
438 "(V?)PMINUB(Y?)rr",
439 "(V?)PMINUD(Y?)rr",
440 "(V?)PMINUW(Y?)rr",
441 "(V?)PSIGNB(Y?)rr",
442 "(V?)PSIGND(Y?)rr",
443 "(V?)PSIGNW(Y?)rr",
444 "(V?)PSLLD(Y?)ri",
445 "(V?)PSLLQ(Y?)ri",
446 "VPSLLVD(Y?)rr",
447 "VPSLLVQ(Y?)rr",
448 "(V?)PSLLW(Y?)ri",
449 "(V?)PSRAD(Y?)ri",
450 "VPSRAVD(Y?)rr",
451 "(V?)PSRAW(Y?)ri",
452 "(V?)PSRLD(Y?)ri",
453 "(V?)PSRLQ(Y?)ri",
454 "VPSRLVD(Y?)rr",
455 "VPSRLVQ(Y?)rr",
456 "(V?)PSRLW(Y?)ri",
457 "(V?)PSUBSB(Y?)rr",
458 "(V?)PSUBSW(Y?)rr",
459 "(V?)PSUBUSB(Y?)rr",
460 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000461
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000462def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000463 let Latency = 1;
464 let NumMicroOps = 1;
465 let ResourceCycles = [1];
466}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000467def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
468def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000469 "MMX_PABS(B|D|W)rr",
470 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000471 "MMX_PANDNirr",
472 "MMX_PANDirr",
473 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000474 "MMX_PSIGN(B|D|W)rr",
475 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000476 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000477
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000478def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000479 let Latency = 1;
480 let NumMicroOps = 1;
481 let ResourceCycles = [1];
482}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000483def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000484def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
485 "ADC(16|32|64)i",
486 "ADC(8|16|32|64)rr",
487 "ADCX(32|64)rr",
488 "ADOX(32|64)rr",
489 "BT(16|32|64)ri8",
490 "BT(16|32|64)rr",
491 "BTC(16|32|64)ri8",
492 "BTC(16|32|64)rr",
493 "BTR(16|32|64)ri8",
494 "BTR(16|32|64)rr",
495 "BTS(16|32|64)ri8",
496 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000497 "SAR(8|16|32|64)r1",
498 "SAR(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000499 "SBB(16|32|64)ri",
500 "SBB(16|32|64)i",
501 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000502 "SHL(8|16|32|64)r1",
503 "SHL(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000504 "SHR(8|16|32|64)r1",
Simon Pilgrimeb609092018-04-23 22:19:55 +0000505 "SHR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000506
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000507def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
508 let Latency = 1;
509 let NumMicroOps = 1;
510 let ResourceCycles = [1];
511}
Craig Topperfc179c62018-03-22 04:23:41 +0000512def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
513 "BLSI(32|64)rr",
514 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000515 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000516
517def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
518 let Latency = 1;
519 let NumMicroOps = 1;
520 let ResourceCycles = [1];
521}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000522def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000523 "(V?)PADDD(Y?)rr",
524 "(V?)PADDQ(Y?)rr",
525 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000526 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000527 "(V?)PSUBB(Y?)rr",
528 "(V?)PSUBD(Y?)rr",
529 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000530 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000531
532def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
533 let Latency = 1;
534 let NumMicroOps = 1;
535 let ResourceCycles = [1];
536}
Craig Topperfbe31322018-04-05 21:56:19 +0000537def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000538def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000539 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000540 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000541 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000542 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000543 "SGDT64m",
544 "SIDT64m",
545 "SLDT64m",
546 "SMSW16m",
547 "STC",
548 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000549 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000550
551def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000552 let Latency = 1;
553 let NumMicroOps = 2;
554 let ResourceCycles = [1,1];
555}
Craig Topperfc179c62018-03-22 04:23:41 +0000556def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
557 "MMX_MOVD64from64rm",
558 "MMX_MOVD64mr",
559 "MMX_MOVNTQmr",
560 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000561 "MOVNTI_64mr",
562 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000563 "ST_FP32m",
564 "ST_FP64m",
565 "ST_FP80m",
566 "VEXTRACTF128mr",
567 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000568 "(V?)MOVAPDYmr",
569 "(V?)MOVAPS(Y?)mr",
570 "(V?)MOVDQA(Y?)mr",
571 "(V?)MOVDQU(Y?)mr",
572 "(V?)MOVHPDmr",
573 "(V?)MOVHPSmr",
574 "(V?)MOVLPDmr",
575 "(V?)MOVLPSmr",
576 "(V?)MOVNTDQ(Y?)mr",
577 "(V?)MOVNTPD(Y?)mr",
578 "(V?)MOVNTPS(Y?)mr",
579 "(V?)MOVPDI2DImr",
580 "(V?)MOVPQI2QImr",
581 "(V?)MOVPQIto64mr",
582 "(V?)MOVSDmr",
583 "(V?)MOVSSmr",
584 "(V?)MOVUPD(Y?)mr",
585 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000586 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000587
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000588def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000589 let Latency = 2;
590 let NumMicroOps = 1;
591 let ResourceCycles = [1];
592}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000593def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000594 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000595 "(V?)MOVPDI2DIrr",
596 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000597 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000598 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000599
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000600def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000601 let Latency = 2;
602 let NumMicroOps = 2;
603 let ResourceCycles = [2];
604}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000605def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000606
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000607def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000608 let Latency = 2;
609 let NumMicroOps = 2;
610 let ResourceCycles = [2];
611}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000612def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
613def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000614
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000615def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000616 let Latency = 2;
617 let NumMicroOps = 2;
618 let ResourceCycles = [2];
619}
Craig Topperfc179c62018-03-22 04:23:41 +0000620def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
621 "ROL(8|16|32|64)r1",
622 "ROL(8|16|32|64)ri",
623 "ROR(8|16|32|64)r1",
624 "ROR(8|16|32|64)ri",
625 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000626
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000627def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000628 let Latency = 2;
629 let NumMicroOps = 2;
630 let ResourceCycles = [2];
631}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000632def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
633 WAIT,
634 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000635
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000636def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000637 let Latency = 2;
638 let NumMicroOps = 2;
639 let ResourceCycles = [1,1];
640}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000641def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
642 "VMASKMOVPS(Y?)mr",
643 "VPMASKMOVD(Y?)mr",
644 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000645
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000646def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000647 let Latency = 2;
648 let NumMicroOps = 2;
649 let ResourceCycles = [1,1];
650}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000651def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
652 "(V?)PSLLQrr",
653 "(V?)PSLLWrr",
654 "(V?)PSRADrr",
655 "(V?)PSRAWrr",
656 "(V?)PSRLDrr",
657 "(V?)PSRLQrr",
658 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000659
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000660def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000661 let Latency = 2;
662 let NumMicroOps = 2;
663 let ResourceCycles = [1,1];
664}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000665def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000666
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000667def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000668 let Latency = 2;
669 let NumMicroOps = 2;
670 let ResourceCycles = [1,1];
671}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000672def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000673
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000674def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000675 let Latency = 2;
676 let NumMicroOps = 2;
677 let ResourceCycles = [1,1];
678}
Craig Topper498875f2018-04-04 17:54:19 +0000679def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
680
681def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
682 let Latency = 1;
683 let NumMicroOps = 1;
684 let ResourceCycles = [1];
685}
686def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000687
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000688def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000689 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000690 let NumMicroOps = 2;
691 let ResourceCycles = [1,1];
692}
Craig Topper2d451e72018-03-18 08:38:06 +0000693def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000694def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000695def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
696 "ADC8ri",
697 "SBB8i8",
698 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000699
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000700def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
701 let Latency = 2;
702 let NumMicroOps = 3;
703 let ResourceCycles = [1,1,1];
704}
705def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
706
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000707def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
708 let Latency = 2;
709 let NumMicroOps = 3;
710 let ResourceCycles = [1,1,1];
711}
712def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
713
714def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
715 let Latency = 2;
716 let NumMicroOps = 3;
717 let ResourceCycles = [1,1,1];
718}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000719def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
720 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000721def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000722 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000723
724def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
725 let Latency = 3;
726 let NumMicroOps = 1;
727 let ResourceCycles = [1];
728}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000729def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000730 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000731 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000732 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000733
Clement Courbet327fac42018-03-07 08:14:02 +0000734def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000735 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000736 let NumMicroOps = 2;
737 let ResourceCycles = [1,1];
738}
Clement Courbet327fac42018-03-07 08:14:02 +0000739def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000740
741def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
742 let Latency = 3;
743 let NumMicroOps = 1;
744 let ResourceCycles = [1];
745}
Craig Topperfc179c62018-03-22 04:23:41 +0000746def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
747 "ADD_FST0r",
748 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000749 "SUBR_FPrST0",
750 "SUBR_FST0r",
751 "SUBR_FrST0",
752 "SUB_FPrST0",
753 "SUB_FST0r",
754 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000755 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000756 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000757 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000758 "VPMOVSXBDYrr",
759 "VPMOVSXBQYrr",
760 "VPMOVSXBWYrr",
761 "VPMOVSXDQYrr",
762 "VPMOVSXWDYrr",
763 "VPMOVSXWQYrr",
764 "VPMOVZXBDYrr",
765 "VPMOVZXBQYrr",
766 "VPMOVZXBWYrr",
767 "VPMOVZXDQYrr",
768 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000769 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000770
771def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
772 let Latency = 3;
773 let NumMicroOps = 2;
774 let ResourceCycles = [1,1];
775}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000776def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000777
778def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
779 let Latency = 3;
780 let NumMicroOps = 2;
781 let ResourceCycles = [1,1];
782}
783def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
784
785def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
786 let Latency = 3;
787 let NumMicroOps = 3;
788 let ResourceCycles = [3];
789}
Craig Topperfc179c62018-03-22 04:23:41 +0000790def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
791 "ROR(8|16|32|64)rCL",
792 "SAR(8|16|32|64)rCL",
793 "SHL(8|16|32|64)rCL",
794 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000795
796def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000797 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000798 let NumMicroOps = 3;
799 let ResourceCycles = [3];
800}
Craig Topperb5f26592018-04-19 18:00:17 +0000801def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
802 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
803 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000804
805def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
806 let Latency = 3;
807 let NumMicroOps = 3;
808 let ResourceCycles = [1,2];
809}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000810def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000811
812def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
813 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000814 let NumMicroOps = 3;
815 let ResourceCycles = [2,1];
816}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000817def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
818 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000819
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000820def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
821 let Latency = 3;
822 let NumMicroOps = 3;
823 let ResourceCycles = [2,1];
824}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000825def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000826
827def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
828 let Latency = 3;
829 let NumMicroOps = 3;
830 let ResourceCycles = [2,1];
831}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000832def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
833 "(V?)PHADDW(Y?)rr",
834 "(V?)PHSUBD(Y?)rr",
835 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000836
837def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
838 let Latency = 3;
839 let NumMicroOps = 3;
840 let ResourceCycles = [2,1];
841}
Craig Topperfc179c62018-03-22 04:23:41 +0000842def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
843 "MMX_PACKSSWBirr",
844 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000845
846def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
847 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000848 let NumMicroOps = 3;
849 let ResourceCycles = [1,2];
850}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000851def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000852
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000853def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
854 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000855 let NumMicroOps = 3;
856 let ResourceCycles = [1,2];
857}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000858def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000859
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000860def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
861 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000862 let NumMicroOps = 3;
863 let ResourceCycles = [1,2];
864}
Craig Topperfc179c62018-03-22 04:23:41 +0000865def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
866 "RCL(8|16|32|64)ri",
867 "RCR(8|16|32|64)r1",
868 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000869
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000870def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
871 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000872 let NumMicroOps = 3;
873 let ResourceCycles = [1,1,1];
874}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000875def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000876
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000877def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
878 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000879 let NumMicroOps = 4;
880 let ResourceCycles = [1,1,2];
881}
Craig Topperf4cd9082018-01-19 05:47:32 +0000882def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000883
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000884def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
885 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000886 let NumMicroOps = 4;
887 let ResourceCycles = [1,1,1,1];
888}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000889def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000890
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000891def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
892 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000893 let NumMicroOps = 4;
894 let ResourceCycles = [1,1,1,1];
895}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000896def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000897
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000898def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000899 let Latency = 4;
900 let NumMicroOps = 1;
901 let ResourceCycles = [1];
902}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000903def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000904 "MMX_PMADDWDirr",
905 "MMX_PMULHRSWrr",
906 "MMX_PMULHUWirr",
907 "MMX_PMULHWirr",
908 "MMX_PMULLWirr",
909 "MMX_PMULUDQirr",
910 "MUL_FPrST0",
911 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000912 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000913
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000914def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000915 let Latency = 4;
916 let NumMicroOps = 1;
917 let ResourceCycles = [1];
918}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000919def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
920 "(V?)ADDPS(Y?)rr",
921 "(V?)ADDSDrr",
922 "(V?)ADDSSrr",
923 "(V?)ADDSUBPD(Y?)rr",
924 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000925 "(V?)CVTDQ2PS(Y?)rr",
926 "(V?)CVTPS2DQ(Y?)rr",
927 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000928 "(V?)MULPD(Y?)rr",
929 "(V?)MULPS(Y?)rr",
930 "(V?)MULSDrr",
931 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000932 "(V?)PMADDUBSW(Y?)rr",
933 "(V?)PMADDWD(Y?)rr",
934 "(V?)PMULDQ(Y?)rr",
935 "(V?)PMULHRSW(Y?)rr",
936 "(V?)PMULHUW(Y?)rr",
937 "(V?)PMULHW(Y?)rr",
938 "(V?)PMULLW(Y?)rr",
939 "(V?)PMULUDQ(Y?)rr",
940 "(V?)SUBPD(Y?)rr",
941 "(V?)SUBPS(Y?)rr",
942 "(V?)SUBSDrr",
943 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000944
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000945def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000946 let Latency = 4;
947 let NumMicroOps = 2;
948 let ResourceCycles = [1,1];
949}
Craig Topperf846e2d2018-04-19 05:34:05 +0000950def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000951
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000952def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
953 let Latency = 4;
954 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000955 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000956}
Craig Topperfc179c62018-03-22 04:23:41 +0000957def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000958
959def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000960 let Latency = 4;
961 let NumMicroOps = 2;
962 let ResourceCycles = [1,1];
963}
Craig Topperfc179c62018-03-22 04:23:41 +0000964def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
965 "VPSLLQYrr",
966 "VPSLLWYrr",
967 "VPSRADYrr",
968 "VPSRAWYrr",
969 "VPSRLDYrr",
970 "VPSRLQYrr",
971 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000972
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000973def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000974 let Latency = 4;
975 let NumMicroOps = 3;
976 let ResourceCycles = [1,1,1];
977}
Craig Topperfc179c62018-03-22 04:23:41 +0000978def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
979 "ISTT_FP32m",
980 "ISTT_FP64m",
981 "IST_F16m",
982 "IST_F32m",
983 "IST_FP16m",
984 "IST_FP32m",
985 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000986
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000987def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000988 let Latency = 4;
989 let NumMicroOps = 4;
990 let ResourceCycles = [4];
991}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000992def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000993
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000994def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000995 let Latency = 4;
996 let NumMicroOps = 4;
997 let ResourceCycles = [1,3];
998}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000999def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001000
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001001def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001002 let Latency = 4;
1003 let NumMicroOps = 4;
1004 let ResourceCycles = [1,3];
1005}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001006def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001007
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001008def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001009 let Latency = 4;
1010 let NumMicroOps = 4;
1011 let ResourceCycles = [1,1,2];
1012}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001013def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001014
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001015def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1016 let Latency = 5;
1017 let NumMicroOps = 1;
1018 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001019}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001020def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001021 "MOVSX(16|32|64)rm32",
1022 "MOVSX(16|32|64)rm8",
1023 "MOVZX(16|32|64)rm16",
1024 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001025 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001026
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001027def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001028 let Latency = 5;
1029 let NumMicroOps = 2;
1030 let ResourceCycles = [1,1];
1031}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001032def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1033 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001034
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001035def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001036 let Latency = 5;
1037 let NumMicroOps = 2;
1038 let ResourceCycles = [1,1];
1039}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001040def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001041 "MMX_CVTPS2PIirr",
1042 "MMX_CVTTPD2PIirr",
1043 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001044 "(V?)CVTPD2DQrr",
1045 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001046 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001047 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001048 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001049 "(V?)CVTSD2SSrr",
1050 "(V?)CVTSI642SDrr",
1051 "(V?)CVTSI2SDrr",
1052 "(V?)CVTSI2SSrr",
1053 "(V?)CVTSS2SDrr",
1054 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001055
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001056def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001057 let Latency = 5;
1058 let NumMicroOps = 3;
1059 let ResourceCycles = [1,1,1];
1060}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001061def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001062
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001063def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001064 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065 let NumMicroOps = 3;
1066 let ResourceCycles = [1,1,1];
1067}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001068def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001069
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001070def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001071 let Latency = 5;
1072 let NumMicroOps = 5;
1073 let ResourceCycles = [1,4];
1074}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001075def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001076
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001077def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001078 let Latency = 5;
1079 let NumMicroOps = 5;
1080 let ResourceCycles = [2,3];
1081}
Craig Topper13a16502018-03-19 00:56:09 +00001082def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001083
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001084def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001085 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001086 let NumMicroOps = 6;
1087 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001088}
Craig Topperfc179c62018-03-22 04:23:41 +00001089def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1090 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001091
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001092def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1093 let Latency = 6;
1094 let NumMicroOps = 1;
1095 let ResourceCycles = [1];
1096}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001097def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001098 "(V?)MOVSHDUPrm",
1099 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001100 "VPBROADCASTDrm",
1101 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001102
1103def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001104 let Latency = 6;
1105 let NumMicroOps = 2;
1106 let ResourceCycles = [2];
1107}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001108def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001109
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001110def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001111 let Latency = 6;
1112 let NumMicroOps = 2;
1113 let ResourceCycles = [1,1];
1114}
Craig Topperfc179c62018-03-22 04:23:41 +00001115def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1116 "MMX_PADDSWirm",
1117 "MMX_PADDUSBirm",
1118 "MMX_PADDUSWirm",
1119 "MMX_PAVGBirm",
1120 "MMX_PAVGWirm",
1121 "MMX_PCMPEQBirm",
1122 "MMX_PCMPEQDirm",
1123 "MMX_PCMPEQWirm",
1124 "MMX_PCMPGTBirm",
1125 "MMX_PCMPGTDirm",
1126 "MMX_PCMPGTWirm",
1127 "MMX_PMAXSWirm",
1128 "MMX_PMAXUBirm",
1129 "MMX_PMINSWirm",
1130 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001131 "MMX_PSUBSBirm",
1132 "MMX_PSUBSWirm",
1133 "MMX_PSUBUSBirm",
1134 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001135
Craig Topper58afb4e2018-03-22 21:10:07 +00001136def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001137 let Latency = 6;
1138 let NumMicroOps = 2;
1139 let ResourceCycles = [1,1];
1140}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001141def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1142 "(V?)CVTSD2SIrr",
1143 "(V?)CVTSS2SI64rr",
1144 "(V?)CVTSS2SIrr",
1145 "(V?)CVTTSD2SI64rr",
1146 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001147
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001148def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1149 let Latency = 6;
1150 let NumMicroOps = 2;
1151 let ResourceCycles = [1,1];
1152}
Craig Topperfc179c62018-03-22 04:23:41 +00001153def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1154 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001155
1156def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1157 let Latency = 6;
1158 let NumMicroOps = 2;
1159 let ResourceCycles = [1,1];
1160}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001161def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1162 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001163 "MMX_PANDNirm",
1164 "MMX_PANDirm",
1165 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001166 "MMX_PSIGN(B|D|W)rm",
1167 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001168 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001169
1170def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1171 let Latency = 6;
1172 let NumMicroOps = 2;
1173 let ResourceCycles = [1,1];
1174}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001175def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001176def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1177 ADCX32rm, ADCX64rm,
1178 ADOX32rm, ADOX64rm,
1179 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001180
1181def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1182 let Latency = 6;
1183 let NumMicroOps = 2;
1184 let ResourceCycles = [1,1];
1185}
Craig Topperfc179c62018-03-22 04:23:41 +00001186def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1187 "BLSI(32|64)rm",
1188 "BLSMSK(32|64)rm",
1189 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001190 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001191
1192def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1193 let Latency = 6;
1194 let NumMicroOps = 2;
1195 let ResourceCycles = [1,1];
1196}
Craig Topper2d451e72018-03-18 08:38:06 +00001197def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001198def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001199
Craig Topper58afb4e2018-03-22 21:10:07 +00001200def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001201 let Latency = 6;
1202 let NumMicroOps = 3;
1203 let ResourceCycles = [2,1];
1204}
Craig Topperfc179c62018-03-22 04:23:41 +00001205def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001206
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001207def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001208 let Latency = 6;
1209 let NumMicroOps = 4;
1210 let ResourceCycles = [1,2,1];
1211}
Craig Topperfc179c62018-03-22 04:23:41 +00001212def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1213 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001214
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001215def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001216 let Latency = 6;
1217 let NumMicroOps = 4;
1218 let ResourceCycles = [1,1,1,1];
1219}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001220def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001221
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001222def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1223 let Latency = 6;
1224 let NumMicroOps = 4;
1225 let ResourceCycles = [1,1,1,1];
1226}
Craig Topperfc179c62018-03-22 04:23:41 +00001227def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1228 "BTR(16|32|64)mi8",
1229 "BTS(16|32|64)mi8",
1230 "SAR(8|16|32|64)m1",
1231 "SAR(8|16|32|64)mi",
1232 "SHL(8|16|32|64)m1",
1233 "SHL(8|16|32|64)mi",
1234 "SHR(8|16|32|64)m1",
1235 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001236
1237def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1238 let Latency = 6;
1239 let NumMicroOps = 4;
1240 let ResourceCycles = [1,1,1,1];
1241}
Craig Topperf0d04262018-04-06 16:16:48 +00001242def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1243 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001244
1245def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001246 let Latency = 6;
1247 let NumMicroOps = 6;
1248 let ResourceCycles = [1,5];
1249}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001250def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001251
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001252def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1253 let Latency = 7;
1254 let NumMicroOps = 1;
1255 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001256}
Craig Topperfc179c62018-03-22 04:23:41 +00001257def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1258 "LD_F64m",
1259 "LD_F80m",
1260 "VBROADCASTF128",
1261 "VBROADCASTI128",
1262 "VBROADCASTSDYrm",
1263 "VBROADCASTSSYrm",
1264 "VLDDQUYrm",
1265 "VMOVAPDYrm",
1266 "VMOVAPSYrm",
1267 "VMOVDDUPYrm",
1268 "VMOVDQAYrm",
1269 "VMOVDQUYrm",
1270 "VMOVNTDQAYrm",
1271 "VMOVSHDUPYrm",
1272 "VMOVSLDUPYrm",
1273 "VMOVUPDYrm",
1274 "VMOVUPSYrm",
1275 "VPBROADCASTDYrm",
1276 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001277
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001278def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001279 let Latency = 7;
1280 let NumMicroOps = 2;
1281 let ResourceCycles = [1,1];
1282}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001283def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001284
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001285def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1286 let Latency = 7;
1287 let NumMicroOps = 2;
1288 let ResourceCycles = [1,1];
1289}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001290def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1291 "(V?)PACKSSDWrm",
1292 "(V?)PACKSSWBrm",
1293 "(V?)PACKUSDWrm",
1294 "(V?)PACKUSWBrm",
1295 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001296 "VPBROADCASTBrm",
1297 "VPBROADCASTWrm",
1298 "VPERMILPDmi",
1299 "VPERMILPDrm",
1300 "VPERMILPSmi",
1301 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001302 "(V?)PSHUFBrm",
1303 "(V?)PSHUFDmi",
1304 "(V?)PSHUFHWmi",
1305 "(V?)PSHUFLWmi",
1306 "(V?)PUNPCKHBWrm",
1307 "(V?)PUNPCKHDQrm",
1308 "(V?)PUNPCKHQDQrm",
1309 "(V?)PUNPCKHWDrm",
1310 "(V?)PUNPCKLBWrm",
1311 "(V?)PUNPCKLDQrm",
1312 "(V?)PUNPCKLQDQrm",
1313 "(V?)PUNPCKLWDrm",
1314 "(V?)SHUFPDrmi",
1315 "(V?)SHUFPSrmi",
1316 "(V?)UNPCKHPDrm",
1317 "(V?)UNPCKHPSrm",
1318 "(V?)UNPCKLPDrm",
1319 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001320
Craig Topper58afb4e2018-03-22 21:10:07 +00001321def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001322 let Latency = 7;
1323 let NumMicroOps = 2;
1324 let ResourceCycles = [1,1];
1325}
Craig Topperfc179c62018-03-22 04:23:41 +00001326def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1327 "VCVTPD2PSYrr",
1328 "VCVTPH2PSYrr",
1329 "VCVTPS2PDYrr",
1330 "VCVTPS2PHYrr",
1331 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001332
1333def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1334 let Latency = 7;
1335 let NumMicroOps = 2;
1336 let ResourceCycles = [1,1];
1337}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001338def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1339 "(V?)PABSDrm",
1340 "(V?)PABSWrm",
1341 "(V?)PADDSBrm",
1342 "(V?)PADDSWrm",
1343 "(V?)PADDUSBrm",
1344 "(V?)PADDUSWrm",
1345 "(V?)PAVGBrm",
1346 "(V?)PAVGWrm",
1347 "(V?)PCMPEQBrm",
1348 "(V?)PCMPEQDrm",
1349 "(V?)PCMPEQQrm",
1350 "(V?)PCMPEQWrm",
1351 "(V?)PCMPGTBrm",
1352 "(V?)PCMPGTDrm",
1353 "(V?)PCMPGTWrm",
1354 "(V?)PMAXSBrm",
1355 "(V?)PMAXSDrm",
1356 "(V?)PMAXSWrm",
1357 "(V?)PMAXUBrm",
1358 "(V?)PMAXUDrm",
1359 "(V?)PMAXUWrm",
1360 "(V?)PMINSBrm",
1361 "(V?)PMINSDrm",
1362 "(V?)PMINSWrm",
1363 "(V?)PMINUBrm",
1364 "(V?)PMINUDrm",
1365 "(V?)PMINUWrm",
1366 "(V?)PSIGNBrm",
1367 "(V?)PSIGNDrm",
1368 "(V?)PSIGNWrm",
1369 "(V?)PSLLDrm",
1370 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001371 "VPSLLVDrm",
1372 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001373 "(V?)PSLLWrm",
1374 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001375 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001376 "(V?)PSRAWrm",
1377 "(V?)PSRLDrm",
1378 "(V?)PSRLQrm",
1379 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001380 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001381 "(V?)PSRLWrm",
1382 "(V?)PSUBSBrm",
1383 "(V?)PSUBSWrm",
1384 "(V?)PSUBUSBrm",
1385 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001386
1387def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1388 let Latency = 7;
1389 let NumMicroOps = 2;
1390 let ResourceCycles = [1,1];
1391}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001392def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001393 "(V?)INSERTI128rm",
1394 "(V?)MASKMOVPDrm",
1395 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001396 "(V?)PADDBrm",
1397 "(V?)PADDDrm",
1398 "(V?)PADDQrm",
1399 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001400 "(V?)PBLENDDrmi",
1401 "(V?)PMASKMOVDrm",
1402 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001403 "(V?)PSUBBrm",
1404 "(V?)PSUBDrm",
1405 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001406 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001407
1408def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1409 let Latency = 7;
1410 let NumMicroOps = 3;
1411 let ResourceCycles = [2,1];
1412}
Craig Topperfc179c62018-03-22 04:23:41 +00001413def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1414 "MMX_PACKSSWBirm",
1415 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001416
1417def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1418 let Latency = 7;
1419 let NumMicroOps = 3;
1420 let ResourceCycles = [1,2];
1421}
Craig Topperf4cd9082018-01-19 05:47:32 +00001422def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001423
1424def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1425 let Latency = 7;
1426 let NumMicroOps = 3;
1427 let ResourceCycles = [1,2];
1428}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001429def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1430 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001431
Craig Topper58afb4e2018-03-22 21:10:07 +00001432def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001433 let Latency = 7;
1434 let NumMicroOps = 3;
1435 let ResourceCycles = [1,1,1];
1436}
Craig Topperfc179c62018-03-22 04:23:41 +00001437def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1438 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001439
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001440def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001441 let Latency = 7;
1442 let NumMicroOps = 3;
1443 let ResourceCycles = [1,1,1];
1444}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001445def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001446
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001447def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001448 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001449 let NumMicroOps = 3;
1450 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001451}
Craig Topperfc179c62018-03-22 04:23:41 +00001452def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1453 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001454
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001455def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1456 let Latency = 7;
1457 let NumMicroOps = 5;
1458 let ResourceCycles = [1,1,1,2];
1459}
Craig Topperfc179c62018-03-22 04:23:41 +00001460def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1461 "ROL(8|16|32|64)mi",
1462 "ROR(8|16|32|64)m1",
1463 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001464
1465def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1466 let Latency = 7;
1467 let NumMicroOps = 5;
1468 let ResourceCycles = [1,1,1,2];
1469}
Craig Topper13a16502018-03-19 00:56:09 +00001470def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001471
1472def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1473 let Latency = 7;
1474 let NumMicroOps = 5;
1475 let ResourceCycles = [1,1,1,1,1];
1476}
Craig Topperfc179c62018-03-22 04:23:41 +00001477def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1478 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001479
1480def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001481 let Latency = 7;
1482 let NumMicroOps = 7;
1483 let ResourceCycles = [1,3,1,2];
1484}
Craig Topper2d451e72018-03-18 08:38:06 +00001485def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001486
Craig Topper58afb4e2018-03-22 21:10:07 +00001487def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001488 let Latency = 8;
1489 let NumMicroOps = 2;
1490 let ResourceCycles = [2];
1491}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001492def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1493 "(V?)ROUNDPS(Y?)r",
1494 "(V?)ROUNDSDr",
1495 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001496
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001497def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001498 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001499 let NumMicroOps = 2;
1500 let ResourceCycles = [1,1];
1501}
Craig Topperfc179c62018-03-22 04:23:41 +00001502def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1503 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001504
1505def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1506 let Latency = 8;
1507 let NumMicroOps = 2;
1508 let ResourceCycles = [1,1];
1509}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001510def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1511 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001512
1513def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001514 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001515 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001516 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001517}
Craig Topperf846e2d2018-04-19 05:34:05 +00001518def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001519
Craig Topperf846e2d2018-04-19 05:34:05 +00001520def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1521 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001522 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001523 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001524}
Craig Topperfc179c62018-03-22 04:23:41 +00001525def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001526
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001527def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1528 let Latency = 8;
1529 let NumMicroOps = 2;
1530 let ResourceCycles = [1,1];
1531}
Craig Topperfc179c62018-03-22 04:23:41 +00001532def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1533 "FCOM64m",
1534 "FCOMP32m",
1535 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001536 "VPACKSSDWYrm",
1537 "VPACKSSWBYrm",
1538 "VPACKUSDWYrm",
1539 "VPACKUSWBYrm",
1540 "VPALIGNRYrmi",
1541 "VPBLENDWYrmi",
1542 "VPBROADCASTBYrm",
1543 "VPBROADCASTWYrm",
1544 "VPERMILPDYmi",
1545 "VPERMILPDYrm",
1546 "VPERMILPSYmi",
1547 "VPERMILPSYrm",
1548 "VPMOVSXBDYrm",
1549 "VPMOVSXBQYrm",
1550 "VPMOVSXWQYrm",
1551 "VPSHUFBYrm",
1552 "VPSHUFDYmi",
1553 "VPSHUFHWYmi",
1554 "VPSHUFLWYmi",
1555 "VPUNPCKHBWYrm",
1556 "VPUNPCKHDQYrm",
1557 "VPUNPCKHQDQYrm",
1558 "VPUNPCKHWDYrm",
1559 "VPUNPCKLBWYrm",
1560 "VPUNPCKLDQYrm",
1561 "VPUNPCKLQDQYrm",
1562 "VPUNPCKLWDYrm",
1563 "VSHUFPDYrmi",
1564 "VSHUFPSYrmi",
1565 "VUNPCKHPDYrm",
1566 "VUNPCKHPSYrm",
1567 "VUNPCKLPDYrm",
1568 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001569
1570def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1571 let Latency = 8;
1572 let NumMicroOps = 2;
1573 let ResourceCycles = [1,1];
1574}
Craig Topperfc179c62018-03-22 04:23:41 +00001575def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1576 "VPABSDYrm",
1577 "VPABSWYrm",
1578 "VPADDSBYrm",
1579 "VPADDSWYrm",
1580 "VPADDUSBYrm",
1581 "VPADDUSWYrm",
1582 "VPAVGBYrm",
1583 "VPAVGWYrm",
1584 "VPCMPEQBYrm",
1585 "VPCMPEQDYrm",
1586 "VPCMPEQQYrm",
1587 "VPCMPEQWYrm",
1588 "VPCMPGTBYrm",
1589 "VPCMPGTDYrm",
1590 "VPCMPGTWYrm",
1591 "VPMAXSBYrm",
1592 "VPMAXSDYrm",
1593 "VPMAXSWYrm",
1594 "VPMAXUBYrm",
1595 "VPMAXUDYrm",
1596 "VPMAXUWYrm",
1597 "VPMINSBYrm",
1598 "VPMINSDYrm",
1599 "VPMINSWYrm",
1600 "VPMINUBYrm",
1601 "VPMINUDYrm",
1602 "VPMINUWYrm",
1603 "VPSIGNBYrm",
1604 "VPSIGNDYrm",
1605 "VPSIGNWYrm",
1606 "VPSLLDYrm",
1607 "VPSLLQYrm",
1608 "VPSLLVDYrm",
1609 "VPSLLVQYrm",
1610 "VPSLLWYrm",
1611 "VPSRADYrm",
1612 "VPSRAVDYrm",
1613 "VPSRAWYrm",
1614 "VPSRLDYrm",
1615 "VPSRLQYrm",
1616 "VPSRLVDYrm",
1617 "VPSRLVQYrm",
1618 "VPSRLWYrm",
1619 "VPSUBSBYrm",
1620 "VPSUBSWYrm",
1621 "VPSUBUSBYrm",
1622 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001623
1624def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1625 let Latency = 8;
1626 let NumMicroOps = 2;
1627 let ResourceCycles = [1,1];
1628}
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001629def: InstRW<[SKLWriteResGroup110], (instregex "VBLENDPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001630 "VBLENDPSYrmi",
1631 "VMASKMOVPDYrm",
1632 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001633 "VPADDBYrm",
1634 "VPADDDYrm",
1635 "VPADDQYrm",
1636 "VPADDWYrm",
1637 "VPANDNYrm",
1638 "VPANDYrm",
1639 "VPBLENDDYrmi",
1640 "VPMASKMOVDYrm",
1641 "VPMASKMOVQYrm",
1642 "VPORYrm",
1643 "VPSUBBYrm",
1644 "VPSUBDYrm",
1645 "VPSUBQYrm",
1646 "VPSUBWYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001647 "VPXORYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001648
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001649def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1650 let Latency = 8;
1651 let NumMicroOps = 4;
1652 let ResourceCycles = [1,2,1];
1653}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001654def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001655
1656def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1657 let Latency = 8;
1658 let NumMicroOps = 4;
1659 let ResourceCycles = [2,1,1];
1660}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001661def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001662
Craig Topper58afb4e2018-03-22 21:10:07 +00001663def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001664 let Latency = 8;
1665 let NumMicroOps = 4;
1666 let ResourceCycles = [1,1,1,1];
1667}
1668def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1669
1670def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1671 let Latency = 8;
1672 let NumMicroOps = 5;
1673 let ResourceCycles = [1,1,3];
1674}
Craig Topper13a16502018-03-19 00:56:09 +00001675def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001676
1677def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1678 let Latency = 8;
1679 let NumMicroOps = 5;
1680 let ResourceCycles = [1,1,1,2];
1681}
Craig Topperfc179c62018-03-22 04:23:41 +00001682def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1683 "RCL(8|16|32|64)mi",
1684 "RCR(8|16|32|64)m1",
1685 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001686
1687def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1688 let Latency = 8;
1689 let NumMicroOps = 6;
1690 let ResourceCycles = [1,1,1,3];
1691}
Craig Topperfc179c62018-03-22 04:23:41 +00001692def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1693 "SAR(8|16|32|64)mCL",
1694 "SHL(8|16|32|64)mCL",
1695 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001696
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001697def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1698 let Latency = 8;
1699 let NumMicroOps = 6;
1700 let ResourceCycles = [1,1,1,2,1];
1701}
Craig Topper9f834812018-04-01 21:54:24 +00001702def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001703 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001704 "SBB(8|16|32|64)mi")>;
1705def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1706 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001707
1708def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1709 let Latency = 9;
1710 let NumMicroOps = 2;
1711 let ResourceCycles = [1,1];
1712}
Craig Topperfc179c62018-03-22 04:23:41 +00001713def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1714 "MMX_PMADDUBSWrm",
1715 "MMX_PMADDWDirm",
1716 "MMX_PMULHRSWrm",
1717 "MMX_PMULHUWirm",
1718 "MMX_PMULHWirm",
1719 "MMX_PMULLWirm",
1720 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001721 "VTESTPDYrm",
1722 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001723
1724def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1725 let Latency = 9;
1726 let NumMicroOps = 2;
1727 let ResourceCycles = [1,1];
1728}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001729def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001730 "VPMOVSXBWYrm",
1731 "VPMOVSXDQYrm",
1732 "VPMOVSXWDYrm",
1733 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001734 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001735
1736def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1737 let Latency = 9;
1738 let NumMicroOps = 2;
1739 let ResourceCycles = [1,1];
1740}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001741def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1742 "(V?)ADDSSrm",
1743 "(V?)CMPSDrm",
1744 "(V?)CMPSSrm",
1745 "(V?)MAX(C?)SDrm",
1746 "(V?)MAX(C?)SSrm",
1747 "(V?)MIN(C?)SDrm",
1748 "(V?)MIN(C?)SSrm",
1749 "(V?)MULSDrm",
1750 "(V?)MULSSrm",
1751 "(V?)SUBSDrm",
1752 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001753
Craig Topper58afb4e2018-03-22 21:10:07 +00001754def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001755 let Latency = 9;
1756 let NumMicroOps = 2;
1757 let ResourceCycles = [1,1];
1758}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001759def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001760 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001761 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001762 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001763
Craig Topper58afb4e2018-03-22 21:10:07 +00001764def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001765 let Latency = 9;
1766 let NumMicroOps = 3;
1767 let ResourceCycles = [1,2];
1768}
Craig Topperfc179c62018-03-22 04:23:41 +00001769def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001770
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001771def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1772 let Latency = 9;
1773 let NumMicroOps = 3;
1774 let ResourceCycles = [1,2];
1775}
Craig Topperfc179c62018-03-22 04:23:41 +00001776def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1777 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001778
1779def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1780 let Latency = 9;
1781 let NumMicroOps = 3;
1782 let ResourceCycles = [1,1,1];
1783}
Craig Topperfc179c62018-03-22 04:23:41 +00001784def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001785
1786def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1787 let Latency = 9;
1788 let NumMicroOps = 3;
1789 let ResourceCycles = [1,1,1];
1790}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001791def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001792
1793def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001794 let Latency = 9;
1795 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001796 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001797}
Craig Topperfc179c62018-03-22 04:23:41 +00001798def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1799 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001800
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001801def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1802 let Latency = 9;
1803 let NumMicroOps = 4;
1804 let ResourceCycles = [2,1,1];
1805}
Craig Topperfc179c62018-03-22 04:23:41 +00001806def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1807 "(V?)PHADDWrm",
1808 "(V?)PHSUBDrm",
1809 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001810
1811def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1812 let Latency = 9;
1813 let NumMicroOps = 4;
1814 let ResourceCycles = [1,1,1,1];
1815}
Craig Topperfc179c62018-03-22 04:23:41 +00001816def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1817 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001818
1819def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1820 let Latency = 9;
1821 let NumMicroOps = 5;
1822 let ResourceCycles = [1,2,1,1];
1823}
Craig Topperfc179c62018-03-22 04:23:41 +00001824def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1825 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001826
1827def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1828 let Latency = 10;
1829 let NumMicroOps = 2;
1830 let ResourceCycles = [1,1];
1831}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001832def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001833 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001834
1835def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1836 let Latency = 10;
1837 let NumMicroOps = 2;
1838 let ResourceCycles = [1,1];
1839}
Craig Topperfc179c62018-03-22 04:23:41 +00001840def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1841 "ADD_F64m",
1842 "ILD_F16m",
1843 "ILD_F32m",
1844 "ILD_F64m",
1845 "SUBR_F32m",
1846 "SUBR_F64m",
1847 "SUB_F32m",
1848 "SUB_F64m",
1849 "VPCMPGTQYrm",
1850 "VPERM2F128rm",
1851 "VPERM2I128rm",
1852 "VPERMDYrm",
1853 "VPERMPDYmi",
1854 "VPERMPSYrm",
1855 "VPERMQYmi",
1856 "VPMOVZXBDYrm",
1857 "VPMOVZXBQYrm",
1858 "VPMOVZXBWYrm",
1859 "VPMOVZXDQYrm",
1860 "VPMOVZXWQYrm",
1861 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001862
1863def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1864 let Latency = 10;
1865 let NumMicroOps = 2;
1866 let ResourceCycles = [1,1];
1867}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001868def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1869 "(V?)ADDPSrm",
1870 "(V?)ADDSUBPDrm",
1871 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001872 "(V?)CVTDQ2PSrm",
1873 "(V?)CVTPH2PSYrm",
1874 "(V?)CVTPS2DQrm",
1875 "(V?)CVTSS2SDrm",
1876 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001877 "(V?)MULPDrm",
1878 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001879 "(V?)PMADDUBSWrm",
1880 "(V?)PMADDWDrm",
1881 "(V?)PMULDQrm",
1882 "(V?)PMULHRSWrm",
1883 "(V?)PMULHUWrm",
1884 "(V?)PMULHWrm",
1885 "(V?)PMULLWrm",
1886 "(V?)PMULUDQrm",
1887 "(V?)SUBPDrm",
1888 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001889
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001890def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1891 let Latency = 10;
1892 let NumMicroOps = 3;
1893 let ResourceCycles = [1,1,1];
1894}
Craig Topperfc179c62018-03-22 04:23:41 +00001895def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1896 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001897
Craig Topper58afb4e2018-03-22 21:10:07 +00001898def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001899 let Latency = 10;
1900 let NumMicroOps = 3;
1901 let ResourceCycles = [1,1,1];
1902}
Craig Topperfc179c62018-03-22 04:23:41 +00001903def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001904
1905def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001906 let Latency = 10;
1907 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001908 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001909}
Craig Topperfc179c62018-03-22 04:23:41 +00001910def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1911 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001912
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001913def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1914 let Latency = 10;
1915 let NumMicroOps = 4;
1916 let ResourceCycles = [2,1,1];
1917}
Craig Topperfc179c62018-03-22 04:23:41 +00001918def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1919 "VPHADDWYrm",
1920 "VPHSUBDYrm",
1921 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001922
1923def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001924 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001925 let NumMicroOps = 4;
1926 let ResourceCycles = [1,1,1,1];
1927}
Craig Topperf846e2d2018-04-19 05:34:05 +00001928def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001929
1930def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1931 let Latency = 10;
1932 let NumMicroOps = 8;
1933 let ResourceCycles = [1,1,1,1,1,3];
1934}
Craig Topper13a16502018-03-19 00:56:09 +00001935def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001936
1937def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001938 let Latency = 10;
1939 let NumMicroOps = 10;
1940 let ResourceCycles = [9,1];
1941}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001942def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001943
Craig Topper8104f262018-04-02 05:33:28 +00001944def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001945 let Latency = 11;
1946 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001947 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001948}
Craig Topper8104f262018-04-02 05:33:28 +00001949def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001950 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001951
Craig Topper8104f262018-04-02 05:33:28 +00001952def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1953 let Latency = 11;
1954 let NumMicroOps = 1;
1955 let ResourceCycles = [1,5];
1956}
1957def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1958
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001959def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001960 let Latency = 11;
1961 let NumMicroOps = 2;
1962 let ResourceCycles = [1,1];
1963}
Craig Topperfc179c62018-03-22 04:23:41 +00001964def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
1965 "MUL_F64m",
1966 "VRCPPSYm",
1967 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001968
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001969def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1970 let Latency = 11;
1971 let NumMicroOps = 2;
1972 let ResourceCycles = [1,1];
1973}
Craig Topperfc179c62018-03-22 04:23:41 +00001974def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1975 "VADDPSYrm",
1976 "VADDSUBPDYrm",
1977 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001978 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001979 "VCMPPSYrmi",
1980 "VCVTDQ2PSYrm",
1981 "VCVTPS2DQYrm",
1982 "VCVTPS2PDYrm",
1983 "VCVTTPS2DQYrm",
1984 "VMAX(C?)PDYrm",
1985 "VMAX(C?)PSYrm",
1986 "VMIN(C?)PDYrm",
1987 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001988 "VMULPDYrm",
1989 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001990 "VPMADDUBSWYrm",
1991 "VPMADDWDYrm",
1992 "VPMULDQYrm",
1993 "VPMULHRSWYrm",
1994 "VPMULHUWYrm",
1995 "VPMULHWYrm",
1996 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001997 "VPMULUDQYrm",
1998 "VSUBPDYrm",
1999 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002000
2001def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2002 let Latency = 11;
2003 let NumMicroOps = 3;
2004 let ResourceCycles = [2,1];
2005}
Craig Topperfc179c62018-03-22 04:23:41 +00002006def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2007 "FICOM32m",
2008 "FICOMP16m",
2009 "FICOMP32m",
2010 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002011
2012def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2013 let Latency = 11;
2014 let NumMicroOps = 3;
2015 let ResourceCycles = [1,1,1];
2016}
Craig Topperfc179c62018-03-22 04:23:41 +00002017def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002018
Craig Topper58afb4e2018-03-22 21:10:07 +00002019def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002020 let Latency = 11;
2021 let NumMicroOps = 3;
2022 let ResourceCycles = [1,1,1];
2023}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002024def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2025 "(V?)CVTSD2SIrm",
2026 "(V?)CVTSS2SI64rm",
2027 "(V?)CVTSS2SIrm",
2028 "(V?)CVTTSD2SI64rm",
2029 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002030 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002031 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002032
Craig Topper58afb4e2018-03-22 21:10:07 +00002033def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002034 let Latency = 11;
2035 let NumMicroOps = 3;
2036 let ResourceCycles = [1,1,1];
2037}
Craig Topperfc179c62018-03-22 04:23:41 +00002038def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2039 "CVTPD2PSrm",
2040 "CVTTPD2DQrm",
2041 "MMX_CVTPD2PIirm",
2042 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002043
2044def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2045 let Latency = 11;
2046 let NumMicroOps = 6;
2047 let ResourceCycles = [1,1,1,2,1];
2048}
Craig Topperfc179c62018-03-22 04:23:41 +00002049def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2050 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002051
2052def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002053 let Latency = 11;
2054 let NumMicroOps = 7;
2055 let ResourceCycles = [2,3,2];
2056}
Craig Topperfc179c62018-03-22 04:23:41 +00002057def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2058 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002059
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002060def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002061 let Latency = 11;
2062 let NumMicroOps = 9;
2063 let ResourceCycles = [1,5,1,2];
2064}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002065def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002066
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002067def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002068 let Latency = 11;
2069 let NumMicroOps = 11;
2070 let ResourceCycles = [2,9];
2071}
Craig Topperfc179c62018-03-22 04:23:41 +00002072def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002073
Craig Topper8104f262018-04-02 05:33:28 +00002074def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002075 let Latency = 12;
2076 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002077 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002078}
Craig Topper8104f262018-04-02 05:33:28 +00002079def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002080 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002081
Craig Topper8104f262018-04-02 05:33:28 +00002082def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2083 let Latency = 12;
2084 let NumMicroOps = 1;
2085 let ResourceCycles = [1,6];
2086}
2087def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2088
Craig Topper58afb4e2018-03-22 21:10:07 +00002089def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002090 let Latency = 12;
2091 let NumMicroOps = 4;
2092 let ResourceCycles = [1,1,1,1];
2093}
2094def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2095
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002096def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002097 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002098 let NumMicroOps = 3;
2099 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002100}
Craig Topperfc179c62018-03-22 04:23:41 +00002101def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2102 "ADD_FI32m",
2103 "SUBR_FI16m",
2104 "SUBR_FI32m",
2105 "SUB_FI16m",
2106 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002107
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002108def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2109 let Latency = 13;
2110 let NumMicroOps = 3;
2111 let ResourceCycles = [1,1,1];
2112}
2113def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2114
Craig Topper58afb4e2018-03-22 21:10:07 +00002115def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002116 let Latency = 13;
2117 let NumMicroOps = 4;
2118 let ResourceCycles = [1,3];
2119}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002120def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002121
Craig Topper8104f262018-04-02 05:33:28 +00002122def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002123 let Latency = 14;
2124 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002125 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002126}
Craig Topper8104f262018-04-02 05:33:28 +00002127def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002128 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002129
Craig Topper8104f262018-04-02 05:33:28 +00002130def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2131 let Latency = 14;
2132 let NumMicroOps = 1;
2133 let ResourceCycles = [1,5];
2134}
2135def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2136
Craig Topper58afb4e2018-03-22 21:10:07 +00002137def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002138 let Latency = 14;
2139 let NumMicroOps = 3;
2140 let ResourceCycles = [1,2];
2141}
Craig Topperfc179c62018-03-22 04:23:41 +00002142def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2143def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2144def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2145def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002146
2147def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2148 let Latency = 14;
2149 let NumMicroOps = 3;
2150 let ResourceCycles = [1,1,1];
2151}
Craig Topperfc179c62018-03-22 04:23:41 +00002152def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2153 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002154
2155def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002156 let Latency = 14;
2157 let NumMicroOps = 10;
2158 let ResourceCycles = [2,4,1,3];
2159}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002160def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002161
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002162def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002163 let Latency = 15;
2164 let NumMicroOps = 1;
2165 let ResourceCycles = [1];
2166}
Craig Topperfc179c62018-03-22 04:23:41 +00002167def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2168 "DIVR_FST0r",
2169 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002170
Craig Topper58afb4e2018-03-22 21:10:07 +00002171def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002172 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002173 let NumMicroOps = 3;
2174 let ResourceCycles = [1,2];
2175}
Craig Topper40d3b322018-03-22 21:55:20 +00002176def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2177 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002178
Craig Topperd25f1ac2018-03-20 23:39:48 +00002179def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2180 let Latency = 17;
2181 let NumMicroOps = 3;
2182 let ResourceCycles = [1,2];
2183}
2184def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2185
Craig Topper58afb4e2018-03-22 21:10:07 +00002186def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002187 let Latency = 15;
2188 let NumMicroOps = 4;
2189 let ResourceCycles = [1,1,2];
2190}
Craig Topperfc179c62018-03-22 04:23:41 +00002191def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002192
2193def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2194 let Latency = 15;
2195 let NumMicroOps = 10;
2196 let ResourceCycles = [1,1,1,5,1,1];
2197}
Craig Topper13a16502018-03-19 00:56:09 +00002198def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002199
Craig Topper8104f262018-04-02 05:33:28 +00002200def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002201 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002202 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002203 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002204}
Craig Topperfc179c62018-03-22 04:23:41 +00002205def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002206
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002207def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2208 let Latency = 16;
2209 let NumMicroOps = 14;
2210 let ResourceCycles = [1,1,1,4,2,5];
2211}
2212def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2213
2214def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002215 let Latency = 16;
2216 let NumMicroOps = 16;
2217 let ResourceCycles = [16];
2218}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002219def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002220
Craig Topper8104f262018-04-02 05:33:28 +00002221def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002222 let Latency = 17;
2223 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002224 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002225}
Craig Topper8104f262018-04-02 05:33:28 +00002226def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2227
2228def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2229 let Latency = 17;
2230 let NumMicroOps = 2;
2231 let ResourceCycles = [1,1,3];
2232}
2233def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002234
2235def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002236 let Latency = 17;
2237 let NumMicroOps = 15;
2238 let ResourceCycles = [2,1,2,4,2,4];
2239}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002240def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002241
Craig Topper8104f262018-04-02 05:33:28 +00002242def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002243 let Latency = 18;
2244 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002245 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002246}
Craig Topper8104f262018-04-02 05:33:28 +00002247def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002248 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002249
Craig Topper8104f262018-04-02 05:33:28 +00002250def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2251 let Latency = 18;
2252 let NumMicroOps = 1;
2253 let ResourceCycles = [1,12];
2254}
2255def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2256
2257def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002258 let Latency = 18;
2259 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002260 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002261}
Craig Topper8104f262018-04-02 05:33:28 +00002262def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2263
2264def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2265 let Latency = 18;
2266 let NumMicroOps = 2;
2267 let ResourceCycles = [1,1,3];
2268}
2269def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002270
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002271def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002272 let Latency = 18;
2273 let NumMicroOps = 8;
2274 let ResourceCycles = [1,1,1,5];
2275}
Craig Topperfc179c62018-03-22 04:23:41 +00002276def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002277
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002278def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002279 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002280 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002281 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002282}
Craig Topper13a16502018-03-19 00:56:09 +00002283def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002284
Craig Topper8104f262018-04-02 05:33:28 +00002285def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002286 let Latency = 19;
2287 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002288 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002289}
Craig Topper8104f262018-04-02 05:33:28 +00002290def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2291
2292def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2293 let Latency = 19;
2294 let NumMicroOps = 2;
2295 let ResourceCycles = [1,1,6];
2296}
2297def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002298
Craig Topper58afb4e2018-03-22 21:10:07 +00002299def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002300 let Latency = 19;
2301 let NumMicroOps = 5;
2302 let ResourceCycles = [1,1,3];
2303}
Craig Topperfc179c62018-03-22 04:23:41 +00002304def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002305
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002306def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002307 let Latency = 20;
2308 let NumMicroOps = 1;
2309 let ResourceCycles = [1];
2310}
Craig Topperfc179c62018-03-22 04:23:41 +00002311def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2312 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002313 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002314
Craig Topper8104f262018-04-02 05:33:28 +00002315def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002316 let Latency = 20;
2317 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002318 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002319}
Craig Topperfc179c62018-03-22 04:23:41 +00002320def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002321
Craig Topper58afb4e2018-03-22 21:10:07 +00002322def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002323 let Latency = 20;
2324 let NumMicroOps = 5;
2325 let ResourceCycles = [1,1,3];
2326}
2327def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2328
2329def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2330 let Latency = 20;
2331 let NumMicroOps = 8;
2332 let ResourceCycles = [1,1,1,1,1,1,2];
2333}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002334def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002335
2336def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002337 let Latency = 20;
2338 let NumMicroOps = 10;
2339 let ResourceCycles = [1,2,7];
2340}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002341def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002342
Craig Topper8104f262018-04-02 05:33:28 +00002343def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002344 let Latency = 21;
2345 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002346 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002347}
2348def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2349
2350def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2351 let Latency = 22;
2352 let NumMicroOps = 2;
2353 let ResourceCycles = [1,1];
2354}
Craig Topperfc179c62018-03-22 04:23:41 +00002355def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2356 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002357
2358def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2359 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002360 let NumMicroOps = 5;
2361 let ResourceCycles = [1,2,1,1];
2362}
Craig Topper17a31182017-12-16 18:35:29 +00002363def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2364 VGATHERDPDrm,
2365 VGATHERQPDrm,
2366 VGATHERQPSrm,
2367 VPGATHERDDrm,
2368 VPGATHERDQrm,
2369 VPGATHERQDrm,
2370 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002371
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002372def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2373 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002374 let NumMicroOps = 5;
2375 let ResourceCycles = [1,2,1,1];
2376}
Craig Topper17a31182017-12-16 18:35:29 +00002377def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2378 VGATHERQPDYrm,
2379 VGATHERQPSYrm,
2380 VPGATHERDDYrm,
2381 VPGATHERDQYrm,
2382 VPGATHERQDYrm,
2383 VPGATHERQQYrm,
2384 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002385
Craig Topper8104f262018-04-02 05:33:28 +00002386def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002387 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002388 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002389 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002390}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002391def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002392
2393def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2394 let Latency = 23;
2395 let NumMicroOps = 19;
2396 let ResourceCycles = [2,1,4,1,1,4,6];
2397}
2398def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2399
Craig Topper8104f262018-04-02 05:33:28 +00002400def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002401 let Latency = 24;
2402 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002403 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002404}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002405def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002406
Craig Topper8104f262018-04-02 05:33:28 +00002407def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002408 let Latency = 25;
2409 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002410 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002411}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002412def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002413
2414def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2415 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002416 let NumMicroOps = 3;
2417 let ResourceCycles = [1,1,1];
2418}
Craig Topperfc179c62018-03-22 04:23:41 +00002419def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2420 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002421
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002422def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2423 let Latency = 27;
2424 let NumMicroOps = 2;
2425 let ResourceCycles = [1,1];
2426}
Craig Topperfc179c62018-03-22 04:23:41 +00002427def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2428 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002429
2430def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2431 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002432 let NumMicroOps = 8;
2433 let ResourceCycles = [2,4,1,1];
2434}
Craig Topper13a16502018-03-19 00:56:09 +00002435def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002436
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002437def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002438 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002439 let NumMicroOps = 3;
2440 let ResourceCycles = [1,1,1];
2441}
Craig Topperfc179c62018-03-22 04:23:41 +00002442def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2443 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002444
2445def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2446 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002447 let NumMicroOps = 23;
2448 let ResourceCycles = [1,5,3,4,10];
2449}
Craig Topperfc179c62018-03-22 04:23:41 +00002450def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2451 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002452
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002453def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2454 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002455 let NumMicroOps = 23;
2456 let ResourceCycles = [1,5,2,1,4,10];
2457}
Craig Topperfc179c62018-03-22 04:23:41 +00002458def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2459 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002460
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002461def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2462 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002463 let NumMicroOps = 31;
2464 let ResourceCycles = [1,8,1,21];
2465}
Craig Topper391c6f92017-12-10 01:24:08 +00002466def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002467
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002468def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2469 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002470 let NumMicroOps = 18;
2471 let ResourceCycles = [1,1,2,3,1,1,1,8];
2472}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002473def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002474
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002475def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2476 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002477 let NumMicroOps = 39;
2478 let ResourceCycles = [1,10,1,1,26];
2479}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002480def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002481
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002482def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002483 let Latency = 42;
2484 let NumMicroOps = 22;
2485 let ResourceCycles = [2,20];
2486}
Craig Topper2d451e72018-03-18 08:38:06 +00002487def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002488
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002489def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2490 let Latency = 42;
2491 let NumMicroOps = 40;
2492 let ResourceCycles = [1,11,1,1,26];
2493}
Craig Topper391c6f92017-12-10 01:24:08 +00002494def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002495
2496def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2497 let Latency = 46;
2498 let NumMicroOps = 44;
2499 let ResourceCycles = [1,11,1,1,30];
2500}
2501def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2502
2503def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2504 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002505 let NumMicroOps = 64;
2506 let ResourceCycles = [2,8,5,10,39];
2507}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002508def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002509
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002510def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2511 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002512 let NumMicroOps = 88;
2513 let ResourceCycles = [4,4,31,1,2,1,45];
2514}
Craig Topper2d451e72018-03-18 08:38:06 +00002515def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002516
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002517def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2518 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002519 let NumMicroOps = 90;
2520 let ResourceCycles = [4,2,33,1,2,1,47];
2521}
Craig Topper2d451e72018-03-18 08:38:06 +00002522def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002523
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002524def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002525 let Latency = 75;
2526 let NumMicroOps = 15;
2527 let ResourceCycles = [6,3,6];
2528}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002529def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002530
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002531def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002532 let Latency = 76;
2533 let NumMicroOps = 32;
2534 let ResourceCycles = [7,2,8,3,1,11];
2535}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002536def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002537
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002538def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002539 let Latency = 102;
2540 let NumMicroOps = 66;
2541 let ResourceCycles = [4,2,4,8,14,34];
2542}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002543def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002544
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002545def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2546 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002547 let NumMicroOps = 100;
2548 let ResourceCycles = [9,1,11,16,1,11,21,30];
2549}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002550def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002551
2552} // SchedModel