blob: 4b51cc8e608db6312e49fb8c72d8c4bc0b0b3b35 [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 Pilgrimef8d3ae2018-04-22 15:25:59 +0000353defm : SKLWriteResPair<WriteFHAdd, [SKLPort5,SKLPort01], 6, [2,1], 3, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000354defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000355
356// Remaining instrs.
357
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000358def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000359 let Latency = 1;
360 let NumMicroOps = 1;
361 let ResourceCycles = [1];
362}
Craig Topperfc179c62018-03-22 04:23:41 +0000363def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
364 "MMX_PADDSWirr",
365 "MMX_PADDUSBirr",
366 "MMX_PADDUSWirr",
367 "MMX_PAVGBirr",
368 "MMX_PAVGWirr",
369 "MMX_PCMPEQBirr",
370 "MMX_PCMPEQDirr",
371 "MMX_PCMPEQWirr",
372 "MMX_PCMPGTBirr",
373 "MMX_PCMPGTDirr",
374 "MMX_PCMPGTWirr",
375 "MMX_PMAXSWirr",
376 "MMX_PMAXUBirr",
377 "MMX_PMINSWirr",
378 "MMX_PMINUBirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000379 "MMX_PSUBSBirr",
380 "MMX_PSUBSWirr",
381 "MMX_PSUBUSBirr",
382 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000383
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000384def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000385 let Latency = 1;
386 let NumMicroOps = 1;
387 let ResourceCycles = [1];
388}
Craig Topperfc179c62018-03-22 04:23:41 +0000389def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
390 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000391 "MMX_MOVD64rr",
392 "MMX_MOVD64to64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000393 "UCOM_FPr",
394 "UCOM_Fr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000395 "(V?)MOV64toPQIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000396 "(V?)MOVDI2PDIrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000397 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000398 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000399
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000400def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000401 let Latency = 1;
402 let NumMicroOps = 1;
403 let ResourceCycles = [1];
404}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000405def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000406
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000407def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000408 let Latency = 1;
409 let NumMicroOps = 1;
410 let ResourceCycles = [1];
411}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000412def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
413 "(V?)PABSD(Y?)rr",
414 "(V?)PABSW(Y?)rr",
415 "(V?)PADDSB(Y?)rr",
416 "(V?)PADDSW(Y?)rr",
417 "(V?)PADDUSB(Y?)rr",
418 "(V?)PADDUSW(Y?)rr",
419 "(V?)PAVGB(Y?)rr",
420 "(V?)PAVGW(Y?)rr",
421 "(V?)PCMPEQB(Y?)rr",
422 "(V?)PCMPEQD(Y?)rr",
423 "(V?)PCMPEQQ(Y?)rr",
424 "(V?)PCMPEQW(Y?)rr",
425 "(V?)PCMPGTB(Y?)rr",
426 "(V?)PCMPGTD(Y?)rr",
427 "(V?)PCMPGTW(Y?)rr",
428 "(V?)PMAXSB(Y?)rr",
429 "(V?)PMAXSD(Y?)rr",
430 "(V?)PMAXSW(Y?)rr",
431 "(V?)PMAXUB(Y?)rr",
432 "(V?)PMAXUD(Y?)rr",
433 "(V?)PMAXUW(Y?)rr",
434 "(V?)PMINSB(Y?)rr",
435 "(V?)PMINSD(Y?)rr",
436 "(V?)PMINSW(Y?)rr",
437 "(V?)PMINUB(Y?)rr",
438 "(V?)PMINUD(Y?)rr",
439 "(V?)PMINUW(Y?)rr",
440 "(V?)PSIGNB(Y?)rr",
441 "(V?)PSIGND(Y?)rr",
442 "(V?)PSIGNW(Y?)rr",
443 "(V?)PSLLD(Y?)ri",
444 "(V?)PSLLQ(Y?)ri",
445 "VPSLLVD(Y?)rr",
446 "VPSLLVQ(Y?)rr",
447 "(V?)PSLLW(Y?)ri",
448 "(V?)PSRAD(Y?)ri",
449 "VPSRAVD(Y?)rr",
450 "(V?)PSRAW(Y?)ri",
451 "(V?)PSRLD(Y?)ri",
452 "(V?)PSRLQ(Y?)ri",
453 "VPSRLVD(Y?)rr",
454 "VPSRLVQ(Y?)rr",
455 "(V?)PSRLW(Y?)ri",
456 "(V?)PSUBSB(Y?)rr",
457 "(V?)PSUBSW(Y?)rr",
458 "(V?)PSUBUSB(Y?)rr",
459 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000460
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000461def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000462 let Latency = 1;
463 let NumMicroOps = 1;
464 let ResourceCycles = [1];
465}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000466def: InstRW<[SKLWriteResGroup6], (instrs FINCSTP, FNOP)>;
467def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000468 "MMX_PABS(B|D|W)rr",
469 "MMX_PADD(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000470 "MMX_PANDNirr",
471 "MMX_PANDirr",
472 "MMX_PORirr",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000473 "MMX_PSIGN(B|D|W)rr",
474 "MMX_PSUB(B|D|Q|W)irr",
Craig Topperfc179c62018-03-22 04:23:41 +0000475 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000476
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000477def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000478 let Latency = 1;
479 let NumMicroOps = 1;
480 let ResourceCycles = [1];
481}
Simon Pilgrim455d0b22018-04-23 13:24:17 +0000482def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO, CLAC, STAC)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000483def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
484 "ADC(16|32|64)i",
485 "ADC(8|16|32|64)rr",
486 "ADCX(32|64)rr",
487 "ADOX(32|64)rr",
488 "BT(16|32|64)ri8",
489 "BT(16|32|64)rr",
490 "BTC(16|32|64)ri8",
491 "BTC(16|32|64)rr",
492 "BTR(16|32|64)ri8",
493 "BTR(16|32|64)rr",
494 "BTS(16|32|64)ri8",
495 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000496 "SAR(8|16|32|64)r1",
497 "SAR(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000498 "SBB(16|32|64)ri",
499 "SBB(16|32|64)i",
500 "SBB(8|16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000501 "SHL(8|16|32|64)r1",
502 "SHL(8|16|32|64)ri",
Craig Topperfc179c62018-03-22 04:23:41 +0000503 "SHR(8|16|32|64)r1",
Simon Pilgrimeb609092018-04-23 22:19:55 +0000504 "SHR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000505
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000506def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
507 let Latency = 1;
508 let NumMicroOps = 1;
509 let ResourceCycles = [1];
510}
Craig Topperfc179c62018-03-22 04:23:41 +0000511def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
512 "BLSI(32|64)rr",
513 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000514 "BLSR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000515
516def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
517 let Latency = 1;
518 let NumMicroOps = 1;
519 let ResourceCycles = [1];
520}
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000521def: InstRW<[SKLWriteResGroup9], (instregex "(V?)PADDB(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000522 "(V?)PADDD(Y?)rr",
523 "(V?)PADDQ(Y?)rr",
524 "(V?)PADDW(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000525 "VPBLENDD(Y?)rri",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000526 "(V?)PSUBB(Y?)rr",
527 "(V?)PSUBD(Y?)rr",
528 "(V?)PSUBQ(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000529 "(V?)PSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000530
531def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
532 let Latency = 1;
533 let NumMicroOps = 1;
534 let ResourceCycles = [1];
535}
Craig Topperfbe31322018-04-05 21:56:19 +0000536def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000537def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000538 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000539 "LAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000540 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000541 "SAHF", // TODO: This doesn't match Agner's data
Craig Topperfc179c62018-03-22 04:23:41 +0000542 "SGDT64m",
543 "SIDT64m",
544 "SLDT64m",
545 "SMSW16m",
546 "STC",
547 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000548 "SYSCALL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000549
550def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000551 let Latency = 1;
552 let NumMicroOps = 2;
553 let ResourceCycles = [1,1];
554}
Craig Topperfc179c62018-03-22 04:23:41 +0000555def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
556 "MMX_MOVD64from64rm",
557 "MMX_MOVD64mr",
558 "MMX_MOVNTQmr",
559 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000560 "MOVNTI_64mr",
561 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000562 "ST_FP32m",
563 "ST_FP64m",
564 "ST_FP80m",
565 "VEXTRACTF128mr",
566 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000567 "(V?)MOVAPDYmr",
568 "(V?)MOVAPS(Y?)mr",
569 "(V?)MOVDQA(Y?)mr",
570 "(V?)MOVDQU(Y?)mr",
571 "(V?)MOVHPDmr",
572 "(V?)MOVHPSmr",
573 "(V?)MOVLPDmr",
574 "(V?)MOVLPSmr",
575 "(V?)MOVNTDQ(Y?)mr",
576 "(V?)MOVNTPD(Y?)mr",
577 "(V?)MOVNTPS(Y?)mr",
578 "(V?)MOVPDI2DImr",
579 "(V?)MOVPQI2QImr",
580 "(V?)MOVPQIto64mr",
581 "(V?)MOVSDmr",
582 "(V?)MOVSSmr",
583 "(V?)MOVUPD(Y?)mr",
584 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000585 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000586
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000587def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000588 let Latency = 2;
589 let NumMicroOps = 1;
590 let ResourceCycles = [1];
591}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000592def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000593 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000594 "(V?)MOVPDI2DIrr",
595 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000596 "VTESTPD(Y?)rr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000597 "VTESTPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000598
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000599def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000600 let Latency = 2;
601 let NumMicroOps = 2;
602 let ResourceCycles = [2];
603}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000604def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000605
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000606def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000607 let Latency = 2;
608 let NumMicroOps = 2;
609 let ResourceCycles = [2];
610}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000611def: InstRW<[SKLWriteResGroup14], (instrs FDECSTP)>;
612def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000613
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000614def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000615 let Latency = 2;
616 let NumMicroOps = 2;
617 let ResourceCycles = [2];
618}
Craig Topperfc179c62018-03-22 04:23:41 +0000619def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
620 "ROL(8|16|32|64)r1",
621 "ROL(8|16|32|64)ri",
622 "ROR(8|16|32|64)r1",
623 "ROR(8|16|32|64)ri",
624 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000625
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000626def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000627 let Latency = 2;
628 let NumMicroOps = 2;
629 let ResourceCycles = [2];
630}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000631def: InstRW<[SKLWriteResGroup17], (instrs LFENCE,
632 WAIT,
633 XGETBV)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000634
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000635def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000636 let Latency = 2;
637 let NumMicroOps = 2;
638 let ResourceCycles = [1,1];
639}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000640def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
641 "VMASKMOVPS(Y?)mr",
642 "VPMASKMOVD(Y?)mr",
643 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000644
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000645def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000646 let Latency = 2;
647 let NumMicroOps = 2;
648 let ResourceCycles = [1,1];
649}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000650def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
651 "(V?)PSLLQrr",
652 "(V?)PSLLWrr",
653 "(V?)PSRADrr",
654 "(V?)PSRAWrr",
655 "(V?)PSRLDrr",
656 "(V?)PSRLQrr",
657 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000658
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000659def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000660 let Latency = 2;
661 let NumMicroOps = 2;
662 let ResourceCycles = [1,1];
663}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000664def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000665
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000666def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000667 let Latency = 2;
668 let NumMicroOps = 2;
669 let ResourceCycles = [1,1];
670}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000671def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000672
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000673def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000674 let Latency = 2;
675 let NumMicroOps = 2;
676 let ResourceCycles = [1,1];
677}
Craig Topper498875f2018-04-04 17:54:19 +0000678def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
679
680def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
681 let Latency = 1;
682 let NumMicroOps = 1;
683 let ResourceCycles = [1];
684}
685def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000686
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000687def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000688 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000689 let NumMicroOps = 2;
690 let ResourceCycles = [1,1];
691}
Craig Topper2d451e72018-03-18 08:38:06 +0000692def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000693def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000694def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
695 "ADC8ri",
696 "SBB8i8",
697 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000698
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000699def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
700 let Latency = 2;
701 let NumMicroOps = 3;
702 let ResourceCycles = [1,1,1];
703}
704def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
705
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000706def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
707 let Latency = 2;
708 let NumMicroOps = 3;
709 let ResourceCycles = [1,1,1];
710}
711def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
712
713def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
714 let Latency = 2;
715 let NumMicroOps = 3;
716 let ResourceCycles = [1,1,1];
717}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000718def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r,
719 STOSB, STOSL, STOSQ, STOSW)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000720def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000721 "PUSH64i8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000722
723def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
724 let Latency = 3;
725 let NumMicroOps = 1;
726 let ResourceCycles = [1];
727}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000728def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000729 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000730 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000731 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000732
Clement Courbet327fac42018-03-07 08:14:02 +0000733def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +0000734 let Latency = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000735 let NumMicroOps = 2;
736 let ResourceCycles = [1,1];
737}
Clement Courbet327fac42018-03-07 08:14:02 +0000738def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000739
740def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
741 let Latency = 3;
742 let NumMicroOps = 1;
743 let ResourceCycles = [1];
744}
Craig Topperfc179c62018-03-22 04:23:41 +0000745def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
746 "ADD_FST0r",
747 "ADD_FrST0",
Craig Topperfc179c62018-03-22 04:23:41 +0000748 "SUBR_FPrST0",
749 "SUBR_FST0r",
750 "SUBR_FrST0",
751 "SUB_FPrST0",
752 "SUB_FST0r",
753 "SUB_FrST0",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000754 "VPBROADCASTBrr",
Simon Pilgrim825ead92018-04-21 20:45:12 +0000755 "VPBROADCASTWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000756 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000757 "VPMOVSXBDYrr",
758 "VPMOVSXBQYrr",
759 "VPMOVSXBWYrr",
760 "VPMOVSXDQYrr",
761 "VPMOVSXWDYrr",
762 "VPMOVSXWQYrr",
763 "VPMOVZXBDYrr",
764 "VPMOVZXBQYrr",
765 "VPMOVZXBWYrr",
766 "VPMOVZXDQYrr",
767 "VPMOVZXWDYrr",
Craig Toppere56a2fc2018-04-17 19:35:19 +0000768 "VPMOVZXWQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000769
770def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
771 let Latency = 3;
772 let NumMicroOps = 2;
773 let ResourceCycles = [1,1];
774}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000775def: InstRW<[SKLWriteResGroup31], (instregex "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000776
777def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
778 let Latency = 3;
779 let NumMicroOps = 2;
780 let ResourceCycles = [1,1];
781}
782def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
783
784def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
785 let Latency = 3;
786 let NumMicroOps = 3;
787 let ResourceCycles = [3];
788}
Craig Topperfc179c62018-03-22 04:23:41 +0000789def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
790 "ROR(8|16|32|64)rCL",
791 "SAR(8|16|32|64)rCL",
792 "SHL(8|16|32|64)rCL",
793 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000794
795def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +0000796 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000797 let NumMicroOps = 3;
798 let ResourceCycles = [3];
799}
Craig Topperb5f26592018-04-19 18:00:17 +0000800def: InstRW<[SKLWriteResGroup34], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
801 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
802 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000803
804def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
805 let Latency = 3;
806 let NumMicroOps = 3;
807 let ResourceCycles = [1,2];
808}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000809def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PH(ADD|SUB)SWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000810
811def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
812 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000813 let NumMicroOps = 3;
814 let ResourceCycles = [2,1];
815}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000816def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
817 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000818
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000819def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
820 let Latency = 3;
821 let NumMicroOps = 3;
822 let ResourceCycles = [2,1];
823}
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000824def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PH(ADD|SUB)(D|W)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000825
826def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
827 let Latency = 3;
828 let NumMicroOps = 3;
829 let ResourceCycles = [2,1];
830}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000831def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
832 "(V?)PHADDW(Y?)rr",
833 "(V?)PHSUBD(Y?)rr",
834 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000835
836def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
837 let Latency = 3;
838 let NumMicroOps = 3;
839 let ResourceCycles = [2,1];
840}
Craig Topperfc179c62018-03-22 04:23:41 +0000841def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
842 "MMX_PACKSSWBirr",
843 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000844
845def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
846 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000847 let NumMicroOps = 3;
848 let ResourceCycles = [1,2];
849}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000850def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000851
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000852def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
853 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000854 let NumMicroOps = 3;
855 let ResourceCycles = [1,2];
856}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000857def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000858
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000859def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
860 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000861 let NumMicroOps = 3;
862 let ResourceCycles = [1,2];
863}
Craig Topperfc179c62018-03-22 04:23:41 +0000864def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
865 "RCL(8|16|32|64)ri",
866 "RCR(8|16|32|64)r1",
867 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000868
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000869def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
870 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000871 let NumMicroOps = 3;
872 let ResourceCycles = [1,1,1];
873}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000874def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000875
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000876def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
877 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000878 let NumMicroOps = 4;
879 let ResourceCycles = [1,1,2];
880}
Craig Topperf4cd9082018-01-19 05:47:32 +0000881def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000882
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000883def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
884 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000885 let NumMicroOps = 4;
886 let ResourceCycles = [1,1,1,1];
887}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000888def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000889
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000890def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
891 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000892 let NumMicroOps = 4;
893 let ResourceCycles = [1,1,1,1];
894}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000895def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000896
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000897def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000898 let Latency = 4;
899 let NumMicroOps = 1;
900 let ResourceCycles = [1];
901}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000902def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +0000903 "MMX_PMADDWDirr",
904 "MMX_PMULHRSWrr",
905 "MMX_PMULHUWirr",
906 "MMX_PMULHWirr",
907 "MMX_PMULLWirr",
908 "MMX_PMULUDQirr",
909 "MUL_FPrST0",
910 "MUL_FST0r",
Simon Pilgrim93b102c2018-04-21 15:16:59 +0000911 "MUL_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000912
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000913def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000914 let Latency = 4;
915 let NumMicroOps = 1;
916 let ResourceCycles = [1];
917}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000918def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
919 "(V?)ADDPS(Y?)rr",
920 "(V?)ADDSDrr",
921 "(V?)ADDSSrr",
922 "(V?)ADDSUBPD(Y?)rr",
923 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000924 "(V?)CVTDQ2PS(Y?)rr",
925 "(V?)CVTPS2DQ(Y?)rr",
926 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000927 "(V?)MULPD(Y?)rr",
928 "(V?)MULPS(Y?)rr",
929 "(V?)MULSDrr",
930 "(V?)MULSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000931 "(V?)PMADDUBSW(Y?)rr",
932 "(V?)PMADDWD(Y?)rr",
933 "(V?)PMULDQ(Y?)rr",
934 "(V?)PMULHRSW(Y?)rr",
935 "(V?)PMULHUW(Y?)rr",
936 "(V?)PMULHW(Y?)rr",
937 "(V?)PMULLW(Y?)rr",
938 "(V?)PMULUDQ(Y?)rr",
939 "(V?)SUBPD(Y?)rr",
940 "(V?)SUBPS(Y?)rr",
941 "(V?)SUBSDrr",
942 "(V?)SUBSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000943
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000944def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000945 let Latency = 4;
946 let NumMicroOps = 2;
947 let ResourceCycles = [1,1];
948}
Craig Topperf846e2d2018-04-19 05:34:05 +0000949def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000950
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000951def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
952 let Latency = 4;
953 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +0000954 let ResourceCycles = [1,1,2];
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000955}
Craig Topperfc179c62018-03-22 04:23:41 +0000956def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000957
958def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000959 let Latency = 4;
960 let NumMicroOps = 2;
961 let ResourceCycles = [1,1];
962}
Craig Topperfc179c62018-03-22 04:23:41 +0000963def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
964 "VPSLLQYrr",
965 "VPSLLWYrr",
966 "VPSRADYrr",
967 "VPSRAWYrr",
968 "VPSRLDYrr",
969 "VPSRLQYrr",
970 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000971
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000972def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000973 let Latency = 4;
974 let NumMicroOps = 3;
975 let ResourceCycles = [1,1,1];
976}
Craig Topperfc179c62018-03-22 04:23:41 +0000977def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
978 "ISTT_FP32m",
979 "ISTT_FP64m",
980 "IST_F16m",
981 "IST_F32m",
982 "IST_FP16m",
983 "IST_FP32m",
984 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000985
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000986def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000987 let Latency = 4;
988 let NumMicroOps = 4;
989 let ResourceCycles = [4];
990}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000991def: InstRW<[SKLWriteResGroup54], (instrs FNCLEX)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000992
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000993def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000994 let Latency = 4;
995 let NumMicroOps = 4;
996 let ResourceCycles = [1,3];
997}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000998def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000999
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001000def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001001 let Latency = 4;
1002 let NumMicroOps = 4;
1003 let ResourceCycles = [1,3];
1004}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001005def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001006
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001007def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008 let Latency = 4;
1009 let NumMicroOps = 4;
1010 let ResourceCycles = [1,1,2];
1011}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001012def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001013
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001014def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1015 let Latency = 5;
1016 let NumMicroOps = 1;
1017 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001018}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00001019def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16",
Craig Topperfc179c62018-03-22 04:23:41 +00001020 "MOVSX(16|32|64)rm32",
1021 "MOVSX(16|32|64)rm8",
1022 "MOVZX(16|32|64)rm16",
1023 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +00001024 "(V?)MOVDDUPrm")>; // TODO: Should this be SKLWriteResGroup67?
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001025
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001026def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001027 let Latency = 5;
1028 let NumMicroOps = 2;
1029 let ResourceCycles = [1,1];
1030}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001031def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1032 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001033
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001034def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001035 let Latency = 5;
1036 let NumMicroOps = 2;
1037 let ResourceCycles = [1,1];
1038}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001039def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001040 "MMX_CVTPS2PIirr",
1041 "MMX_CVTTPD2PIirr",
1042 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001043 "(V?)CVTPD2DQrr",
1044 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001045 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001046 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001047 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001048 "(V?)CVTSD2SSrr",
1049 "(V?)CVTSI642SDrr",
1050 "(V?)CVTSI2SDrr",
1051 "(V?)CVTSI2SSrr",
1052 "(V?)CVTSS2SDrr",
1053 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001054
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001055def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001056 let Latency = 5;
1057 let NumMicroOps = 3;
1058 let ResourceCycles = [1,1,1];
1059}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001060def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001061
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001062def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001063 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001064 let NumMicroOps = 3;
1065 let ResourceCycles = [1,1,1];
1066}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001067def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001068
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001069def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001070 let Latency = 5;
1071 let NumMicroOps = 5;
1072 let ResourceCycles = [1,4];
1073}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001074def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001075
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001076def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001077 let Latency = 5;
1078 let NumMicroOps = 5;
1079 let ResourceCycles = [2,3];
1080}
Craig Topper13a16502018-03-19 00:56:09 +00001081def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001082
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001083def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001084 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001085 let NumMicroOps = 6;
1086 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001087}
Craig Topperfc179c62018-03-22 04:23:41 +00001088def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1089 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001090
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001091def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1092 let Latency = 6;
1093 let NumMicroOps = 1;
1094 let ResourceCycles = [1];
1095}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001096def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001097 "(V?)MOVSHDUPrm",
1098 "(V?)MOVSLDUPrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001099 "VPBROADCASTDrm",
1100 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001101
1102def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001103 let Latency = 6;
1104 let NumMicroOps = 2;
1105 let ResourceCycles = [2];
1106}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001107def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001108
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001109def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001110 let Latency = 6;
1111 let NumMicroOps = 2;
1112 let ResourceCycles = [1,1];
1113}
Craig Topperfc179c62018-03-22 04:23:41 +00001114def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1115 "MMX_PADDSWirm",
1116 "MMX_PADDUSBirm",
1117 "MMX_PADDUSWirm",
1118 "MMX_PAVGBirm",
1119 "MMX_PAVGWirm",
1120 "MMX_PCMPEQBirm",
1121 "MMX_PCMPEQDirm",
1122 "MMX_PCMPEQWirm",
1123 "MMX_PCMPGTBirm",
1124 "MMX_PCMPGTDirm",
1125 "MMX_PCMPGTWirm",
1126 "MMX_PMAXSWirm",
1127 "MMX_PMAXUBirm",
1128 "MMX_PMINSWirm",
1129 "MMX_PMINUBirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001130 "MMX_PSUBSBirm",
1131 "MMX_PSUBSWirm",
1132 "MMX_PSUBUSBirm",
1133 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001134
Craig Topper58afb4e2018-03-22 21:10:07 +00001135def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001136 let Latency = 6;
1137 let NumMicroOps = 2;
1138 let ResourceCycles = [1,1];
1139}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001140def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1141 "(V?)CVTSD2SIrr",
1142 "(V?)CVTSS2SI64rr",
1143 "(V?)CVTSS2SIrr",
1144 "(V?)CVTTSD2SI64rr",
1145 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001146
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001147def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1148 let Latency = 6;
1149 let NumMicroOps = 2;
1150 let ResourceCycles = [1,1];
1151}
Craig Topperfc179c62018-03-22 04:23:41 +00001152def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1153 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001154
1155def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1156 let Latency = 6;
1157 let NumMicroOps = 2;
1158 let ResourceCycles = [1,1];
1159}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001160def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABS(B|D|W)rm",
1161 "MMX_PADD(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001162 "MMX_PANDNirm",
1163 "MMX_PANDirm",
1164 "MMX_PORirm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001165 "MMX_PSIGN(B|D|W)rm",
1166 "MMX_PSUB(B|D|Q|W)irm",
Craig Topperfc179c62018-03-22 04:23:41 +00001167 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001168
1169def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1170 let Latency = 6;
1171 let NumMicroOps = 2;
1172 let ResourceCycles = [1,1];
1173}
Simon Pilgrimeb609092018-04-23 22:19:55 +00001174def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001175def: InstRW<[SKLWriteResGroup74, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1176 ADCX32rm, ADCX64rm,
1177 ADOX32rm, ADOX64rm,
1178 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001179
1180def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1181 let Latency = 6;
1182 let NumMicroOps = 2;
1183 let ResourceCycles = [1,1];
1184}
Craig Topperfc179c62018-03-22 04:23:41 +00001185def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1186 "BLSI(32|64)rm",
1187 "BLSMSK(32|64)rm",
1188 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001189 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001190
1191def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1192 let Latency = 6;
1193 let NumMicroOps = 2;
1194 let ResourceCycles = [1,1];
1195}
Craig Topper2d451e72018-03-18 08:38:06 +00001196def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001197def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001198
Craig Topper58afb4e2018-03-22 21:10:07 +00001199def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001200 let Latency = 6;
1201 let NumMicroOps = 3;
1202 let ResourceCycles = [2,1];
1203}
Craig Topperfc179c62018-03-22 04:23:41 +00001204def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001205
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001206def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001207 let Latency = 6;
1208 let NumMicroOps = 4;
1209 let ResourceCycles = [1,2,1];
1210}
Craig Topperfc179c62018-03-22 04:23:41 +00001211def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1212 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001213
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001214def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001215 let Latency = 6;
1216 let NumMicroOps = 4;
1217 let ResourceCycles = [1,1,1,1];
1218}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001219def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001220
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001221def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1222 let Latency = 6;
1223 let NumMicroOps = 4;
1224 let ResourceCycles = [1,1,1,1];
1225}
Craig Topperfc179c62018-03-22 04:23:41 +00001226def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1227 "BTR(16|32|64)mi8",
1228 "BTS(16|32|64)mi8",
1229 "SAR(8|16|32|64)m1",
1230 "SAR(8|16|32|64)mi",
1231 "SHL(8|16|32|64)m1",
1232 "SHL(8|16|32|64)mi",
1233 "SHR(8|16|32|64)m1",
1234 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001235
1236def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1237 let Latency = 6;
1238 let NumMicroOps = 4;
1239 let ResourceCycles = [1,1,1,1];
1240}
Craig Topperf0d04262018-04-06 16:16:48 +00001241def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1242 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001243
1244def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001245 let Latency = 6;
1246 let NumMicroOps = 6;
1247 let ResourceCycles = [1,5];
1248}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001249def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001250
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001251def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1252 let Latency = 7;
1253 let NumMicroOps = 1;
1254 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001255}
Craig Topperfc179c62018-03-22 04:23:41 +00001256def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1257 "LD_F64m",
1258 "LD_F80m",
1259 "VBROADCASTF128",
1260 "VBROADCASTI128",
1261 "VBROADCASTSDYrm",
1262 "VBROADCASTSSYrm",
1263 "VLDDQUYrm",
1264 "VMOVAPDYrm",
1265 "VMOVAPSYrm",
1266 "VMOVDDUPYrm",
1267 "VMOVDQAYrm",
1268 "VMOVDQUYrm",
1269 "VMOVNTDQAYrm",
1270 "VMOVSHDUPYrm",
1271 "VMOVSLDUPYrm",
1272 "VMOVUPDYrm",
1273 "VMOVUPSYrm",
1274 "VPBROADCASTDYrm",
1275 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001276
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001277def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001278 let Latency = 7;
1279 let NumMicroOps = 2;
1280 let ResourceCycles = [1,1];
1281}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001282def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001283
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001284def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1285 let Latency = 7;
1286 let NumMicroOps = 2;
1287 let ResourceCycles = [1,1];
1288}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001289def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1290 "(V?)PACKSSDWrm",
1291 "(V?)PACKSSWBrm",
1292 "(V?)PACKUSDWrm",
1293 "(V?)PACKUSWBrm",
1294 "(V?)PALIGNRrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001295 "VPBROADCASTBrm",
1296 "VPBROADCASTWrm",
1297 "VPERMILPDmi",
1298 "VPERMILPDrm",
1299 "VPERMILPSmi",
1300 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001301 "(V?)PSHUFBrm",
1302 "(V?)PSHUFDmi",
1303 "(V?)PSHUFHWmi",
1304 "(V?)PSHUFLWmi",
1305 "(V?)PUNPCKHBWrm",
1306 "(V?)PUNPCKHDQrm",
1307 "(V?)PUNPCKHQDQrm",
1308 "(V?)PUNPCKHWDrm",
1309 "(V?)PUNPCKLBWrm",
1310 "(V?)PUNPCKLDQrm",
1311 "(V?)PUNPCKLQDQrm",
1312 "(V?)PUNPCKLWDrm",
1313 "(V?)SHUFPDrmi",
1314 "(V?)SHUFPSrmi",
1315 "(V?)UNPCKHPDrm",
1316 "(V?)UNPCKHPSrm",
1317 "(V?)UNPCKLPDrm",
1318 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001319
Craig Topper58afb4e2018-03-22 21:10:07 +00001320def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001321 let Latency = 7;
1322 let NumMicroOps = 2;
1323 let ResourceCycles = [1,1];
1324}
Craig Topperfc179c62018-03-22 04:23:41 +00001325def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1326 "VCVTPD2PSYrr",
1327 "VCVTPH2PSYrr",
1328 "VCVTPS2PDYrr",
1329 "VCVTPS2PHYrr",
1330 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001331
1332def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1333 let Latency = 7;
1334 let NumMicroOps = 2;
1335 let ResourceCycles = [1,1];
1336}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001337def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1338 "(V?)PABSDrm",
1339 "(V?)PABSWrm",
1340 "(V?)PADDSBrm",
1341 "(V?)PADDSWrm",
1342 "(V?)PADDUSBrm",
1343 "(V?)PADDUSWrm",
1344 "(V?)PAVGBrm",
1345 "(V?)PAVGWrm",
1346 "(V?)PCMPEQBrm",
1347 "(V?)PCMPEQDrm",
1348 "(V?)PCMPEQQrm",
1349 "(V?)PCMPEQWrm",
1350 "(V?)PCMPGTBrm",
1351 "(V?)PCMPGTDrm",
1352 "(V?)PCMPGTWrm",
1353 "(V?)PMAXSBrm",
1354 "(V?)PMAXSDrm",
1355 "(V?)PMAXSWrm",
1356 "(V?)PMAXUBrm",
1357 "(V?)PMAXUDrm",
1358 "(V?)PMAXUWrm",
1359 "(V?)PMINSBrm",
1360 "(V?)PMINSDrm",
1361 "(V?)PMINSWrm",
1362 "(V?)PMINUBrm",
1363 "(V?)PMINUDrm",
1364 "(V?)PMINUWrm",
1365 "(V?)PSIGNBrm",
1366 "(V?)PSIGNDrm",
1367 "(V?)PSIGNWrm",
1368 "(V?)PSLLDrm",
1369 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001370 "VPSLLVDrm",
1371 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001372 "(V?)PSLLWrm",
1373 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001374 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001375 "(V?)PSRAWrm",
1376 "(V?)PSRLDrm",
1377 "(V?)PSRLQrm",
1378 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001379 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001380 "(V?)PSRLWrm",
1381 "(V?)PSUBSBrm",
1382 "(V?)PSUBSWrm",
1383 "(V?)PSUBUSBrm",
1384 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001385
1386def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1387 let Latency = 7;
1388 let NumMicroOps = 2;
1389 let ResourceCycles = [1,1];
1390}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001391def: InstRW<[SKLWriteResGroup91], (instregex "(V?)INSERTF128rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001392 "(V?)INSERTI128rm",
1393 "(V?)MASKMOVPDrm",
1394 "(V?)MASKMOVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001395 "(V?)PADDBrm",
1396 "(V?)PADDDrm",
1397 "(V?)PADDQrm",
1398 "(V?)PADDWrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001399 "(V?)PBLENDDrmi",
1400 "(V?)PMASKMOVDrm",
1401 "(V?)PMASKMOVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001402 "(V?)PSUBBrm",
1403 "(V?)PSUBDrm",
1404 "(V?)PSUBQrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001405 "(V?)PSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001406
1407def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1408 let Latency = 7;
1409 let NumMicroOps = 3;
1410 let ResourceCycles = [2,1];
1411}
Craig Topperfc179c62018-03-22 04:23:41 +00001412def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1413 "MMX_PACKSSWBirm",
1414 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001415
1416def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1417 let Latency = 7;
1418 let NumMicroOps = 3;
1419 let ResourceCycles = [1,2];
1420}
Craig Topperf4cd9082018-01-19 05:47:32 +00001421def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001422
1423def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1424 let Latency = 7;
1425 let NumMicroOps = 3;
1426 let ResourceCycles = [1,2];
1427}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001428def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1429 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001430
Craig Topper58afb4e2018-03-22 21:10:07 +00001431def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001432 let Latency = 7;
1433 let NumMicroOps = 3;
1434 let ResourceCycles = [1,1,1];
1435}
Craig Topperfc179c62018-03-22 04:23:41 +00001436def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1437 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001438
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001439def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001440 let Latency = 7;
1441 let NumMicroOps = 3;
1442 let ResourceCycles = [1,1,1];
1443}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001444def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001445
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001446def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001447 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001448 let NumMicroOps = 3;
1449 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001450}
Craig Topperfc179c62018-03-22 04:23:41 +00001451def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1452 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001453
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001454def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1455 let Latency = 7;
1456 let NumMicroOps = 5;
1457 let ResourceCycles = [1,1,1,2];
1458}
Craig Topperfc179c62018-03-22 04:23:41 +00001459def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1460 "ROL(8|16|32|64)mi",
1461 "ROR(8|16|32|64)m1",
1462 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001463
1464def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1465 let Latency = 7;
1466 let NumMicroOps = 5;
1467 let ResourceCycles = [1,1,1,2];
1468}
Craig Topper13a16502018-03-19 00:56:09 +00001469def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001470
1471def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1472 let Latency = 7;
1473 let NumMicroOps = 5;
1474 let ResourceCycles = [1,1,1,1,1];
1475}
Craig Topperfc179c62018-03-22 04:23:41 +00001476def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1477 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001478
1479def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001480 let Latency = 7;
1481 let NumMicroOps = 7;
1482 let ResourceCycles = [1,3,1,2];
1483}
Craig Topper2d451e72018-03-18 08:38:06 +00001484def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001485
Craig Topper58afb4e2018-03-22 21:10:07 +00001486def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001487 let Latency = 8;
1488 let NumMicroOps = 2;
1489 let ResourceCycles = [2];
1490}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001491def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1492 "(V?)ROUNDPS(Y?)r",
1493 "(V?)ROUNDSDr",
1494 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001495
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001496def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001497 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001498 let NumMicroOps = 2;
1499 let ResourceCycles = [1,1];
1500}
Craig Topperfc179c62018-03-22 04:23:41 +00001501def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1502 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001503
1504def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1505 let Latency = 8;
1506 let NumMicroOps = 2;
1507 let ResourceCycles = [1,1];
1508}
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001509def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1510 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001511
1512def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001513 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001514 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001515 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001516}
Craig Topperf846e2d2018-04-19 05:34:05 +00001517def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001518
Craig Topperf846e2d2018-04-19 05:34:05 +00001519def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort06, SKLPort0156, SKLPort23]> {
1520 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001521 let NumMicroOps = 5;
Craig Topperf846e2d2018-04-19 05:34:05 +00001522 let ResourceCycles = [1,1,2,1];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001523}
Craig Topperfc179c62018-03-22 04:23:41 +00001524def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001525
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001526def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1527 let Latency = 8;
1528 let NumMicroOps = 2;
1529 let ResourceCycles = [1,1];
1530}
Craig Topperfc179c62018-03-22 04:23:41 +00001531def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1532 "FCOM64m",
1533 "FCOMP32m",
1534 "FCOMP64m",
Craig Topperfc179c62018-03-22 04:23:41 +00001535 "VPACKSSDWYrm",
1536 "VPACKSSWBYrm",
1537 "VPACKUSDWYrm",
1538 "VPACKUSWBYrm",
1539 "VPALIGNRYrmi",
1540 "VPBLENDWYrmi",
1541 "VPBROADCASTBYrm",
1542 "VPBROADCASTWYrm",
1543 "VPERMILPDYmi",
1544 "VPERMILPDYrm",
1545 "VPERMILPSYmi",
1546 "VPERMILPSYrm",
1547 "VPMOVSXBDYrm",
1548 "VPMOVSXBQYrm",
1549 "VPMOVSXWQYrm",
1550 "VPSHUFBYrm",
1551 "VPSHUFDYmi",
1552 "VPSHUFHWYmi",
1553 "VPSHUFLWYmi",
1554 "VPUNPCKHBWYrm",
1555 "VPUNPCKHDQYrm",
1556 "VPUNPCKHQDQYrm",
1557 "VPUNPCKHWDYrm",
1558 "VPUNPCKLBWYrm",
1559 "VPUNPCKLDQYrm",
1560 "VPUNPCKLQDQYrm",
1561 "VPUNPCKLWDYrm",
1562 "VSHUFPDYrmi",
1563 "VSHUFPSYrmi",
1564 "VUNPCKHPDYrm",
1565 "VUNPCKHPSYrm",
1566 "VUNPCKLPDYrm",
1567 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001568
1569def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1570 let Latency = 8;
1571 let NumMicroOps = 2;
1572 let ResourceCycles = [1,1];
1573}
Craig Topperfc179c62018-03-22 04:23:41 +00001574def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1575 "VPABSDYrm",
1576 "VPABSWYrm",
1577 "VPADDSBYrm",
1578 "VPADDSWYrm",
1579 "VPADDUSBYrm",
1580 "VPADDUSWYrm",
1581 "VPAVGBYrm",
1582 "VPAVGWYrm",
1583 "VPCMPEQBYrm",
1584 "VPCMPEQDYrm",
1585 "VPCMPEQQYrm",
1586 "VPCMPEQWYrm",
1587 "VPCMPGTBYrm",
1588 "VPCMPGTDYrm",
1589 "VPCMPGTWYrm",
1590 "VPMAXSBYrm",
1591 "VPMAXSDYrm",
1592 "VPMAXSWYrm",
1593 "VPMAXUBYrm",
1594 "VPMAXUDYrm",
1595 "VPMAXUWYrm",
1596 "VPMINSBYrm",
1597 "VPMINSDYrm",
1598 "VPMINSWYrm",
1599 "VPMINUBYrm",
1600 "VPMINUDYrm",
1601 "VPMINUWYrm",
1602 "VPSIGNBYrm",
1603 "VPSIGNDYrm",
1604 "VPSIGNWYrm",
1605 "VPSLLDYrm",
1606 "VPSLLQYrm",
1607 "VPSLLVDYrm",
1608 "VPSLLVQYrm",
1609 "VPSLLWYrm",
1610 "VPSRADYrm",
1611 "VPSRAVDYrm",
1612 "VPSRAWYrm",
1613 "VPSRLDYrm",
1614 "VPSRLQYrm",
1615 "VPSRLVDYrm",
1616 "VPSRLVQYrm",
1617 "VPSRLWYrm",
1618 "VPSUBSBYrm",
1619 "VPSUBSWYrm",
1620 "VPSUBUSBYrm",
1621 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001622
1623def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1624 let Latency = 8;
1625 let NumMicroOps = 2;
1626 let ResourceCycles = [1,1];
1627}
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001628def: InstRW<[SKLWriteResGroup110], (instregex "VBLENDPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001629 "VBLENDPSYrmi",
1630 "VMASKMOVPDYrm",
1631 "VMASKMOVPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001632 "VPADDBYrm",
1633 "VPADDDYrm",
1634 "VPADDQYrm",
1635 "VPADDWYrm",
1636 "VPANDNYrm",
1637 "VPANDYrm",
1638 "VPBLENDDYrmi",
1639 "VPMASKMOVDYrm",
1640 "VPMASKMOVQYrm",
1641 "VPORYrm",
1642 "VPSUBBYrm",
1643 "VPSUBDYrm",
1644 "VPSUBQYrm",
1645 "VPSUBWYrm",
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +00001646 "VPXORYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001647
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001648def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1649 let Latency = 8;
1650 let NumMicroOps = 4;
1651 let ResourceCycles = [1,2,1];
1652}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001653def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PH(ADD|SUB)SWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001654
1655def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1656 let Latency = 8;
1657 let NumMicroOps = 4;
1658 let ResourceCycles = [2,1,1];
1659}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001660def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PH(ADD|SUB)(D|W)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001661
Craig Topper58afb4e2018-03-22 21:10:07 +00001662def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001663 let Latency = 8;
1664 let NumMicroOps = 4;
1665 let ResourceCycles = [1,1,1,1];
1666}
1667def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1668
1669def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1670 let Latency = 8;
1671 let NumMicroOps = 5;
1672 let ResourceCycles = [1,1,3];
1673}
Craig Topper13a16502018-03-19 00:56:09 +00001674def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001675
1676def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1677 let Latency = 8;
1678 let NumMicroOps = 5;
1679 let ResourceCycles = [1,1,1,2];
1680}
Craig Topperfc179c62018-03-22 04:23:41 +00001681def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
1682 "RCL(8|16|32|64)mi",
1683 "RCR(8|16|32|64)m1",
1684 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001685
1686def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1687 let Latency = 8;
1688 let NumMicroOps = 6;
1689 let ResourceCycles = [1,1,1,3];
1690}
Craig Topperfc179c62018-03-22 04:23:41 +00001691def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
1692 "SAR(8|16|32|64)mCL",
1693 "SHL(8|16|32|64)mCL",
1694 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001695
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001696def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1697 let Latency = 8;
1698 let NumMicroOps = 6;
1699 let ResourceCycles = [1,1,1,2,1];
1700}
Craig Topper9f834812018-04-01 21:54:24 +00001701def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
Craig Topperfc179c62018-03-22 04:23:41 +00001702 "CMPXCHG(8|16|32|64)rm",
Craig Topperc50570f2018-04-06 17:12:18 +00001703 "SBB(8|16|32|64)mi")>;
1704def: InstRW<[SKLWriteResGroup119, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1705 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001706
1707def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1708 let Latency = 9;
1709 let NumMicroOps = 2;
1710 let ResourceCycles = [1,1];
1711}
Craig Topperfc179c62018-03-22 04:23:41 +00001712def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
1713 "MMX_PMADDUBSWrm",
1714 "MMX_PMADDWDirm",
1715 "MMX_PMULHRSWrm",
1716 "MMX_PMULHUWirm",
1717 "MMX_PMULHWirm",
1718 "MMX_PMULLWirm",
1719 "MMX_PMULUDQirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001720 "VTESTPDYrm",
1721 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001722
1723def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1724 let Latency = 9;
1725 let NumMicroOps = 2;
1726 let ResourceCycles = [1,1];
1727}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001728def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001729 "VPMOVSXBWYrm",
1730 "VPMOVSXDQYrm",
1731 "VPMOVSXWDYrm",
1732 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001733 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001734
1735def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1736 let Latency = 9;
1737 let NumMicroOps = 2;
1738 let ResourceCycles = [1,1];
1739}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001740def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
1741 "(V?)ADDSSrm",
1742 "(V?)CMPSDrm",
1743 "(V?)CMPSSrm",
1744 "(V?)MAX(C?)SDrm",
1745 "(V?)MAX(C?)SSrm",
1746 "(V?)MIN(C?)SDrm",
1747 "(V?)MIN(C?)SSrm",
1748 "(V?)MULSDrm",
1749 "(V?)MULSSrm",
1750 "(V?)SUBSDrm",
1751 "(V?)SUBSSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001752
Craig Topper58afb4e2018-03-22 21:10:07 +00001753def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001754 let Latency = 9;
1755 let NumMicroOps = 2;
1756 let ResourceCycles = [1,1];
1757}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001758def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001759 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00001760 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001761 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001762
Craig Topper58afb4e2018-03-22 21:10:07 +00001763def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001764 let Latency = 9;
1765 let NumMicroOps = 3;
1766 let ResourceCycles = [1,2];
1767}
Craig Topperfc179c62018-03-22 04:23:41 +00001768def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001769
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001770def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1771 let Latency = 9;
1772 let NumMicroOps = 3;
1773 let ResourceCycles = [1,2];
1774}
Craig Topperfc179c62018-03-22 04:23:41 +00001775def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
1776 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001777
1778def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1779 let Latency = 9;
1780 let NumMicroOps = 3;
1781 let ResourceCycles = [1,1,1];
1782}
Craig Topperfc179c62018-03-22 04:23:41 +00001783def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001784
1785def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
1786 let Latency = 9;
1787 let NumMicroOps = 3;
1788 let ResourceCycles = [1,1,1];
1789}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001790def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001791
1792def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001793 let Latency = 9;
1794 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001795 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001796}
Craig Topperfc179c62018-03-22 04:23:41 +00001797def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
1798 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001799
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001800def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1801 let Latency = 9;
1802 let NumMicroOps = 4;
1803 let ResourceCycles = [2,1,1];
1804}
Craig Topperfc179c62018-03-22 04:23:41 +00001805def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
1806 "(V?)PHADDWrm",
1807 "(V?)PHSUBDrm",
1808 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001809
1810def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
1811 let Latency = 9;
1812 let NumMicroOps = 4;
1813 let ResourceCycles = [1,1,1,1];
1814}
Craig Topperfc179c62018-03-22 04:23:41 +00001815def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
1816 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001817
1818def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
1819 let Latency = 9;
1820 let NumMicroOps = 5;
1821 let ResourceCycles = [1,2,1,1];
1822}
Craig Topperfc179c62018-03-22 04:23:41 +00001823def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
1824 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001825
1826def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1827 let Latency = 10;
1828 let NumMicroOps = 2;
1829 let ResourceCycles = [1,1];
1830}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001831def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00001832 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001833
1834def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1835 let Latency = 10;
1836 let NumMicroOps = 2;
1837 let ResourceCycles = [1,1];
1838}
Craig Topperfc179c62018-03-22 04:23:41 +00001839def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
1840 "ADD_F64m",
1841 "ILD_F16m",
1842 "ILD_F32m",
1843 "ILD_F64m",
1844 "SUBR_F32m",
1845 "SUBR_F64m",
1846 "SUB_F32m",
1847 "SUB_F64m",
1848 "VPCMPGTQYrm",
1849 "VPERM2F128rm",
1850 "VPERM2I128rm",
1851 "VPERMDYrm",
1852 "VPERMPDYmi",
1853 "VPERMPSYrm",
1854 "VPERMQYmi",
1855 "VPMOVZXBDYrm",
1856 "VPMOVZXBQYrm",
1857 "VPMOVZXBWYrm",
1858 "VPMOVZXDQYrm",
1859 "VPMOVZXWQYrm",
1860 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001861
1862def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1863 let Latency = 10;
1864 let NumMicroOps = 2;
1865 let ResourceCycles = [1,1];
1866}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001867def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
1868 "(V?)ADDPSrm",
1869 "(V?)ADDSUBPDrm",
1870 "(V?)ADDSUBPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001871 "(V?)CVTDQ2PSrm",
1872 "(V?)CVTPH2PSYrm",
1873 "(V?)CVTPS2DQrm",
1874 "(V?)CVTSS2SDrm",
1875 "(V?)CVTTPS2DQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001876 "(V?)MULPDrm",
1877 "(V?)MULPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001878 "(V?)PMADDUBSWrm",
1879 "(V?)PMADDWDrm",
1880 "(V?)PMULDQrm",
1881 "(V?)PMULHRSWrm",
1882 "(V?)PMULHUWrm",
1883 "(V?)PMULHWrm",
1884 "(V?)PMULLWrm",
1885 "(V?)PMULUDQrm",
1886 "(V?)SUBPDrm",
1887 "(V?)SUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001888
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001889def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1890 let Latency = 10;
1891 let NumMicroOps = 3;
1892 let ResourceCycles = [1,1,1];
1893}
Craig Topperfc179c62018-03-22 04:23:41 +00001894def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
1895 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001896
Craig Topper58afb4e2018-03-22 21:10:07 +00001897def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001898 let Latency = 10;
1899 let NumMicroOps = 3;
1900 let ResourceCycles = [1,1,1];
1901}
Craig Topperfc179c62018-03-22 04:23:41 +00001902def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001903
1904def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001905 let Latency = 10;
1906 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001907 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001908}
Craig Topperfc179c62018-03-22 04:23:41 +00001909def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
1910 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001911
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001912def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
1913 let Latency = 10;
1914 let NumMicroOps = 4;
1915 let ResourceCycles = [2,1,1];
1916}
Craig Topperfc179c62018-03-22 04:23:41 +00001917def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
1918 "VPHADDWYrm",
1919 "VPHSUBDYrm",
1920 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001921
1922def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001923 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001924 let NumMicroOps = 4;
1925 let ResourceCycles = [1,1,1,1];
1926}
Craig Topperf846e2d2018-04-19 05:34:05 +00001927def: InstRW<[SKLWriteResGroup142], (instrs IMUL32m, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001928
1929def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
1930 let Latency = 10;
1931 let NumMicroOps = 8;
1932 let ResourceCycles = [1,1,1,1,1,3];
1933}
Craig Topper13a16502018-03-19 00:56:09 +00001934def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001935
1936def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001937 let Latency = 10;
1938 let NumMicroOps = 10;
1939 let ResourceCycles = [9,1];
1940}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001941def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001942
Craig Topper8104f262018-04-02 05:33:28 +00001943def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001944 let Latency = 11;
1945 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00001946 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001947}
Craig Topper8104f262018-04-02 05:33:28 +00001948def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001949 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001950
Craig Topper8104f262018-04-02 05:33:28 +00001951def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
1952 let Latency = 11;
1953 let NumMicroOps = 1;
1954 let ResourceCycles = [1,5];
1955}
1956def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
1957
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001958def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001959 let Latency = 11;
1960 let NumMicroOps = 2;
1961 let ResourceCycles = [1,1];
1962}
Craig Topperfc179c62018-03-22 04:23:41 +00001963def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
1964 "MUL_F64m",
1965 "VRCPPSYm",
1966 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001967
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001968def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1969 let Latency = 11;
1970 let NumMicroOps = 2;
1971 let ResourceCycles = [1,1];
1972}
Craig Topperfc179c62018-03-22 04:23:41 +00001973def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
1974 "VADDPSYrm",
1975 "VADDSUBPDYrm",
1976 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001977 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001978 "VCMPPSYrmi",
1979 "VCVTDQ2PSYrm",
1980 "VCVTPS2DQYrm",
1981 "VCVTPS2PDYrm",
1982 "VCVTTPS2DQYrm",
1983 "VMAX(C?)PDYrm",
1984 "VMAX(C?)PSYrm",
1985 "VMIN(C?)PDYrm",
1986 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001987 "VMULPDYrm",
1988 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001989 "VPMADDUBSWYrm",
1990 "VPMADDWDYrm",
1991 "VPMULDQYrm",
1992 "VPMULHRSWYrm",
1993 "VPMULHUWYrm",
1994 "VPMULHWYrm",
1995 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00001996 "VPMULUDQYrm",
1997 "VSUBPDYrm",
1998 "VSUBPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001999
2000def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2001 let Latency = 11;
2002 let NumMicroOps = 3;
2003 let ResourceCycles = [2,1];
2004}
Craig Topperfc179c62018-03-22 04:23:41 +00002005def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2006 "FICOM32m",
2007 "FICOMP16m",
2008 "FICOMP32m",
2009 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002010
2011def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2012 let Latency = 11;
2013 let NumMicroOps = 3;
2014 let ResourceCycles = [1,1,1];
2015}
Craig Topperfc179c62018-03-22 04:23:41 +00002016def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002017
Craig Topper58afb4e2018-03-22 21:10:07 +00002018def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002019 let Latency = 11;
2020 let NumMicroOps = 3;
2021 let ResourceCycles = [1,1,1];
2022}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002023def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2024 "(V?)CVTSD2SIrm",
2025 "(V?)CVTSS2SI64rm",
2026 "(V?)CVTSS2SIrm",
2027 "(V?)CVTTSD2SI64rm",
2028 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002029 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002030 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002031
Craig Topper58afb4e2018-03-22 21:10:07 +00002032def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002033 let Latency = 11;
2034 let NumMicroOps = 3;
2035 let ResourceCycles = [1,1,1];
2036}
Craig Topperfc179c62018-03-22 04:23:41 +00002037def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2038 "CVTPD2PSrm",
2039 "CVTTPD2DQrm",
2040 "MMX_CVTPD2PIirm",
2041 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002042
2043def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2044 let Latency = 11;
2045 let NumMicroOps = 6;
2046 let ResourceCycles = [1,1,1,2,1];
2047}
Craig Topperfc179c62018-03-22 04:23:41 +00002048def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2049 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002050
2051def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002052 let Latency = 11;
2053 let NumMicroOps = 7;
2054 let ResourceCycles = [2,3,2];
2055}
Craig Topperfc179c62018-03-22 04:23:41 +00002056def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2057 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002058
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002059def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002060 let Latency = 11;
2061 let NumMicroOps = 9;
2062 let ResourceCycles = [1,5,1,2];
2063}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002064def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002065
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002066def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002067 let Latency = 11;
2068 let NumMicroOps = 11;
2069 let ResourceCycles = [2,9];
2070}
Craig Topperfc179c62018-03-22 04:23:41 +00002071def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002072
Craig Topper8104f262018-04-02 05:33:28 +00002073def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002074 let Latency = 12;
2075 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002076 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002077}
Craig Topper8104f262018-04-02 05:33:28 +00002078def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002079 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002080
Craig Topper8104f262018-04-02 05:33:28 +00002081def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2082 let Latency = 12;
2083 let NumMicroOps = 1;
2084 let ResourceCycles = [1,6];
2085}
2086def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2087
Craig Topper58afb4e2018-03-22 21:10:07 +00002088def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002089 let Latency = 12;
2090 let NumMicroOps = 4;
2091 let ResourceCycles = [1,1,1,1];
2092}
2093def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2094
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002095def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002096 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002097 let NumMicroOps = 3;
2098 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002099}
Craig Topperfc179c62018-03-22 04:23:41 +00002100def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2101 "ADD_FI32m",
2102 "SUBR_FI16m",
2103 "SUBR_FI32m",
2104 "SUB_FI16m",
2105 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002106
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002107def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2108 let Latency = 13;
2109 let NumMicroOps = 3;
2110 let ResourceCycles = [1,1,1];
2111}
2112def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2113
Craig Topper58afb4e2018-03-22 21:10:07 +00002114def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002115 let Latency = 13;
2116 let NumMicroOps = 4;
2117 let ResourceCycles = [1,3];
2118}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002119def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002120
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002121def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002122 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002123 let NumMicroOps = 4;
2124 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002125}
Craig Topperfc179c62018-03-22 04:23:41 +00002126def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2127 "VHADDPSYrm",
2128 "VHSUBPDYrm",
2129 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002130
Craig Topper8104f262018-04-02 05:33:28 +00002131def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002132 let Latency = 14;
2133 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002134 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002135}
Craig Topper8104f262018-04-02 05:33:28 +00002136def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002137 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002138
Craig Topper8104f262018-04-02 05:33:28 +00002139def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2140 let Latency = 14;
2141 let NumMicroOps = 1;
2142 let ResourceCycles = [1,5];
2143}
2144def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2145
Craig Topper58afb4e2018-03-22 21:10:07 +00002146def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002147 let Latency = 14;
2148 let NumMicroOps = 3;
2149 let ResourceCycles = [1,2];
2150}
Craig Topperfc179c62018-03-22 04:23:41 +00002151def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2152def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2153def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2154def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002155
2156def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2157 let Latency = 14;
2158 let NumMicroOps = 3;
2159 let ResourceCycles = [1,1,1];
2160}
Craig Topperfc179c62018-03-22 04:23:41 +00002161def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2162 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002163
2164def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002165 let Latency = 14;
2166 let NumMicroOps = 10;
2167 let ResourceCycles = [2,4,1,3];
2168}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002169def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002170
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002171def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002172 let Latency = 15;
2173 let NumMicroOps = 1;
2174 let ResourceCycles = [1];
2175}
Craig Topperfc179c62018-03-22 04:23:41 +00002176def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2177 "DIVR_FST0r",
2178 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002179
Craig Topper58afb4e2018-03-22 21:10:07 +00002180def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002181 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002182 let NumMicroOps = 3;
2183 let ResourceCycles = [1,2];
2184}
Craig Topper40d3b322018-03-22 21:55:20 +00002185def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2186 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002187
Craig Topperd25f1ac2018-03-20 23:39:48 +00002188def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2189 let Latency = 17;
2190 let NumMicroOps = 3;
2191 let ResourceCycles = [1,2];
2192}
2193def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2194
Craig Topper58afb4e2018-03-22 21:10:07 +00002195def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002196 let Latency = 15;
2197 let NumMicroOps = 4;
2198 let ResourceCycles = [1,1,2];
2199}
Craig Topperfc179c62018-03-22 04:23:41 +00002200def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002201
2202def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2203 let Latency = 15;
2204 let NumMicroOps = 10;
2205 let ResourceCycles = [1,1,1,5,1,1];
2206}
Craig Topper13a16502018-03-19 00:56:09 +00002207def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002208
Craig Topper8104f262018-04-02 05:33:28 +00002209def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002210 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002211 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002212 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002213}
Craig Topperfc179c62018-03-22 04:23:41 +00002214def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002215
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002216def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2217 let Latency = 16;
2218 let NumMicroOps = 14;
2219 let ResourceCycles = [1,1,1,4,2,5];
2220}
2221def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2222
2223def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002224 let Latency = 16;
2225 let NumMicroOps = 16;
2226 let ResourceCycles = [16];
2227}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002228def: InstRW<[SKLWriteResGroup178], (instrs VZEROALL)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002229
Craig Topper8104f262018-04-02 05:33:28 +00002230def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002231 let Latency = 17;
2232 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002233 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002234}
Craig Topper8104f262018-04-02 05:33:28 +00002235def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2236
2237def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2238 let Latency = 17;
2239 let NumMicroOps = 2;
2240 let ResourceCycles = [1,1,3];
2241}
2242def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002243
2244def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002245 let Latency = 17;
2246 let NumMicroOps = 15;
2247 let ResourceCycles = [2,1,2,4,2,4];
2248}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002249def: InstRW<[SKLWriteResGroup180], (instrs XCH_F)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002250
Craig Topper8104f262018-04-02 05:33:28 +00002251def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002252 let Latency = 18;
2253 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002254 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002255}
Craig Topper8104f262018-04-02 05:33:28 +00002256def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002257 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002258
Craig Topper8104f262018-04-02 05:33:28 +00002259def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2260 let Latency = 18;
2261 let NumMicroOps = 1;
2262 let ResourceCycles = [1,12];
2263}
2264def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2265
2266def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002267 let Latency = 18;
2268 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002269 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002270}
Craig Topper8104f262018-04-02 05:33:28 +00002271def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2272
2273def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2274 let Latency = 18;
2275 let NumMicroOps = 2;
2276 let ResourceCycles = [1,1,3];
2277}
2278def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002279
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002280def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002281 let Latency = 18;
2282 let NumMicroOps = 8;
2283 let ResourceCycles = [1,1,1,5];
2284}
Craig Topperfc179c62018-03-22 04:23:41 +00002285def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002286
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002287def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002288 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002289 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002290 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002291}
Craig Topper13a16502018-03-19 00:56:09 +00002292def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002293
Craig Topper8104f262018-04-02 05:33:28 +00002294def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002295 let Latency = 19;
2296 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002297 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002298}
Craig Topper8104f262018-04-02 05:33:28 +00002299def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2300
2301def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2302 let Latency = 19;
2303 let NumMicroOps = 2;
2304 let ResourceCycles = [1,1,6];
2305}
2306def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002307
Craig Topper58afb4e2018-03-22 21:10:07 +00002308def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002309 let Latency = 19;
2310 let NumMicroOps = 5;
2311 let ResourceCycles = [1,1,3];
2312}
Craig Topperfc179c62018-03-22 04:23:41 +00002313def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002314
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002315def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002316 let Latency = 20;
2317 let NumMicroOps = 1;
2318 let ResourceCycles = [1];
2319}
Craig Topperfc179c62018-03-22 04:23:41 +00002320def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2321 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002322 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002323
Craig Topper8104f262018-04-02 05:33:28 +00002324def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002325 let Latency = 20;
2326 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002327 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002328}
Craig Topperfc179c62018-03-22 04:23:41 +00002329def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002330
Craig Topper58afb4e2018-03-22 21:10:07 +00002331def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002332 let Latency = 20;
2333 let NumMicroOps = 5;
2334 let ResourceCycles = [1,1,3];
2335}
2336def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2337
2338def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2339 let Latency = 20;
2340 let NumMicroOps = 8;
2341 let ResourceCycles = [1,1,1,1,1,1,2];
2342}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002343def: InstRW<[SKLWriteResGroup192], (instrs INSB, INSL, INSW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002344
2345def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002346 let Latency = 20;
2347 let NumMicroOps = 10;
2348 let ResourceCycles = [1,2,7];
2349}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002350def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002351
Craig Topper8104f262018-04-02 05:33:28 +00002352def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002353 let Latency = 21;
2354 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002355 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002356}
2357def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2358
2359def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2360 let Latency = 22;
2361 let NumMicroOps = 2;
2362 let ResourceCycles = [1,1];
2363}
Craig Topperfc179c62018-03-22 04:23:41 +00002364def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2365 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002366
2367def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2368 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002369 let NumMicroOps = 5;
2370 let ResourceCycles = [1,2,1,1];
2371}
Craig Topper17a31182017-12-16 18:35:29 +00002372def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2373 VGATHERDPDrm,
2374 VGATHERQPDrm,
2375 VGATHERQPSrm,
2376 VPGATHERDDrm,
2377 VPGATHERDQrm,
2378 VPGATHERQDrm,
2379 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002380
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002381def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2382 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002383 let NumMicroOps = 5;
2384 let ResourceCycles = [1,2,1,1];
2385}
Craig Topper17a31182017-12-16 18:35:29 +00002386def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2387 VGATHERQPDYrm,
2388 VGATHERQPSYrm,
2389 VPGATHERDDYrm,
2390 VPGATHERDQYrm,
2391 VPGATHERQDYrm,
2392 VPGATHERQQYrm,
2393 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002394
Craig Topper8104f262018-04-02 05:33:28 +00002395def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002396 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002397 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002398 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002399}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002400def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002401
2402def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2403 let Latency = 23;
2404 let NumMicroOps = 19;
2405 let ResourceCycles = [2,1,4,1,1,4,6];
2406}
2407def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2408
Craig Topper8104f262018-04-02 05:33:28 +00002409def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002410 let Latency = 24;
2411 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002412 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002413}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002414def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002415
Craig Topper8104f262018-04-02 05:33:28 +00002416def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002417 let Latency = 25;
2418 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002419 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002420}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002421def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002422
2423def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2424 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002425 let NumMicroOps = 3;
2426 let ResourceCycles = [1,1,1];
2427}
Craig Topperfc179c62018-03-22 04:23:41 +00002428def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2429 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002430
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002431def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2432 let Latency = 27;
2433 let NumMicroOps = 2;
2434 let ResourceCycles = [1,1];
2435}
Craig Topperfc179c62018-03-22 04:23:41 +00002436def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2437 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002438
2439def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2440 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002441 let NumMicroOps = 8;
2442 let ResourceCycles = [2,4,1,1];
2443}
Craig Topper13a16502018-03-19 00:56:09 +00002444def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002445
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002446def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002447 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002448 let NumMicroOps = 3;
2449 let ResourceCycles = [1,1,1];
2450}
Craig Topperfc179c62018-03-22 04:23:41 +00002451def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2452 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002453
2454def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2455 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002456 let NumMicroOps = 23;
2457 let ResourceCycles = [1,5,3,4,10];
2458}
Craig Topperfc179c62018-03-22 04:23:41 +00002459def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2460 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002461
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002462def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2463 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002464 let NumMicroOps = 23;
2465 let ResourceCycles = [1,5,2,1,4,10];
2466}
Craig Topperfc179c62018-03-22 04:23:41 +00002467def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2468 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002469
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002470def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2471 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002472 let NumMicroOps = 31;
2473 let ResourceCycles = [1,8,1,21];
2474}
Craig Topper391c6f92017-12-10 01:24:08 +00002475def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002477def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2478 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002479 let NumMicroOps = 18;
2480 let ResourceCycles = [1,1,2,3,1,1,1,8];
2481}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002482def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002483
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002484def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2485 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002486 let NumMicroOps = 39;
2487 let ResourceCycles = [1,10,1,1,26];
2488}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002489def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002490
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002491def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002492 let Latency = 42;
2493 let NumMicroOps = 22;
2494 let ResourceCycles = [2,20];
2495}
Craig Topper2d451e72018-03-18 08:38:06 +00002496def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002497
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002498def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2499 let Latency = 42;
2500 let NumMicroOps = 40;
2501 let ResourceCycles = [1,11,1,1,26];
2502}
Craig Topper391c6f92017-12-10 01:24:08 +00002503def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002504
2505def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2506 let Latency = 46;
2507 let NumMicroOps = 44;
2508 let ResourceCycles = [1,11,1,1,30];
2509}
2510def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2511
2512def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2513 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002514 let NumMicroOps = 64;
2515 let ResourceCycles = [2,8,5,10,39];
2516}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002517def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002518
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002519def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2520 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002521 let NumMicroOps = 88;
2522 let ResourceCycles = [4,4,31,1,2,1,45];
2523}
Craig Topper2d451e72018-03-18 08:38:06 +00002524def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002525
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002526def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2527 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002528 let NumMicroOps = 90;
2529 let ResourceCycles = [4,2,33,1,2,1,47];
2530}
Craig Topper2d451e72018-03-18 08:38:06 +00002531def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002532
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002533def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002534 let Latency = 75;
2535 let NumMicroOps = 15;
2536 let ResourceCycles = [6,3,6];
2537}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002538def: InstRW<[SKLWriteResGroup220], (instrs FNINIT)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002539
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002540def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002541 let Latency = 76;
2542 let NumMicroOps = 32;
2543 let ResourceCycles = [7,2,8,3,1,11];
2544}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002545def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002546
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002547def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002548 let Latency = 102;
2549 let NumMicroOps = 66;
2550 let ResourceCycles = [4,2,4,8,14,34];
2551}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002552def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002553
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002554def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2555 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002556 let NumMicroOps = 100;
2557 let ResourceCycles = [9,1,11,16,1,11,21,30];
2558}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002559def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002560
2561} // SchedModel