blob: 8909cce96c407cee2b823e25aa5473e91a3fb7e7 [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
64// 60 Entry Unified Scheduler
65def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
66 SKLPort5, SKLPort6, SKLPort7]> {
67 let BufferSize=60;
68}
69
70// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
71// cycles after the memory operand.
72def : ReadAdvance<ReadAfterLd, 5>;
73
74// Many SchedWrites are defined in pairs with and without a folded load.
75// Instructions with folded loads are usually micro-fused, so they only appear
76// as two micro-ops when queued in the reservation station.
77// This multiclass defines the resource usage for variants with and without
78// folded loads.
79multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000080 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000081 int Lat, list<int> Res = [1], int UOps = 1,
82 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000083 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 def : WriteRes<SchedRW, ExePorts> {
85 let Latency = Lat;
86 let ResourceCycles = Res;
87 let NumMicroOps = UOps;
88 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000089
Simon Pilgrime3547af2018-03-25 10:21:19 +000090 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
91 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000092 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000093 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000094 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000095 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +000096 }
97}
98
99// A folded store needs a cycle on port 4 for the store data, but it does not
100// need an extra port 2/3 cycle to recompute the address.
101def : WriteRes<WriteRMW, [SKLPort4]>;
102
103// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000104defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
105defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Simon Pilgrim31a96332018-03-24 20:40:14 +0000107def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000108def : WriteRes<WriteIDiv, [SKLPort0, SKLDivider]> { // Integer division.
109 let Latency = 25;
110 let ResourceCycles = [1, 10];
111}
112def : WriteRes<WriteIDivLd, [SKLPort23, SKLPort0, SKLDivider]> {
113 let Latency = 29;
114 let ResourceCycles = [1, 1, 10];
115}
116
117def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
118
119// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000120defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000121
122// Loads, stores, and moves, not folded with other operations.
123def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
124def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
125def : WriteRes<WriteMove, [SKLPort0156]>;
126
127// Idioms that clear a register, like xorps %xmm0, %xmm0.
128// These can often bypass execution ports completely.
129def : WriteRes<WriteZero, []>;
130
131// Branches don't produce values, so they have no latency, but they still
132// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000133defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000134
135// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000136def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
137def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
138def : WriteRes<WriteFMove, [SKLPort015]>;
139
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000140defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub/compare.
141defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
142defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
143defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
144defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 5>; // Floating point reciprocal estimate.
145defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 5>; // Floating point reciprocal square root estimate.
146defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
147defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
148defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1>; // Floating point vector blends.
149defm : SKLWriteResPair<WriteFVarBlend, [SKLPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000150
151// FMA Scheduling helper class.
152// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
153
154// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000155def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
156def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
157def : WriteRes<WriteVecMove, [SKLPort015]>;
158
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000159defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
160defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
161defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
162defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
163defm : SKLWriteResPair<WriteBlend, [SKLPort15], 1>; // Vector blends.
164defm : SKLWriteResPair<WriteVarBlend, [SKLPort5], 2, [2]>; // Vector variable blends.
165defm : SKLWriteResPair<WriteMPSAD, [SKLPort0, SKLPort5], 6, [1, 2]>; // Vector MPSAD.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000166
167// Vector bitwise operations.
168// These are often used on both floating point and integer vectors.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000169defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1>; // Vector and/or/xor.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000170
171// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000172defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
173defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
174defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000175
176// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000177
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000178// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000179def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
180 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000181 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000182 let ResourceCycles = [3];
183}
184def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000185 let Latency = 16;
186 let NumMicroOps = 4;
187 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000188}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000189
190// Packed Compare Explicit Length Strings, Return Mask
191def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
192 let Latency = 19;
193 let NumMicroOps = 9;
194 let ResourceCycles = [4,3,1,1];
195}
196def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
197 let Latency = 25;
198 let NumMicroOps = 10;
199 let ResourceCycles = [4,3,1,1,1];
200}
201
202// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000203def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000204 let Latency = 10;
205 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000206 let ResourceCycles = [3];
207}
208def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000209 let Latency = 16;
210 let NumMicroOps = 4;
211 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000212}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000213
214// Packed Compare Explicit Length Strings, Return Index
215def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
216 let Latency = 18;
217 let NumMicroOps = 8;
218 let ResourceCycles = [4,3,1];
219}
220def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
221 let Latency = 24;
222 let NumMicroOps = 9;
223 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000224}
225
226// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000227def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
228 let Latency = 4;
229 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000230 let ResourceCycles = [1];
231}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000232def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
233 let Latency = 10;
234 let NumMicroOps = 2;
235 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000236}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000237
238def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
239 let Latency = 8;
240 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000241 let ResourceCycles = [2];
242}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000243def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000244 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000245 let NumMicroOps = 3;
246 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000247}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000248
249def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
250 let Latency = 20;
251 let NumMicroOps = 11;
252 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000253}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000254def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
255 let Latency = 25;
256 let NumMicroOps = 11;
257 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000258}
259
260// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000261def : WriteRes<WriteCLMul, [SKLPort5]> {
262 let Latency = 6;
263 let NumMicroOps = 1;
264 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000265}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000266def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
267 let Latency = 12;
268 let NumMicroOps = 2;
269 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000270}
271
272// Catch-all for expensive system instructions.
273def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
274
275// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000276defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
277defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
278defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000279
280// Old microcoded instructions that nobody use.
281def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
282
283// Fence instructions.
284def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
285
286// Nop, not very useful expect it provides a model for nops!
287def : WriteRes<WriteNop, []>;
288
289////////////////////////////////////////////////////////////////////////////////
290// Horizontal add/sub instructions.
291////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000292
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000293defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
294defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000295
296// Remaining instrs.
297
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000298def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000299 let Latency = 1;
300 let NumMicroOps = 1;
301 let ResourceCycles = [1];
302}
Craig Topperfc179c62018-03-22 04:23:41 +0000303def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
304 "MMX_PADDSWirr",
305 "MMX_PADDUSBirr",
306 "MMX_PADDUSWirr",
307 "MMX_PAVGBirr",
308 "MMX_PAVGWirr",
309 "MMX_PCMPEQBirr",
310 "MMX_PCMPEQDirr",
311 "MMX_PCMPEQWirr",
312 "MMX_PCMPGTBirr",
313 "MMX_PCMPGTDirr",
314 "MMX_PCMPGTWirr",
315 "MMX_PMAXSWirr",
316 "MMX_PMAXUBirr",
317 "MMX_PMINSWirr",
318 "MMX_PMINUBirr",
319 "MMX_PSLLDri",
320 "MMX_PSLLDrr",
321 "MMX_PSLLQri",
322 "MMX_PSLLQrr",
323 "MMX_PSLLWri",
324 "MMX_PSLLWrr",
325 "MMX_PSRADri",
326 "MMX_PSRADrr",
327 "MMX_PSRAWri",
328 "MMX_PSRAWrr",
329 "MMX_PSRLDri",
330 "MMX_PSRLDrr",
331 "MMX_PSRLQri",
332 "MMX_PSRLQrr",
333 "MMX_PSRLWri",
334 "MMX_PSRLWrr",
335 "MMX_PSUBSBirr",
336 "MMX_PSUBSWirr",
337 "MMX_PSUBUSBirr",
338 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000339
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000340def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000341 let Latency = 1;
342 let NumMicroOps = 1;
343 let ResourceCycles = [1];
344}
Craig Topperfc179c62018-03-22 04:23:41 +0000345def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
346 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000347 "MMX_MOVD64rr",
348 "MMX_MOVD64to64rr",
349 "MMX_PALIGNRrri",
350 "MMX_PSHUFBrr",
351 "MMX_PSHUFWri",
352 "MMX_PUNPCKHBWirr",
353 "MMX_PUNPCKHDQirr",
354 "MMX_PUNPCKHWDirr",
355 "MMX_PUNPCKLBWirr",
356 "MMX_PUNPCKLDQirr",
357 "MMX_PUNPCKLWDirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000358 "UCOM_FPr",
359 "UCOM_Fr",
Craig Topperfc179c62018-03-22 04:23:41 +0000360 "VBROADCASTSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000361 "(V?)INSERTPSrr",
362 "(V?)MOV64toPQIrr",
363 "(V?)MOVDDUP(Y?)rr",
364 "(V?)MOVDI2PDIrr",
365 "(V?)MOVHLPSrr",
366 "(V?)MOVLHPSrr",
367 "(V?)MOVSDrr",
368 "(V?)MOVSHDUP(Y?)rr",
369 "(V?)MOVSLDUP(Y?)rr",
370 "(V?)MOVUPD(Y?)rr",
371 "(V?)MOVUPS(Y?)rr",
372 "(V?)PACKSSDW(Y?)rr",
373 "(V?)PACKSSWB(Y?)rr",
374 "(V?)PACKUSDW(Y?)rr",
375 "(V?)PACKUSWB(Y?)rr",
376 "(V?)PALIGNR(Y?)rri",
377 "(V?)PBLENDW(Y?)rri",
Craig Topperfc179c62018-03-22 04:23:41 +0000378 "VPBROADCASTDrr",
379 "VPBROADCASTQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000380 "VPERMILPD(Y?)ri",
381 "VPERMILPD(Y?)rr",
382 "VPERMILPS(Y?)ri",
383 "VPERMILPS(Y?)rr",
384 "(V?)PMOVSXBDrr",
385 "(V?)PMOVSXBQrr",
386 "(V?)PMOVSXBWrr",
387 "(V?)PMOVSXDQrr",
388 "(V?)PMOVSXWDrr",
389 "(V?)PMOVSXWQrr",
390 "(V?)PMOVZXBDrr",
391 "(V?)PMOVZXBQrr",
392 "(V?)PMOVZXBWrr",
393 "(V?)PMOVZXDQrr",
394 "(V?)PMOVZXWDrr",
395 "(V?)PMOVZXWQrr",
396 "(V?)PSHUFB(Y?)rr",
397 "(V?)PSHUFD(Y?)ri",
398 "(V?)PSHUFHW(Y?)ri",
399 "(V?)PSHUFLW(Y?)ri",
400 "(V?)PSLLDQ(Y?)ri",
401 "(V?)PSRLDQ(Y?)ri",
402 "(V?)PUNPCKHBW(Y?)rr",
403 "(V?)PUNPCKHDQ(Y?)rr",
404 "(V?)PUNPCKHQDQ(Y?)rr",
405 "(V?)PUNPCKHWD(Y?)rr",
406 "(V?)PUNPCKLBW(Y?)rr",
407 "(V?)PUNPCKLDQ(Y?)rr",
408 "(V?)PUNPCKLQDQ(Y?)rr",
409 "(V?)PUNPCKLWD(Y?)rr",
410 "(V?)SHUFPD(Y?)rri",
411 "(V?)SHUFPS(Y?)rri",
412 "(V?)UNPCKHPD(Y?)rr",
413 "(V?)UNPCKHPS(Y?)rr",
414 "(V?)UNPCKLPD(Y?)rr",
415 "(V?)UNPCKLPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000416
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000417def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000418 let Latency = 1;
419 let NumMicroOps = 1;
420 let ResourceCycles = [1];
421}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000422def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000423
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000424def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000425 let Latency = 1;
426 let NumMicroOps = 1;
427 let ResourceCycles = [1];
428}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000429def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
430 "(V?)PABSD(Y?)rr",
431 "(V?)PABSW(Y?)rr",
432 "(V?)PADDSB(Y?)rr",
433 "(V?)PADDSW(Y?)rr",
434 "(V?)PADDUSB(Y?)rr",
435 "(V?)PADDUSW(Y?)rr",
436 "(V?)PAVGB(Y?)rr",
437 "(V?)PAVGW(Y?)rr",
438 "(V?)PCMPEQB(Y?)rr",
439 "(V?)PCMPEQD(Y?)rr",
440 "(V?)PCMPEQQ(Y?)rr",
441 "(V?)PCMPEQW(Y?)rr",
442 "(V?)PCMPGTB(Y?)rr",
443 "(V?)PCMPGTD(Y?)rr",
444 "(V?)PCMPGTW(Y?)rr",
445 "(V?)PMAXSB(Y?)rr",
446 "(V?)PMAXSD(Y?)rr",
447 "(V?)PMAXSW(Y?)rr",
448 "(V?)PMAXUB(Y?)rr",
449 "(V?)PMAXUD(Y?)rr",
450 "(V?)PMAXUW(Y?)rr",
451 "(V?)PMINSB(Y?)rr",
452 "(V?)PMINSD(Y?)rr",
453 "(V?)PMINSW(Y?)rr",
454 "(V?)PMINUB(Y?)rr",
455 "(V?)PMINUD(Y?)rr",
456 "(V?)PMINUW(Y?)rr",
457 "(V?)PSIGNB(Y?)rr",
458 "(V?)PSIGND(Y?)rr",
459 "(V?)PSIGNW(Y?)rr",
460 "(V?)PSLLD(Y?)ri",
461 "(V?)PSLLQ(Y?)ri",
462 "VPSLLVD(Y?)rr",
463 "VPSLLVQ(Y?)rr",
464 "(V?)PSLLW(Y?)ri",
465 "(V?)PSRAD(Y?)ri",
466 "VPSRAVD(Y?)rr",
467 "(V?)PSRAW(Y?)ri",
468 "(V?)PSRLD(Y?)ri",
469 "(V?)PSRLQ(Y?)ri",
470 "VPSRLVD(Y?)rr",
471 "VPSRLVQ(Y?)rr",
472 "(V?)PSRLW(Y?)ri",
473 "(V?)PSUBSB(Y?)rr",
474 "(V?)PSUBSW(Y?)rr",
475 "(V?)PSUBUSB(Y?)rr",
476 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000477
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000478def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000479 let Latency = 1;
480 let NumMicroOps = 1;
481 let ResourceCycles = [1];
482}
Craig Topperfc179c62018-03-22 04:23:41 +0000483def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
484 "FNOP",
485 "MMX_MOVQ64rr",
486 "MMX_PABSBrr",
487 "MMX_PABSDrr",
488 "MMX_PABSWrr",
489 "MMX_PADDBirr",
490 "MMX_PADDDirr",
491 "MMX_PADDQirr",
492 "MMX_PADDWirr",
493 "MMX_PANDNirr",
494 "MMX_PANDirr",
495 "MMX_PORirr",
496 "MMX_PSIGNBrr",
497 "MMX_PSIGNDrr",
498 "MMX_PSIGNWrr",
499 "MMX_PSUBBirr",
500 "MMX_PSUBDirr",
501 "MMX_PSUBQirr",
502 "MMX_PSUBWirr",
503 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000504
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000505def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000506 let Latency = 1;
507 let NumMicroOps = 1;
508 let ResourceCycles = [1];
509}
Craig Topperfc179c62018-03-22 04:23:41 +0000510def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
511 "ADC(16|32|64)i",
512 "ADC(8|16|32|64)rr",
513 "ADCX(32|64)rr",
514 "ADOX(32|64)rr",
515 "BT(16|32|64)ri8",
516 "BT(16|32|64)rr",
517 "BTC(16|32|64)ri8",
518 "BTC(16|32|64)rr",
519 "BTR(16|32|64)ri8",
520 "BTR(16|32|64)rr",
521 "BTS(16|32|64)ri8",
522 "BTS(16|32|64)rr",
523 "CDQ",
524 "CLAC",
525 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr",
526 "CQO",
527 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
528 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
529 "JMP_1",
530 "JMP_4",
531 "RORX(32|64)ri",
532 "SAR(8|16|32|64)r1",
533 "SAR(8|16|32|64)ri",
534 "SARX(32|64)rr",
535 "SBB(16|32|64)ri",
536 "SBB(16|32|64)i",
537 "SBB(8|16|32|64)rr",
538 "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)r",
539 "SHL(8|16|32|64)r1",
540 "SHL(8|16|32|64)ri",
541 "SHLX(32|64)rr",
542 "SHR(8|16|32|64)r1",
543 "SHR(8|16|32|64)ri",
544 "SHRX(32|64)rr",
545 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000546
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000547def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
548 let Latency = 1;
549 let NumMicroOps = 1;
550 let ResourceCycles = [1];
551}
Craig Topperfc179c62018-03-22 04:23:41 +0000552def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
553 "BLSI(32|64)rr",
554 "BLSMSK(32|64)rr",
555 "BLSR(32|64)rr",
556 "BZHI(32|64)rr",
557 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000558
559def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
560 let Latency = 1;
561 let NumMicroOps = 1;
562 let ResourceCycles = [1];
563}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000564def: InstRW<[SKLWriteResGroup9], (instregex "(V?)ANDNPD(Y?)rr",
565 "(V?)ANDNPS(Y?)rr",
566 "(V?)ANDPD(Y?)rr",
567 "(V?)ANDPS(Y?)rr",
568 "(V?)BLENDPD(Y?)rri",
569 "(V?)BLENDPS(Y?)rri",
570 "(V?)MOVAPD(Y?)rr",
571 "(V?)MOVAPS(Y?)rr",
572 "(V?)MOVDQA(Y?)rr",
573 "(V?)MOVDQU(Y?)rr",
574 "(V?)MOVPQI2QIrr",
575 "(V?)MOVSSrr",
576 "(V?)MOVZPQILo2PQIrr",
577 "(V?)ORPD(Y?)rr",
578 "(V?)ORPS(Y?)rr",
579 "(V?)PADDB(Y?)rr",
580 "(V?)PADDD(Y?)rr",
581 "(V?)PADDQ(Y?)rr",
582 "(V?)PADDW(Y?)rr",
583 "(V?)PANDN(Y?)rr",
584 "(V?)PAND(Y?)rr",
585 "VPBLENDD(Y?)rri",
586 "(V?)POR(Y?)rr",
587 "(V?)PSUBB(Y?)rr",
588 "(V?)PSUBD(Y?)rr",
589 "(V?)PSUBQ(Y?)rr",
590 "(V?)PSUBW(Y?)rr",
591 "(V?)PXOR(Y?)rr",
592 "(V?)XORPD(Y?)rr"
593 "(V?)XORPS(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000594
595def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
596 let Latency = 1;
597 let NumMicroOps = 1;
598 let ResourceCycles = [1];
599}
Craig Topper2d451e72018-03-18 08:38:06 +0000600def: InstRW<[SKLWriteResGroup10], (instrs CWDE)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000601def: InstRW<[SKLWriteResGroup10], (instregex "ADD(8|16|32|64)ri",
602 "ADD(8|16|32|64)rr",
603 "ADD(8|16|32|64)i",
604 "AND(8|16|32|64)ri",
605 "AND(8|16|32|64)rr",
606 "AND(8|16|32|64)i",
607 "CBW",
608 "CLC",
609 "CMC",
610 "CMP(8|16|32|64)ri",
611 "CMP(8|16|32|64)rr",
612 "CMP(8|16|32|64)i",
613 "DEC(8|16|32|64)r",
614 "INC(8|16|32|64)r",
615 "LAHF",
616 "MOV(8|16|32|64)rr",
617 "MOV(8|16|32|64)ri",
618 "MOVSX(16|32|64)rr16",
619 "MOVSX(16|32|64)rr32",
620 "MOVSX(16|32|64)rr8",
621 "MOVZX(16|32|64)rr16",
622 "MOVZX(16|32|64)rr8",
623 "NEG(8|16|32|64)r",
624 "NOOP",
625 "NOT(8|16|32|64)r",
626 "OR(8|16|32|64)ri",
627 "OR(8|16|32|64)rr",
628 "OR(8|16|32|64)i",
629 "SAHF",
630 "SGDT64m",
631 "SIDT64m",
632 "SLDT64m",
633 "SMSW16m",
634 "STC",
635 "STRm",
636 "SUB(8|16|32|64)ri",
637 "SUB(8|16|32|64)rr",
638 "SUB(8|16|32|64)i",
639 "SYSCALL",
640 "TEST(8|16|32|64)rr",
641 "TEST(8|16|32|64)i",
642 "TEST(8|16|32|64)ri",
643 "XCHG(16|32|64)rr",
644 "XOR(8|16|32|64)ri",
645 "XOR(8|16|32|64)rr",
646 "XOR(8|16|32|64)i")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000647
648def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000649 let Latency = 1;
650 let NumMicroOps = 2;
651 let ResourceCycles = [1,1];
652}
Craig Topperfc179c62018-03-22 04:23:41 +0000653def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
654 "MMX_MOVD64from64rm",
655 "MMX_MOVD64mr",
656 "MMX_MOVNTQmr",
657 "MMX_MOVQ64mr",
658 "MOV(8|16|32|64)mr",
659 "MOV8mi",
Craig Topperfc179c62018-03-22 04:23:41 +0000660 "MOVNTI_64mr",
661 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000662 "ST_FP32m",
663 "ST_FP64m",
664 "ST_FP80m",
665 "VEXTRACTF128mr",
666 "VEXTRACTI128mr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000667 "(Y?)MOVAPDYmr",
668 "(Y?)MOVAPS(Y?)mr",
669 "(Y?)MOVDQA(Y?)mr",
670 "(Y?)MOVDQU(Y?)mr",
671 "(Y?)MOVHPDmr",
672 "(Y?)MOVHPSmr",
673 "(Y?)MOVLPDmr",
674 "(Y?)MOVLPSmr",
675 "(Y?)MOVNTDQ(Y?)mr",
676 "(Y?)MOVNTPD(Y?)mr",
677 "(Y?)MOVNTPS(Y?)mr",
678 "(Y?)MOVPDI2DImr",
679 "(Y?)MOVPQI2QImr",
680 "(Y?)MOVPQIto64mr",
681 "(Y?)MOVSDmr",
682 "(Y?)MOVSSmr",
683 "(Y?)MOVUPD(Y?)mr",
684 "(Y?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000685 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000686
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000687def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000688 let Latency = 2;
689 let NumMicroOps = 1;
690 let ResourceCycles = [1];
691}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000692def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000693 "MMX_MOVD64grr",
694 "MMX_PMOVMSKBrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000695 "(V?)COMISDrr",
696 "(V?)COMISSrr",
697 "(V?)MOVMSKPD(Y?)rr",
698 "(V?)MOVMSKPS(Y?)rr",
699 "(V?)MOVPDI2DIrr",
700 "(V?)MOVPQIto64rr",
701 "(V?)PMOVMSKB(Y?)rr",
702 "VTESTPD(Y?)rr",
703 "VTESTPS(Y?)rr",
704 "(V?)UCOMISDrr",
705 "(V?)UCOMISSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000706
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000707def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000708 let Latency = 2;
709 let NumMicroOps = 2;
710 let ResourceCycles = [2];
711}
Craig Topperfc179c62018-03-22 04:23:41 +0000712def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
713 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000714 "(V?)PINSRBrr",
715 "(V?)PINSRDrr",
716 "(V?)PINSRQrr",
717 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000718
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000719def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000720 let Latency = 2;
721 let NumMicroOps = 2;
722 let ResourceCycles = [2];
723}
Craig Topperfc179c62018-03-22 04:23:41 +0000724def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
725 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000726
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000727def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000728 let Latency = 2;
729 let NumMicroOps = 2;
730 let ResourceCycles = [2];
731}
Craig Topperfc179c62018-03-22 04:23:41 +0000732def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
733 "ROL(8|16|32|64)r1",
734 "ROL(8|16|32|64)ri",
735 "ROR(8|16|32|64)r1",
736 "ROR(8|16|32|64)ri",
737 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000738
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000739def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000740 let Latency = 2;
741 let NumMicroOps = 2;
742 let ResourceCycles = [2];
743}
Craig Topperfc179c62018-03-22 04:23:41 +0000744def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
745 "BLENDVPSrr0",
746 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000747 "VBLENDVPD(Y?)rr",
748 "VBLENDVPS(Y?)rr",
749 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000750
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000751def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000752 let Latency = 2;
753 let NumMicroOps = 2;
754 let ResourceCycles = [2];
755}
Craig Topperfc179c62018-03-22 04:23:41 +0000756def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
757 "WAIT",
758 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000759
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000760def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000761 let Latency = 2;
762 let NumMicroOps = 2;
763 let ResourceCycles = [1,1];
764}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000765def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
766 "VMASKMOVPS(Y?)mr",
767 "VPMASKMOVD(Y?)mr",
768 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000769
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000770def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000771 let Latency = 2;
772 let NumMicroOps = 2;
773 let ResourceCycles = [1,1];
774}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000775def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
776 "(V?)PSLLQrr",
777 "(V?)PSLLWrr",
778 "(V?)PSRADrr",
779 "(V?)PSRAWrr",
780 "(V?)PSRLDrr",
781 "(V?)PSRLQrr",
782 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000783
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000784def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000785 let Latency = 2;
786 let NumMicroOps = 2;
787 let ResourceCycles = [1,1];
788}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000789def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000790
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000791def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000792 let Latency = 2;
793 let NumMicroOps = 2;
794 let ResourceCycles = [1,1];
795}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000796def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000797
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000798def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000799 let Latency = 2;
800 let NumMicroOps = 2;
801 let ResourceCycles = [1,1];
802}
Craig Topperfc179c62018-03-22 04:23:41 +0000803def: InstRW<[SKLWriteResGroup22], (instregex "BEXTR(32|64)rr",
804 "BSWAP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000805
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000806def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000807 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000808 let NumMicroOps = 2;
809 let ResourceCycles = [1,1];
810}
Craig Topper2d451e72018-03-18 08:38:06 +0000811def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000812def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000813def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
814 "ADC8ri",
815 "SBB8i8",
816 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000817
818def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
819 let Latency = 2;
820 let NumMicroOps = 3;
821 let ResourceCycles = [1,1,1];
822}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000823def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
824 "(V?)PEXTRBmr",
825 "(V?)PEXTRDmr",
826 "(V?)PEXTRQmr",
827 "(V?)PEXTRWmr",
828 "(V?)STMXCSR")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000829
830def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
831 let Latency = 2;
832 let NumMicroOps = 3;
833 let ResourceCycles = [1,1,1];
834}
835def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
836
837def SKLWriteResGroup26 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
838 let Latency = 2;
839 let NumMicroOps = 3;
840 let ResourceCycles = [1,1,1];
841}
Craig Topperf4cd9082018-01-19 05:47:32 +0000842def: InstRW<[SKLWriteResGroup26], (instregex "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000843
844def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
845 let Latency = 2;
846 let NumMicroOps = 3;
847 let ResourceCycles = [1,1,1];
848}
849def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
850
851def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
852 let Latency = 2;
853 let NumMicroOps = 3;
854 let ResourceCycles = [1,1,1];
855}
Craig Topper2d451e72018-03-18 08:38:06 +0000856def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000857def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
858 "PUSH64i8",
859 "STOSB",
860 "STOSL",
861 "STOSQ",
862 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000863
864def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
865 let Latency = 3;
866 let NumMicroOps = 1;
867 let ResourceCycles = [1];
868}
Clement Courbet327fac42018-03-07 08:14:02 +0000869def: InstRW<[SKLWriteResGroup29], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000870def: InstRW<[SKLWriteResGroup29], (instrs IMUL8r, MUL8r)>;
871def: InstRW<[SKLWriteResGroup29], (instregex "BSF(16|32|64)rr",
872 "BSR(16|32|64)rr",
873 "LZCNT(16|32|64)rr",
874 "PDEP(32|64)rr",
875 "PEXT(32|64)rr",
876 "POPCNT(16|32|64)rr",
877 "SHLD(16|32|64)rri8",
878 "SHRD(16|32|64)rri8",
879 "TZCNT(16|32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000880
Clement Courbet327fac42018-03-07 08:14:02 +0000881def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000882 let Latency = 3;
883 let NumMicroOps = 2;
884 let ResourceCycles = [1,1];
885}
Clement Courbet327fac42018-03-07 08:14:02 +0000886def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000887
888def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
889 let Latency = 3;
890 let NumMicroOps = 1;
891 let ResourceCycles = [1];
892}
Craig Topperfc179c62018-03-22 04:23:41 +0000893def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
894 "ADD_FST0r",
895 "ADD_FrST0",
896 "MMX_PSADBWirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000897 "SUBR_FPrST0",
898 "SUBR_FST0r",
899 "SUBR_FrST0",
900 "SUB_FPrST0",
901 "SUB_FST0r",
902 "SUB_FrST0",
903 "VBROADCASTSDYrr",
904 "VBROADCASTSSYrr",
905 "VEXTRACTF128rr",
906 "VEXTRACTI128rr",
907 "VINSERTF128rr",
908 "VINSERTI128rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000909 "VPBROADCASTB(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000910 "VPBROADCASTDYrr",
911 "VPBROADCASTQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000912 "VPBROADCASTW(Y?)rr",
913 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000914 "VPERM2F128rr",
915 "VPERM2I128rr",
916 "VPERMDYrr",
917 "VPERMPDYri",
918 "VPERMPSYrr",
919 "VPERMQYri",
920 "VPMOVSXBDYrr",
921 "VPMOVSXBQYrr",
922 "VPMOVSXBWYrr",
923 "VPMOVSXDQYrr",
924 "VPMOVSXWDYrr",
925 "VPMOVSXWQYrr",
926 "VPMOVZXBDYrr",
927 "VPMOVZXBQYrr",
928 "VPMOVZXBWYrr",
929 "VPMOVZXDQYrr",
930 "VPMOVZXWDYrr",
931 "VPMOVZXWQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000932 "(V?)PSADBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000933
934def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
935 let Latency = 3;
936 let NumMicroOps = 2;
937 let ResourceCycles = [1,1];
938}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000939def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
940 "(V?)EXTRACTPSrr",
941 "(V?)PEXTRBrr",
942 "(V?)PEXTRDrr",
943 "(V?)PEXTRQrr",
944 "(V?)PEXTRWrr",
945 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000946
947def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
948 let Latency = 3;
949 let NumMicroOps = 2;
950 let ResourceCycles = [1,1];
951}
952def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
953
954def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
955 let Latency = 3;
956 let NumMicroOps = 3;
957 let ResourceCycles = [3];
958}
Craig Topperfc179c62018-03-22 04:23:41 +0000959def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
960 "ROR(8|16|32|64)rCL",
961 "SAR(8|16|32|64)rCL",
962 "SHL(8|16|32|64)rCL",
963 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000964
965def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
966 let Latency = 3;
967 let NumMicroOps = 3;
968 let ResourceCycles = [3];
969}
Craig Topperfc179c62018-03-22 04:23:41 +0000970def: InstRW<[SKLWriteResGroup34], (instregex "XADD(8|16|32|64)rr",
971 "XCHG8rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000972
973def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
974 let Latency = 3;
975 let NumMicroOps = 3;
976 let ResourceCycles = [1,2];
977}
Craig Topperfc179c62018-03-22 04:23:41 +0000978def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PHADDSWrr",
979 "MMX_PHSUBSWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000980
981def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
982 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000983 let NumMicroOps = 3;
984 let ResourceCycles = [2,1];
985}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000986def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
987 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000988
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000989def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
990 let Latency = 3;
991 let NumMicroOps = 3;
992 let ResourceCycles = [2,1];
993}
Craig Topperfc179c62018-03-22 04:23:41 +0000994def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHADDDrr",
995 "MMX_PHADDWrr",
996 "MMX_PHSUBDrr",
997 "MMX_PHSUBWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000998
999def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
1000 let Latency = 3;
1001 let NumMicroOps = 3;
1002 let ResourceCycles = [2,1];
1003}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001004def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
1005 "(V?)PHADDW(Y?)rr",
1006 "(V?)PHSUBD(Y?)rr",
1007 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001008
1009def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
1010 let Latency = 3;
1011 let NumMicroOps = 3;
1012 let ResourceCycles = [2,1];
1013}
Craig Topperfc179c62018-03-22 04:23:41 +00001014def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
1015 "MMX_PACKSSWBirr",
1016 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001017
1018def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
1019 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001020 let NumMicroOps = 3;
1021 let ResourceCycles = [1,2];
1022}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001023def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001024
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001025def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
1026 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001027 let NumMicroOps = 3;
1028 let ResourceCycles = [1,2];
1029}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001030def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001031
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001032def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
1033 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001034 let NumMicroOps = 3;
1035 let ResourceCycles = [1,2];
1036}
Craig Topperfc179c62018-03-22 04:23:41 +00001037def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
1038 "RCL(8|16|32|64)ri",
1039 "RCR(8|16|32|64)r1",
1040 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001041
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001042def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
1043 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001044 let NumMicroOps = 3;
1045 let ResourceCycles = [1,1,1];
1046}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001047def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001048
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001049def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
1050 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001051 let NumMicroOps = 4;
1052 let ResourceCycles = [1,1,2];
1053}
Craig Topperf4cd9082018-01-19 05:47:32 +00001054def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001055
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001056def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
1057 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001058 let NumMicroOps = 4;
1059 let ResourceCycles = [1,1,1,1];
1060}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001061def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001062
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001063def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
1064 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065 let NumMicroOps = 4;
1066 let ResourceCycles = [1,1,1,1];
1067}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001068def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001069
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001070def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001071 let Latency = 4;
1072 let NumMicroOps = 1;
1073 let ResourceCycles = [1];
1074}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001075def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001076 "MMX_PMADDWDirr",
1077 "MMX_PMULHRSWrr",
1078 "MMX_PMULHUWirr",
1079 "MMX_PMULHWirr",
1080 "MMX_PMULLWirr",
1081 "MMX_PMULUDQirr",
1082 "MUL_FPrST0",
1083 "MUL_FST0r",
1084 "MUL_FrST0",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001085 "(V?)RCPPS(Y?)r",
1086 "(V?)RCPSSr",
1087 "(V?)RSQRTPS(Y?)r",
1088 "(V?)RSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001089
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001090def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001091 let Latency = 4;
1092 let NumMicroOps = 1;
1093 let ResourceCycles = [1];
1094}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001095def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
1096 "(V?)ADDPS(Y?)rr",
1097 "(V?)ADDSDrr",
1098 "(V?)ADDSSrr",
1099 "(V?)ADDSUBPD(Y?)rr",
1100 "(V?)ADDSUBPS(Y?)rr",
1101 "(V?)CMPPD(Y?)rri",
1102 "(V?)CMPPS(Y?)rri",
1103 "(V?)CMPSDrr",
1104 "(V?)CMPSSrr",
1105 "(V?)CVTDQ2PS(Y?)rr",
1106 "(V?)CVTPS2DQ(Y?)rr",
1107 "(V?)CVTTPS2DQ(Y?)rr",
1108 "(V?)MAX(C?)PD(Y?)rr",
1109 "(V?)MAX(C?)PS(Y?)rr",
1110 "(V?)MAX(C?)SDrr",
1111 "(V?)MAX(C?)SSrr",
1112 "(V?)MIN(C?)PD(Y?)rr",
1113 "(V?)MIN(C?)PS(Y?)rr",
1114 "(V?)MIN(C?)SDrr",
1115 "(V?)MIN(C?)SSrr",
1116 "(V?)MULPD(Y?)rr",
1117 "(V?)MULPS(Y?)rr",
1118 "(V?)MULSDrr",
1119 "(V?)MULSSrr",
1120 "(V?)PHMINPOSUWrr",
1121 "(V?)PMADDUBSW(Y?)rr",
1122 "(V?)PMADDWD(Y?)rr",
1123 "(V?)PMULDQ(Y?)rr",
1124 "(V?)PMULHRSW(Y?)rr",
1125 "(V?)PMULHUW(Y?)rr",
1126 "(V?)PMULHW(Y?)rr",
1127 "(V?)PMULLW(Y?)rr",
1128 "(V?)PMULUDQ(Y?)rr",
1129 "(V?)SUBPD(Y?)rr",
1130 "(V?)SUBPS(Y?)rr",
1131 "(V?)SUBSDrr",
1132 "(V?)SUBSSrr")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001133def: InstRW<[SKLWriteResGroup48],
1134 (instregex
1135 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1136 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001137
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001138def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001139 let Latency = 4;
1140 let NumMicroOps = 2;
1141 let ResourceCycles = [2];
1142}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001143def: InstRW<[SKLWriteResGroup50], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001144
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001145def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001146 let Latency = 4;
1147 let NumMicroOps = 2;
1148 let ResourceCycles = [1,1];
1149}
Craig Topperfc179c62018-03-22 04:23:41 +00001150def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r,
1151 MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001152
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001153def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1154 let Latency = 4;
1155 let NumMicroOps = 4;
1156}
Craig Topperfc179c62018-03-22 04:23:41 +00001157def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001158
1159def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001160 let Latency = 4;
1161 let NumMicroOps = 2;
1162 let ResourceCycles = [1,1];
1163}
Craig Topperfc179c62018-03-22 04:23:41 +00001164def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1165 "VPSLLQYrr",
1166 "VPSLLWYrr",
1167 "VPSRADYrr",
1168 "VPSRAWYrr",
1169 "VPSRLDYrr",
1170 "VPSRLQYrr",
1171 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001172
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001173def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001174 let Latency = 4;
1175 let NumMicroOps = 3;
1176 let ResourceCycles = [1,1,1];
1177}
Craig Topperfc179c62018-03-22 04:23:41 +00001178def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1179 "ISTT_FP32m",
1180 "ISTT_FP64m",
1181 "IST_F16m",
1182 "IST_F32m",
1183 "IST_FP16m",
1184 "IST_FP32m",
1185 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001186
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001187def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001188 let Latency = 4;
1189 let NumMicroOps = 4;
1190 let ResourceCycles = [4];
1191}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001192def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001193
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001194def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001195 let Latency = 4;
1196 let NumMicroOps = 4;
1197 let ResourceCycles = [1,3];
1198}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001199def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001200
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001201def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001202 let Latency = 4;
1203 let NumMicroOps = 4;
1204 let ResourceCycles = [1,3];
1205}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001206def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001207
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001208def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001209 let Latency = 4;
1210 let NumMicroOps = 4;
1211 let ResourceCycles = [1,1,2];
1212}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001213def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001214
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001215def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1216 let Latency = 5;
1217 let NumMicroOps = 1;
1218 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001219}
Craig Topperfc179c62018-03-22 04:23:41 +00001220def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64rm",
1221 "MMX_MOVD64to64rm",
1222 "MMX_MOVQ64rm",
1223 "MOV(8|16|32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001224 "MOVSX(16|32|64)rm16",
1225 "MOVSX(16|32|64)rm32",
1226 "MOVSX(16|32|64)rm8",
1227 "MOVZX(16|32|64)rm16",
1228 "MOVZX(16|32|64)rm8",
1229 "PREFETCHNTA",
1230 "PREFETCHT0",
1231 "PREFETCHT1",
1232 "PREFETCHT2",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001233 "(V?)MOV64toPQIrm",
1234 "(V?)MOVDDUPrm",
1235 "(V?)MOVDI2PDIrm",
1236 "(V?)MOVQI2PQIrm",
1237 "(V?)MOVSDrm",
1238 "(V?)MOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001239
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001240def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001241 let Latency = 5;
1242 let NumMicroOps = 2;
1243 let ResourceCycles = [1,1];
1244}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001245def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1246 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001247
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001248def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001249 let Latency = 5;
1250 let NumMicroOps = 2;
1251 let ResourceCycles = [1,1];
1252}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001253def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001254 "MMX_CVTPS2PIirr",
1255 "MMX_CVTTPD2PIirr",
1256 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001257 "(V?)CVTPD2DQrr",
1258 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001259 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001260 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001261 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001262 "(V?)CVTSD2SSrr",
1263 "(V?)CVTSI642SDrr",
1264 "(V?)CVTSI2SDrr",
1265 "(V?)CVTSI2SSrr",
1266 "(V?)CVTSS2SDrr",
1267 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001268
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001269def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001270 let Latency = 5;
1271 let NumMicroOps = 3;
1272 let ResourceCycles = [1,1,1];
1273}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001274def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001275
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001276def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001277 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001278 let NumMicroOps = 3;
1279 let ResourceCycles = [1,1,1];
1280}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001281def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001282
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001283def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001284 let Latency = 5;
1285 let NumMicroOps = 5;
1286 let ResourceCycles = [1,4];
1287}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001288def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001289
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001290def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001291 let Latency = 5;
1292 let NumMicroOps = 5;
1293 let ResourceCycles = [2,3];
1294}
Craig Topper13a16502018-03-19 00:56:09 +00001295def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001296
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001297def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001298 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001299 let NumMicroOps = 6;
1300 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001301}
Craig Topperfc179c62018-03-22 04:23:41 +00001302def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1303 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001304
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001305def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1306 let Latency = 6;
1307 let NumMicroOps = 1;
1308 let ResourceCycles = [1];
1309}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001310def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
1311 "(V?)LDDQUrm",
1312 "(V?)MOVAPDrm",
1313 "(V?)MOVAPSrm",
1314 "(V?)MOVDQArm",
1315 "(V?)MOVDQUrm",
1316 "(V?)MOVNTDQArm",
1317 "(V?)MOVSHDUPrm",
1318 "(V?)MOVSLDUPrm",
1319 "(V?)MOVUPDrm",
1320 "(V?)MOVUPSrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001321 "VPBROADCASTDrm",
1322 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001323
1324def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001325 let Latency = 6;
1326 let NumMicroOps = 2;
1327 let ResourceCycles = [2];
1328}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001329def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001330
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001331def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001332 let Latency = 6;
1333 let NumMicroOps = 2;
1334 let ResourceCycles = [1,1];
1335}
Craig Topperfc179c62018-03-22 04:23:41 +00001336def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1337 "MMX_PADDSWirm",
1338 "MMX_PADDUSBirm",
1339 "MMX_PADDUSWirm",
1340 "MMX_PAVGBirm",
1341 "MMX_PAVGWirm",
1342 "MMX_PCMPEQBirm",
1343 "MMX_PCMPEQDirm",
1344 "MMX_PCMPEQWirm",
1345 "MMX_PCMPGTBirm",
1346 "MMX_PCMPGTDirm",
1347 "MMX_PCMPGTWirm",
1348 "MMX_PMAXSWirm",
1349 "MMX_PMAXUBirm",
1350 "MMX_PMINSWirm",
1351 "MMX_PMINUBirm",
1352 "MMX_PSLLDrm",
1353 "MMX_PSLLQrm",
1354 "MMX_PSLLWrm",
1355 "MMX_PSRADrm",
1356 "MMX_PSRAWrm",
1357 "MMX_PSRLDrm",
1358 "MMX_PSRLQrm",
1359 "MMX_PSRLWrm",
1360 "MMX_PSUBSBirm",
1361 "MMX_PSUBSWirm",
1362 "MMX_PSUBUSBirm",
1363 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001364
Craig Topper58afb4e2018-03-22 21:10:07 +00001365def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001366 let Latency = 6;
1367 let NumMicroOps = 2;
1368 let ResourceCycles = [1,1];
1369}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001370def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1371 "(V?)CVTSD2SIrr",
1372 "(V?)CVTSS2SI64rr",
1373 "(V?)CVTSS2SIrr",
1374 "(V?)CVTTSD2SI64rr",
1375 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001376
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001377def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1378 let Latency = 6;
1379 let NumMicroOps = 2;
1380 let ResourceCycles = [1,1];
1381}
Craig Topperfc179c62018-03-22 04:23:41 +00001382def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1383 "MMX_PINSRWrm",
1384 "MMX_PSHUFBrm",
1385 "MMX_PSHUFWmi",
1386 "MMX_PUNPCKHBWirm",
1387 "MMX_PUNPCKHDQirm",
1388 "MMX_PUNPCKHWDirm",
1389 "MMX_PUNPCKLBWirm",
1390 "MMX_PUNPCKLDQirm",
1391 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001392 "(V?)MOVHPDrm",
1393 "(V?)MOVHPSrm",
1394 "(V?)MOVLPDrm",
1395 "(V?)MOVLPSrm",
1396 "(V?)PINSRBrm",
1397 "(V?)PINSRDrm",
1398 "(V?)PINSRQrm",
1399 "(V?)PINSRWrm",
1400 "(V?)PMOVSXBDrm",
1401 "(V?)PMOVSXBQrm",
1402 "(V?)PMOVSXBWrm",
1403 "(V?)PMOVSXDQrm",
1404 "(V?)PMOVSXWDrm",
1405 "(V?)PMOVSXWQrm",
1406 "(V?)PMOVZXBDrm",
1407 "(V?)PMOVZXBQrm",
1408 "(V?)PMOVZXBWrm",
1409 "(V?)PMOVZXDQrm",
1410 "(V?)PMOVZXWDrm",
1411 "(V?)PMOVZXWQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001412
1413def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1414 let Latency = 6;
1415 let NumMicroOps = 2;
1416 let ResourceCycles = [1,1];
1417}
Craig Topperfc179c62018-03-22 04:23:41 +00001418def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1419 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001420
1421def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1422 let Latency = 6;
1423 let NumMicroOps = 2;
1424 let ResourceCycles = [1,1];
1425}
Craig Topperfc179c62018-03-22 04:23:41 +00001426def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSBrm",
1427 "MMX_PABSDrm",
1428 "MMX_PABSWrm",
1429 "MMX_PADDBirm",
1430 "MMX_PADDDirm",
1431 "MMX_PADDQirm",
1432 "MMX_PADDWirm",
1433 "MMX_PANDNirm",
1434 "MMX_PANDirm",
1435 "MMX_PORirm",
1436 "MMX_PSIGNBrm",
1437 "MMX_PSIGNDrm",
1438 "MMX_PSIGNWrm",
1439 "MMX_PSUBBirm",
1440 "MMX_PSUBDirm",
1441 "MMX_PSUBQirm",
1442 "MMX_PSUBWirm",
1443 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001444
1445def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1446 let Latency = 6;
1447 let NumMicroOps = 2;
1448 let ResourceCycles = [1,1];
1449}
Craig Topperfc179c62018-03-22 04:23:41 +00001450def: InstRW<[SKLWriteResGroup74], (instregex "ADC(8|16|32|64)rm",
1451 "ADCX(32|64)rm",
1452 "ADOX(32|64)rm",
1453 "BT(16|32|64)mi8",
1454 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rm",
1455 "RORX(32|64)mi",
1456 "SARX(32|64)rm",
1457 "SBB(8|16|32|64)rm",
1458 "SHLX(32|64)rm",
1459 "SHRX(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001460
1461def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1462 let Latency = 6;
1463 let NumMicroOps = 2;
1464 let ResourceCycles = [1,1];
1465}
Craig Topperfc179c62018-03-22 04:23:41 +00001466def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1467 "BLSI(32|64)rm",
1468 "BLSMSK(32|64)rm",
1469 "BLSR(32|64)rm",
1470 "BZHI(32|64)rm",
1471 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001472
1473def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1474 let Latency = 6;
1475 let NumMicroOps = 2;
1476 let ResourceCycles = [1,1];
1477}
Craig Topper2d451e72018-03-18 08:38:06 +00001478def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001479def: InstRW<[SKLWriteResGroup76], (instregex "ADD(8|16|32|64)rm",
1480 "AND(8|16|32|64)rm",
1481 "CMP(8|16|32|64)mi",
1482 "CMP(8|16|32|64)mr",
1483 "CMP(8|16|32|64)rm",
1484 "OR(8|16|32|64)rm",
1485 "POP(16|32|64)rmr",
1486 "SUB(8|16|32|64)rm",
1487 "TEST(8|16|32|64)mr",
1488 "TEST(8|16|32|64)mi",
1489 "XOR(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001490
1491def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001492 let Latency = 6;
1493 let NumMicroOps = 3;
1494 let ResourceCycles = [2,1];
1495}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001496def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1497 "(V?)HADDPS(Y?)rr",
1498 "(V?)HSUBPD(Y?)rr",
1499 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001500
Craig Topper58afb4e2018-03-22 21:10:07 +00001501def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001502 let Latency = 6;
1503 let NumMicroOps = 3;
1504 let ResourceCycles = [2,1];
1505}
Craig Topperfc179c62018-03-22 04:23:41 +00001506def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001507
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001508def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001509 let Latency = 6;
1510 let NumMicroOps = 4;
1511 let ResourceCycles = [1,2,1];
1512}
Craig Topperfc179c62018-03-22 04:23:41 +00001513def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1514 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001515
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001516def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001517 let Latency = 6;
1518 let NumMicroOps = 4;
1519 let ResourceCycles = [1,1,1,1];
1520}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001521def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001522
Craig Topper58afb4e2018-03-22 21:10:07 +00001523def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001524 let Latency = 6;
1525 let NumMicroOps = 4;
1526 let ResourceCycles = [1,1,1,1];
1527}
1528def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1529
1530def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1531 let Latency = 6;
1532 let NumMicroOps = 4;
1533 let ResourceCycles = [1,1,1,1];
1534}
Craig Topperfc179c62018-03-22 04:23:41 +00001535def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1536 "BTR(16|32|64)mi8",
1537 "BTS(16|32|64)mi8",
1538 "SAR(8|16|32|64)m1",
1539 "SAR(8|16|32|64)mi",
1540 "SHL(8|16|32|64)m1",
1541 "SHL(8|16|32|64)mi",
1542 "SHR(8|16|32|64)m1",
1543 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001544
1545def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1546 let Latency = 6;
1547 let NumMicroOps = 4;
1548 let ResourceCycles = [1,1,1,1];
1549}
Craig Topperfc179c62018-03-22 04:23:41 +00001550def: InstRW<[SKLWriteResGroup83], (instregex "ADD(8|16|32|64)mi",
1551 "ADD(8|16|32|64)mr",
1552 "AND(8|16|32|64)mi",
1553 "AND(8|16|32|64)mr",
1554 "DEC(8|16|32|64)m",
1555 "INC(8|16|32|64)m",
1556 "NEG(8|16|32|64)m",
1557 "NOT(8|16|32|64)m",
1558 "OR(8|16|32|64)mi",
1559 "OR(8|16|32|64)mr",
1560 "POP(16|32|64)rmm",
1561 "PUSH(16|32|64)rmm",
1562 "SUB(8|16|32|64)mi",
1563 "SUB(8|16|32|64)mr",
1564 "XOR(8|16|32|64)mi",
1565 "XOR(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001566
1567def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001568 let Latency = 6;
1569 let NumMicroOps = 6;
1570 let ResourceCycles = [1,5];
1571}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001572def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001573
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001574def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1575 let Latency = 7;
1576 let NumMicroOps = 1;
1577 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001578}
Craig Topperfc179c62018-03-22 04:23:41 +00001579def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1580 "LD_F64m",
1581 "LD_F80m",
1582 "VBROADCASTF128",
1583 "VBROADCASTI128",
1584 "VBROADCASTSDYrm",
1585 "VBROADCASTSSYrm",
1586 "VLDDQUYrm",
1587 "VMOVAPDYrm",
1588 "VMOVAPSYrm",
1589 "VMOVDDUPYrm",
1590 "VMOVDQAYrm",
1591 "VMOVDQUYrm",
1592 "VMOVNTDQAYrm",
1593 "VMOVSHDUPYrm",
1594 "VMOVSLDUPYrm",
1595 "VMOVUPDYrm",
1596 "VMOVUPSYrm",
1597 "VPBROADCASTDYrm",
1598 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001599
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001600def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001601 let Latency = 7;
1602 let NumMicroOps = 2;
1603 let ResourceCycles = [1,1];
1604}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001605def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001606
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001607def SKLWriteResGroup87 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001608 let Latency = 7;
1609 let NumMicroOps = 2;
1610 let ResourceCycles = [1,1];
1611}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001612def: InstRW<[SKLWriteResGroup87], (instregex "(V?)COMISDrm",
1613 "(V?)COMISSrm",
1614 "(V?)UCOMISDrm",
1615 "(V?)UCOMISSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001616
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001617def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1618 let Latency = 7;
1619 let NumMicroOps = 2;
1620 let ResourceCycles = [1,1];
1621}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001622def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1623 "(V?)PACKSSDWrm",
1624 "(V?)PACKSSWBrm",
1625 "(V?)PACKUSDWrm",
1626 "(V?)PACKUSWBrm",
1627 "(V?)PALIGNRrmi",
1628 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001629 "VPBROADCASTBrm",
1630 "VPBROADCASTWrm",
1631 "VPERMILPDmi",
1632 "VPERMILPDrm",
1633 "VPERMILPSmi",
1634 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001635 "(V?)PSHUFBrm",
1636 "(V?)PSHUFDmi",
1637 "(V?)PSHUFHWmi",
1638 "(V?)PSHUFLWmi",
1639 "(V?)PUNPCKHBWrm",
1640 "(V?)PUNPCKHDQrm",
1641 "(V?)PUNPCKHQDQrm",
1642 "(V?)PUNPCKHWDrm",
1643 "(V?)PUNPCKLBWrm",
1644 "(V?)PUNPCKLDQrm",
1645 "(V?)PUNPCKLQDQrm",
1646 "(V?)PUNPCKLWDrm",
1647 "(V?)SHUFPDrmi",
1648 "(V?)SHUFPSrmi",
1649 "(V?)UNPCKHPDrm",
1650 "(V?)UNPCKHPSrm",
1651 "(V?)UNPCKLPDrm",
1652 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001653
Craig Topper58afb4e2018-03-22 21:10:07 +00001654def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001655 let Latency = 7;
1656 let NumMicroOps = 2;
1657 let ResourceCycles = [1,1];
1658}
Craig Topperfc179c62018-03-22 04:23:41 +00001659def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1660 "VCVTPD2PSYrr",
1661 "VCVTPH2PSYrr",
1662 "VCVTPS2PDYrr",
1663 "VCVTPS2PHYrr",
1664 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001665
1666def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1667 let Latency = 7;
1668 let NumMicroOps = 2;
1669 let ResourceCycles = [1,1];
1670}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001671def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1672 "(V?)PABSDrm",
1673 "(V?)PABSWrm",
1674 "(V?)PADDSBrm",
1675 "(V?)PADDSWrm",
1676 "(V?)PADDUSBrm",
1677 "(V?)PADDUSWrm",
1678 "(V?)PAVGBrm",
1679 "(V?)PAVGWrm",
1680 "(V?)PCMPEQBrm",
1681 "(V?)PCMPEQDrm",
1682 "(V?)PCMPEQQrm",
1683 "(V?)PCMPEQWrm",
1684 "(V?)PCMPGTBrm",
1685 "(V?)PCMPGTDrm",
1686 "(V?)PCMPGTWrm",
1687 "(V?)PMAXSBrm",
1688 "(V?)PMAXSDrm",
1689 "(V?)PMAXSWrm",
1690 "(V?)PMAXUBrm",
1691 "(V?)PMAXUDrm",
1692 "(V?)PMAXUWrm",
1693 "(V?)PMINSBrm",
1694 "(V?)PMINSDrm",
1695 "(V?)PMINSWrm",
1696 "(V?)PMINUBrm",
1697 "(V?)PMINUDrm",
1698 "(V?)PMINUWrm",
1699 "(V?)PSIGNBrm",
1700 "(V?)PSIGNDrm",
1701 "(V?)PSIGNWrm",
1702 "(V?)PSLLDrm",
1703 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001704 "VPSLLVDrm",
1705 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001706 "(V?)PSLLWrm",
1707 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001708 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001709 "(V?)PSRAWrm",
1710 "(V?)PSRLDrm",
1711 "(V?)PSRLQrm",
1712 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001713 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001714 "(V?)PSRLWrm",
1715 "(V?)PSUBSBrm",
1716 "(V?)PSUBSWrm",
1717 "(V?)PSUBUSBrm",
1718 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001719
1720def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1721 let Latency = 7;
1722 let NumMicroOps = 2;
1723 let ResourceCycles = [1,1];
1724}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001725def: InstRW<[SKLWriteResGroup91], (instregex "(V?)ANDNPDrm",
1726 "(V?)ANDNPSrm",
1727 "(V?)ANDPDrm",
1728 "(V?)ANDPSrm",
1729 "(V?)BLENDPDrmi",
1730 "(V?)BLENDPSrmi",
1731 "(V?)INSERTF128rm",
1732 "(V?)INSERTI128rm",
1733 "(V?)MASKMOVPDrm",
1734 "(V?)MASKMOVPSrm",
1735 "(V?)ORPDrm",
1736 "(V?)ORPSrm",
1737 "(V?)PADDBrm",
1738 "(V?)PADDDrm",
1739 "(V?)PADDQrm",
1740 "(V?)PADDWrm",
1741 "(V?)PANDNrm",
1742 "(V?)PANDrm",
1743 "(V?)PBLENDDrmi",
1744 "(V?)PMASKMOVDrm",
1745 "(V?)PMASKMOVQrm",
1746 "(V?)PORrm",
1747 "(V?)PSUBBrm",
1748 "(V?)PSUBDrm",
1749 "(V?)PSUBQrm",
1750 "(V?)PSUBWrm",
1751 "(V?)PXORrm",
1752 "(V?)XORPDrm",
1753 "(V?)XORPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001754
1755def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1756 let Latency = 7;
1757 let NumMicroOps = 3;
1758 let ResourceCycles = [2,1];
1759}
Craig Topperfc179c62018-03-22 04:23:41 +00001760def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1761 "MMX_PACKSSWBirm",
1762 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001763
1764def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1765 let Latency = 7;
1766 let NumMicroOps = 3;
1767 let ResourceCycles = [1,2];
1768}
Craig Topperf4cd9082018-01-19 05:47:32 +00001769def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001770
1771def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1772 let Latency = 7;
1773 let NumMicroOps = 3;
1774 let ResourceCycles = [1,2];
1775}
Craig Topperfc179c62018-03-22 04:23:41 +00001776def: InstRW<[SKLWriteResGroup94], (instregex "LEAVE64",
1777 "SCASB",
1778 "SCASL",
1779 "SCASQ",
1780 "SCASW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001781
Craig Topper58afb4e2018-03-22 21:10:07 +00001782def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001783 let Latency = 7;
1784 let NumMicroOps = 3;
1785 let ResourceCycles = [1,1,1];
1786}
Craig Topperfc179c62018-03-22 04:23:41 +00001787def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1788 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001789
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001790def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001791 let Latency = 7;
1792 let NumMicroOps = 3;
1793 let ResourceCycles = [1,1,1];
1794}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001795def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001796
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001797def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001798 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001799 let NumMicroOps = 3;
1800 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001801}
Craig Topperfc179c62018-03-22 04:23:41 +00001802def: InstRW<[SKLWriteResGroup97], (instregex "(V?)LDMXCSR")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001803
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001804def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001805 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001806 let NumMicroOps = 3;
1807 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001808}
Craig Topperfc179c62018-03-22 04:23:41 +00001809def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1810 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001811
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001812def SKLWriteResGroup99 : SchedWriteRes<[SKLPort23,SKLPort06,SKLPort15]> {
1813 let Latency = 7;
1814 let NumMicroOps = 3;
1815 let ResourceCycles = [1,1,1];
1816}
Craig Toppera42a2ba2017-12-16 18:35:31 +00001817def: InstRW<[SKLWriteResGroup99], (instregex "BEXTR(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001818
1819def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1820 let Latency = 7;
1821 let NumMicroOps = 5;
1822 let ResourceCycles = [1,1,1,2];
1823}
Craig Topperfc179c62018-03-22 04:23:41 +00001824def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1825 "ROL(8|16|32|64)mi",
1826 "ROR(8|16|32|64)m1",
1827 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001828
1829def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1830 let Latency = 7;
1831 let NumMicroOps = 5;
1832 let ResourceCycles = [1,1,1,2];
1833}
Craig Topper13a16502018-03-19 00:56:09 +00001834def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001835
1836def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1837 let Latency = 7;
1838 let NumMicroOps = 5;
1839 let ResourceCycles = [1,1,1,1,1];
1840}
Craig Topperfc179c62018-03-22 04:23:41 +00001841def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1842 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001843
1844def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001845 let Latency = 7;
1846 let NumMicroOps = 7;
1847 let ResourceCycles = [1,3,1,2];
1848}
Craig Topper2d451e72018-03-18 08:38:06 +00001849def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001850
Craig Topper58afb4e2018-03-22 21:10:07 +00001851def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001852 let Latency = 8;
1853 let NumMicroOps = 2;
1854 let ResourceCycles = [2];
1855}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001856def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1857 "(V?)ROUNDPS(Y?)r",
1858 "(V?)ROUNDSDr",
1859 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001860
Craig Topperd25f1ac2018-03-20 23:39:48 +00001861def SKLWriteResGroup105_2 : SchedWriteRes<[SKLPort01]> {
1862 let Latency = 10;
1863 let NumMicroOps = 2;
1864 let ResourceCycles = [2];
1865}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001866def: InstRW<[SKLWriteResGroup105_2], (instregex "(V?)PMULLD(Y?)rr")>;
Craig Topperd25f1ac2018-03-20 23:39:48 +00001867
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001868def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001869 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001870 let NumMicroOps = 2;
1871 let ResourceCycles = [1,1];
1872}
Craig Topperfc179c62018-03-22 04:23:41 +00001873def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1874 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001875
1876def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1877 let Latency = 8;
1878 let NumMicroOps = 2;
1879 let ResourceCycles = [1,1];
1880}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001881def: InstRW<[SKLWriteResGroup107], (instrs IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001882def: InstRW<[SKLWriteResGroup107], (instrs IMUL8m, MUL8m)>;
1883def: InstRW<[SKLWriteResGroup107], (instregex "BSF(16|32|64)rm",
1884 "BSR(16|32|64)rm",
1885 "LZCNT(16|32|64)rm",
1886 "PDEP(32|64)rm",
1887 "PEXT(32|64)rm",
1888 "POPCNT(16|32|64)rm",
1889 "TZCNT(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001890
1891def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001892 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001893 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001894 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001895}
Craig Topperb369cdb2018-01-25 06:57:42 +00001896def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001897
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001898def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001899 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001900 let NumMicroOps = 5;
1901}
Craig Topperfc179c62018-03-22 04:23:41 +00001902def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001903
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001904def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1905 let Latency = 8;
1906 let NumMicroOps = 2;
1907 let ResourceCycles = [1,1];
1908}
Craig Topperfc179c62018-03-22 04:23:41 +00001909def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1910 "FCOM64m",
1911 "FCOMP32m",
1912 "FCOMP64m",
1913 "MMX_PSADBWirm",
1914 "VPACKSSDWYrm",
1915 "VPACKSSWBYrm",
1916 "VPACKUSDWYrm",
1917 "VPACKUSWBYrm",
1918 "VPALIGNRYrmi",
1919 "VPBLENDWYrmi",
1920 "VPBROADCASTBYrm",
1921 "VPBROADCASTWYrm",
1922 "VPERMILPDYmi",
1923 "VPERMILPDYrm",
1924 "VPERMILPSYmi",
1925 "VPERMILPSYrm",
1926 "VPMOVSXBDYrm",
1927 "VPMOVSXBQYrm",
1928 "VPMOVSXWQYrm",
1929 "VPSHUFBYrm",
1930 "VPSHUFDYmi",
1931 "VPSHUFHWYmi",
1932 "VPSHUFLWYmi",
1933 "VPUNPCKHBWYrm",
1934 "VPUNPCKHDQYrm",
1935 "VPUNPCKHQDQYrm",
1936 "VPUNPCKHWDYrm",
1937 "VPUNPCKLBWYrm",
1938 "VPUNPCKLDQYrm",
1939 "VPUNPCKLQDQYrm",
1940 "VPUNPCKLWDYrm",
1941 "VSHUFPDYrmi",
1942 "VSHUFPSYrmi",
1943 "VUNPCKHPDYrm",
1944 "VUNPCKHPSYrm",
1945 "VUNPCKLPDYrm",
1946 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001947
1948def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1949 let Latency = 8;
1950 let NumMicroOps = 2;
1951 let ResourceCycles = [1,1];
1952}
Craig Topperfc179c62018-03-22 04:23:41 +00001953def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1954 "VPABSDYrm",
1955 "VPABSWYrm",
1956 "VPADDSBYrm",
1957 "VPADDSWYrm",
1958 "VPADDUSBYrm",
1959 "VPADDUSWYrm",
1960 "VPAVGBYrm",
1961 "VPAVGWYrm",
1962 "VPCMPEQBYrm",
1963 "VPCMPEQDYrm",
1964 "VPCMPEQQYrm",
1965 "VPCMPEQWYrm",
1966 "VPCMPGTBYrm",
1967 "VPCMPGTDYrm",
1968 "VPCMPGTWYrm",
1969 "VPMAXSBYrm",
1970 "VPMAXSDYrm",
1971 "VPMAXSWYrm",
1972 "VPMAXUBYrm",
1973 "VPMAXUDYrm",
1974 "VPMAXUWYrm",
1975 "VPMINSBYrm",
1976 "VPMINSDYrm",
1977 "VPMINSWYrm",
1978 "VPMINUBYrm",
1979 "VPMINUDYrm",
1980 "VPMINUWYrm",
1981 "VPSIGNBYrm",
1982 "VPSIGNDYrm",
1983 "VPSIGNWYrm",
1984 "VPSLLDYrm",
1985 "VPSLLQYrm",
1986 "VPSLLVDYrm",
1987 "VPSLLVQYrm",
1988 "VPSLLWYrm",
1989 "VPSRADYrm",
1990 "VPSRAVDYrm",
1991 "VPSRAWYrm",
1992 "VPSRLDYrm",
1993 "VPSRLQYrm",
1994 "VPSRLVDYrm",
1995 "VPSRLVQYrm",
1996 "VPSRLWYrm",
1997 "VPSUBSBYrm",
1998 "VPSUBSWYrm",
1999 "VPSUBUSBYrm",
2000 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002001
2002def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2003 let Latency = 8;
2004 let NumMicroOps = 2;
2005 let ResourceCycles = [1,1];
2006}
Craig Topperfc179c62018-03-22 04:23:41 +00002007def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
2008 "VANDNPSYrm",
2009 "VANDPDYrm",
2010 "VANDPSYrm",
2011 "VBLENDPDYrmi",
2012 "VBLENDPSYrmi",
2013 "VMASKMOVPDYrm",
2014 "VMASKMOVPSYrm",
2015 "VORPDYrm",
2016 "VORPSYrm",
2017 "VPADDBYrm",
2018 "VPADDDYrm",
2019 "VPADDQYrm",
2020 "VPADDWYrm",
2021 "VPANDNYrm",
2022 "VPANDYrm",
2023 "VPBLENDDYrmi",
2024 "VPMASKMOVDYrm",
2025 "VPMASKMOVQYrm",
2026 "VPORYrm",
2027 "VPSUBBYrm",
2028 "VPSUBDYrm",
2029 "VPSUBQYrm",
2030 "VPSUBWYrm",
2031 "VPXORYrm",
2032 "VXORPDYrm",
2033 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002034
2035def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002036 let Latency = 8;
2037 let NumMicroOps = 3;
2038 let ResourceCycles = [1,2];
2039}
Craig Topperfc179c62018-03-22 04:23:41 +00002040def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
2041 "BLENDVPSrm0",
2042 "PBLENDVBrm0",
2043 "VBLENDVPDrm",
2044 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002045 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002046
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002047def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2048 let Latency = 8;
2049 let NumMicroOps = 4;
2050 let ResourceCycles = [1,2,1];
2051}
Craig Topperfc179c62018-03-22 04:23:41 +00002052def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PHADDSWrm",
2053 "MMX_PHSUBSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002054
2055def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
2056 let Latency = 8;
2057 let NumMicroOps = 4;
2058 let ResourceCycles = [2,1,1];
2059}
Craig Topperfc179c62018-03-22 04:23:41 +00002060def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHADDDrm",
2061 "MMX_PHADDWrm",
2062 "MMX_PHSUBDrm",
2063 "MMX_PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002064
Craig Topper58afb4e2018-03-22 21:10:07 +00002065def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002066 let Latency = 8;
2067 let NumMicroOps = 4;
2068 let ResourceCycles = [1,1,1,1];
2069}
2070def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
2071
2072def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
2073 let Latency = 8;
2074 let NumMicroOps = 5;
2075 let ResourceCycles = [1,1,3];
2076}
Craig Topper13a16502018-03-19 00:56:09 +00002077def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002078
2079def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2080 let Latency = 8;
2081 let NumMicroOps = 5;
2082 let ResourceCycles = [1,1,1,2];
2083}
Craig Topperfc179c62018-03-22 04:23:41 +00002084def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
2085 "RCL(8|16|32|64)mi",
2086 "RCR(8|16|32|64)m1",
2087 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002088
2089def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2090 let Latency = 8;
2091 let NumMicroOps = 6;
2092 let ResourceCycles = [1,1,1,3];
2093}
Craig Topperfc179c62018-03-22 04:23:41 +00002094def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
2095 "SAR(8|16|32|64)mCL",
2096 "SHL(8|16|32|64)mCL",
2097 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002098
2099def SKLWriteResGroup118 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
2100 let Latency = 8;
2101 let NumMicroOps = 6;
2102 let ResourceCycles = [1,1,1,3];
2103}
Craig Topper13a16502018-03-19 00:56:09 +00002104def: InstRW<[SKLWriteResGroup118], (instregex "ADC(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002105
2106def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2107 let Latency = 8;
2108 let NumMicroOps = 6;
2109 let ResourceCycles = [1,1,1,2,1];
2110}
Craig Topperfc179c62018-03-22 04:23:41 +00002111def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mr",
2112 "CMPXCHG(8|16|32|64)rm",
2113 "SBB(8|16|32|64)mi",
2114 "SBB(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002115
2116def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2117 let Latency = 9;
2118 let NumMicroOps = 2;
2119 let ResourceCycles = [1,1];
2120}
Craig Topperfc179c62018-03-22 04:23:41 +00002121def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
2122 "MMX_PMADDUBSWrm",
2123 "MMX_PMADDWDirm",
2124 "MMX_PMULHRSWrm",
2125 "MMX_PMULHUWirm",
2126 "MMX_PMULHWirm",
2127 "MMX_PMULLWirm",
2128 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002129 "(V?)RCPSSm",
2130 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002131 "VTESTPDYrm",
2132 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002133
2134def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2135 let Latency = 9;
2136 let NumMicroOps = 2;
2137 let ResourceCycles = [1,1];
2138}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002139def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002140 "VPMOVSXBWYrm",
2141 "VPMOVSXDQYrm",
2142 "VPMOVSXWDYrm",
2143 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002144 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002145
2146def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2147 let Latency = 9;
2148 let NumMicroOps = 2;
2149 let ResourceCycles = [1,1];
2150}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002151def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
2152 "(V?)ADDSSrm",
2153 "(V?)CMPSDrm",
2154 "(V?)CMPSSrm",
2155 "(V?)MAX(C?)SDrm",
2156 "(V?)MAX(C?)SSrm",
2157 "(V?)MIN(C?)SDrm",
2158 "(V?)MIN(C?)SSrm",
2159 "(V?)MULSDrm",
2160 "(V?)MULSSrm",
2161 "(V?)SUBSDrm",
2162 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00002163def: InstRW<[SKLWriteResGroup122],
2164 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002165
Craig Topper58afb4e2018-03-22 21:10:07 +00002166def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002167 let Latency = 9;
2168 let NumMicroOps = 2;
2169 let ResourceCycles = [1,1];
2170}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002171def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002172 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002173 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002174 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002175
Craig Topper58afb4e2018-03-22 21:10:07 +00002176def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002177 let Latency = 9;
2178 let NumMicroOps = 3;
2179 let ResourceCycles = [1,2];
2180}
Craig Topperfc179c62018-03-22 04:23:41 +00002181def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002182
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002183def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2184 let Latency = 9;
2185 let NumMicroOps = 3;
2186 let ResourceCycles = [1,2];
2187}
Craig Topperfc179c62018-03-22 04:23:41 +00002188def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
2189 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002190
2191def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2192 let Latency = 9;
2193 let NumMicroOps = 3;
2194 let ResourceCycles = [1,1,1];
2195}
Craig Topperfc179c62018-03-22 04:23:41 +00002196def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002197
2198def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
2199 let Latency = 9;
2200 let NumMicroOps = 3;
2201 let ResourceCycles = [1,1,1];
2202}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002203def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002204
2205def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002206 let Latency = 9;
2207 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002208 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002209}
Craig Topperfc179c62018-03-22 04:23:41 +00002210def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
2211 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002212
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002213def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2214 let Latency = 9;
2215 let NumMicroOps = 4;
2216 let ResourceCycles = [2,1,1];
2217}
Craig Topperfc179c62018-03-22 04:23:41 +00002218def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
2219 "(V?)PHADDWrm",
2220 "(V?)PHSUBDrm",
2221 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002222
2223def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
2224 let Latency = 9;
2225 let NumMicroOps = 4;
2226 let ResourceCycles = [1,1,1,1];
2227}
Craig Topperfc179c62018-03-22 04:23:41 +00002228def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
2229 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002230
2231def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2232 let Latency = 9;
2233 let NumMicroOps = 5;
2234 let ResourceCycles = [1,2,1,1];
2235}
Craig Topperfc179c62018-03-22 04:23:41 +00002236def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
2237 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002238
2239def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2240 let Latency = 10;
2241 let NumMicroOps = 2;
2242 let ResourceCycles = [1,1];
2243}
Simon Pilgrim7684e052018-03-22 13:18:08 +00002244def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002245 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002246
2247def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2248 let Latency = 10;
2249 let NumMicroOps = 2;
2250 let ResourceCycles = [1,1];
2251}
Craig Topperfc179c62018-03-22 04:23:41 +00002252def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
2253 "ADD_F64m",
2254 "ILD_F16m",
2255 "ILD_F32m",
2256 "ILD_F64m",
2257 "SUBR_F32m",
2258 "SUBR_F64m",
2259 "SUB_F32m",
2260 "SUB_F64m",
2261 "VPCMPGTQYrm",
2262 "VPERM2F128rm",
2263 "VPERM2I128rm",
2264 "VPERMDYrm",
2265 "VPERMPDYmi",
2266 "VPERMPSYrm",
2267 "VPERMQYmi",
2268 "VPMOVZXBDYrm",
2269 "VPMOVZXBQYrm",
2270 "VPMOVZXBWYrm",
2271 "VPMOVZXDQYrm",
2272 "VPMOVZXWQYrm",
2273 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002274
2275def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2276 let Latency = 10;
2277 let NumMicroOps = 2;
2278 let ResourceCycles = [1,1];
2279}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002280def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
2281 "(V?)ADDPSrm",
2282 "(V?)ADDSUBPDrm",
2283 "(V?)ADDSUBPSrm",
2284 "(V?)CMPPDrmi",
2285 "(V?)CMPPSrmi",
2286 "(V?)CVTDQ2PSrm",
2287 "(V?)CVTPH2PSYrm",
2288 "(V?)CVTPS2DQrm",
2289 "(V?)CVTSS2SDrm",
2290 "(V?)CVTTPS2DQrm",
2291 "(V?)MAX(C?)PDrm",
2292 "(V?)MAX(C?)PSrm",
2293 "(V?)MIN(C?)PDrm",
2294 "(V?)MIN(C?)PSrm",
2295 "(V?)MULPDrm",
2296 "(V?)MULPSrm",
2297 "(V?)PHMINPOSUWrm",
2298 "(V?)PMADDUBSWrm",
2299 "(V?)PMADDWDrm",
2300 "(V?)PMULDQrm",
2301 "(V?)PMULHRSWrm",
2302 "(V?)PMULHUWrm",
2303 "(V?)PMULHWrm",
2304 "(V?)PMULLWrm",
2305 "(V?)PMULUDQrm",
2306 "(V?)SUBPDrm",
2307 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00002308def: InstRW<[SKLWriteResGroup134],
2309 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002310
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002311def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2312 let Latency = 10;
2313 let NumMicroOps = 3;
2314 let ResourceCycles = [2,1];
2315}
Craig Topperfc179c62018-03-22 04:23:41 +00002316def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002317
2318def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2319 let Latency = 10;
2320 let NumMicroOps = 3;
2321 let ResourceCycles = [1,1,1];
2322}
Craig Topperfc179c62018-03-22 04:23:41 +00002323def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2324 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002325
Craig Topper58afb4e2018-03-22 21:10:07 +00002326def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002327 let Latency = 10;
2328 let NumMicroOps = 3;
2329 let ResourceCycles = [1,1,1];
2330}
Craig Topperfc179c62018-03-22 04:23:41 +00002331def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002332
2333def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002334 let Latency = 10;
2335 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002336 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002337}
Craig Topperfc179c62018-03-22 04:23:41 +00002338def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2339 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002340
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002341def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2342 let Latency = 10;
2343 let NumMicroOps = 4;
2344 let ResourceCycles = [2,1,1];
2345}
Craig Topperfc179c62018-03-22 04:23:41 +00002346def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2347 "VPHADDWYrm",
2348 "VPHSUBDYrm",
2349 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002350
2351def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002352 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002353 let NumMicroOps = 4;
2354 let ResourceCycles = [1,1,1,1];
2355}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002356def: InstRW<[SKLWriteResGroup142], (instrs IMUL32rm, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002357
2358def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2359 let Latency = 10;
2360 let NumMicroOps = 8;
2361 let ResourceCycles = [1,1,1,1,1,3];
2362}
Craig Topper13a16502018-03-19 00:56:09 +00002363def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002364
2365def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002366 let Latency = 10;
2367 let NumMicroOps = 10;
2368 let ResourceCycles = [9,1];
2369}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002370def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002371
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002372def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002373 let Latency = 11;
2374 let NumMicroOps = 1;
2375 let ResourceCycles = [1];
2376}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002377def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPS(Y?)rr",
2378 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002379
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002380def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002381 let Latency = 11;
2382 let NumMicroOps = 2;
2383 let ResourceCycles = [1,1];
2384}
Craig Topperfc179c62018-03-22 04:23:41 +00002385def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2386 "MUL_F64m",
2387 "VRCPPSYm",
2388 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002389
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002390def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2391 let Latency = 11;
2392 let NumMicroOps = 2;
2393 let ResourceCycles = [1,1];
2394}
Craig Topperfc179c62018-03-22 04:23:41 +00002395def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2396 "VADDPSYrm",
2397 "VADDSUBPDYrm",
2398 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002399 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002400 "VCMPPSYrmi",
2401 "VCVTDQ2PSYrm",
2402 "VCVTPS2DQYrm",
2403 "VCVTPS2PDYrm",
2404 "VCVTTPS2DQYrm",
2405 "VMAX(C?)PDYrm",
2406 "VMAX(C?)PSYrm",
2407 "VMIN(C?)PDYrm",
2408 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002409 "VMULPDYrm",
2410 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002411 "VPMADDUBSWYrm",
2412 "VPMADDWDYrm",
2413 "VPMULDQYrm",
2414 "VPMULHRSWYrm",
2415 "VPMULHUWYrm",
2416 "VPMULHWYrm",
2417 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002418 "VPMULUDQYrm",
2419 "VSUBPDYrm",
2420 "VSUBPSYrm")>;
2421def: InstRW<[SKLWriteResGroup147],
2422 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002423
2424def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2425 let Latency = 11;
2426 let NumMicroOps = 3;
2427 let ResourceCycles = [2,1];
2428}
Craig Topperfc179c62018-03-22 04:23:41 +00002429def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2430 "FICOM32m",
2431 "FICOMP16m",
2432 "FICOMP32m",
2433 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002434
2435def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2436 let Latency = 11;
2437 let NumMicroOps = 3;
2438 let ResourceCycles = [1,1,1];
2439}
Craig Topperfc179c62018-03-22 04:23:41 +00002440def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002441
Craig Topper58afb4e2018-03-22 21:10:07 +00002442def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002443 let Latency = 11;
2444 let NumMicroOps = 3;
2445 let ResourceCycles = [1,1,1];
2446}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002447def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2448 "(V?)CVTSD2SIrm",
2449 "(V?)CVTSS2SI64rm",
2450 "(V?)CVTSS2SIrm",
2451 "(V?)CVTTSD2SI64rm",
2452 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002453 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002454 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002455
Craig Topper58afb4e2018-03-22 21:10:07 +00002456def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002457 let Latency = 11;
2458 let NumMicroOps = 3;
2459 let ResourceCycles = [1,1,1];
2460}
Craig Topperfc179c62018-03-22 04:23:41 +00002461def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2462 "CVTPD2PSrm",
2463 "CVTTPD2DQrm",
2464 "MMX_CVTPD2PIirm",
2465 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002466
2467def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2468 let Latency = 11;
2469 let NumMicroOps = 6;
2470 let ResourceCycles = [1,1,1,2,1];
2471}
Craig Topperfc179c62018-03-22 04:23:41 +00002472def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2473 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002474
2475def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476 let Latency = 11;
2477 let NumMicroOps = 7;
2478 let ResourceCycles = [2,3,2];
2479}
Craig Topperfc179c62018-03-22 04:23:41 +00002480def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2481 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002482
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002483def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002484 let Latency = 11;
2485 let NumMicroOps = 9;
2486 let ResourceCycles = [1,5,1,2];
2487}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002488def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002489
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002490def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002491 let Latency = 11;
2492 let NumMicroOps = 11;
2493 let ResourceCycles = [2,9];
2494}
Craig Topperfc179c62018-03-22 04:23:41 +00002495def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002496
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002497def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002498 let Latency = 12;
2499 let NumMicroOps = 1;
2500 let ResourceCycles = [1];
2501}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002502def: InstRW<[SKLWriteResGroup157], (instregex "VSQRTPS(Y?)r",
Craig Topperfc179c62018-03-22 04:23:41 +00002503 "VSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002504
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002505def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2506 let Latency = 12;
2507 let NumMicroOps = 4;
2508 let ResourceCycles = [2,1,1];
2509}
Craig Topperfc179c62018-03-22 04:23:41 +00002510def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2511 "(V?)HADDPSrm",
2512 "(V?)HSUBPDrm",
2513 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002514
Craig Topper58afb4e2018-03-22 21:10:07 +00002515def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002516 let Latency = 12;
2517 let NumMicroOps = 4;
2518 let ResourceCycles = [1,1,1,1];
2519}
2520def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2521
2522def SKLWriteResGroup161 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002523 let Latency = 13;
2524 let NumMicroOps = 1;
2525 let ResourceCycles = [1];
2526}
Craig Topperfc179c62018-03-22 04:23:41 +00002527def: InstRW<[SKLWriteResGroup161], (instregex "SQRTPSr",
2528 "SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002529
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002530def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002531 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002532 let NumMicroOps = 3;
2533 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002534}
Craig Topperfc179c62018-03-22 04:23:41 +00002535def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2536 "ADD_FI32m",
2537 "SUBR_FI16m",
2538 "SUBR_FI32m",
2539 "SUB_FI16m",
2540 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002541
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002542def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2543 let Latency = 13;
2544 let NumMicroOps = 3;
2545 let ResourceCycles = [1,1,1];
2546}
2547def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2548
Craig Topper58afb4e2018-03-22 21:10:07 +00002549def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002550 let Latency = 13;
2551 let NumMicroOps = 4;
2552 let ResourceCycles = [1,3];
2553}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002554def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002555
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002556def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002557 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002558 let NumMicroOps = 4;
2559 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002560}
Craig Topperfc179c62018-03-22 04:23:41 +00002561def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2562 "VHADDPSYrm",
2563 "VHSUBPDYrm",
2564 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002565
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002566def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002567 let Latency = 14;
2568 let NumMicroOps = 1;
2569 let ResourceCycles = [1];
2570}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002571def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPD(Y?)rr",
2572 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002573
Craig Topper58afb4e2018-03-22 21:10:07 +00002574def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002575 let Latency = 14;
2576 let NumMicroOps = 3;
2577 let ResourceCycles = [1,2];
2578}
Craig Topperfc179c62018-03-22 04:23:41 +00002579def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2580def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2581def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2582def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002583
Craig Topperd25f1ac2018-03-20 23:39:48 +00002584def SKLWriteResGroup168_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2585 let Latency = 16;
2586 let NumMicroOps = 3;
2587 let ResourceCycles = [1,2];
2588}
Craig Topperfc179c62018-03-22 04:23:41 +00002589def: InstRW<[SKLWriteResGroup168_2], (instregex "(V?)PMULLDrm")>;
Craig Topperd25f1ac2018-03-20 23:39:48 +00002590
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002591def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2592 let Latency = 14;
2593 let NumMicroOps = 3;
2594 let ResourceCycles = [1,1,1];
2595}
Craig Topperfc179c62018-03-22 04:23:41 +00002596def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2597 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002598
2599def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002600 let Latency = 14;
2601 let NumMicroOps = 10;
2602 let ResourceCycles = [2,4,1,3];
2603}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002604def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002605
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002606def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002607 let Latency = 15;
2608 let NumMicroOps = 1;
2609 let ResourceCycles = [1];
2610}
Craig Topperfc179c62018-03-22 04:23:41 +00002611def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2612 "DIVR_FST0r",
2613 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002614
Craig Topper58afb4e2018-03-22 21:10:07 +00002615def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002616 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002617 let NumMicroOps = 3;
2618 let ResourceCycles = [1,2];
2619}
Craig Topper40d3b322018-03-22 21:55:20 +00002620def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2621 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002622
Craig Topperd25f1ac2018-03-20 23:39:48 +00002623def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2624 let Latency = 17;
2625 let NumMicroOps = 3;
2626 let ResourceCycles = [1,2];
2627}
2628def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2629
Craig Topper58afb4e2018-03-22 21:10:07 +00002630def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002631 let Latency = 15;
2632 let NumMicroOps = 4;
2633 let ResourceCycles = [1,1,2];
2634}
Craig Topperfc179c62018-03-22 04:23:41 +00002635def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002636
2637def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2638 let Latency = 15;
2639 let NumMicroOps = 10;
2640 let ResourceCycles = [1,1,1,5,1,1];
2641}
Craig Topper13a16502018-03-19 00:56:09 +00002642def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002643
2644def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2645 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002646 let NumMicroOps = 2;
2647 let ResourceCycles = [1,1];
2648}
Craig Topperfc179c62018-03-22 04:23:41 +00002649def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002650
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002651def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2652 let Latency = 16;
2653 let NumMicroOps = 14;
2654 let ResourceCycles = [1,1,1,4,2,5];
2655}
2656def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2657
2658def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002659 let Latency = 16;
2660 let NumMicroOps = 16;
2661 let ResourceCycles = [16];
2662}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002663def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002664
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002665def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2666 let Latency = 17;
2667 let NumMicroOps = 2;
2668 let ResourceCycles = [1,1];
2669}
Craig Topperfc179c62018-03-22 04:23:41 +00002670def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm",
2671 "VSQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002672
2673def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002674 let Latency = 17;
2675 let NumMicroOps = 15;
2676 let ResourceCycles = [2,1,2,4,2,4];
2677}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002678def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002679
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002680def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002681 let Latency = 18;
2682 let NumMicroOps = 1;
2683 let ResourceCycles = [1];
2684}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002685def: InstRW<[SKLWriteResGroup181], (instregex "VSQRTPD(Y?)r",
Craig Topperfc179c62018-03-22 04:23:41 +00002686 "VSQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002687
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002688def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002689 let Latency = 18;
2690 let NumMicroOps = 2;
2691 let ResourceCycles = [1,1];
2692}
Craig Topperfc179c62018-03-22 04:23:41 +00002693def: InstRW<[SKLWriteResGroup182], (instregex "SQRTSSm",
2694 "VDIVPSYrm",
2695 "VSQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002696
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002697def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002698 let Latency = 18;
2699 let NumMicroOps = 8;
2700 let ResourceCycles = [1,1,1,5];
2701}
Craig Topperfc179c62018-03-22 04:23:41 +00002702def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002703
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002704def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002705 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002706 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002707 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002708}
Craig Topper13a16502018-03-19 00:56:09 +00002709def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002710
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002711def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2712 let Latency = 19;
2713 let NumMicroOps = 2;
2714 let ResourceCycles = [1,1];
2715}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002716def: InstRW<[SKLWriteResGroup186], (instregex "SQRTPSm",
2717 "(V?)DIVSDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002718 "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002719
Craig Topper58afb4e2018-03-22 21:10:07 +00002720def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002721 let Latency = 19;
2722 let NumMicroOps = 5;
2723 let ResourceCycles = [1,1,3];
2724}
Craig Topperfc179c62018-03-22 04:23:41 +00002725def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002726
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002727def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002728 let Latency = 20;
2729 let NumMicroOps = 1;
2730 let ResourceCycles = [1];
2731}
Craig Topperfc179c62018-03-22 04:23:41 +00002732def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2733 "DIV_FST0r",
2734 "DIV_FrST0",
2735 "SQRTPDr",
2736 "SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002737
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002738def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002739 let Latency = 20;
2740 let NumMicroOps = 2;
2741 let ResourceCycles = [1,1];
2742}
Craig Topperfc179c62018-03-22 04:23:41 +00002743def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002744
Craig Topper58afb4e2018-03-22 21:10:07 +00002745def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002746 let Latency = 20;
2747 let NumMicroOps = 5;
2748 let ResourceCycles = [1,1,3];
2749}
2750def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2751
2752def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2753 let Latency = 20;
2754 let NumMicroOps = 8;
2755 let ResourceCycles = [1,1,1,1,1,1,2];
2756}
Craig Topperfc179c62018-03-22 04:23:41 +00002757def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2758 "INSL",
2759 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002760
2761def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002762 let Latency = 20;
2763 let NumMicroOps = 10;
2764 let ResourceCycles = [1,2,7];
2765}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002766def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002767
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002768def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2769 let Latency = 21;
2770 let NumMicroOps = 2;
2771 let ResourceCycles = [1,1];
2772}
2773def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2774
2775def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2776 let Latency = 22;
2777 let NumMicroOps = 2;
2778 let ResourceCycles = [1,1];
2779}
Craig Topperfc179c62018-03-22 04:23:41 +00002780def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2781 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002782
2783def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2784 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002785 let NumMicroOps = 5;
2786 let ResourceCycles = [1,2,1,1];
2787}
Craig Topper17a31182017-12-16 18:35:29 +00002788def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2789 VGATHERDPDrm,
2790 VGATHERQPDrm,
2791 VGATHERQPSrm,
2792 VPGATHERDDrm,
2793 VPGATHERDQrm,
2794 VPGATHERQDrm,
2795 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002796
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002797def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2798 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002799 let NumMicroOps = 5;
2800 let ResourceCycles = [1,2,1,1];
2801}
Craig Topper17a31182017-12-16 18:35:29 +00002802def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2803 VGATHERQPDYrm,
2804 VGATHERQPSYrm,
2805 VPGATHERDDYrm,
2806 VPGATHERDQYrm,
2807 VPGATHERQDYrm,
2808 VPGATHERQQYrm,
2809 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002810
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002811def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002812 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002813 let NumMicroOps = 2;
2814 let ResourceCycles = [1,1];
2815}
2816def: InstRW<[SKLWriteResGroup197], (instregex "VSQRTSDm")>;
2817
2818def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2819 let Latency = 23;
2820 let NumMicroOps = 19;
2821 let ResourceCycles = [2,1,4,1,1,4,6];
2822}
2823def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2824
2825def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2826 let Latency = 24;
2827 let NumMicroOps = 2;
2828 let ResourceCycles = [1,1];
2829}
2830def: InstRW<[SKLWriteResGroup199], (instregex "VSQRTPDm")>;
2831
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002832def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2833 let Latency = 25;
2834 let NumMicroOps = 2;
2835 let ResourceCycles = [1,1];
2836}
Craig Topperfc179c62018-03-22 04:23:41 +00002837def: InstRW<[SKLWriteResGroup201], (instregex "SQRTSDm",
2838 "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002839
2840def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2841 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002842 let NumMicroOps = 3;
2843 let ResourceCycles = [1,1,1];
2844}
Craig Topperfc179c62018-03-22 04:23:41 +00002845def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2846 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002847
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002848def SKLWriteResGroup205 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2849 let Latency = 26;
2850 let NumMicroOps = 2;
2851 let ResourceCycles = [1,1];
2852}
2853def: InstRW<[SKLWriteResGroup205], (instregex "SQRTPDm")>;
2854
2855def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2856 let Latency = 27;
2857 let NumMicroOps = 2;
2858 let ResourceCycles = [1,1];
2859}
Craig Topperfc179c62018-03-22 04:23:41 +00002860def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2861 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002862
2863def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2864 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002865 let NumMicroOps = 8;
2866 let ResourceCycles = [2,4,1,1];
2867}
Craig Topper13a16502018-03-19 00:56:09 +00002868def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002869
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002870def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002871 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002872 let NumMicroOps = 3;
2873 let ResourceCycles = [1,1,1];
2874}
Craig Topperfc179c62018-03-22 04:23:41 +00002875def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2876 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002877
2878def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2879 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002880 let NumMicroOps = 23;
2881 let ResourceCycles = [1,5,3,4,10];
2882}
Craig Topperfc179c62018-03-22 04:23:41 +00002883def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2884 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002885
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002886def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2887 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002888 let NumMicroOps = 23;
2889 let ResourceCycles = [1,5,2,1,4,10];
2890}
Craig Topperfc179c62018-03-22 04:23:41 +00002891def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2892 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002893
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002894def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2895 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002896 let NumMicroOps = 31;
2897 let ResourceCycles = [1,8,1,21];
2898}
Craig Topper391c6f92017-12-10 01:24:08 +00002899def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002900
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002901def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2902 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002903 let NumMicroOps = 18;
2904 let ResourceCycles = [1,1,2,3,1,1,1,8];
2905}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002906def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002907
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002908def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2909 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002910 let NumMicroOps = 39;
2911 let ResourceCycles = [1,10,1,1,26];
2912}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002913def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002914
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002915def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002916 let Latency = 42;
2917 let NumMicroOps = 22;
2918 let ResourceCycles = [2,20];
2919}
Craig Topper2d451e72018-03-18 08:38:06 +00002920def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002921
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002922def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2923 let Latency = 42;
2924 let NumMicroOps = 40;
2925 let ResourceCycles = [1,11,1,1,26];
2926}
Craig Topper391c6f92017-12-10 01:24:08 +00002927def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002928
2929def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2930 let Latency = 46;
2931 let NumMicroOps = 44;
2932 let ResourceCycles = [1,11,1,1,30];
2933}
2934def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2935
2936def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2937 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002938 let NumMicroOps = 64;
2939 let ResourceCycles = [2,8,5,10,39];
2940}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002941def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002942
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002943def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2944 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002945 let NumMicroOps = 88;
2946 let ResourceCycles = [4,4,31,1,2,1,45];
2947}
Craig Topper2d451e72018-03-18 08:38:06 +00002948def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002949
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002950def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2951 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002952 let NumMicroOps = 90;
2953 let ResourceCycles = [4,2,33,1,2,1,47];
2954}
Craig Topper2d451e72018-03-18 08:38:06 +00002955def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002956
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002957def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002958 let Latency = 75;
2959 let NumMicroOps = 15;
2960 let ResourceCycles = [6,3,6];
2961}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002962def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002963
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002964def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002965 let Latency = 76;
2966 let NumMicroOps = 32;
2967 let ResourceCycles = [7,2,8,3,1,11];
2968}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002969def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002970
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002971def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002972 let Latency = 102;
2973 let NumMicroOps = 66;
2974 let ResourceCycles = [4,2,4,8,14,34];
2975}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002976def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002977
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002978def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2979 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002980 let NumMicroOps = 100;
2981 let ResourceCycles = [9,1,11,16,1,11,21,30];
2982}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002983def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002984
2985} // SchedModel