blob: 2a16982346c1948d1467f8ce9ca86939203aaeda [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
65
Gadi Haber6f8fbf42017-09-19 06:19:27 +000066// 60 Entry Unified Scheduler
67def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
68 SKLPort5, SKLPort6, SKLPort7]> {
69 let BufferSize=60;
70}
71
72// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
73// cycles after the memory operand.
74def : ReadAdvance<ReadAfterLd, 5>;
75
76// Many SchedWrites are defined in pairs with and without a folded load.
77// Instructions with folded loads are usually micro-fused, so they only appear
78// as two micro-ops when queued in the reservation station.
79// This multiclass defines the resource usage for variants with and without
80// folded loads.
81multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000082 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000083 int Lat, list<int> Res = [1], int UOps = 1,
84 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000085 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000086 def : WriteRes<SchedRW, ExePorts> {
87 let Latency = Lat;
88 let ResourceCycles = Res;
89 let NumMicroOps = UOps;
90 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000091
Simon Pilgrime3547af2018-03-25 10:21:19 +000092 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
93 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000094 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000095 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +000098 }
99}
100
101// A folded store needs a cycle on port 4 for the store data, but it does not
102// need an extra port 2/3 cycle to recompute the address.
103def : WriteRes<WriteRMW, [SKLPort4]>;
104
105// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000106defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
107defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000108defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000109defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000110
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000111def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
113
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000114// Bit counts.
115defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
116defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
117defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
118defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
119
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000120// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000121defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000122
123// Loads, stores, and moves, not folded with other operations.
124def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
125def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
126def : WriteRes<WriteMove, [SKLPort0156]>;
127
128// Idioms that clear a register, like xorps %xmm0, %xmm0.
129// These can often bypass execution ports completely.
130def : WriteRes<WriteZero, []>;
131
132// Branches don't produce values, so they have no latency, but they still
133// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000134defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000135
136// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000137def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
138def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
139def : WriteRes<WriteFMove, [SKLPort015]>;
140
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000141defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub/compare.
142defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
143defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
144defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
145defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 5>; // Floating point reciprocal estimate.
146defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 5>; // Floating point reciprocal square root estimate.
147defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
148defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
149defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1>; // Floating point vector blends.
150defm : SKLWriteResPair<WriteFVarBlend, [SKLPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000151
152// FMA Scheduling helper class.
153// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
154
155// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000156def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
157def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
158def : WriteRes<WriteVecMove, [SKLPort015]>;
159
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000160defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
161defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
162defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
163defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
164defm : SKLWriteResPair<WriteBlend, [SKLPort15], 1>; // Vector blends.
165defm : SKLWriteResPair<WriteVarBlend, [SKLPort5], 2, [2]>; // Vector variable blends.
166defm : SKLWriteResPair<WriteMPSAD, [SKLPort0, SKLPort5], 6, [1, 2]>; // Vector MPSAD.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000167
168// Vector bitwise operations.
169// These are often used on both floating point and integer vectors.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000170defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1>; // Vector and/or/xor.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000171
172// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000173defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
174defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
175defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000176
177// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000178
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000179// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000180def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
181 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000182 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000183 let ResourceCycles = [3];
184}
185def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000186 let Latency = 16;
187 let NumMicroOps = 4;
188 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000189}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000190
191// Packed Compare Explicit Length Strings, Return Mask
192def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
193 let Latency = 19;
194 let NumMicroOps = 9;
195 let ResourceCycles = [4,3,1,1];
196}
197def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
198 let Latency = 25;
199 let NumMicroOps = 10;
200 let ResourceCycles = [4,3,1,1,1];
201}
202
203// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000204def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000205 let Latency = 10;
206 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000207 let ResourceCycles = [3];
208}
209def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000210 let Latency = 16;
211 let NumMicroOps = 4;
212 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000213}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000214
215// Packed Compare Explicit Length Strings, Return Index
216def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
217 let Latency = 18;
218 let NumMicroOps = 8;
219 let ResourceCycles = [4,3,1];
220}
221def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
222 let Latency = 24;
223 let NumMicroOps = 9;
224 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000225}
226
227// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000228def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
229 let Latency = 4;
230 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000231 let ResourceCycles = [1];
232}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000233def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
234 let Latency = 10;
235 let NumMicroOps = 2;
236 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000237}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000238
239def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
240 let Latency = 8;
241 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000242 let ResourceCycles = [2];
243}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000244def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000245 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000246 let NumMicroOps = 3;
247 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000248}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000249
250def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
251 let Latency = 20;
252 let NumMicroOps = 11;
253 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000254}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000255def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
256 let Latency = 25;
257 let NumMicroOps = 11;
258 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000259}
260
261// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000262def : WriteRes<WriteCLMul, [SKLPort5]> {
263 let Latency = 6;
264 let NumMicroOps = 1;
265 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000266}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000267def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
268 let Latency = 12;
269 let NumMicroOps = 2;
270 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271}
272
273// Catch-all for expensive system instructions.
274def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
275
276// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000277defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
278defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
279defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000280
281// Old microcoded instructions that nobody use.
282def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
283
284// Fence instructions.
285def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
286
287// Nop, not very useful expect it provides a model for nops!
288def : WriteRes<WriteNop, []>;
289
290////////////////////////////////////////////////////////////////////////////////
291// Horizontal add/sub instructions.
292////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000293
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000294defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
295defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000296
297// Remaining instrs.
298
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000299def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000300 let Latency = 1;
301 let NumMicroOps = 1;
302 let ResourceCycles = [1];
303}
Craig Topperfc179c62018-03-22 04:23:41 +0000304def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
305 "MMX_PADDSWirr",
306 "MMX_PADDUSBirr",
307 "MMX_PADDUSWirr",
308 "MMX_PAVGBirr",
309 "MMX_PAVGWirr",
310 "MMX_PCMPEQBirr",
311 "MMX_PCMPEQDirr",
312 "MMX_PCMPEQWirr",
313 "MMX_PCMPGTBirr",
314 "MMX_PCMPGTDirr",
315 "MMX_PCMPGTWirr",
316 "MMX_PMAXSWirr",
317 "MMX_PMAXUBirr",
318 "MMX_PMINSWirr",
319 "MMX_PMINUBirr",
320 "MMX_PSLLDri",
321 "MMX_PSLLDrr",
322 "MMX_PSLLQri",
323 "MMX_PSLLQrr",
324 "MMX_PSLLWri",
325 "MMX_PSLLWrr",
326 "MMX_PSRADri",
327 "MMX_PSRADrr",
328 "MMX_PSRAWri",
329 "MMX_PSRAWrr",
330 "MMX_PSRLDri",
331 "MMX_PSRLDrr",
332 "MMX_PSRLQri",
333 "MMX_PSRLQrr",
334 "MMX_PSRLWri",
335 "MMX_PSRLWrr",
336 "MMX_PSUBSBirr",
337 "MMX_PSUBSWirr",
338 "MMX_PSUBUSBirr",
339 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000340
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000341def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000342 let Latency = 1;
343 let NumMicroOps = 1;
344 let ResourceCycles = [1];
345}
Craig Topperfc179c62018-03-22 04:23:41 +0000346def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
347 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000348 "MMX_MOVD64rr",
349 "MMX_MOVD64to64rr",
350 "MMX_PALIGNRrri",
351 "MMX_PSHUFBrr",
352 "MMX_PSHUFWri",
353 "MMX_PUNPCKHBWirr",
354 "MMX_PUNPCKHDQirr",
355 "MMX_PUNPCKHWDirr",
356 "MMX_PUNPCKLBWirr",
357 "MMX_PUNPCKLDQirr",
358 "MMX_PUNPCKLWDirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000359 "UCOM_FPr",
360 "UCOM_Fr",
Craig Topperfc179c62018-03-22 04:23:41 +0000361 "VBROADCASTSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000362 "(V?)INSERTPSrr",
363 "(V?)MOV64toPQIrr",
364 "(V?)MOVDDUP(Y?)rr",
365 "(V?)MOVDI2PDIrr",
366 "(V?)MOVHLPSrr",
367 "(V?)MOVLHPSrr",
368 "(V?)MOVSDrr",
369 "(V?)MOVSHDUP(Y?)rr",
370 "(V?)MOVSLDUP(Y?)rr",
Craig Topper15fef892018-03-25 23:40:56 +0000371 "(V?)MOVSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000372 "(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",
Craig Topper15fef892018-03-25 23:40:56 +0000575 "(V?)MOVUPD(Y?)rr",
576 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000577 "(V?)MOVZPQILo2PQIrr",
578 "(V?)ORPD(Y?)rr",
579 "(V?)ORPS(Y?)rr",
580 "(V?)PADDB(Y?)rr",
581 "(V?)PADDD(Y?)rr",
582 "(V?)PADDQ(Y?)rr",
583 "(V?)PADDW(Y?)rr",
584 "(V?)PANDN(Y?)rr",
585 "(V?)PAND(Y?)rr",
586 "VPBLENDD(Y?)rri",
587 "(V?)POR(Y?)rr",
588 "(V?)PSUBB(Y?)rr",
589 "(V?)PSUBD(Y?)rr",
590 "(V?)PSUBQ(Y?)rr",
591 "(V?)PSUBW(Y?)rr",
592 "(V?)PXOR(Y?)rr",
Simon Pilgrimfecb0b72018-03-25 19:17:17 +0000593 "(V?)XORPD(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000594 "(V?)XORPS(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000595
596def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
597 let Latency = 1;
598 let NumMicroOps = 1;
599 let ResourceCycles = [1];
600}
Craig Topper2d451e72018-03-18 08:38:06 +0000601def: InstRW<[SKLWriteResGroup10], (instrs CWDE)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000602def: InstRW<[SKLWriteResGroup10], (instregex "ADD(8|16|32|64)ri",
603 "ADD(8|16|32|64)rr",
604 "ADD(8|16|32|64)i",
605 "AND(8|16|32|64)ri",
606 "AND(8|16|32|64)rr",
607 "AND(8|16|32|64)i",
608 "CBW",
609 "CLC",
610 "CMC",
611 "CMP(8|16|32|64)ri",
612 "CMP(8|16|32|64)rr",
613 "CMP(8|16|32|64)i",
614 "DEC(8|16|32|64)r",
615 "INC(8|16|32|64)r",
616 "LAHF",
617 "MOV(8|16|32|64)rr",
618 "MOV(8|16|32|64)ri",
619 "MOVSX(16|32|64)rr16",
620 "MOVSX(16|32|64)rr32",
621 "MOVSX(16|32|64)rr8",
622 "MOVZX(16|32|64)rr16",
623 "MOVZX(16|32|64)rr8",
624 "NEG(8|16|32|64)r",
625 "NOOP",
626 "NOT(8|16|32|64)r",
627 "OR(8|16|32|64)ri",
628 "OR(8|16|32|64)rr",
629 "OR(8|16|32|64)i",
630 "SAHF",
631 "SGDT64m",
632 "SIDT64m",
633 "SLDT64m",
634 "SMSW16m",
635 "STC",
636 "STRm",
637 "SUB(8|16|32|64)ri",
638 "SUB(8|16|32|64)rr",
639 "SUB(8|16|32|64)i",
640 "SYSCALL",
641 "TEST(8|16|32|64)rr",
642 "TEST(8|16|32|64)i",
643 "TEST(8|16|32|64)ri",
644 "XCHG(16|32|64)rr",
645 "XOR(8|16|32|64)ri",
646 "XOR(8|16|32|64)rr",
647 "XOR(8|16|32|64)i")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000648
649def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000650 let Latency = 1;
651 let NumMicroOps = 2;
652 let ResourceCycles = [1,1];
653}
Craig Topperfc179c62018-03-22 04:23:41 +0000654def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
655 "MMX_MOVD64from64rm",
656 "MMX_MOVD64mr",
657 "MMX_MOVNTQmr",
658 "MMX_MOVQ64mr",
659 "MOV(8|16|32|64)mr",
660 "MOV8mi",
Craig Topperfc179c62018-03-22 04:23:41 +0000661 "MOVNTI_64mr",
662 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000663 "ST_FP32m",
664 "ST_FP64m",
665 "ST_FP80m",
666 "VEXTRACTF128mr",
667 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000668 "(V?)MOVAPDYmr",
669 "(V?)MOVAPS(Y?)mr",
670 "(V?)MOVDQA(Y?)mr",
671 "(V?)MOVDQU(Y?)mr",
672 "(V?)MOVHPDmr",
673 "(V?)MOVHPSmr",
674 "(V?)MOVLPDmr",
675 "(V?)MOVLPSmr",
676 "(V?)MOVNTDQ(Y?)mr",
677 "(V?)MOVNTPD(Y?)mr",
678 "(V?)MOVNTPS(Y?)mr",
679 "(V?)MOVPDI2DImr",
680 "(V?)MOVPQI2QImr",
681 "(V?)MOVPQIto64mr",
682 "(V?)MOVSDmr",
683 "(V?)MOVSSmr",
684 "(V?)MOVUPD(Y?)mr",
685 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000686 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000687
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000688def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000689 let Latency = 2;
690 let NumMicroOps = 1;
691 let ResourceCycles = [1];
692}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000693def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000694 "MMX_MOVD64grr",
695 "MMX_PMOVMSKBrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000696 "(V?)COMISDrr",
697 "(V?)COMISSrr",
698 "(V?)MOVMSKPD(Y?)rr",
699 "(V?)MOVMSKPS(Y?)rr",
700 "(V?)MOVPDI2DIrr",
701 "(V?)MOVPQIto64rr",
702 "(V?)PMOVMSKB(Y?)rr",
703 "VTESTPD(Y?)rr",
704 "VTESTPS(Y?)rr",
705 "(V?)UCOMISDrr",
706 "(V?)UCOMISSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000707
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000708def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000709 let Latency = 2;
710 let NumMicroOps = 2;
711 let ResourceCycles = [2];
712}
Craig Topperfc179c62018-03-22 04:23:41 +0000713def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
714 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000715 "(V?)PINSRBrr",
716 "(V?)PINSRDrr",
717 "(V?)PINSRQrr",
718 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000719
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000720def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000721 let Latency = 2;
722 let NumMicroOps = 2;
723 let ResourceCycles = [2];
724}
Craig Topperfc179c62018-03-22 04:23:41 +0000725def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
726 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000727
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000728def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000729 let Latency = 2;
730 let NumMicroOps = 2;
731 let ResourceCycles = [2];
732}
Craig Topperfc179c62018-03-22 04:23:41 +0000733def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
734 "ROL(8|16|32|64)r1",
735 "ROL(8|16|32|64)ri",
736 "ROR(8|16|32|64)r1",
737 "ROR(8|16|32|64)ri",
738 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000739
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000740def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000741 let Latency = 2;
742 let NumMicroOps = 2;
743 let ResourceCycles = [2];
744}
Craig Topperfc179c62018-03-22 04:23:41 +0000745def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
746 "BLENDVPSrr0",
747 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000748 "VBLENDVPD(Y?)rr",
749 "VBLENDVPS(Y?)rr",
750 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000751
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000752def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000753 let Latency = 2;
754 let NumMicroOps = 2;
755 let ResourceCycles = [2];
756}
Craig Topperfc179c62018-03-22 04:23:41 +0000757def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
758 "WAIT",
759 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000760
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000761def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000762 let Latency = 2;
763 let NumMicroOps = 2;
764 let ResourceCycles = [1,1];
765}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000766def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
767 "VMASKMOVPS(Y?)mr",
768 "VPMASKMOVD(Y?)mr",
769 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000770
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000771def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000772 let Latency = 2;
773 let NumMicroOps = 2;
774 let ResourceCycles = [1,1];
775}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000776def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
777 "(V?)PSLLQrr",
778 "(V?)PSLLWrr",
779 "(V?)PSRADrr",
780 "(V?)PSRAWrr",
781 "(V?)PSRLDrr",
782 "(V?)PSRLQrr",
783 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000784
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000785def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000786 let Latency = 2;
787 let NumMicroOps = 2;
788 let ResourceCycles = [1,1];
789}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000790def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000791
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000792def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000793 let Latency = 2;
794 let NumMicroOps = 2;
795 let ResourceCycles = [1,1];
796}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000797def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000798
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000799def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000800 let Latency = 2;
801 let NumMicroOps = 2;
802 let ResourceCycles = [1,1];
803}
Craig Topperfc179c62018-03-22 04:23:41 +0000804def: InstRW<[SKLWriteResGroup22], (instregex "BEXTR(32|64)rr",
805 "BSWAP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000806
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000807def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000808 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000809 let NumMicroOps = 2;
810 let ResourceCycles = [1,1];
811}
Craig Topper2d451e72018-03-18 08:38:06 +0000812def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000813def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000814def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
815 "ADC8ri",
816 "SBB8i8",
817 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000818
819def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
820 let Latency = 2;
821 let NumMicroOps = 3;
822 let ResourceCycles = [1,1,1];
823}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000824def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
825 "(V?)PEXTRBmr",
826 "(V?)PEXTRDmr",
827 "(V?)PEXTRQmr",
828 "(V?)PEXTRWmr",
829 "(V?)STMXCSR")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000830
831def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
832 let Latency = 2;
833 let NumMicroOps = 3;
834 let ResourceCycles = [1,1,1];
835}
836def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
837
838def SKLWriteResGroup26 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
839 let Latency = 2;
840 let NumMicroOps = 3;
841 let ResourceCycles = [1,1,1];
842}
Craig Topperf4cd9082018-01-19 05:47:32 +0000843def: 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 +0000844
845def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
846 let Latency = 2;
847 let NumMicroOps = 3;
848 let ResourceCycles = [1,1,1];
849}
850def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
851
852def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
853 let Latency = 2;
854 let NumMicroOps = 3;
855 let ResourceCycles = [1,1,1];
856}
Craig Topper2d451e72018-03-18 08:38:06 +0000857def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000858def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
859 "PUSH64i8",
860 "STOSB",
861 "STOSL",
862 "STOSQ",
863 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000864
865def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
866 let Latency = 3;
867 let NumMicroOps = 1;
868 let ResourceCycles = [1];
869}
Clement Courbet327fac42018-03-07 08:14:02 +0000870def: InstRW<[SKLWriteResGroup29], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000871def: InstRW<[SKLWriteResGroup29], (instrs IMUL8r, MUL8r)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000872def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000873 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000874 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000875 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000876
Clement Courbet327fac42018-03-07 08:14:02 +0000877def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000878 let Latency = 3;
879 let NumMicroOps = 2;
880 let ResourceCycles = [1,1];
881}
Clement Courbet327fac42018-03-07 08:14:02 +0000882def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000883
884def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
885 let Latency = 3;
886 let NumMicroOps = 1;
887 let ResourceCycles = [1];
888}
Craig Topperfc179c62018-03-22 04:23:41 +0000889def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
890 "ADD_FST0r",
891 "ADD_FrST0",
892 "MMX_PSADBWirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000893 "SUBR_FPrST0",
894 "SUBR_FST0r",
895 "SUBR_FrST0",
896 "SUB_FPrST0",
897 "SUB_FST0r",
898 "SUB_FrST0",
899 "VBROADCASTSDYrr",
900 "VBROADCASTSSYrr",
901 "VEXTRACTF128rr",
902 "VEXTRACTI128rr",
903 "VINSERTF128rr",
904 "VINSERTI128rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000905 "VPBROADCASTB(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000906 "VPBROADCASTDYrr",
907 "VPBROADCASTQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000908 "VPBROADCASTW(Y?)rr",
909 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000910 "VPERM2F128rr",
911 "VPERM2I128rr",
912 "VPERMDYrr",
913 "VPERMPDYri",
914 "VPERMPSYrr",
915 "VPERMQYri",
916 "VPMOVSXBDYrr",
917 "VPMOVSXBQYrr",
918 "VPMOVSXBWYrr",
919 "VPMOVSXDQYrr",
920 "VPMOVSXWDYrr",
921 "VPMOVSXWQYrr",
922 "VPMOVZXBDYrr",
923 "VPMOVZXBQYrr",
924 "VPMOVZXBWYrr",
925 "VPMOVZXDQYrr",
926 "VPMOVZXWDYrr",
927 "VPMOVZXWQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000928 "(V?)PSADBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000929
930def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
931 let Latency = 3;
932 let NumMicroOps = 2;
933 let ResourceCycles = [1,1];
934}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000935def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
936 "(V?)EXTRACTPSrr",
937 "(V?)PEXTRBrr",
938 "(V?)PEXTRDrr",
939 "(V?)PEXTRQrr",
940 "(V?)PEXTRWrr",
941 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000942
943def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
944 let Latency = 3;
945 let NumMicroOps = 2;
946 let ResourceCycles = [1,1];
947}
948def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
949
950def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
951 let Latency = 3;
952 let NumMicroOps = 3;
953 let ResourceCycles = [3];
954}
Craig Topperfc179c62018-03-22 04:23:41 +0000955def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
956 "ROR(8|16|32|64)rCL",
957 "SAR(8|16|32|64)rCL",
958 "SHL(8|16|32|64)rCL",
959 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000960
961def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
962 let Latency = 3;
963 let NumMicroOps = 3;
964 let ResourceCycles = [3];
965}
Craig Topperfc179c62018-03-22 04:23:41 +0000966def: InstRW<[SKLWriteResGroup34], (instregex "XADD(8|16|32|64)rr",
967 "XCHG8rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000968
969def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
970 let Latency = 3;
971 let NumMicroOps = 3;
972 let ResourceCycles = [1,2];
973}
Craig Topperfc179c62018-03-22 04:23:41 +0000974def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PHADDSWrr",
975 "MMX_PHSUBSWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000976
977def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
978 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000979 let NumMicroOps = 3;
980 let ResourceCycles = [2,1];
981}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000982def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
983 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000984
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000985def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
986 let Latency = 3;
987 let NumMicroOps = 3;
988 let ResourceCycles = [2,1];
989}
Craig Topperfc179c62018-03-22 04:23:41 +0000990def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHADDDrr",
991 "MMX_PHADDWrr",
992 "MMX_PHSUBDrr",
993 "MMX_PHSUBWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000994
995def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
996 let Latency = 3;
997 let NumMicroOps = 3;
998 let ResourceCycles = [2,1];
999}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001000def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
1001 "(V?)PHADDW(Y?)rr",
1002 "(V?)PHSUBD(Y?)rr",
1003 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001004
1005def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
1006 let Latency = 3;
1007 let NumMicroOps = 3;
1008 let ResourceCycles = [2,1];
1009}
Craig Topperfc179c62018-03-22 04:23:41 +00001010def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
1011 "MMX_PACKSSWBirr",
1012 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001013
1014def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
1015 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001016 let NumMicroOps = 3;
1017 let ResourceCycles = [1,2];
1018}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001019def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001020
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001021def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
1022 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001023 let NumMicroOps = 3;
1024 let ResourceCycles = [1,2];
1025}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001026def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001027
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001028def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
1029 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001030 let NumMicroOps = 3;
1031 let ResourceCycles = [1,2];
1032}
Craig Topperfc179c62018-03-22 04:23:41 +00001033def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
1034 "RCL(8|16|32|64)ri",
1035 "RCR(8|16|32|64)r1",
1036 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001037
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001038def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
1039 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001040 let NumMicroOps = 3;
1041 let ResourceCycles = [1,1,1];
1042}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001043def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001044
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001045def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
1046 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001047 let NumMicroOps = 4;
1048 let ResourceCycles = [1,1,2];
1049}
Craig Topperf4cd9082018-01-19 05:47:32 +00001050def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001051
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001052def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
1053 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001054 let NumMicroOps = 4;
1055 let ResourceCycles = [1,1,1,1];
1056}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001057def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001058
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001059def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
1060 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001061 let NumMicroOps = 4;
1062 let ResourceCycles = [1,1,1,1];
1063}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001064def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001066def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001067 let Latency = 4;
1068 let NumMicroOps = 1;
1069 let ResourceCycles = [1];
1070}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001071def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001072 "MMX_PMADDWDirr",
1073 "MMX_PMULHRSWrr",
1074 "MMX_PMULHUWirr",
1075 "MMX_PMULHWirr",
1076 "MMX_PMULLWirr",
1077 "MMX_PMULUDQirr",
1078 "MUL_FPrST0",
1079 "MUL_FST0r",
1080 "MUL_FrST0",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001081 "(V?)RCPPS(Y?)r",
1082 "(V?)RCPSSr",
1083 "(V?)RSQRTPS(Y?)r",
1084 "(V?)RSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001085
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001086def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001087 let Latency = 4;
1088 let NumMicroOps = 1;
1089 let ResourceCycles = [1];
1090}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001091def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
1092 "(V?)ADDPS(Y?)rr",
1093 "(V?)ADDSDrr",
1094 "(V?)ADDSSrr",
1095 "(V?)ADDSUBPD(Y?)rr",
1096 "(V?)ADDSUBPS(Y?)rr",
1097 "(V?)CMPPD(Y?)rri",
1098 "(V?)CMPPS(Y?)rri",
1099 "(V?)CMPSDrr",
1100 "(V?)CMPSSrr",
1101 "(V?)CVTDQ2PS(Y?)rr",
1102 "(V?)CVTPS2DQ(Y?)rr",
1103 "(V?)CVTTPS2DQ(Y?)rr",
1104 "(V?)MAX(C?)PD(Y?)rr",
1105 "(V?)MAX(C?)PS(Y?)rr",
1106 "(V?)MAX(C?)SDrr",
1107 "(V?)MAX(C?)SSrr",
1108 "(V?)MIN(C?)PD(Y?)rr",
1109 "(V?)MIN(C?)PS(Y?)rr",
1110 "(V?)MIN(C?)SDrr",
1111 "(V?)MIN(C?)SSrr",
1112 "(V?)MULPD(Y?)rr",
1113 "(V?)MULPS(Y?)rr",
1114 "(V?)MULSDrr",
1115 "(V?)MULSSrr",
1116 "(V?)PHMINPOSUWrr",
1117 "(V?)PMADDUBSW(Y?)rr",
1118 "(V?)PMADDWD(Y?)rr",
1119 "(V?)PMULDQ(Y?)rr",
1120 "(V?)PMULHRSW(Y?)rr",
1121 "(V?)PMULHUW(Y?)rr",
1122 "(V?)PMULHW(Y?)rr",
1123 "(V?)PMULLW(Y?)rr",
1124 "(V?)PMULUDQ(Y?)rr",
1125 "(V?)SUBPD(Y?)rr",
1126 "(V?)SUBPS(Y?)rr",
1127 "(V?)SUBSDrr",
1128 "(V?)SUBSSrr")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001129def: InstRW<[SKLWriteResGroup48],
1130 (instregex
1131 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1132 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001133
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001134def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001135 let Latency = 4;
1136 let NumMicroOps = 2;
1137 let ResourceCycles = [2];
1138}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001139def: InstRW<[SKLWriteResGroup50], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001140
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001141def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001142 let Latency = 4;
1143 let NumMicroOps = 2;
1144 let ResourceCycles = [1,1];
1145}
Craig Topperfc179c62018-03-22 04:23:41 +00001146def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r,
1147 MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001148
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001149def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1150 let Latency = 4;
1151 let NumMicroOps = 4;
1152}
Craig Topperfc179c62018-03-22 04:23:41 +00001153def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001154
1155def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001156 let Latency = 4;
1157 let NumMicroOps = 2;
1158 let ResourceCycles = [1,1];
1159}
Craig Topperfc179c62018-03-22 04:23:41 +00001160def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1161 "VPSLLQYrr",
1162 "VPSLLWYrr",
1163 "VPSRADYrr",
1164 "VPSRAWYrr",
1165 "VPSRLDYrr",
1166 "VPSRLQYrr",
1167 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001168
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001169def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001170 let Latency = 4;
1171 let NumMicroOps = 3;
1172 let ResourceCycles = [1,1,1];
1173}
Craig Topperfc179c62018-03-22 04:23:41 +00001174def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1175 "ISTT_FP32m",
1176 "ISTT_FP64m",
1177 "IST_F16m",
1178 "IST_F32m",
1179 "IST_FP16m",
1180 "IST_FP32m",
1181 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001182
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001183def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001184 let Latency = 4;
1185 let NumMicroOps = 4;
1186 let ResourceCycles = [4];
1187}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001188def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001189
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001190def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001191 let Latency = 4;
1192 let NumMicroOps = 4;
1193 let ResourceCycles = [1,3];
1194}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001195def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001196
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001197def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001198 let Latency = 4;
1199 let NumMicroOps = 4;
1200 let ResourceCycles = [1,3];
1201}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001202def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001203
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001204def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001205 let Latency = 4;
1206 let NumMicroOps = 4;
1207 let ResourceCycles = [1,1,2];
1208}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001209def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001210
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001211def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1212 let Latency = 5;
1213 let NumMicroOps = 1;
1214 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001215}
Craig Topperfc179c62018-03-22 04:23:41 +00001216def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64rm",
1217 "MMX_MOVD64to64rm",
1218 "MMX_MOVQ64rm",
1219 "MOV(8|16|32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001220 "MOVSX(16|32|64)rm16",
1221 "MOVSX(16|32|64)rm32",
1222 "MOVSX(16|32|64)rm8",
1223 "MOVZX(16|32|64)rm16",
1224 "MOVZX(16|32|64)rm8",
1225 "PREFETCHNTA",
1226 "PREFETCHT0",
1227 "PREFETCHT1",
1228 "PREFETCHT2",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001229 "(V?)MOV64toPQIrm",
1230 "(V?)MOVDDUPrm",
1231 "(V?)MOVDI2PDIrm",
1232 "(V?)MOVQI2PQIrm",
1233 "(V?)MOVSDrm",
1234 "(V?)MOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001235
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001236def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001237 let Latency = 5;
1238 let NumMicroOps = 2;
1239 let ResourceCycles = [1,1];
1240}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001241def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1242 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001243
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001244def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001245 let Latency = 5;
1246 let NumMicroOps = 2;
1247 let ResourceCycles = [1,1];
1248}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001249def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001250 "MMX_CVTPS2PIirr",
1251 "MMX_CVTTPD2PIirr",
1252 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001253 "(V?)CVTPD2DQrr",
1254 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001255 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001256 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001257 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001258 "(V?)CVTSD2SSrr",
1259 "(V?)CVTSI642SDrr",
1260 "(V?)CVTSI2SDrr",
1261 "(V?)CVTSI2SSrr",
1262 "(V?)CVTSS2SDrr",
1263 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001264
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001265def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001266 let Latency = 5;
1267 let NumMicroOps = 3;
1268 let ResourceCycles = [1,1,1];
1269}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001270def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001271
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001272def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001273 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001274 let NumMicroOps = 3;
1275 let ResourceCycles = [1,1,1];
1276}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001277def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001278
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001279def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001280 let Latency = 5;
1281 let NumMicroOps = 5;
1282 let ResourceCycles = [1,4];
1283}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001284def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001285
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001286def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001287 let Latency = 5;
1288 let NumMicroOps = 5;
1289 let ResourceCycles = [2,3];
1290}
Craig Topper13a16502018-03-19 00:56:09 +00001291def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001292
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001293def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001294 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001295 let NumMicroOps = 6;
1296 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001297}
Craig Topperfc179c62018-03-22 04:23:41 +00001298def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1299 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001300
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001301def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1302 let Latency = 6;
1303 let NumMicroOps = 1;
1304 let ResourceCycles = [1];
1305}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001306def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
1307 "(V?)LDDQUrm",
1308 "(V?)MOVAPDrm",
1309 "(V?)MOVAPSrm",
1310 "(V?)MOVDQArm",
1311 "(V?)MOVDQUrm",
1312 "(V?)MOVNTDQArm",
1313 "(V?)MOVSHDUPrm",
1314 "(V?)MOVSLDUPrm",
1315 "(V?)MOVUPDrm",
1316 "(V?)MOVUPSrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001317 "VPBROADCASTDrm",
1318 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001319
1320def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001321 let Latency = 6;
1322 let NumMicroOps = 2;
1323 let ResourceCycles = [2];
1324}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001325def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001326
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001327def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001328 let Latency = 6;
1329 let NumMicroOps = 2;
1330 let ResourceCycles = [1,1];
1331}
Craig Topperfc179c62018-03-22 04:23:41 +00001332def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1333 "MMX_PADDSWirm",
1334 "MMX_PADDUSBirm",
1335 "MMX_PADDUSWirm",
1336 "MMX_PAVGBirm",
1337 "MMX_PAVGWirm",
1338 "MMX_PCMPEQBirm",
1339 "MMX_PCMPEQDirm",
1340 "MMX_PCMPEQWirm",
1341 "MMX_PCMPGTBirm",
1342 "MMX_PCMPGTDirm",
1343 "MMX_PCMPGTWirm",
1344 "MMX_PMAXSWirm",
1345 "MMX_PMAXUBirm",
1346 "MMX_PMINSWirm",
1347 "MMX_PMINUBirm",
1348 "MMX_PSLLDrm",
1349 "MMX_PSLLQrm",
1350 "MMX_PSLLWrm",
1351 "MMX_PSRADrm",
1352 "MMX_PSRAWrm",
1353 "MMX_PSRLDrm",
1354 "MMX_PSRLQrm",
1355 "MMX_PSRLWrm",
1356 "MMX_PSUBSBirm",
1357 "MMX_PSUBSWirm",
1358 "MMX_PSUBUSBirm",
1359 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001360
Craig Topper58afb4e2018-03-22 21:10:07 +00001361def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001362 let Latency = 6;
1363 let NumMicroOps = 2;
1364 let ResourceCycles = [1,1];
1365}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001366def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1367 "(V?)CVTSD2SIrr",
1368 "(V?)CVTSS2SI64rr",
1369 "(V?)CVTSS2SIrr",
1370 "(V?)CVTTSD2SI64rr",
1371 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001372
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001373def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1374 let Latency = 6;
1375 let NumMicroOps = 2;
1376 let ResourceCycles = [1,1];
1377}
Craig Topperfc179c62018-03-22 04:23:41 +00001378def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1379 "MMX_PINSRWrm",
1380 "MMX_PSHUFBrm",
1381 "MMX_PSHUFWmi",
1382 "MMX_PUNPCKHBWirm",
1383 "MMX_PUNPCKHDQirm",
1384 "MMX_PUNPCKHWDirm",
1385 "MMX_PUNPCKLBWirm",
1386 "MMX_PUNPCKLDQirm",
1387 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001388 "(V?)MOVHPDrm",
1389 "(V?)MOVHPSrm",
1390 "(V?)MOVLPDrm",
1391 "(V?)MOVLPSrm",
1392 "(V?)PINSRBrm",
1393 "(V?)PINSRDrm",
1394 "(V?)PINSRQrm",
1395 "(V?)PINSRWrm",
1396 "(V?)PMOVSXBDrm",
1397 "(V?)PMOVSXBQrm",
1398 "(V?)PMOVSXBWrm",
1399 "(V?)PMOVSXDQrm",
1400 "(V?)PMOVSXWDrm",
1401 "(V?)PMOVSXWQrm",
1402 "(V?)PMOVZXBDrm",
1403 "(V?)PMOVZXBQrm",
1404 "(V?)PMOVZXBWrm",
1405 "(V?)PMOVZXDQrm",
1406 "(V?)PMOVZXWDrm",
1407 "(V?)PMOVZXWQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001408
1409def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1410 let Latency = 6;
1411 let NumMicroOps = 2;
1412 let ResourceCycles = [1,1];
1413}
Craig Topperfc179c62018-03-22 04:23:41 +00001414def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1415 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001416
1417def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1418 let Latency = 6;
1419 let NumMicroOps = 2;
1420 let ResourceCycles = [1,1];
1421}
Craig Topperfc179c62018-03-22 04:23:41 +00001422def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSBrm",
1423 "MMX_PABSDrm",
1424 "MMX_PABSWrm",
1425 "MMX_PADDBirm",
1426 "MMX_PADDDirm",
1427 "MMX_PADDQirm",
1428 "MMX_PADDWirm",
1429 "MMX_PANDNirm",
1430 "MMX_PANDirm",
1431 "MMX_PORirm",
1432 "MMX_PSIGNBrm",
1433 "MMX_PSIGNDrm",
1434 "MMX_PSIGNWrm",
1435 "MMX_PSUBBirm",
1436 "MMX_PSUBDirm",
1437 "MMX_PSUBQirm",
1438 "MMX_PSUBWirm",
1439 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001440
1441def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1442 let Latency = 6;
1443 let NumMicroOps = 2;
1444 let ResourceCycles = [1,1];
1445}
Craig Topperfc179c62018-03-22 04:23:41 +00001446def: InstRW<[SKLWriteResGroup74], (instregex "ADC(8|16|32|64)rm",
1447 "ADCX(32|64)rm",
1448 "ADOX(32|64)rm",
1449 "BT(16|32|64)mi8",
1450 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rm",
1451 "RORX(32|64)mi",
1452 "SARX(32|64)rm",
1453 "SBB(8|16|32|64)rm",
1454 "SHLX(32|64)rm",
1455 "SHRX(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001456
1457def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1458 let Latency = 6;
1459 let NumMicroOps = 2;
1460 let ResourceCycles = [1,1];
1461}
Craig Topperfc179c62018-03-22 04:23:41 +00001462def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1463 "BLSI(32|64)rm",
1464 "BLSMSK(32|64)rm",
1465 "BLSR(32|64)rm",
1466 "BZHI(32|64)rm",
1467 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001468
1469def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1470 let Latency = 6;
1471 let NumMicroOps = 2;
1472 let ResourceCycles = [1,1];
1473}
Craig Topper2d451e72018-03-18 08:38:06 +00001474def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001475def: InstRW<[SKLWriteResGroup76], (instregex "ADD(8|16|32|64)rm",
1476 "AND(8|16|32|64)rm",
1477 "CMP(8|16|32|64)mi",
1478 "CMP(8|16|32|64)mr",
1479 "CMP(8|16|32|64)rm",
1480 "OR(8|16|32|64)rm",
1481 "POP(16|32|64)rmr",
1482 "SUB(8|16|32|64)rm",
1483 "TEST(8|16|32|64)mr",
1484 "TEST(8|16|32|64)mi",
1485 "XOR(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001486
1487def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001488 let Latency = 6;
1489 let NumMicroOps = 3;
1490 let ResourceCycles = [2,1];
1491}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001492def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1493 "(V?)HADDPS(Y?)rr",
1494 "(V?)HSUBPD(Y?)rr",
1495 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001496
Craig Topper58afb4e2018-03-22 21:10:07 +00001497def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001498 let Latency = 6;
1499 let NumMicroOps = 3;
1500 let ResourceCycles = [2,1];
1501}
Craig Topperfc179c62018-03-22 04:23:41 +00001502def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001503
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001504def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001505 let Latency = 6;
1506 let NumMicroOps = 4;
1507 let ResourceCycles = [1,2,1];
1508}
Craig Topperfc179c62018-03-22 04:23:41 +00001509def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1510 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001511
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001512def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001513 let Latency = 6;
1514 let NumMicroOps = 4;
1515 let ResourceCycles = [1,1,1,1];
1516}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001517def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001518
Craig Topper58afb4e2018-03-22 21:10:07 +00001519def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001520 let Latency = 6;
1521 let NumMicroOps = 4;
1522 let ResourceCycles = [1,1,1,1];
1523}
1524def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1525
1526def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1527 let Latency = 6;
1528 let NumMicroOps = 4;
1529 let ResourceCycles = [1,1,1,1];
1530}
Craig Topperfc179c62018-03-22 04:23:41 +00001531def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1532 "BTR(16|32|64)mi8",
1533 "BTS(16|32|64)mi8",
1534 "SAR(8|16|32|64)m1",
1535 "SAR(8|16|32|64)mi",
1536 "SHL(8|16|32|64)m1",
1537 "SHL(8|16|32|64)mi",
1538 "SHR(8|16|32|64)m1",
1539 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001540
1541def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1542 let Latency = 6;
1543 let NumMicroOps = 4;
1544 let ResourceCycles = [1,1,1,1];
1545}
Craig Topperfc179c62018-03-22 04:23:41 +00001546def: InstRW<[SKLWriteResGroup83], (instregex "ADD(8|16|32|64)mi",
1547 "ADD(8|16|32|64)mr",
1548 "AND(8|16|32|64)mi",
1549 "AND(8|16|32|64)mr",
1550 "DEC(8|16|32|64)m",
1551 "INC(8|16|32|64)m",
1552 "NEG(8|16|32|64)m",
1553 "NOT(8|16|32|64)m",
1554 "OR(8|16|32|64)mi",
1555 "OR(8|16|32|64)mr",
1556 "POP(16|32|64)rmm",
1557 "PUSH(16|32|64)rmm",
1558 "SUB(8|16|32|64)mi",
1559 "SUB(8|16|32|64)mr",
1560 "XOR(8|16|32|64)mi",
1561 "XOR(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001562
1563def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001564 let Latency = 6;
1565 let NumMicroOps = 6;
1566 let ResourceCycles = [1,5];
1567}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001568def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001569
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001570def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1571 let Latency = 7;
1572 let NumMicroOps = 1;
1573 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001574}
Craig Topperfc179c62018-03-22 04:23:41 +00001575def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1576 "LD_F64m",
1577 "LD_F80m",
1578 "VBROADCASTF128",
1579 "VBROADCASTI128",
1580 "VBROADCASTSDYrm",
1581 "VBROADCASTSSYrm",
1582 "VLDDQUYrm",
1583 "VMOVAPDYrm",
1584 "VMOVAPSYrm",
1585 "VMOVDDUPYrm",
1586 "VMOVDQAYrm",
1587 "VMOVDQUYrm",
1588 "VMOVNTDQAYrm",
1589 "VMOVSHDUPYrm",
1590 "VMOVSLDUPYrm",
1591 "VMOVUPDYrm",
1592 "VMOVUPSYrm",
1593 "VPBROADCASTDYrm",
1594 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001595
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001596def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001597 let Latency = 7;
1598 let NumMicroOps = 2;
1599 let ResourceCycles = [1,1];
1600}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001601def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001602
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001603def SKLWriteResGroup87 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001604 let Latency = 7;
1605 let NumMicroOps = 2;
1606 let ResourceCycles = [1,1];
1607}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001608def: InstRW<[SKLWriteResGroup87], (instregex "(V?)COMISDrm",
1609 "(V?)COMISSrm",
1610 "(V?)UCOMISDrm",
1611 "(V?)UCOMISSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001612
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001613def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1614 let Latency = 7;
1615 let NumMicroOps = 2;
1616 let ResourceCycles = [1,1];
1617}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001618def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1619 "(V?)PACKSSDWrm",
1620 "(V?)PACKSSWBrm",
1621 "(V?)PACKUSDWrm",
1622 "(V?)PACKUSWBrm",
1623 "(V?)PALIGNRrmi",
1624 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001625 "VPBROADCASTBrm",
1626 "VPBROADCASTWrm",
1627 "VPERMILPDmi",
1628 "VPERMILPDrm",
1629 "VPERMILPSmi",
1630 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001631 "(V?)PSHUFBrm",
1632 "(V?)PSHUFDmi",
1633 "(V?)PSHUFHWmi",
1634 "(V?)PSHUFLWmi",
1635 "(V?)PUNPCKHBWrm",
1636 "(V?)PUNPCKHDQrm",
1637 "(V?)PUNPCKHQDQrm",
1638 "(V?)PUNPCKHWDrm",
1639 "(V?)PUNPCKLBWrm",
1640 "(V?)PUNPCKLDQrm",
1641 "(V?)PUNPCKLQDQrm",
1642 "(V?)PUNPCKLWDrm",
1643 "(V?)SHUFPDrmi",
1644 "(V?)SHUFPSrmi",
1645 "(V?)UNPCKHPDrm",
1646 "(V?)UNPCKHPSrm",
1647 "(V?)UNPCKLPDrm",
1648 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001649
Craig Topper58afb4e2018-03-22 21:10:07 +00001650def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001651 let Latency = 7;
1652 let NumMicroOps = 2;
1653 let ResourceCycles = [1,1];
1654}
Craig Topperfc179c62018-03-22 04:23:41 +00001655def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1656 "VCVTPD2PSYrr",
1657 "VCVTPH2PSYrr",
1658 "VCVTPS2PDYrr",
1659 "VCVTPS2PHYrr",
1660 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001661
1662def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1663 let Latency = 7;
1664 let NumMicroOps = 2;
1665 let ResourceCycles = [1,1];
1666}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001667def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1668 "(V?)PABSDrm",
1669 "(V?)PABSWrm",
1670 "(V?)PADDSBrm",
1671 "(V?)PADDSWrm",
1672 "(V?)PADDUSBrm",
1673 "(V?)PADDUSWrm",
1674 "(V?)PAVGBrm",
1675 "(V?)PAVGWrm",
1676 "(V?)PCMPEQBrm",
1677 "(V?)PCMPEQDrm",
1678 "(V?)PCMPEQQrm",
1679 "(V?)PCMPEQWrm",
1680 "(V?)PCMPGTBrm",
1681 "(V?)PCMPGTDrm",
1682 "(V?)PCMPGTWrm",
1683 "(V?)PMAXSBrm",
1684 "(V?)PMAXSDrm",
1685 "(V?)PMAXSWrm",
1686 "(V?)PMAXUBrm",
1687 "(V?)PMAXUDrm",
1688 "(V?)PMAXUWrm",
1689 "(V?)PMINSBrm",
1690 "(V?)PMINSDrm",
1691 "(V?)PMINSWrm",
1692 "(V?)PMINUBrm",
1693 "(V?)PMINUDrm",
1694 "(V?)PMINUWrm",
1695 "(V?)PSIGNBrm",
1696 "(V?)PSIGNDrm",
1697 "(V?)PSIGNWrm",
1698 "(V?)PSLLDrm",
1699 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001700 "VPSLLVDrm",
1701 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001702 "(V?)PSLLWrm",
1703 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001704 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001705 "(V?)PSRAWrm",
1706 "(V?)PSRLDrm",
1707 "(V?)PSRLQrm",
1708 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001709 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001710 "(V?)PSRLWrm",
1711 "(V?)PSUBSBrm",
1712 "(V?)PSUBSWrm",
1713 "(V?)PSUBUSBrm",
1714 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001715
1716def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1717 let Latency = 7;
1718 let NumMicroOps = 2;
1719 let ResourceCycles = [1,1];
1720}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001721def: InstRW<[SKLWriteResGroup91], (instregex "(V?)ANDNPDrm",
1722 "(V?)ANDNPSrm",
1723 "(V?)ANDPDrm",
1724 "(V?)ANDPSrm",
1725 "(V?)BLENDPDrmi",
1726 "(V?)BLENDPSrmi",
1727 "(V?)INSERTF128rm",
1728 "(V?)INSERTI128rm",
1729 "(V?)MASKMOVPDrm",
1730 "(V?)MASKMOVPSrm",
1731 "(V?)ORPDrm",
1732 "(V?)ORPSrm",
1733 "(V?)PADDBrm",
1734 "(V?)PADDDrm",
1735 "(V?)PADDQrm",
1736 "(V?)PADDWrm",
1737 "(V?)PANDNrm",
1738 "(V?)PANDrm",
1739 "(V?)PBLENDDrmi",
1740 "(V?)PMASKMOVDrm",
1741 "(V?)PMASKMOVQrm",
1742 "(V?)PORrm",
1743 "(V?)PSUBBrm",
1744 "(V?)PSUBDrm",
1745 "(V?)PSUBQrm",
1746 "(V?)PSUBWrm",
1747 "(V?)PXORrm",
1748 "(V?)XORPDrm",
1749 "(V?)XORPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001750
1751def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1752 let Latency = 7;
1753 let NumMicroOps = 3;
1754 let ResourceCycles = [2,1];
1755}
Craig Topperfc179c62018-03-22 04:23:41 +00001756def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1757 "MMX_PACKSSWBirm",
1758 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001759
1760def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1761 let Latency = 7;
1762 let NumMicroOps = 3;
1763 let ResourceCycles = [1,2];
1764}
Craig Topperf4cd9082018-01-19 05:47:32 +00001765def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001766
1767def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1768 let Latency = 7;
1769 let NumMicroOps = 3;
1770 let ResourceCycles = [1,2];
1771}
Craig Topperfc179c62018-03-22 04:23:41 +00001772def: InstRW<[SKLWriteResGroup94], (instregex "LEAVE64",
1773 "SCASB",
1774 "SCASL",
1775 "SCASQ",
1776 "SCASW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001777
Craig Topper58afb4e2018-03-22 21:10:07 +00001778def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001779 let Latency = 7;
1780 let NumMicroOps = 3;
1781 let ResourceCycles = [1,1,1];
1782}
Craig Topperfc179c62018-03-22 04:23:41 +00001783def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1784 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001785
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001786def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001787 let Latency = 7;
1788 let NumMicroOps = 3;
1789 let ResourceCycles = [1,1,1];
1790}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001791def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001792
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001793def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001794 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001795 let NumMicroOps = 3;
1796 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001797}
Craig Topperfc179c62018-03-22 04:23:41 +00001798def: InstRW<[SKLWriteResGroup97], (instregex "(V?)LDMXCSR")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001799
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001800def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001801 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001802 let NumMicroOps = 3;
1803 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001804}
Craig Topperfc179c62018-03-22 04:23:41 +00001805def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1806 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001807
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001808def SKLWriteResGroup99 : SchedWriteRes<[SKLPort23,SKLPort06,SKLPort15]> {
1809 let Latency = 7;
1810 let NumMicroOps = 3;
1811 let ResourceCycles = [1,1,1];
1812}
Craig Toppera42a2ba2017-12-16 18:35:31 +00001813def: InstRW<[SKLWriteResGroup99], (instregex "BEXTR(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001814
1815def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1816 let Latency = 7;
1817 let NumMicroOps = 5;
1818 let ResourceCycles = [1,1,1,2];
1819}
Craig Topperfc179c62018-03-22 04:23:41 +00001820def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1821 "ROL(8|16|32|64)mi",
1822 "ROR(8|16|32|64)m1",
1823 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001824
1825def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1826 let Latency = 7;
1827 let NumMicroOps = 5;
1828 let ResourceCycles = [1,1,1,2];
1829}
Craig Topper13a16502018-03-19 00:56:09 +00001830def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001831
1832def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1833 let Latency = 7;
1834 let NumMicroOps = 5;
1835 let ResourceCycles = [1,1,1,1,1];
1836}
Craig Topperfc179c62018-03-22 04:23:41 +00001837def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1838 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001839
1840def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001841 let Latency = 7;
1842 let NumMicroOps = 7;
1843 let ResourceCycles = [1,3,1,2];
1844}
Craig Topper2d451e72018-03-18 08:38:06 +00001845def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001846
Craig Topper58afb4e2018-03-22 21:10:07 +00001847def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001848 let Latency = 8;
1849 let NumMicroOps = 2;
1850 let ResourceCycles = [2];
1851}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001852def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1853 "(V?)ROUNDPS(Y?)r",
1854 "(V?)ROUNDSDr",
1855 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001856
Craig Topperd25f1ac2018-03-20 23:39:48 +00001857def SKLWriteResGroup105_2 : SchedWriteRes<[SKLPort01]> {
1858 let Latency = 10;
1859 let NumMicroOps = 2;
1860 let ResourceCycles = [2];
1861}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001862def: InstRW<[SKLWriteResGroup105_2], (instregex "(V?)PMULLD(Y?)rr")>;
Craig Topperd25f1ac2018-03-20 23:39:48 +00001863
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001864def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001865 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001866 let NumMicroOps = 2;
1867 let ResourceCycles = [1,1];
1868}
Craig Topperfc179c62018-03-22 04:23:41 +00001869def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1870 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001871
1872def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1873 let Latency = 8;
1874 let NumMicroOps = 2;
1875 let ResourceCycles = [1,1];
1876}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001877def: InstRW<[SKLWriteResGroup107], (instrs IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001878def: InstRW<[SKLWriteResGroup107], (instrs IMUL8m, MUL8m)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001879def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1880 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001881
1882def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001883 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001884 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001885 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001886}
Craig Topperb369cdb2018-01-25 06:57:42 +00001887def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001888
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001889def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001890 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001891 let NumMicroOps = 5;
1892}
Craig Topperfc179c62018-03-22 04:23:41 +00001893def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001894
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001895def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1896 let Latency = 8;
1897 let NumMicroOps = 2;
1898 let ResourceCycles = [1,1];
1899}
Craig Topperfc179c62018-03-22 04:23:41 +00001900def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1901 "FCOM64m",
1902 "FCOMP32m",
1903 "FCOMP64m",
1904 "MMX_PSADBWirm",
1905 "VPACKSSDWYrm",
1906 "VPACKSSWBYrm",
1907 "VPACKUSDWYrm",
1908 "VPACKUSWBYrm",
1909 "VPALIGNRYrmi",
1910 "VPBLENDWYrmi",
1911 "VPBROADCASTBYrm",
1912 "VPBROADCASTWYrm",
1913 "VPERMILPDYmi",
1914 "VPERMILPDYrm",
1915 "VPERMILPSYmi",
1916 "VPERMILPSYrm",
1917 "VPMOVSXBDYrm",
1918 "VPMOVSXBQYrm",
1919 "VPMOVSXWQYrm",
1920 "VPSHUFBYrm",
1921 "VPSHUFDYmi",
1922 "VPSHUFHWYmi",
1923 "VPSHUFLWYmi",
1924 "VPUNPCKHBWYrm",
1925 "VPUNPCKHDQYrm",
1926 "VPUNPCKHQDQYrm",
1927 "VPUNPCKHWDYrm",
1928 "VPUNPCKLBWYrm",
1929 "VPUNPCKLDQYrm",
1930 "VPUNPCKLQDQYrm",
1931 "VPUNPCKLWDYrm",
1932 "VSHUFPDYrmi",
1933 "VSHUFPSYrmi",
1934 "VUNPCKHPDYrm",
1935 "VUNPCKHPSYrm",
1936 "VUNPCKLPDYrm",
1937 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001938
1939def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1940 let Latency = 8;
1941 let NumMicroOps = 2;
1942 let ResourceCycles = [1,1];
1943}
Craig Topperfc179c62018-03-22 04:23:41 +00001944def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1945 "VPABSDYrm",
1946 "VPABSWYrm",
1947 "VPADDSBYrm",
1948 "VPADDSWYrm",
1949 "VPADDUSBYrm",
1950 "VPADDUSWYrm",
1951 "VPAVGBYrm",
1952 "VPAVGWYrm",
1953 "VPCMPEQBYrm",
1954 "VPCMPEQDYrm",
1955 "VPCMPEQQYrm",
1956 "VPCMPEQWYrm",
1957 "VPCMPGTBYrm",
1958 "VPCMPGTDYrm",
1959 "VPCMPGTWYrm",
1960 "VPMAXSBYrm",
1961 "VPMAXSDYrm",
1962 "VPMAXSWYrm",
1963 "VPMAXUBYrm",
1964 "VPMAXUDYrm",
1965 "VPMAXUWYrm",
1966 "VPMINSBYrm",
1967 "VPMINSDYrm",
1968 "VPMINSWYrm",
1969 "VPMINUBYrm",
1970 "VPMINUDYrm",
1971 "VPMINUWYrm",
1972 "VPSIGNBYrm",
1973 "VPSIGNDYrm",
1974 "VPSIGNWYrm",
1975 "VPSLLDYrm",
1976 "VPSLLQYrm",
1977 "VPSLLVDYrm",
1978 "VPSLLVQYrm",
1979 "VPSLLWYrm",
1980 "VPSRADYrm",
1981 "VPSRAVDYrm",
1982 "VPSRAWYrm",
1983 "VPSRLDYrm",
1984 "VPSRLQYrm",
1985 "VPSRLVDYrm",
1986 "VPSRLVQYrm",
1987 "VPSRLWYrm",
1988 "VPSUBSBYrm",
1989 "VPSUBSWYrm",
1990 "VPSUBUSBYrm",
1991 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001992
1993def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1994 let Latency = 8;
1995 let NumMicroOps = 2;
1996 let ResourceCycles = [1,1];
1997}
Craig Topperfc179c62018-03-22 04:23:41 +00001998def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1999 "VANDNPSYrm",
2000 "VANDPDYrm",
2001 "VANDPSYrm",
2002 "VBLENDPDYrmi",
2003 "VBLENDPSYrmi",
2004 "VMASKMOVPDYrm",
2005 "VMASKMOVPSYrm",
2006 "VORPDYrm",
2007 "VORPSYrm",
2008 "VPADDBYrm",
2009 "VPADDDYrm",
2010 "VPADDQYrm",
2011 "VPADDWYrm",
2012 "VPANDNYrm",
2013 "VPANDYrm",
2014 "VPBLENDDYrmi",
2015 "VPMASKMOVDYrm",
2016 "VPMASKMOVQYrm",
2017 "VPORYrm",
2018 "VPSUBBYrm",
2019 "VPSUBDYrm",
2020 "VPSUBQYrm",
2021 "VPSUBWYrm",
2022 "VPXORYrm",
2023 "VXORPDYrm",
2024 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002025
2026def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002027 let Latency = 8;
2028 let NumMicroOps = 3;
2029 let ResourceCycles = [1,2];
2030}
Craig Topperfc179c62018-03-22 04:23:41 +00002031def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
2032 "BLENDVPSrm0",
2033 "PBLENDVBrm0",
2034 "VBLENDVPDrm",
2035 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002036 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002037
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002038def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2039 let Latency = 8;
2040 let NumMicroOps = 4;
2041 let ResourceCycles = [1,2,1];
2042}
Craig Topperfc179c62018-03-22 04:23:41 +00002043def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PHADDSWrm",
2044 "MMX_PHSUBSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002045
2046def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
2047 let Latency = 8;
2048 let NumMicroOps = 4;
2049 let ResourceCycles = [2,1,1];
2050}
Craig Topperfc179c62018-03-22 04:23:41 +00002051def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHADDDrm",
2052 "MMX_PHADDWrm",
2053 "MMX_PHSUBDrm",
2054 "MMX_PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002055
Craig Topper58afb4e2018-03-22 21:10:07 +00002056def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002057 let Latency = 8;
2058 let NumMicroOps = 4;
2059 let ResourceCycles = [1,1,1,1];
2060}
2061def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
2062
2063def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
2064 let Latency = 8;
2065 let NumMicroOps = 5;
2066 let ResourceCycles = [1,1,3];
2067}
Craig Topper13a16502018-03-19 00:56:09 +00002068def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002069
2070def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2071 let Latency = 8;
2072 let NumMicroOps = 5;
2073 let ResourceCycles = [1,1,1,2];
2074}
Craig Topperfc179c62018-03-22 04:23:41 +00002075def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
2076 "RCL(8|16|32|64)mi",
2077 "RCR(8|16|32|64)m1",
2078 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002079
2080def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2081 let Latency = 8;
2082 let NumMicroOps = 6;
2083 let ResourceCycles = [1,1,1,3];
2084}
Craig Topperfc179c62018-03-22 04:23:41 +00002085def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
2086 "SAR(8|16|32|64)mCL",
2087 "SHL(8|16|32|64)mCL",
2088 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002089
2090def SKLWriteResGroup118 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
2091 let Latency = 8;
2092 let NumMicroOps = 6;
2093 let ResourceCycles = [1,1,1,3];
2094}
Craig Topper13a16502018-03-19 00:56:09 +00002095def: InstRW<[SKLWriteResGroup118], (instregex "ADC(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002096
2097def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2098 let Latency = 8;
2099 let NumMicroOps = 6;
2100 let ResourceCycles = [1,1,1,2,1];
2101}
Craig Topperfc179c62018-03-22 04:23:41 +00002102def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mr",
2103 "CMPXCHG(8|16|32|64)rm",
2104 "SBB(8|16|32|64)mi",
2105 "SBB(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002106
2107def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2108 let Latency = 9;
2109 let NumMicroOps = 2;
2110 let ResourceCycles = [1,1];
2111}
Craig Topperfc179c62018-03-22 04:23:41 +00002112def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
2113 "MMX_PMADDUBSWrm",
2114 "MMX_PMADDWDirm",
2115 "MMX_PMULHRSWrm",
2116 "MMX_PMULHUWirm",
2117 "MMX_PMULHWirm",
2118 "MMX_PMULLWirm",
2119 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002120 "(V?)RCPSSm",
2121 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002122 "VTESTPDYrm",
2123 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002124
2125def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2126 let Latency = 9;
2127 let NumMicroOps = 2;
2128 let ResourceCycles = [1,1];
2129}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002130def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002131 "VPMOVSXBWYrm",
2132 "VPMOVSXDQYrm",
2133 "VPMOVSXWDYrm",
2134 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002135 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002136
2137def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2138 let Latency = 9;
2139 let NumMicroOps = 2;
2140 let ResourceCycles = [1,1];
2141}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002142def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
2143 "(V?)ADDSSrm",
2144 "(V?)CMPSDrm",
2145 "(V?)CMPSSrm",
2146 "(V?)MAX(C?)SDrm",
2147 "(V?)MAX(C?)SSrm",
2148 "(V?)MIN(C?)SDrm",
2149 "(V?)MIN(C?)SSrm",
2150 "(V?)MULSDrm",
2151 "(V?)MULSSrm",
2152 "(V?)SUBSDrm",
2153 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00002154def: InstRW<[SKLWriteResGroup122],
2155 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002156
Craig Topper58afb4e2018-03-22 21:10:07 +00002157def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002158 let Latency = 9;
2159 let NumMicroOps = 2;
2160 let ResourceCycles = [1,1];
2161}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002162def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002163 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002164 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002165 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002166
Craig Topper58afb4e2018-03-22 21:10:07 +00002167def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002168 let Latency = 9;
2169 let NumMicroOps = 3;
2170 let ResourceCycles = [1,2];
2171}
Craig Topperfc179c62018-03-22 04:23:41 +00002172def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002173
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002174def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2175 let Latency = 9;
2176 let NumMicroOps = 3;
2177 let ResourceCycles = [1,2];
2178}
Craig Topperfc179c62018-03-22 04:23:41 +00002179def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
2180 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002181
2182def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2183 let Latency = 9;
2184 let NumMicroOps = 3;
2185 let ResourceCycles = [1,1,1];
2186}
Craig Topperfc179c62018-03-22 04:23:41 +00002187def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002188
2189def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
2190 let Latency = 9;
2191 let NumMicroOps = 3;
2192 let ResourceCycles = [1,1,1];
2193}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002194def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002195
2196def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002197 let Latency = 9;
2198 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002199 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002200}
Craig Topperfc179c62018-03-22 04:23:41 +00002201def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
2202 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002203
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002204def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2205 let Latency = 9;
2206 let NumMicroOps = 4;
2207 let ResourceCycles = [2,1,1];
2208}
Craig Topperfc179c62018-03-22 04:23:41 +00002209def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
2210 "(V?)PHADDWrm",
2211 "(V?)PHSUBDrm",
2212 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002213
2214def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
2215 let Latency = 9;
2216 let NumMicroOps = 4;
2217 let ResourceCycles = [1,1,1,1];
2218}
Craig Topperfc179c62018-03-22 04:23:41 +00002219def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
2220 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002221
2222def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2223 let Latency = 9;
2224 let NumMicroOps = 5;
2225 let ResourceCycles = [1,2,1,1];
2226}
Craig Topperfc179c62018-03-22 04:23:41 +00002227def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
2228 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002229
2230def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2231 let Latency = 10;
2232 let NumMicroOps = 2;
2233 let ResourceCycles = [1,1];
2234}
Simon Pilgrim7684e052018-03-22 13:18:08 +00002235def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002236 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002237
2238def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2239 let Latency = 10;
2240 let NumMicroOps = 2;
2241 let ResourceCycles = [1,1];
2242}
Craig Topperfc179c62018-03-22 04:23:41 +00002243def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
2244 "ADD_F64m",
2245 "ILD_F16m",
2246 "ILD_F32m",
2247 "ILD_F64m",
2248 "SUBR_F32m",
2249 "SUBR_F64m",
2250 "SUB_F32m",
2251 "SUB_F64m",
2252 "VPCMPGTQYrm",
2253 "VPERM2F128rm",
2254 "VPERM2I128rm",
2255 "VPERMDYrm",
2256 "VPERMPDYmi",
2257 "VPERMPSYrm",
2258 "VPERMQYmi",
2259 "VPMOVZXBDYrm",
2260 "VPMOVZXBQYrm",
2261 "VPMOVZXBWYrm",
2262 "VPMOVZXDQYrm",
2263 "VPMOVZXWQYrm",
2264 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002265
2266def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2267 let Latency = 10;
2268 let NumMicroOps = 2;
2269 let ResourceCycles = [1,1];
2270}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002271def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
2272 "(V?)ADDPSrm",
2273 "(V?)ADDSUBPDrm",
2274 "(V?)ADDSUBPSrm",
2275 "(V?)CMPPDrmi",
2276 "(V?)CMPPSrmi",
2277 "(V?)CVTDQ2PSrm",
2278 "(V?)CVTPH2PSYrm",
2279 "(V?)CVTPS2DQrm",
2280 "(V?)CVTSS2SDrm",
2281 "(V?)CVTTPS2DQrm",
2282 "(V?)MAX(C?)PDrm",
2283 "(V?)MAX(C?)PSrm",
2284 "(V?)MIN(C?)PDrm",
2285 "(V?)MIN(C?)PSrm",
2286 "(V?)MULPDrm",
2287 "(V?)MULPSrm",
2288 "(V?)PHMINPOSUWrm",
2289 "(V?)PMADDUBSWrm",
2290 "(V?)PMADDWDrm",
2291 "(V?)PMULDQrm",
2292 "(V?)PMULHRSWrm",
2293 "(V?)PMULHUWrm",
2294 "(V?)PMULHWrm",
2295 "(V?)PMULLWrm",
2296 "(V?)PMULUDQrm",
2297 "(V?)SUBPDrm",
2298 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00002299def: InstRW<[SKLWriteResGroup134],
2300 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002301
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002302def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2303 let Latency = 10;
2304 let NumMicroOps = 3;
2305 let ResourceCycles = [2,1];
2306}
Craig Topperfc179c62018-03-22 04:23:41 +00002307def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002308
2309def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2310 let Latency = 10;
2311 let NumMicroOps = 3;
2312 let ResourceCycles = [1,1,1];
2313}
Craig Topperfc179c62018-03-22 04:23:41 +00002314def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2315 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002316
Craig Topper58afb4e2018-03-22 21:10:07 +00002317def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002318 let Latency = 10;
2319 let NumMicroOps = 3;
2320 let ResourceCycles = [1,1,1];
2321}
Craig Topperfc179c62018-03-22 04:23:41 +00002322def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002323
2324def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002325 let Latency = 10;
2326 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002327 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002328}
Craig Topperfc179c62018-03-22 04:23:41 +00002329def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2330 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002331
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002332def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2333 let Latency = 10;
2334 let NumMicroOps = 4;
2335 let ResourceCycles = [2,1,1];
2336}
Craig Topperfc179c62018-03-22 04:23:41 +00002337def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2338 "VPHADDWYrm",
2339 "VPHSUBDYrm",
2340 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002341
2342def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002343 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002344 let NumMicroOps = 4;
2345 let ResourceCycles = [1,1,1,1];
2346}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002347def: InstRW<[SKLWriteResGroup142], (instrs IMUL32rm, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002348
2349def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2350 let Latency = 10;
2351 let NumMicroOps = 8;
2352 let ResourceCycles = [1,1,1,1,1,3];
2353}
Craig Topper13a16502018-03-19 00:56:09 +00002354def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002355
2356def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002357 let Latency = 10;
2358 let NumMicroOps = 10;
2359 let ResourceCycles = [9,1];
2360}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002361def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002362
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002363def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002364 let Latency = 11;
2365 let NumMicroOps = 1;
2366 let ResourceCycles = [1];
2367}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002368def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPS(Y?)rr",
2369 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002370
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002371def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002372 let Latency = 11;
2373 let NumMicroOps = 2;
2374 let ResourceCycles = [1,1];
2375}
Craig Topperfc179c62018-03-22 04:23:41 +00002376def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2377 "MUL_F64m",
2378 "VRCPPSYm",
2379 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002380
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002381def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2382 let Latency = 11;
2383 let NumMicroOps = 2;
2384 let ResourceCycles = [1,1];
2385}
Craig Topperfc179c62018-03-22 04:23:41 +00002386def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2387 "VADDPSYrm",
2388 "VADDSUBPDYrm",
2389 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002390 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002391 "VCMPPSYrmi",
2392 "VCVTDQ2PSYrm",
2393 "VCVTPS2DQYrm",
2394 "VCVTPS2PDYrm",
2395 "VCVTTPS2DQYrm",
2396 "VMAX(C?)PDYrm",
2397 "VMAX(C?)PSYrm",
2398 "VMIN(C?)PDYrm",
2399 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002400 "VMULPDYrm",
2401 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002402 "VPMADDUBSWYrm",
2403 "VPMADDWDYrm",
2404 "VPMULDQYrm",
2405 "VPMULHRSWYrm",
2406 "VPMULHUWYrm",
2407 "VPMULHWYrm",
2408 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002409 "VPMULUDQYrm",
2410 "VSUBPDYrm",
2411 "VSUBPSYrm")>;
2412def: InstRW<[SKLWriteResGroup147],
2413 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002414
2415def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2416 let Latency = 11;
2417 let NumMicroOps = 3;
2418 let ResourceCycles = [2,1];
2419}
Craig Topperfc179c62018-03-22 04:23:41 +00002420def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2421 "FICOM32m",
2422 "FICOMP16m",
2423 "FICOMP32m",
2424 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002425
2426def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2427 let Latency = 11;
2428 let NumMicroOps = 3;
2429 let ResourceCycles = [1,1,1];
2430}
Craig Topperfc179c62018-03-22 04:23:41 +00002431def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002432
Craig Topper58afb4e2018-03-22 21:10:07 +00002433def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002434 let Latency = 11;
2435 let NumMicroOps = 3;
2436 let ResourceCycles = [1,1,1];
2437}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002438def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2439 "(V?)CVTSD2SIrm",
2440 "(V?)CVTSS2SI64rm",
2441 "(V?)CVTSS2SIrm",
2442 "(V?)CVTTSD2SI64rm",
2443 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002444 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002445 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002446
Craig Topper58afb4e2018-03-22 21:10:07 +00002447def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002448 let Latency = 11;
2449 let NumMicroOps = 3;
2450 let ResourceCycles = [1,1,1];
2451}
Craig Topperfc179c62018-03-22 04:23:41 +00002452def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2453 "CVTPD2PSrm",
2454 "CVTTPD2DQrm",
2455 "MMX_CVTPD2PIirm",
2456 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002457
2458def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2459 let Latency = 11;
2460 let NumMicroOps = 6;
2461 let ResourceCycles = [1,1,1,2,1];
2462}
Craig Topperfc179c62018-03-22 04:23:41 +00002463def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2464 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002465
2466def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002467 let Latency = 11;
2468 let NumMicroOps = 7;
2469 let ResourceCycles = [2,3,2];
2470}
Craig Topperfc179c62018-03-22 04:23:41 +00002471def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2472 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002473
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002474def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002475 let Latency = 11;
2476 let NumMicroOps = 9;
2477 let ResourceCycles = [1,5,1,2];
2478}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002479def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002480
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002481def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002482 let Latency = 11;
2483 let NumMicroOps = 11;
2484 let ResourceCycles = [2,9];
2485}
Craig Topperfc179c62018-03-22 04:23:41 +00002486def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002487
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002488def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002489 let Latency = 12;
2490 let NumMicroOps = 1;
2491 let ResourceCycles = [1];
2492}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002493def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPS(Y?)r",
2494 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002495
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002496def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2497 let Latency = 12;
2498 let NumMicroOps = 4;
2499 let ResourceCycles = [2,1,1];
2500}
Craig Topperfc179c62018-03-22 04:23:41 +00002501def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2502 "(V?)HADDPSrm",
2503 "(V?)HSUBPDrm",
2504 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002505
Craig Topper58afb4e2018-03-22 21:10:07 +00002506def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002507 let Latency = 12;
2508 let NumMicroOps = 4;
2509 let ResourceCycles = [1,1,1,1];
2510}
2511def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2512
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002513def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002514 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002515 let NumMicroOps = 3;
2516 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002517}
Craig Topperfc179c62018-03-22 04:23:41 +00002518def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2519 "ADD_FI32m",
2520 "SUBR_FI16m",
2521 "SUBR_FI32m",
2522 "SUB_FI16m",
2523 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002524
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002525def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2526 let Latency = 13;
2527 let NumMicroOps = 3;
2528 let ResourceCycles = [1,1,1];
2529}
2530def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2531
Craig Topper58afb4e2018-03-22 21:10:07 +00002532def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002533 let Latency = 13;
2534 let NumMicroOps = 4;
2535 let ResourceCycles = [1,3];
2536}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002537def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002538
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002539def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002540 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002541 let NumMicroOps = 4;
2542 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002543}
Craig Topperfc179c62018-03-22 04:23:41 +00002544def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2545 "VHADDPSYrm",
2546 "VHSUBPDYrm",
2547 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002548
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002549def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002550 let Latency = 14;
2551 let NumMicroOps = 1;
2552 let ResourceCycles = [1];
2553}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002554def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPD(Y?)rr",
2555 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002556
Craig Topper58afb4e2018-03-22 21:10:07 +00002557def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002558 let Latency = 14;
2559 let NumMicroOps = 3;
2560 let ResourceCycles = [1,2];
2561}
Craig Topperfc179c62018-03-22 04:23:41 +00002562def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2563def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2564def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2565def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002566
Craig Topperd25f1ac2018-03-20 23:39:48 +00002567def SKLWriteResGroup168_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2568 let Latency = 16;
2569 let NumMicroOps = 3;
2570 let ResourceCycles = [1,2];
2571}
Craig Topperfc179c62018-03-22 04:23:41 +00002572def: InstRW<[SKLWriteResGroup168_2], (instregex "(V?)PMULLDrm")>;
Craig Topperd25f1ac2018-03-20 23:39:48 +00002573
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002574def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2575 let Latency = 14;
2576 let NumMicroOps = 3;
2577 let ResourceCycles = [1,1,1];
2578}
Craig Topperfc179c62018-03-22 04:23:41 +00002579def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2580 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002581
2582def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002583 let Latency = 14;
2584 let NumMicroOps = 10;
2585 let ResourceCycles = [2,4,1,3];
2586}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002587def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002588
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002589def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002590 let Latency = 15;
2591 let NumMicroOps = 1;
2592 let ResourceCycles = [1];
2593}
Craig Topperfc179c62018-03-22 04:23:41 +00002594def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2595 "DIVR_FST0r",
2596 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002597
Craig Topper58afb4e2018-03-22 21:10:07 +00002598def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002599 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002600 let NumMicroOps = 3;
2601 let ResourceCycles = [1,2];
2602}
Craig Topper40d3b322018-03-22 21:55:20 +00002603def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2604 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002605
Craig Topperd25f1ac2018-03-20 23:39:48 +00002606def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2607 let Latency = 17;
2608 let NumMicroOps = 3;
2609 let ResourceCycles = [1,2];
2610}
2611def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2612
Craig Topper58afb4e2018-03-22 21:10:07 +00002613def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002614 let Latency = 15;
2615 let NumMicroOps = 4;
2616 let ResourceCycles = [1,1,2];
2617}
Craig Topperfc179c62018-03-22 04:23:41 +00002618def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002619
2620def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2621 let Latency = 15;
2622 let NumMicroOps = 10;
2623 let ResourceCycles = [1,1,1,5,1,1];
2624}
Craig Topper13a16502018-03-19 00:56:09 +00002625def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002626
2627def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2628 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002629 let NumMicroOps = 2;
2630 let ResourceCycles = [1,1];
2631}
Craig Topperfc179c62018-03-22 04:23:41 +00002632def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002633
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002634def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2635 let Latency = 16;
2636 let NumMicroOps = 14;
2637 let ResourceCycles = [1,1,1,4,2,5];
2638}
2639def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2640
2641def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002642 let Latency = 16;
2643 let NumMicroOps = 16;
2644 let ResourceCycles = [16];
2645}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002646def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002647
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002648def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2649 let Latency = 17;
2650 let NumMicroOps = 2;
2651 let ResourceCycles = [1,1];
2652}
Craig Topperfc179c62018-03-22 04:23:41 +00002653def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002654 "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002655
2656def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002657 let Latency = 17;
2658 let NumMicroOps = 15;
2659 let ResourceCycles = [2,1,2,4,2,4];
2660}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002661def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002662
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002663def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002664 let Latency = 18;
2665 let NumMicroOps = 1;
2666 let ResourceCycles = [1];
2667}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002668def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPD(Y?)r",
2669 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002670
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002671def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002672 let Latency = 18;
2673 let NumMicroOps = 2;
2674 let ResourceCycles = [1,1];
2675}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002676def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm",
2677 "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002678
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002679def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002680 let Latency = 18;
2681 let NumMicroOps = 8;
2682 let ResourceCycles = [1,1,1,5];
2683}
Craig Topperfc179c62018-03-22 04:23:41 +00002684def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002685
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002686def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002687 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002688 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002689 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002690}
Craig Topper13a16502018-03-19 00:56:09 +00002691def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002692
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002693def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2694 let Latency = 19;
2695 let NumMicroOps = 2;
2696 let ResourceCycles = [1,1];
2697}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002698def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002699 "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002700
Craig Topper58afb4e2018-03-22 21:10:07 +00002701def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002702 let Latency = 19;
2703 let NumMicroOps = 5;
2704 let ResourceCycles = [1,1,3];
2705}
Craig Topperfc179c62018-03-22 04:23:41 +00002706def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002707
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002708def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002709 let Latency = 20;
2710 let NumMicroOps = 1;
2711 let ResourceCycles = [1];
2712}
Craig Topperfc179c62018-03-22 04:23:41 +00002713def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2714 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002715 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002716
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002717def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002718 let Latency = 20;
2719 let NumMicroOps = 2;
2720 let ResourceCycles = [1,1];
2721}
Craig Topperfc179c62018-03-22 04:23:41 +00002722def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002723
Craig Topper58afb4e2018-03-22 21:10:07 +00002724def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002725 let Latency = 20;
2726 let NumMicroOps = 5;
2727 let ResourceCycles = [1,1,3];
2728}
2729def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2730
2731def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2732 let Latency = 20;
2733 let NumMicroOps = 8;
2734 let ResourceCycles = [1,1,1,1,1,1,2];
2735}
Craig Topperfc179c62018-03-22 04:23:41 +00002736def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2737 "INSL",
2738 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002739
2740def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002741 let Latency = 20;
2742 let NumMicroOps = 10;
2743 let ResourceCycles = [1,2,7];
2744}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002745def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002746
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002747def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2748 let Latency = 21;
2749 let NumMicroOps = 2;
2750 let ResourceCycles = [1,1];
2751}
2752def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2753
2754def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2755 let Latency = 22;
2756 let NumMicroOps = 2;
2757 let ResourceCycles = [1,1];
2758}
Craig Topperfc179c62018-03-22 04:23:41 +00002759def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2760 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002761
2762def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2763 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002764 let NumMicroOps = 5;
2765 let ResourceCycles = [1,2,1,1];
2766}
Craig Topper17a31182017-12-16 18:35:29 +00002767def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2768 VGATHERDPDrm,
2769 VGATHERQPDrm,
2770 VGATHERQPSrm,
2771 VPGATHERDDrm,
2772 VPGATHERDQrm,
2773 VPGATHERQDrm,
2774 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002775
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002776def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2777 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002778 let NumMicroOps = 5;
2779 let ResourceCycles = [1,2,1,1];
2780}
Craig Topper17a31182017-12-16 18:35:29 +00002781def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2782 VGATHERQPDYrm,
2783 VGATHERQPSYrm,
2784 VPGATHERDDYrm,
2785 VPGATHERDQYrm,
2786 VPGATHERQDYrm,
2787 VPGATHERQQYrm,
2788 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002789
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002790def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002791 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002792 let NumMicroOps = 2;
2793 let ResourceCycles = [1,1];
2794}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002795def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002796
2797def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2798 let Latency = 23;
2799 let NumMicroOps = 19;
2800 let ResourceCycles = [2,1,4,1,1,4,6];
2801}
2802def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2803
2804def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2805 let Latency = 24;
2806 let NumMicroOps = 2;
2807 let ResourceCycles = [1,1];
2808}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002809def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002810
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002811def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2812 let Latency = 25;
2813 let NumMicroOps = 2;
2814 let ResourceCycles = [1,1];
2815}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002816def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002817
2818def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2819 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002820 let NumMicroOps = 3;
2821 let ResourceCycles = [1,1,1];
2822}
Craig Topperfc179c62018-03-22 04:23:41 +00002823def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2824 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002825
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002826def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2827 let Latency = 27;
2828 let NumMicroOps = 2;
2829 let ResourceCycles = [1,1];
2830}
Craig Topperfc179c62018-03-22 04:23:41 +00002831def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2832 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002833
2834def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2835 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002836 let NumMicroOps = 8;
2837 let ResourceCycles = [2,4,1,1];
2838}
Craig Topper13a16502018-03-19 00:56:09 +00002839def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002840
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002841def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002842 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002843 let NumMicroOps = 3;
2844 let ResourceCycles = [1,1,1];
2845}
Craig Topperfc179c62018-03-22 04:23:41 +00002846def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2847 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002848
2849def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2850 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002851 let NumMicroOps = 23;
2852 let ResourceCycles = [1,5,3,4,10];
2853}
Craig Topperfc179c62018-03-22 04:23:41 +00002854def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2855 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002856
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002857def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2858 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002859 let NumMicroOps = 23;
2860 let ResourceCycles = [1,5,2,1,4,10];
2861}
Craig Topperfc179c62018-03-22 04:23:41 +00002862def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2863 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002864
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002865def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2866 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002867 let NumMicroOps = 31;
2868 let ResourceCycles = [1,8,1,21];
2869}
Craig Topper391c6f92017-12-10 01:24:08 +00002870def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002871
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002872def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2873 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002874 let NumMicroOps = 18;
2875 let ResourceCycles = [1,1,2,3,1,1,1,8];
2876}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002877def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002878
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002879def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2880 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002881 let NumMicroOps = 39;
2882 let ResourceCycles = [1,10,1,1,26];
2883}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002884def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002885
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002886def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002887 let Latency = 42;
2888 let NumMicroOps = 22;
2889 let ResourceCycles = [2,20];
2890}
Craig Topper2d451e72018-03-18 08:38:06 +00002891def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002892
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002893def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2894 let Latency = 42;
2895 let NumMicroOps = 40;
2896 let ResourceCycles = [1,11,1,1,26];
2897}
Craig Topper391c6f92017-12-10 01:24:08 +00002898def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002899
2900def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2901 let Latency = 46;
2902 let NumMicroOps = 44;
2903 let ResourceCycles = [1,11,1,1,30];
2904}
2905def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2906
2907def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2908 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002909 let NumMicroOps = 64;
2910 let ResourceCycles = [2,8,5,10,39];
2911}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002912def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002913
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002914def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2915 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002916 let NumMicroOps = 88;
2917 let ResourceCycles = [4,4,31,1,2,1,45];
2918}
Craig Topper2d451e72018-03-18 08:38:06 +00002919def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002920
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002921def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2922 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002923 let NumMicroOps = 90;
2924 let ResourceCycles = [4,2,33,1,2,1,47];
2925}
Craig Topper2d451e72018-03-18 08:38:06 +00002926def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002927
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002928def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002929 let Latency = 75;
2930 let NumMicroOps = 15;
2931 let ResourceCycles = [6,3,6];
2932}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002933def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002934
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002935def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002936 let Latency = 76;
2937 let NumMicroOps = 32;
2938 let ResourceCycles = [7,2,8,3,1,11];
2939}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002940def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002941
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002942def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002943 let Latency = 102;
2944 let NumMicroOps = 66;
2945 let ResourceCycles = [4,2,4,8,14,34];
2946}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002947def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002948
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002949def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2950 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002951 let NumMicroOps = 100;
2952 let ResourceCycles = [9,1,11,16,1,11,21,30];
2953}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002954def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002955
2956} // SchedModel