blob: bceb43541d67b7dcf2588750ab04aa34234ab346 [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
Simon Pilgrima2f26782018-03-27 20:38:54 +0000227// MOVMSK Instructions.
228def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
229def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
230def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
231
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000232// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000233def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
234 let Latency = 4;
235 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000236 let ResourceCycles = [1];
237}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000238def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
239 let Latency = 10;
240 let NumMicroOps = 2;
241 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000242}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000243
244def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
245 let Latency = 8;
246 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000247 let ResourceCycles = [2];
248}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000249def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000250 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000251 let NumMicroOps = 3;
252 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000253}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000254
255def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
256 let Latency = 20;
257 let NumMicroOps = 11;
258 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000259}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000260def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
261 let Latency = 25;
262 let NumMicroOps = 11;
263 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000264}
265
266// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000267def : WriteRes<WriteCLMul, [SKLPort5]> {
268 let Latency = 6;
269 let NumMicroOps = 1;
270 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000272def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
273 let Latency = 12;
274 let NumMicroOps = 2;
275 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000276}
277
278// Catch-all for expensive system instructions.
279def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
280
281// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000282defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
283defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
284defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000285
286// Old microcoded instructions that nobody use.
287def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
288
289// Fence instructions.
290def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
291
292// Nop, not very useful expect it provides a model for nops!
293def : WriteRes<WriteNop, []>;
294
295////////////////////////////////////////////////////////////////////////////////
296// Horizontal add/sub instructions.
297////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000298
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000299defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
300defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000301
302// Remaining instrs.
303
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000304def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305 let Latency = 1;
306 let NumMicroOps = 1;
307 let ResourceCycles = [1];
308}
Craig Topperfc179c62018-03-22 04:23:41 +0000309def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
310 "MMX_PADDSWirr",
311 "MMX_PADDUSBirr",
312 "MMX_PADDUSWirr",
313 "MMX_PAVGBirr",
314 "MMX_PAVGWirr",
315 "MMX_PCMPEQBirr",
316 "MMX_PCMPEQDirr",
317 "MMX_PCMPEQWirr",
318 "MMX_PCMPGTBirr",
319 "MMX_PCMPGTDirr",
320 "MMX_PCMPGTWirr",
321 "MMX_PMAXSWirr",
322 "MMX_PMAXUBirr",
323 "MMX_PMINSWirr",
324 "MMX_PMINUBirr",
325 "MMX_PSLLDri",
326 "MMX_PSLLDrr",
327 "MMX_PSLLQri",
328 "MMX_PSLLQrr",
329 "MMX_PSLLWri",
330 "MMX_PSLLWrr",
331 "MMX_PSRADri",
332 "MMX_PSRADrr",
333 "MMX_PSRAWri",
334 "MMX_PSRAWrr",
335 "MMX_PSRLDri",
336 "MMX_PSRLDrr",
337 "MMX_PSRLQri",
338 "MMX_PSRLQrr",
339 "MMX_PSRLWri",
340 "MMX_PSRLWrr",
341 "MMX_PSUBSBirr",
342 "MMX_PSUBSWirr",
343 "MMX_PSUBUSBirr",
344 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000345
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000346def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000347 let Latency = 1;
348 let NumMicroOps = 1;
349 let ResourceCycles = [1];
350}
Craig Topperfc179c62018-03-22 04:23:41 +0000351def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
352 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000353 "MMX_MOVD64rr",
354 "MMX_MOVD64to64rr",
355 "MMX_PALIGNRrri",
356 "MMX_PSHUFBrr",
357 "MMX_PSHUFWri",
358 "MMX_PUNPCKHBWirr",
359 "MMX_PUNPCKHDQirr",
360 "MMX_PUNPCKHWDirr",
361 "MMX_PUNPCKLBWirr",
362 "MMX_PUNPCKLDQirr",
363 "MMX_PUNPCKLWDirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000364 "UCOM_FPr",
365 "UCOM_Fr",
Craig Topperfc179c62018-03-22 04:23:41 +0000366 "VBROADCASTSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000367 "(V?)INSERTPSrr",
368 "(V?)MOV64toPQIrr",
369 "(V?)MOVDDUP(Y?)rr",
370 "(V?)MOVDI2PDIrr",
371 "(V?)MOVHLPSrr",
372 "(V?)MOVLHPSrr",
373 "(V?)MOVSDrr",
374 "(V?)MOVSHDUP(Y?)rr",
375 "(V?)MOVSLDUP(Y?)rr",
Craig Topper15fef892018-03-25 23:40:56 +0000376 "(V?)MOVSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000377 "(V?)PACKSSDW(Y?)rr",
378 "(V?)PACKSSWB(Y?)rr",
379 "(V?)PACKUSDW(Y?)rr",
380 "(V?)PACKUSWB(Y?)rr",
381 "(V?)PALIGNR(Y?)rri",
382 "(V?)PBLENDW(Y?)rri",
Craig Topperfc179c62018-03-22 04:23:41 +0000383 "VPBROADCASTDrr",
384 "VPBROADCASTQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000385 "VPERMILPD(Y?)ri",
386 "VPERMILPD(Y?)rr",
387 "VPERMILPS(Y?)ri",
388 "VPERMILPS(Y?)rr",
389 "(V?)PMOVSXBDrr",
390 "(V?)PMOVSXBQrr",
391 "(V?)PMOVSXBWrr",
392 "(V?)PMOVSXDQrr",
393 "(V?)PMOVSXWDrr",
394 "(V?)PMOVSXWQrr",
395 "(V?)PMOVZXBDrr",
396 "(V?)PMOVZXBQrr",
397 "(V?)PMOVZXBWrr",
398 "(V?)PMOVZXDQrr",
399 "(V?)PMOVZXWDrr",
400 "(V?)PMOVZXWQrr",
401 "(V?)PSHUFB(Y?)rr",
402 "(V?)PSHUFD(Y?)ri",
403 "(V?)PSHUFHW(Y?)ri",
404 "(V?)PSHUFLW(Y?)ri",
405 "(V?)PSLLDQ(Y?)ri",
406 "(V?)PSRLDQ(Y?)ri",
407 "(V?)PUNPCKHBW(Y?)rr",
408 "(V?)PUNPCKHDQ(Y?)rr",
409 "(V?)PUNPCKHQDQ(Y?)rr",
410 "(V?)PUNPCKHWD(Y?)rr",
411 "(V?)PUNPCKLBW(Y?)rr",
412 "(V?)PUNPCKLDQ(Y?)rr",
413 "(V?)PUNPCKLQDQ(Y?)rr",
414 "(V?)PUNPCKLWD(Y?)rr",
415 "(V?)SHUFPD(Y?)rri",
416 "(V?)SHUFPS(Y?)rri",
417 "(V?)UNPCKHPD(Y?)rr",
418 "(V?)UNPCKHPS(Y?)rr",
419 "(V?)UNPCKLPD(Y?)rr",
420 "(V?)UNPCKLPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000421
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000422def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000423 let Latency = 1;
424 let NumMicroOps = 1;
425 let ResourceCycles = [1];
426}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000427def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000428
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000429def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000430 let Latency = 1;
431 let NumMicroOps = 1;
432 let ResourceCycles = [1];
433}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000434def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
435 "(V?)PABSD(Y?)rr",
436 "(V?)PABSW(Y?)rr",
437 "(V?)PADDSB(Y?)rr",
438 "(V?)PADDSW(Y?)rr",
439 "(V?)PADDUSB(Y?)rr",
440 "(V?)PADDUSW(Y?)rr",
441 "(V?)PAVGB(Y?)rr",
442 "(V?)PAVGW(Y?)rr",
443 "(V?)PCMPEQB(Y?)rr",
444 "(V?)PCMPEQD(Y?)rr",
445 "(V?)PCMPEQQ(Y?)rr",
446 "(V?)PCMPEQW(Y?)rr",
447 "(V?)PCMPGTB(Y?)rr",
448 "(V?)PCMPGTD(Y?)rr",
449 "(V?)PCMPGTW(Y?)rr",
450 "(V?)PMAXSB(Y?)rr",
451 "(V?)PMAXSD(Y?)rr",
452 "(V?)PMAXSW(Y?)rr",
453 "(V?)PMAXUB(Y?)rr",
454 "(V?)PMAXUD(Y?)rr",
455 "(V?)PMAXUW(Y?)rr",
456 "(V?)PMINSB(Y?)rr",
457 "(V?)PMINSD(Y?)rr",
458 "(V?)PMINSW(Y?)rr",
459 "(V?)PMINUB(Y?)rr",
460 "(V?)PMINUD(Y?)rr",
461 "(V?)PMINUW(Y?)rr",
462 "(V?)PSIGNB(Y?)rr",
463 "(V?)PSIGND(Y?)rr",
464 "(V?)PSIGNW(Y?)rr",
465 "(V?)PSLLD(Y?)ri",
466 "(V?)PSLLQ(Y?)ri",
467 "VPSLLVD(Y?)rr",
468 "VPSLLVQ(Y?)rr",
469 "(V?)PSLLW(Y?)ri",
470 "(V?)PSRAD(Y?)ri",
471 "VPSRAVD(Y?)rr",
472 "(V?)PSRAW(Y?)ri",
473 "(V?)PSRLD(Y?)ri",
474 "(V?)PSRLQ(Y?)ri",
475 "VPSRLVD(Y?)rr",
476 "VPSRLVQ(Y?)rr",
477 "(V?)PSRLW(Y?)ri",
478 "(V?)PSUBSB(Y?)rr",
479 "(V?)PSUBSW(Y?)rr",
480 "(V?)PSUBUSB(Y?)rr",
481 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000482
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000483def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000484 let Latency = 1;
485 let NumMicroOps = 1;
486 let ResourceCycles = [1];
487}
Craig Topperfc179c62018-03-22 04:23:41 +0000488def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
489 "FNOP",
490 "MMX_MOVQ64rr",
491 "MMX_PABSBrr",
492 "MMX_PABSDrr",
493 "MMX_PABSWrr",
494 "MMX_PADDBirr",
495 "MMX_PADDDirr",
496 "MMX_PADDQirr",
497 "MMX_PADDWirr",
498 "MMX_PANDNirr",
499 "MMX_PANDirr",
500 "MMX_PORirr",
501 "MMX_PSIGNBrr",
502 "MMX_PSIGNDrr",
503 "MMX_PSIGNWrr",
504 "MMX_PSUBBirr",
505 "MMX_PSUBDirr",
506 "MMX_PSUBQirr",
507 "MMX_PSUBWirr",
508 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000509
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000510def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000511 let Latency = 1;
512 let NumMicroOps = 1;
513 let ResourceCycles = [1];
514}
Craig Topperfc179c62018-03-22 04:23:41 +0000515def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
516 "ADC(16|32|64)i",
517 "ADC(8|16|32|64)rr",
518 "ADCX(32|64)rr",
519 "ADOX(32|64)rr",
520 "BT(16|32|64)ri8",
521 "BT(16|32|64)rr",
522 "BTC(16|32|64)ri8",
523 "BTC(16|32|64)rr",
524 "BTR(16|32|64)ri8",
525 "BTR(16|32|64)rr",
526 "BTS(16|32|64)ri8",
527 "BTS(16|32|64)rr",
528 "CDQ",
529 "CLAC",
530 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr",
531 "CQO",
532 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
533 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
534 "JMP_1",
535 "JMP_4",
536 "RORX(32|64)ri",
537 "SAR(8|16|32|64)r1",
538 "SAR(8|16|32|64)ri",
539 "SARX(32|64)rr",
540 "SBB(16|32|64)ri",
541 "SBB(16|32|64)i",
542 "SBB(8|16|32|64)rr",
543 "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)r",
544 "SHL(8|16|32|64)r1",
545 "SHL(8|16|32|64)ri",
546 "SHLX(32|64)rr",
547 "SHR(8|16|32|64)r1",
548 "SHR(8|16|32|64)ri",
549 "SHRX(32|64)rr",
550 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000551
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000552def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
553 let Latency = 1;
554 let NumMicroOps = 1;
555 let ResourceCycles = [1];
556}
Craig Topperfc179c62018-03-22 04:23:41 +0000557def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
558 "BLSI(32|64)rr",
559 "BLSMSK(32|64)rr",
560 "BLSR(32|64)rr",
561 "BZHI(32|64)rr",
562 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000563
564def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
565 let Latency = 1;
566 let NumMicroOps = 1;
567 let ResourceCycles = [1];
568}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000569def: InstRW<[SKLWriteResGroup9], (instregex "(V?)ANDNPD(Y?)rr",
570 "(V?)ANDNPS(Y?)rr",
571 "(V?)ANDPD(Y?)rr",
572 "(V?)ANDPS(Y?)rr",
573 "(V?)BLENDPD(Y?)rri",
574 "(V?)BLENDPS(Y?)rri",
575 "(V?)MOVAPD(Y?)rr",
576 "(V?)MOVAPS(Y?)rr",
577 "(V?)MOVDQA(Y?)rr",
578 "(V?)MOVDQU(Y?)rr",
579 "(V?)MOVPQI2QIrr",
Craig Topper15fef892018-03-25 23:40:56 +0000580 "(V?)MOVUPD(Y?)rr",
581 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000582 "(V?)MOVZPQILo2PQIrr",
583 "(V?)ORPD(Y?)rr",
584 "(V?)ORPS(Y?)rr",
585 "(V?)PADDB(Y?)rr",
586 "(V?)PADDD(Y?)rr",
587 "(V?)PADDQ(Y?)rr",
588 "(V?)PADDW(Y?)rr",
589 "(V?)PANDN(Y?)rr",
590 "(V?)PAND(Y?)rr",
591 "VPBLENDD(Y?)rri",
592 "(V?)POR(Y?)rr",
593 "(V?)PSUBB(Y?)rr",
594 "(V?)PSUBD(Y?)rr",
595 "(V?)PSUBQ(Y?)rr",
596 "(V?)PSUBW(Y?)rr",
597 "(V?)PXOR(Y?)rr",
Simon Pilgrimfecb0b72018-03-25 19:17:17 +0000598 "(V?)XORPD(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000599 "(V?)XORPS(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000600
601def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
602 let Latency = 1;
603 let NumMicroOps = 1;
604 let ResourceCycles = [1];
605}
Craig Topper2d451e72018-03-18 08:38:06 +0000606def: InstRW<[SKLWriteResGroup10], (instrs CWDE)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000607def: InstRW<[SKLWriteResGroup10], (instregex "ADD(8|16|32|64)ri",
608 "ADD(8|16|32|64)rr",
609 "ADD(8|16|32|64)i",
610 "AND(8|16|32|64)ri",
611 "AND(8|16|32|64)rr",
612 "AND(8|16|32|64)i",
613 "CBW",
614 "CLC",
615 "CMC",
616 "CMP(8|16|32|64)ri",
617 "CMP(8|16|32|64)rr",
618 "CMP(8|16|32|64)i",
619 "DEC(8|16|32|64)r",
620 "INC(8|16|32|64)r",
621 "LAHF",
622 "MOV(8|16|32|64)rr",
623 "MOV(8|16|32|64)ri",
624 "MOVSX(16|32|64)rr16",
625 "MOVSX(16|32|64)rr32",
626 "MOVSX(16|32|64)rr8",
627 "MOVZX(16|32|64)rr16",
628 "MOVZX(16|32|64)rr8",
629 "NEG(8|16|32|64)r",
630 "NOOP",
631 "NOT(8|16|32|64)r",
632 "OR(8|16|32|64)ri",
633 "OR(8|16|32|64)rr",
634 "OR(8|16|32|64)i",
635 "SAHF",
636 "SGDT64m",
637 "SIDT64m",
638 "SLDT64m",
639 "SMSW16m",
640 "STC",
641 "STRm",
642 "SUB(8|16|32|64)ri",
643 "SUB(8|16|32|64)rr",
644 "SUB(8|16|32|64)i",
645 "SYSCALL",
646 "TEST(8|16|32|64)rr",
647 "TEST(8|16|32|64)i",
648 "TEST(8|16|32|64)ri",
649 "XCHG(16|32|64)rr",
650 "XOR(8|16|32|64)ri",
651 "XOR(8|16|32|64)rr",
652 "XOR(8|16|32|64)i")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000653
654def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000655 let Latency = 1;
656 let NumMicroOps = 2;
657 let ResourceCycles = [1,1];
658}
Craig Topperfc179c62018-03-22 04:23:41 +0000659def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
660 "MMX_MOVD64from64rm",
661 "MMX_MOVD64mr",
662 "MMX_MOVNTQmr",
663 "MMX_MOVQ64mr",
664 "MOV(8|16|32|64)mr",
665 "MOV8mi",
Craig Topperfc179c62018-03-22 04:23:41 +0000666 "MOVNTI_64mr",
667 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000668 "ST_FP32m",
669 "ST_FP64m",
670 "ST_FP80m",
671 "VEXTRACTF128mr",
672 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000673 "(V?)MOVAPDYmr",
674 "(V?)MOVAPS(Y?)mr",
675 "(V?)MOVDQA(Y?)mr",
676 "(V?)MOVDQU(Y?)mr",
677 "(V?)MOVHPDmr",
678 "(V?)MOVHPSmr",
679 "(V?)MOVLPDmr",
680 "(V?)MOVLPSmr",
681 "(V?)MOVNTDQ(Y?)mr",
682 "(V?)MOVNTPD(Y?)mr",
683 "(V?)MOVNTPS(Y?)mr",
684 "(V?)MOVPDI2DImr",
685 "(V?)MOVPQI2QImr",
686 "(V?)MOVPQIto64mr",
687 "(V?)MOVSDmr",
688 "(V?)MOVSSmr",
689 "(V?)MOVUPD(Y?)mr",
690 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000691 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000692
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000693def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000694 let Latency = 2;
695 let NumMicroOps = 1;
696 let ResourceCycles = [1];
697}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000698def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000699 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000700 "(V?)COMISDrr",
701 "(V?)COMISSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000702 "(V?)MOVPDI2DIrr",
703 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000704 "VTESTPD(Y?)rr",
705 "VTESTPS(Y?)rr",
706 "(V?)UCOMISDrr",
707 "(V?)UCOMISSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000708
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000709def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000710 let Latency = 2;
711 let NumMicroOps = 2;
712 let ResourceCycles = [2];
713}
Craig Topperfc179c62018-03-22 04:23:41 +0000714def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
715 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000716 "(V?)PINSRBrr",
717 "(V?)PINSRDrr",
718 "(V?)PINSRQrr",
719 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000720
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000721def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000722 let Latency = 2;
723 let NumMicroOps = 2;
724 let ResourceCycles = [2];
725}
Craig Topperfc179c62018-03-22 04:23:41 +0000726def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
727 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000728
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000729def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000730 let Latency = 2;
731 let NumMicroOps = 2;
732 let ResourceCycles = [2];
733}
Craig Topperfc179c62018-03-22 04:23:41 +0000734def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
735 "ROL(8|16|32|64)r1",
736 "ROL(8|16|32|64)ri",
737 "ROR(8|16|32|64)r1",
738 "ROR(8|16|32|64)ri",
739 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000740
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000741def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000742 let Latency = 2;
743 let NumMicroOps = 2;
744 let ResourceCycles = [2];
745}
Craig Topperfc179c62018-03-22 04:23:41 +0000746def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
747 "BLENDVPSrr0",
748 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000749 "VBLENDVPD(Y?)rr",
750 "VBLENDVPS(Y?)rr",
751 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000752
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000753def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000754 let Latency = 2;
755 let NumMicroOps = 2;
756 let ResourceCycles = [2];
757}
Craig Topperfc179c62018-03-22 04:23:41 +0000758def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
759 "WAIT",
760 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000761
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000762def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000763 let Latency = 2;
764 let NumMicroOps = 2;
765 let ResourceCycles = [1,1];
766}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000767def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
768 "VMASKMOVPS(Y?)mr",
769 "VPMASKMOVD(Y?)mr",
770 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000771
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000772def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000773 let Latency = 2;
774 let NumMicroOps = 2;
775 let ResourceCycles = [1,1];
776}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000777def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
778 "(V?)PSLLQrr",
779 "(V?)PSLLWrr",
780 "(V?)PSRADrr",
781 "(V?)PSRAWrr",
782 "(V?)PSRLDrr",
783 "(V?)PSRLQrr",
784 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000785
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000786def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000787 let Latency = 2;
788 let NumMicroOps = 2;
789 let ResourceCycles = [1,1];
790}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000791def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000792
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000793def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000794 let Latency = 2;
795 let NumMicroOps = 2;
796 let ResourceCycles = [1,1];
797}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000798def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000799
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000800def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000801 let Latency = 2;
802 let NumMicroOps = 2;
803 let ResourceCycles = [1,1];
804}
Craig Topperfc179c62018-03-22 04:23:41 +0000805def: InstRW<[SKLWriteResGroup22], (instregex "BEXTR(32|64)rr",
806 "BSWAP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000807
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000808def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000809 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000810 let NumMicroOps = 2;
811 let ResourceCycles = [1,1];
812}
Craig Topper2d451e72018-03-18 08:38:06 +0000813def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000814def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000815def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
816 "ADC8ri",
817 "SBB8i8",
818 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000819
820def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
821 let Latency = 2;
822 let NumMicroOps = 3;
823 let ResourceCycles = [1,1,1];
824}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000825def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
826 "(V?)PEXTRBmr",
827 "(V?)PEXTRDmr",
828 "(V?)PEXTRQmr",
829 "(V?)PEXTRWmr",
830 "(V?)STMXCSR")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000831
832def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
833 let Latency = 2;
834 let NumMicroOps = 3;
835 let ResourceCycles = [1,1,1];
836}
837def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
838
839def SKLWriteResGroup26 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
840 let Latency = 2;
841 let NumMicroOps = 3;
842 let ResourceCycles = [1,1,1];
843}
Craig Topperf4cd9082018-01-19 05:47:32 +0000844def: 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 +0000845
846def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
847 let Latency = 2;
848 let NumMicroOps = 3;
849 let ResourceCycles = [1,1,1];
850}
851def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
852
853def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
854 let Latency = 2;
855 let NumMicroOps = 3;
856 let ResourceCycles = [1,1,1];
857}
Craig Topper2d451e72018-03-18 08:38:06 +0000858def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000859def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
860 "PUSH64i8",
861 "STOSB",
862 "STOSL",
863 "STOSQ",
864 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000865
866def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
867 let Latency = 3;
868 let NumMicroOps = 1;
869 let ResourceCycles = [1];
870}
Clement Courbet327fac42018-03-07 08:14:02 +0000871def: InstRW<[SKLWriteResGroup29], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000872def: InstRW<[SKLWriteResGroup29], (instrs IMUL8r, MUL8r)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000873def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000874 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000875 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000876 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000877
Clement Courbet327fac42018-03-07 08:14:02 +0000878def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000879 let Latency = 3;
880 let NumMicroOps = 2;
881 let ResourceCycles = [1,1];
882}
Clement Courbet327fac42018-03-07 08:14:02 +0000883def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000884
885def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
886 let Latency = 3;
887 let NumMicroOps = 1;
888 let ResourceCycles = [1];
889}
Craig Topperfc179c62018-03-22 04:23:41 +0000890def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
891 "ADD_FST0r",
892 "ADD_FrST0",
893 "MMX_PSADBWirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000894 "SUBR_FPrST0",
895 "SUBR_FST0r",
896 "SUBR_FrST0",
897 "SUB_FPrST0",
898 "SUB_FST0r",
899 "SUB_FrST0",
900 "VBROADCASTSDYrr",
901 "VBROADCASTSSYrr",
902 "VEXTRACTF128rr",
903 "VEXTRACTI128rr",
904 "VINSERTF128rr",
905 "VINSERTI128rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000906 "VPBROADCASTB(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000907 "VPBROADCASTDYrr",
908 "VPBROADCASTQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000909 "VPBROADCASTW(Y?)rr",
910 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000911 "VPERM2F128rr",
912 "VPERM2I128rr",
913 "VPERMDYrr",
914 "VPERMPDYri",
915 "VPERMPSYrr",
916 "VPERMQYri",
917 "VPMOVSXBDYrr",
918 "VPMOVSXBQYrr",
919 "VPMOVSXBWYrr",
920 "VPMOVSXDQYrr",
921 "VPMOVSXWDYrr",
922 "VPMOVSXWQYrr",
923 "VPMOVZXBDYrr",
924 "VPMOVZXBQYrr",
925 "VPMOVZXBWYrr",
926 "VPMOVZXDQYrr",
927 "VPMOVZXWDYrr",
928 "VPMOVZXWQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000929 "(V?)PSADBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000930
931def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
932 let Latency = 3;
933 let NumMicroOps = 2;
934 let ResourceCycles = [1,1];
935}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000936def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
937 "(V?)EXTRACTPSrr",
938 "(V?)PEXTRBrr",
939 "(V?)PEXTRDrr",
940 "(V?)PEXTRQrr",
941 "(V?)PEXTRWrr",
942 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000943
944def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
945 let Latency = 3;
946 let NumMicroOps = 2;
947 let ResourceCycles = [1,1];
948}
949def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
950
951def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
952 let Latency = 3;
953 let NumMicroOps = 3;
954 let ResourceCycles = [3];
955}
Craig Topperfc179c62018-03-22 04:23:41 +0000956def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
957 "ROR(8|16|32|64)rCL",
958 "SAR(8|16|32|64)rCL",
959 "SHL(8|16|32|64)rCL",
960 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000961
962def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
963 let Latency = 3;
964 let NumMicroOps = 3;
965 let ResourceCycles = [3];
966}
Craig Topperfc179c62018-03-22 04:23:41 +0000967def: InstRW<[SKLWriteResGroup34], (instregex "XADD(8|16|32|64)rr",
968 "XCHG8rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000969
970def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
971 let Latency = 3;
972 let NumMicroOps = 3;
973 let ResourceCycles = [1,2];
974}
Craig Topperfc179c62018-03-22 04:23:41 +0000975def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PHADDSWrr",
976 "MMX_PHSUBSWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000977
978def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
979 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000980 let NumMicroOps = 3;
981 let ResourceCycles = [2,1];
982}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000983def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
984 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000985
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000986def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
987 let Latency = 3;
988 let NumMicroOps = 3;
989 let ResourceCycles = [2,1];
990}
Craig Topperfc179c62018-03-22 04:23:41 +0000991def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHADDDrr",
992 "MMX_PHADDWrr",
993 "MMX_PHSUBDrr",
994 "MMX_PHSUBWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000995
996def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
997 let Latency = 3;
998 let NumMicroOps = 3;
999 let ResourceCycles = [2,1];
1000}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001001def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
1002 "(V?)PHADDW(Y?)rr",
1003 "(V?)PHSUBD(Y?)rr",
1004 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001005
1006def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
1007 let Latency = 3;
1008 let NumMicroOps = 3;
1009 let ResourceCycles = [2,1];
1010}
Craig Topperfc179c62018-03-22 04:23:41 +00001011def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
1012 "MMX_PACKSSWBirr",
1013 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001014
1015def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
1016 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001017 let NumMicroOps = 3;
1018 let ResourceCycles = [1,2];
1019}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001020def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001021
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001022def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
1023 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001024 let NumMicroOps = 3;
1025 let ResourceCycles = [1,2];
1026}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001027def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001028
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001029def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
1030 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001031 let NumMicroOps = 3;
1032 let ResourceCycles = [1,2];
1033}
Craig Topperfc179c62018-03-22 04:23:41 +00001034def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
1035 "RCL(8|16|32|64)ri",
1036 "RCR(8|16|32|64)r1",
1037 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001038
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001039def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
1040 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001041 let NumMicroOps = 3;
1042 let ResourceCycles = [1,1,1];
1043}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001044def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001045
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001046def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
1047 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001048 let NumMicroOps = 4;
1049 let ResourceCycles = [1,1,2];
1050}
Craig Topperf4cd9082018-01-19 05:47:32 +00001051def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001052
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001053def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
1054 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001055 let NumMicroOps = 4;
1056 let ResourceCycles = [1,1,1,1];
1057}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001058def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001059
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001060def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
1061 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001062 let NumMicroOps = 4;
1063 let ResourceCycles = [1,1,1,1];
1064}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001065def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001066
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001067def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001068 let Latency = 4;
1069 let NumMicroOps = 1;
1070 let ResourceCycles = [1];
1071}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001072def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001073 "MMX_PMADDWDirr",
1074 "MMX_PMULHRSWrr",
1075 "MMX_PMULHUWirr",
1076 "MMX_PMULHWirr",
1077 "MMX_PMULLWirr",
1078 "MMX_PMULUDQirr",
1079 "MUL_FPrST0",
1080 "MUL_FST0r",
1081 "MUL_FrST0",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001082 "(V?)RCPPS(Y?)r",
1083 "(V?)RCPSSr",
1084 "(V?)RSQRTPS(Y?)r",
1085 "(V?)RSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001086
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001087def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001088 let Latency = 4;
1089 let NumMicroOps = 1;
1090 let ResourceCycles = [1];
1091}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001092def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
1093 "(V?)ADDPS(Y?)rr",
1094 "(V?)ADDSDrr",
1095 "(V?)ADDSSrr",
1096 "(V?)ADDSUBPD(Y?)rr",
1097 "(V?)ADDSUBPS(Y?)rr",
1098 "(V?)CMPPD(Y?)rri",
1099 "(V?)CMPPS(Y?)rri",
1100 "(V?)CMPSDrr",
1101 "(V?)CMPSSrr",
1102 "(V?)CVTDQ2PS(Y?)rr",
1103 "(V?)CVTPS2DQ(Y?)rr",
1104 "(V?)CVTTPS2DQ(Y?)rr",
1105 "(V?)MAX(C?)PD(Y?)rr",
1106 "(V?)MAX(C?)PS(Y?)rr",
1107 "(V?)MAX(C?)SDrr",
1108 "(V?)MAX(C?)SSrr",
1109 "(V?)MIN(C?)PD(Y?)rr",
1110 "(V?)MIN(C?)PS(Y?)rr",
1111 "(V?)MIN(C?)SDrr",
1112 "(V?)MIN(C?)SSrr",
1113 "(V?)MULPD(Y?)rr",
1114 "(V?)MULPS(Y?)rr",
1115 "(V?)MULSDrr",
1116 "(V?)MULSSrr",
1117 "(V?)PHMINPOSUWrr",
1118 "(V?)PMADDUBSW(Y?)rr",
1119 "(V?)PMADDWD(Y?)rr",
1120 "(V?)PMULDQ(Y?)rr",
1121 "(V?)PMULHRSW(Y?)rr",
1122 "(V?)PMULHUW(Y?)rr",
1123 "(V?)PMULHW(Y?)rr",
1124 "(V?)PMULLW(Y?)rr",
1125 "(V?)PMULUDQ(Y?)rr",
1126 "(V?)SUBPD(Y?)rr",
1127 "(V?)SUBPS(Y?)rr",
1128 "(V?)SUBSDrr",
1129 "(V?)SUBSSrr")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001130def: InstRW<[SKLWriteResGroup48],
1131 (instregex
1132 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1133 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001134
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001135def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001136 let Latency = 4;
1137 let NumMicroOps = 2;
1138 let ResourceCycles = [2];
1139}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001140def: InstRW<[SKLWriteResGroup50], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001141
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001142def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001143 let Latency = 4;
1144 let NumMicroOps = 2;
1145 let ResourceCycles = [1,1];
1146}
Craig Topperfc179c62018-03-22 04:23:41 +00001147def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r,
1148 MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001149
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001150def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1151 let Latency = 4;
1152 let NumMicroOps = 4;
1153}
Craig Topperfc179c62018-03-22 04:23:41 +00001154def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001155
1156def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001157 let Latency = 4;
1158 let NumMicroOps = 2;
1159 let ResourceCycles = [1,1];
1160}
Craig Topperfc179c62018-03-22 04:23:41 +00001161def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1162 "VPSLLQYrr",
1163 "VPSLLWYrr",
1164 "VPSRADYrr",
1165 "VPSRAWYrr",
1166 "VPSRLDYrr",
1167 "VPSRLQYrr",
1168 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001169
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001170def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001171 let Latency = 4;
1172 let NumMicroOps = 3;
1173 let ResourceCycles = [1,1,1];
1174}
Craig Topperfc179c62018-03-22 04:23:41 +00001175def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1176 "ISTT_FP32m",
1177 "ISTT_FP64m",
1178 "IST_F16m",
1179 "IST_F32m",
1180 "IST_FP16m",
1181 "IST_FP32m",
1182 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001183
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001184def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001185 let Latency = 4;
1186 let NumMicroOps = 4;
1187 let ResourceCycles = [4];
1188}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001189def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001190
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001191def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001192 let Latency = 4;
1193 let NumMicroOps = 4;
1194 let ResourceCycles = [1,3];
1195}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001196def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001197
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001198def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001199 let Latency = 4;
1200 let NumMicroOps = 4;
1201 let ResourceCycles = [1,3];
1202}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001203def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001204
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001205def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001206 let Latency = 4;
1207 let NumMicroOps = 4;
1208 let ResourceCycles = [1,1,2];
1209}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001210def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001211
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001212def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1213 let Latency = 5;
1214 let NumMicroOps = 1;
1215 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001216}
Craig Topperfc179c62018-03-22 04:23:41 +00001217def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64rm",
1218 "MMX_MOVD64to64rm",
1219 "MMX_MOVQ64rm",
1220 "MOV(8|16|32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001221 "MOVSX(16|32|64)rm16",
1222 "MOVSX(16|32|64)rm32",
1223 "MOVSX(16|32|64)rm8",
1224 "MOVZX(16|32|64)rm16",
1225 "MOVZX(16|32|64)rm8",
1226 "PREFETCHNTA",
1227 "PREFETCHT0",
1228 "PREFETCHT1",
1229 "PREFETCHT2",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001230 "(V?)MOV64toPQIrm",
1231 "(V?)MOVDDUPrm",
1232 "(V?)MOVDI2PDIrm",
1233 "(V?)MOVQI2PQIrm",
1234 "(V?)MOVSDrm",
1235 "(V?)MOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001236
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001237def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001238 let Latency = 5;
1239 let NumMicroOps = 2;
1240 let ResourceCycles = [1,1];
1241}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001242def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1243 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001244
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001245def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001246 let Latency = 5;
1247 let NumMicroOps = 2;
1248 let ResourceCycles = [1,1];
1249}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001250def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001251 "MMX_CVTPS2PIirr",
1252 "MMX_CVTTPD2PIirr",
1253 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001254 "(V?)CVTPD2DQrr",
1255 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001256 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001257 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001258 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001259 "(V?)CVTSD2SSrr",
1260 "(V?)CVTSI642SDrr",
1261 "(V?)CVTSI2SDrr",
1262 "(V?)CVTSI2SSrr",
1263 "(V?)CVTSS2SDrr",
1264 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001265
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001266def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001267 let Latency = 5;
1268 let NumMicroOps = 3;
1269 let ResourceCycles = [1,1,1];
1270}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001271def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001272
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001273def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001274 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001275 let NumMicroOps = 3;
1276 let ResourceCycles = [1,1,1];
1277}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001278def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001279
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001280def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001281 let Latency = 5;
1282 let NumMicroOps = 5;
1283 let ResourceCycles = [1,4];
1284}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001285def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001286
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001287def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001288 let Latency = 5;
1289 let NumMicroOps = 5;
1290 let ResourceCycles = [2,3];
1291}
Craig Topper13a16502018-03-19 00:56:09 +00001292def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001293
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001294def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001295 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001296 let NumMicroOps = 6;
1297 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001298}
Craig Topperfc179c62018-03-22 04:23:41 +00001299def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1300 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001301
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001302def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1303 let Latency = 6;
1304 let NumMicroOps = 1;
1305 let ResourceCycles = [1];
1306}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001307def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
1308 "(V?)LDDQUrm",
1309 "(V?)MOVAPDrm",
1310 "(V?)MOVAPSrm",
1311 "(V?)MOVDQArm",
1312 "(V?)MOVDQUrm",
1313 "(V?)MOVNTDQArm",
1314 "(V?)MOVSHDUPrm",
1315 "(V?)MOVSLDUPrm",
1316 "(V?)MOVUPDrm",
1317 "(V?)MOVUPSrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001318 "VPBROADCASTDrm",
1319 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001320
1321def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001322 let Latency = 6;
1323 let NumMicroOps = 2;
1324 let ResourceCycles = [2];
1325}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001326def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001327
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001328def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001329 let Latency = 6;
1330 let NumMicroOps = 2;
1331 let ResourceCycles = [1,1];
1332}
Craig Topperfc179c62018-03-22 04:23:41 +00001333def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1334 "MMX_PADDSWirm",
1335 "MMX_PADDUSBirm",
1336 "MMX_PADDUSWirm",
1337 "MMX_PAVGBirm",
1338 "MMX_PAVGWirm",
1339 "MMX_PCMPEQBirm",
1340 "MMX_PCMPEQDirm",
1341 "MMX_PCMPEQWirm",
1342 "MMX_PCMPGTBirm",
1343 "MMX_PCMPGTDirm",
1344 "MMX_PCMPGTWirm",
1345 "MMX_PMAXSWirm",
1346 "MMX_PMAXUBirm",
1347 "MMX_PMINSWirm",
1348 "MMX_PMINUBirm",
1349 "MMX_PSLLDrm",
1350 "MMX_PSLLQrm",
1351 "MMX_PSLLWrm",
1352 "MMX_PSRADrm",
1353 "MMX_PSRAWrm",
1354 "MMX_PSRLDrm",
1355 "MMX_PSRLQrm",
1356 "MMX_PSRLWrm",
1357 "MMX_PSUBSBirm",
1358 "MMX_PSUBSWirm",
1359 "MMX_PSUBUSBirm",
1360 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001361
Craig Topper58afb4e2018-03-22 21:10:07 +00001362def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001363 let Latency = 6;
1364 let NumMicroOps = 2;
1365 let ResourceCycles = [1,1];
1366}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001367def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1368 "(V?)CVTSD2SIrr",
1369 "(V?)CVTSS2SI64rr",
1370 "(V?)CVTSS2SIrr",
1371 "(V?)CVTTSD2SI64rr",
1372 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001373
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001374def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1375 let Latency = 6;
1376 let NumMicroOps = 2;
1377 let ResourceCycles = [1,1];
1378}
Craig Topperfc179c62018-03-22 04:23:41 +00001379def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1380 "MMX_PINSRWrm",
1381 "MMX_PSHUFBrm",
1382 "MMX_PSHUFWmi",
1383 "MMX_PUNPCKHBWirm",
1384 "MMX_PUNPCKHDQirm",
1385 "MMX_PUNPCKHWDirm",
1386 "MMX_PUNPCKLBWirm",
1387 "MMX_PUNPCKLDQirm",
1388 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001389 "(V?)MOVHPDrm",
1390 "(V?)MOVHPSrm",
1391 "(V?)MOVLPDrm",
1392 "(V?)MOVLPSrm",
1393 "(V?)PINSRBrm",
1394 "(V?)PINSRDrm",
1395 "(V?)PINSRQrm",
1396 "(V?)PINSRWrm",
1397 "(V?)PMOVSXBDrm",
1398 "(V?)PMOVSXBQrm",
1399 "(V?)PMOVSXBWrm",
1400 "(V?)PMOVSXDQrm",
1401 "(V?)PMOVSXWDrm",
1402 "(V?)PMOVSXWQrm",
1403 "(V?)PMOVZXBDrm",
1404 "(V?)PMOVZXBQrm",
1405 "(V?)PMOVZXBWrm",
1406 "(V?)PMOVZXDQrm",
1407 "(V?)PMOVZXWDrm",
1408 "(V?)PMOVZXWQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001409
1410def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1411 let Latency = 6;
1412 let NumMicroOps = 2;
1413 let ResourceCycles = [1,1];
1414}
Craig Topperfc179c62018-03-22 04:23:41 +00001415def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1416 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001417
1418def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1419 let Latency = 6;
1420 let NumMicroOps = 2;
1421 let ResourceCycles = [1,1];
1422}
Craig Topperfc179c62018-03-22 04:23:41 +00001423def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSBrm",
1424 "MMX_PABSDrm",
1425 "MMX_PABSWrm",
1426 "MMX_PADDBirm",
1427 "MMX_PADDDirm",
1428 "MMX_PADDQirm",
1429 "MMX_PADDWirm",
1430 "MMX_PANDNirm",
1431 "MMX_PANDirm",
1432 "MMX_PORirm",
1433 "MMX_PSIGNBrm",
1434 "MMX_PSIGNDrm",
1435 "MMX_PSIGNWrm",
1436 "MMX_PSUBBirm",
1437 "MMX_PSUBDirm",
1438 "MMX_PSUBQirm",
1439 "MMX_PSUBWirm",
1440 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001441
1442def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1443 let Latency = 6;
1444 let NumMicroOps = 2;
1445 let ResourceCycles = [1,1];
1446}
Craig Topperfc179c62018-03-22 04:23:41 +00001447def: InstRW<[SKLWriteResGroup74], (instregex "ADC(8|16|32|64)rm",
1448 "ADCX(32|64)rm",
1449 "ADOX(32|64)rm",
1450 "BT(16|32|64)mi8",
1451 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rm",
1452 "RORX(32|64)mi",
1453 "SARX(32|64)rm",
1454 "SBB(8|16|32|64)rm",
1455 "SHLX(32|64)rm",
1456 "SHRX(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001457
1458def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1459 let Latency = 6;
1460 let NumMicroOps = 2;
1461 let ResourceCycles = [1,1];
1462}
Craig Topperfc179c62018-03-22 04:23:41 +00001463def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1464 "BLSI(32|64)rm",
1465 "BLSMSK(32|64)rm",
1466 "BLSR(32|64)rm",
1467 "BZHI(32|64)rm",
1468 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001469
1470def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1471 let Latency = 6;
1472 let NumMicroOps = 2;
1473 let ResourceCycles = [1,1];
1474}
Craig Topper2d451e72018-03-18 08:38:06 +00001475def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001476def: InstRW<[SKLWriteResGroup76], (instregex "ADD(8|16|32|64)rm",
1477 "AND(8|16|32|64)rm",
1478 "CMP(8|16|32|64)mi",
1479 "CMP(8|16|32|64)mr",
1480 "CMP(8|16|32|64)rm",
1481 "OR(8|16|32|64)rm",
1482 "POP(16|32|64)rmr",
1483 "SUB(8|16|32|64)rm",
1484 "TEST(8|16|32|64)mr",
1485 "TEST(8|16|32|64)mi",
1486 "XOR(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001487
1488def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001489 let Latency = 6;
1490 let NumMicroOps = 3;
1491 let ResourceCycles = [2,1];
1492}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001493def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1494 "(V?)HADDPS(Y?)rr",
1495 "(V?)HSUBPD(Y?)rr",
1496 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001497
Craig Topper58afb4e2018-03-22 21:10:07 +00001498def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001499 let Latency = 6;
1500 let NumMicroOps = 3;
1501 let ResourceCycles = [2,1];
1502}
Craig Topperfc179c62018-03-22 04:23:41 +00001503def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001504
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001505def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001506 let Latency = 6;
1507 let NumMicroOps = 4;
1508 let ResourceCycles = [1,2,1];
1509}
Craig Topperfc179c62018-03-22 04:23:41 +00001510def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1511 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001512
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001513def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001514 let Latency = 6;
1515 let NumMicroOps = 4;
1516 let ResourceCycles = [1,1,1,1];
1517}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001518def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001519
Craig Topper58afb4e2018-03-22 21:10:07 +00001520def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001521 let Latency = 6;
1522 let NumMicroOps = 4;
1523 let ResourceCycles = [1,1,1,1];
1524}
1525def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1526
1527def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1528 let Latency = 6;
1529 let NumMicroOps = 4;
1530 let ResourceCycles = [1,1,1,1];
1531}
Craig Topperfc179c62018-03-22 04:23:41 +00001532def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1533 "BTR(16|32|64)mi8",
1534 "BTS(16|32|64)mi8",
1535 "SAR(8|16|32|64)m1",
1536 "SAR(8|16|32|64)mi",
1537 "SHL(8|16|32|64)m1",
1538 "SHL(8|16|32|64)mi",
1539 "SHR(8|16|32|64)m1",
1540 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001541
1542def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1543 let Latency = 6;
1544 let NumMicroOps = 4;
1545 let ResourceCycles = [1,1,1,1];
1546}
Craig Topperfc179c62018-03-22 04:23:41 +00001547def: InstRW<[SKLWriteResGroup83], (instregex "ADD(8|16|32|64)mi",
1548 "ADD(8|16|32|64)mr",
1549 "AND(8|16|32|64)mi",
1550 "AND(8|16|32|64)mr",
1551 "DEC(8|16|32|64)m",
1552 "INC(8|16|32|64)m",
1553 "NEG(8|16|32|64)m",
1554 "NOT(8|16|32|64)m",
1555 "OR(8|16|32|64)mi",
1556 "OR(8|16|32|64)mr",
1557 "POP(16|32|64)rmm",
1558 "PUSH(16|32|64)rmm",
1559 "SUB(8|16|32|64)mi",
1560 "SUB(8|16|32|64)mr",
1561 "XOR(8|16|32|64)mi",
1562 "XOR(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001563
1564def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001565 let Latency = 6;
1566 let NumMicroOps = 6;
1567 let ResourceCycles = [1,5];
1568}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001569def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001570
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001571def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1572 let Latency = 7;
1573 let NumMicroOps = 1;
1574 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001575}
Craig Topperfc179c62018-03-22 04:23:41 +00001576def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1577 "LD_F64m",
1578 "LD_F80m",
1579 "VBROADCASTF128",
1580 "VBROADCASTI128",
1581 "VBROADCASTSDYrm",
1582 "VBROADCASTSSYrm",
1583 "VLDDQUYrm",
1584 "VMOVAPDYrm",
1585 "VMOVAPSYrm",
1586 "VMOVDDUPYrm",
1587 "VMOVDQAYrm",
1588 "VMOVDQUYrm",
1589 "VMOVNTDQAYrm",
1590 "VMOVSHDUPYrm",
1591 "VMOVSLDUPYrm",
1592 "VMOVUPDYrm",
1593 "VMOVUPSYrm",
1594 "VPBROADCASTDYrm",
1595 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001596
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001597def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001598 let Latency = 7;
1599 let NumMicroOps = 2;
1600 let ResourceCycles = [1,1];
1601}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001602def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001603
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001604def SKLWriteResGroup87 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001605 let Latency = 7;
1606 let NumMicroOps = 2;
1607 let ResourceCycles = [1,1];
1608}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001609def: InstRW<[SKLWriteResGroup87], (instregex "(V?)COMISDrm",
1610 "(V?)COMISSrm",
1611 "(V?)UCOMISDrm",
1612 "(V?)UCOMISSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001613
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001614def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1615 let Latency = 7;
1616 let NumMicroOps = 2;
1617 let ResourceCycles = [1,1];
1618}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001619def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1620 "(V?)PACKSSDWrm",
1621 "(V?)PACKSSWBrm",
1622 "(V?)PACKUSDWrm",
1623 "(V?)PACKUSWBrm",
1624 "(V?)PALIGNRrmi",
1625 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001626 "VPBROADCASTBrm",
1627 "VPBROADCASTWrm",
1628 "VPERMILPDmi",
1629 "VPERMILPDrm",
1630 "VPERMILPSmi",
1631 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001632 "(V?)PSHUFBrm",
1633 "(V?)PSHUFDmi",
1634 "(V?)PSHUFHWmi",
1635 "(V?)PSHUFLWmi",
1636 "(V?)PUNPCKHBWrm",
1637 "(V?)PUNPCKHDQrm",
1638 "(V?)PUNPCKHQDQrm",
1639 "(V?)PUNPCKHWDrm",
1640 "(V?)PUNPCKLBWrm",
1641 "(V?)PUNPCKLDQrm",
1642 "(V?)PUNPCKLQDQrm",
1643 "(V?)PUNPCKLWDrm",
1644 "(V?)SHUFPDrmi",
1645 "(V?)SHUFPSrmi",
1646 "(V?)UNPCKHPDrm",
1647 "(V?)UNPCKHPSrm",
1648 "(V?)UNPCKLPDrm",
1649 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001650
Craig Topper58afb4e2018-03-22 21:10:07 +00001651def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001652 let Latency = 7;
1653 let NumMicroOps = 2;
1654 let ResourceCycles = [1,1];
1655}
Craig Topperfc179c62018-03-22 04:23:41 +00001656def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1657 "VCVTPD2PSYrr",
1658 "VCVTPH2PSYrr",
1659 "VCVTPS2PDYrr",
1660 "VCVTPS2PHYrr",
1661 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001662
1663def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1664 let Latency = 7;
1665 let NumMicroOps = 2;
1666 let ResourceCycles = [1,1];
1667}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001668def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1669 "(V?)PABSDrm",
1670 "(V?)PABSWrm",
1671 "(V?)PADDSBrm",
1672 "(V?)PADDSWrm",
1673 "(V?)PADDUSBrm",
1674 "(V?)PADDUSWrm",
1675 "(V?)PAVGBrm",
1676 "(V?)PAVGWrm",
1677 "(V?)PCMPEQBrm",
1678 "(V?)PCMPEQDrm",
1679 "(V?)PCMPEQQrm",
1680 "(V?)PCMPEQWrm",
1681 "(V?)PCMPGTBrm",
1682 "(V?)PCMPGTDrm",
1683 "(V?)PCMPGTWrm",
1684 "(V?)PMAXSBrm",
1685 "(V?)PMAXSDrm",
1686 "(V?)PMAXSWrm",
1687 "(V?)PMAXUBrm",
1688 "(V?)PMAXUDrm",
1689 "(V?)PMAXUWrm",
1690 "(V?)PMINSBrm",
1691 "(V?)PMINSDrm",
1692 "(V?)PMINSWrm",
1693 "(V?)PMINUBrm",
1694 "(V?)PMINUDrm",
1695 "(V?)PMINUWrm",
1696 "(V?)PSIGNBrm",
1697 "(V?)PSIGNDrm",
1698 "(V?)PSIGNWrm",
1699 "(V?)PSLLDrm",
1700 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001701 "VPSLLVDrm",
1702 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001703 "(V?)PSLLWrm",
1704 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001705 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001706 "(V?)PSRAWrm",
1707 "(V?)PSRLDrm",
1708 "(V?)PSRLQrm",
1709 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001710 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001711 "(V?)PSRLWrm",
1712 "(V?)PSUBSBrm",
1713 "(V?)PSUBSWrm",
1714 "(V?)PSUBUSBrm",
1715 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001716
1717def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1718 let Latency = 7;
1719 let NumMicroOps = 2;
1720 let ResourceCycles = [1,1];
1721}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001722def: InstRW<[SKLWriteResGroup91], (instregex "(V?)ANDNPDrm",
1723 "(V?)ANDNPSrm",
1724 "(V?)ANDPDrm",
1725 "(V?)ANDPSrm",
1726 "(V?)BLENDPDrmi",
1727 "(V?)BLENDPSrmi",
1728 "(V?)INSERTF128rm",
1729 "(V?)INSERTI128rm",
1730 "(V?)MASKMOVPDrm",
1731 "(V?)MASKMOVPSrm",
1732 "(V?)ORPDrm",
1733 "(V?)ORPSrm",
1734 "(V?)PADDBrm",
1735 "(V?)PADDDrm",
1736 "(V?)PADDQrm",
1737 "(V?)PADDWrm",
1738 "(V?)PANDNrm",
1739 "(V?)PANDrm",
1740 "(V?)PBLENDDrmi",
1741 "(V?)PMASKMOVDrm",
1742 "(V?)PMASKMOVQrm",
1743 "(V?)PORrm",
1744 "(V?)PSUBBrm",
1745 "(V?)PSUBDrm",
1746 "(V?)PSUBQrm",
1747 "(V?)PSUBWrm",
1748 "(V?)PXORrm",
1749 "(V?)XORPDrm",
1750 "(V?)XORPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001751
1752def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1753 let Latency = 7;
1754 let NumMicroOps = 3;
1755 let ResourceCycles = [2,1];
1756}
Craig Topperfc179c62018-03-22 04:23:41 +00001757def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1758 "MMX_PACKSSWBirm",
1759 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001760
1761def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1762 let Latency = 7;
1763 let NumMicroOps = 3;
1764 let ResourceCycles = [1,2];
1765}
Craig Topperf4cd9082018-01-19 05:47:32 +00001766def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001767
1768def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1769 let Latency = 7;
1770 let NumMicroOps = 3;
1771 let ResourceCycles = [1,2];
1772}
Craig Topperfc179c62018-03-22 04:23:41 +00001773def: InstRW<[SKLWriteResGroup94], (instregex "LEAVE64",
1774 "SCASB",
1775 "SCASL",
1776 "SCASQ",
1777 "SCASW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001778
Craig Topper58afb4e2018-03-22 21:10:07 +00001779def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001780 let Latency = 7;
1781 let NumMicroOps = 3;
1782 let ResourceCycles = [1,1,1];
1783}
Craig Topperfc179c62018-03-22 04:23:41 +00001784def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1785 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001786
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001787def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001788 let Latency = 7;
1789 let NumMicroOps = 3;
1790 let ResourceCycles = [1,1,1];
1791}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001792def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001793
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001794def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001795 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001796 let NumMicroOps = 3;
1797 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001798}
Craig Topperfc179c62018-03-22 04:23:41 +00001799def: InstRW<[SKLWriteResGroup97], (instregex "(V?)LDMXCSR")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001800
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001801def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001802 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001803 let NumMicroOps = 3;
1804 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001805}
Craig Topperfc179c62018-03-22 04:23:41 +00001806def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1807 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001808
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001809def SKLWriteResGroup99 : SchedWriteRes<[SKLPort23,SKLPort06,SKLPort15]> {
1810 let Latency = 7;
1811 let NumMicroOps = 3;
1812 let ResourceCycles = [1,1,1];
1813}
Craig Toppera42a2ba2017-12-16 18:35:31 +00001814def: InstRW<[SKLWriteResGroup99], (instregex "BEXTR(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001815
1816def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1817 let Latency = 7;
1818 let NumMicroOps = 5;
1819 let ResourceCycles = [1,1,1,2];
1820}
Craig Topperfc179c62018-03-22 04:23:41 +00001821def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1822 "ROL(8|16|32|64)mi",
1823 "ROR(8|16|32|64)m1",
1824 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001825
1826def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1827 let Latency = 7;
1828 let NumMicroOps = 5;
1829 let ResourceCycles = [1,1,1,2];
1830}
Craig Topper13a16502018-03-19 00:56:09 +00001831def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001832
1833def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1834 let Latency = 7;
1835 let NumMicroOps = 5;
1836 let ResourceCycles = [1,1,1,1,1];
1837}
Craig Topperfc179c62018-03-22 04:23:41 +00001838def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1839 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001840
1841def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001842 let Latency = 7;
1843 let NumMicroOps = 7;
1844 let ResourceCycles = [1,3,1,2];
1845}
Craig Topper2d451e72018-03-18 08:38:06 +00001846def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001847
Craig Topper58afb4e2018-03-22 21:10:07 +00001848def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001849 let Latency = 8;
1850 let NumMicroOps = 2;
1851 let ResourceCycles = [2];
1852}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001853def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1854 "(V?)ROUNDPS(Y?)r",
1855 "(V?)ROUNDSDr",
1856 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001857
Craig Topperd25f1ac2018-03-20 23:39:48 +00001858def SKLWriteResGroup105_2 : SchedWriteRes<[SKLPort01]> {
1859 let Latency = 10;
1860 let NumMicroOps = 2;
1861 let ResourceCycles = [2];
1862}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001863def: InstRW<[SKLWriteResGroup105_2], (instregex "(V?)PMULLD(Y?)rr")>;
Craig Topperd25f1ac2018-03-20 23:39:48 +00001864
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001865def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001866 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001867 let NumMicroOps = 2;
1868 let ResourceCycles = [1,1];
1869}
Craig Topperfc179c62018-03-22 04:23:41 +00001870def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1871 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001872
1873def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1874 let Latency = 8;
1875 let NumMicroOps = 2;
1876 let ResourceCycles = [1,1];
1877}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001878def: InstRW<[SKLWriteResGroup107], (instrs IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001879def: InstRW<[SKLWriteResGroup107], (instrs IMUL8m, MUL8m)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001880def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1881 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001882
1883def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001884 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001885 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001886 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001887}
Craig Topperb369cdb2018-01-25 06:57:42 +00001888def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001889
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001890def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001891 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001892 let NumMicroOps = 5;
1893}
Craig Topperfc179c62018-03-22 04:23:41 +00001894def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001895
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001896def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1897 let Latency = 8;
1898 let NumMicroOps = 2;
1899 let ResourceCycles = [1,1];
1900}
Craig Topperfc179c62018-03-22 04:23:41 +00001901def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1902 "FCOM64m",
1903 "FCOMP32m",
1904 "FCOMP64m",
1905 "MMX_PSADBWirm",
1906 "VPACKSSDWYrm",
1907 "VPACKSSWBYrm",
1908 "VPACKUSDWYrm",
1909 "VPACKUSWBYrm",
1910 "VPALIGNRYrmi",
1911 "VPBLENDWYrmi",
1912 "VPBROADCASTBYrm",
1913 "VPBROADCASTWYrm",
1914 "VPERMILPDYmi",
1915 "VPERMILPDYrm",
1916 "VPERMILPSYmi",
1917 "VPERMILPSYrm",
1918 "VPMOVSXBDYrm",
1919 "VPMOVSXBQYrm",
1920 "VPMOVSXWQYrm",
1921 "VPSHUFBYrm",
1922 "VPSHUFDYmi",
1923 "VPSHUFHWYmi",
1924 "VPSHUFLWYmi",
1925 "VPUNPCKHBWYrm",
1926 "VPUNPCKHDQYrm",
1927 "VPUNPCKHQDQYrm",
1928 "VPUNPCKHWDYrm",
1929 "VPUNPCKLBWYrm",
1930 "VPUNPCKLDQYrm",
1931 "VPUNPCKLQDQYrm",
1932 "VPUNPCKLWDYrm",
1933 "VSHUFPDYrmi",
1934 "VSHUFPSYrmi",
1935 "VUNPCKHPDYrm",
1936 "VUNPCKHPSYrm",
1937 "VUNPCKLPDYrm",
1938 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001939
1940def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1941 let Latency = 8;
1942 let NumMicroOps = 2;
1943 let ResourceCycles = [1,1];
1944}
Craig Topperfc179c62018-03-22 04:23:41 +00001945def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1946 "VPABSDYrm",
1947 "VPABSWYrm",
1948 "VPADDSBYrm",
1949 "VPADDSWYrm",
1950 "VPADDUSBYrm",
1951 "VPADDUSWYrm",
1952 "VPAVGBYrm",
1953 "VPAVGWYrm",
1954 "VPCMPEQBYrm",
1955 "VPCMPEQDYrm",
1956 "VPCMPEQQYrm",
1957 "VPCMPEQWYrm",
1958 "VPCMPGTBYrm",
1959 "VPCMPGTDYrm",
1960 "VPCMPGTWYrm",
1961 "VPMAXSBYrm",
1962 "VPMAXSDYrm",
1963 "VPMAXSWYrm",
1964 "VPMAXUBYrm",
1965 "VPMAXUDYrm",
1966 "VPMAXUWYrm",
1967 "VPMINSBYrm",
1968 "VPMINSDYrm",
1969 "VPMINSWYrm",
1970 "VPMINUBYrm",
1971 "VPMINUDYrm",
1972 "VPMINUWYrm",
1973 "VPSIGNBYrm",
1974 "VPSIGNDYrm",
1975 "VPSIGNWYrm",
1976 "VPSLLDYrm",
1977 "VPSLLQYrm",
1978 "VPSLLVDYrm",
1979 "VPSLLVQYrm",
1980 "VPSLLWYrm",
1981 "VPSRADYrm",
1982 "VPSRAVDYrm",
1983 "VPSRAWYrm",
1984 "VPSRLDYrm",
1985 "VPSRLQYrm",
1986 "VPSRLVDYrm",
1987 "VPSRLVQYrm",
1988 "VPSRLWYrm",
1989 "VPSUBSBYrm",
1990 "VPSUBSWYrm",
1991 "VPSUBUSBYrm",
1992 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001993
1994def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1995 let Latency = 8;
1996 let NumMicroOps = 2;
1997 let ResourceCycles = [1,1];
1998}
Craig Topperfc179c62018-03-22 04:23:41 +00001999def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
2000 "VANDNPSYrm",
2001 "VANDPDYrm",
2002 "VANDPSYrm",
2003 "VBLENDPDYrmi",
2004 "VBLENDPSYrmi",
2005 "VMASKMOVPDYrm",
2006 "VMASKMOVPSYrm",
2007 "VORPDYrm",
2008 "VORPSYrm",
2009 "VPADDBYrm",
2010 "VPADDDYrm",
2011 "VPADDQYrm",
2012 "VPADDWYrm",
2013 "VPANDNYrm",
2014 "VPANDYrm",
2015 "VPBLENDDYrmi",
2016 "VPMASKMOVDYrm",
2017 "VPMASKMOVQYrm",
2018 "VPORYrm",
2019 "VPSUBBYrm",
2020 "VPSUBDYrm",
2021 "VPSUBQYrm",
2022 "VPSUBWYrm",
2023 "VPXORYrm",
2024 "VXORPDYrm",
2025 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002026
2027def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002028 let Latency = 8;
2029 let NumMicroOps = 3;
2030 let ResourceCycles = [1,2];
2031}
Craig Topperfc179c62018-03-22 04:23:41 +00002032def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
2033 "BLENDVPSrm0",
2034 "PBLENDVBrm0",
2035 "VBLENDVPDrm",
2036 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002037 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002038
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002039def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2040 let Latency = 8;
2041 let NumMicroOps = 4;
2042 let ResourceCycles = [1,2,1];
2043}
Craig Topperfc179c62018-03-22 04:23:41 +00002044def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PHADDSWrm",
2045 "MMX_PHSUBSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002046
2047def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
2048 let Latency = 8;
2049 let NumMicroOps = 4;
2050 let ResourceCycles = [2,1,1];
2051}
Craig Topperfc179c62018-03-22 04:23:41 +00002052def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHADDDrm",
2053 "MMX_PHADDWrm",
2054 "MMX_PHSUBDrm",
2055 "MMX_PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002056
Craig Topper58afb4e2018-03-22 21:10:07 +00002057def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002058 let Latency = 8;
2059 let NumMicroOps = 4;
2060 let ResourceCycles = [1,1,1,1];
2061}
2062def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
2063
2064def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
2065 let Latency = 8;
2066 let NumMicroOps = 5;
2067 let ResourceCycles = [1,1,3];
2068}
Craig Topper13a16502018-03-19 00:56:09 +00002069def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002070
2071def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2072 let Latency = 8;
2073 let NumMicroOps = 5;
2074 let ResourceCycles = [1,1,1,2];
2075}
Craig Topperfc179c62018-03-22 04:23:41 +00002076def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
2077 "RCL(8|16|32|64)mi",
2078 "RCR(8|16|32|64)m1",
2079 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002080
2081def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2082 let Latency = 8;
2083 let NumMicroOps = 6;
2084 let ResourceCycles = [1,1,1,3];
2085}
Craig Topperfc179c62018-03-22 04:23:41 +00002086def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
2087 "SAR(8|16|32|64)mCL",
2088 "SHL(8|16|32|64)mCL",
2089 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002090
2091def SKLWriteResGroup118 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
2092 let Latency = 8;
2093 let NumMicroOps = 6;
2094 let ResourceCycles = [1,1,1,3];
2095}
Craig Topper13a16502018-03-19 00:56:09 +00002096def: InstRW<[SKLWriteResGroup118], (instregex "ADC(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002097
2098def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2099 let Latency = 8;
2100 let NumMicroOps = 6;
2101 let ResourceCycles = [1,1,1,2,1];
2102}
Craig Topperfc179c62018-03-22 04:23:41 +00002103def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mr",
2104 "CMPXCHG(8|16|32|64)rm",
2105 "SBB(8|16|32|64)mi",
2106 "SBB(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002107
2108def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2109 let Latency = 9;
2110 let NumMicroOps = 2;
2111 let ResourceCycles = [1,1];
2112}
Craig Topperfc179c62018-03-22 04:23:41 +00002113def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
2114 "MMX_PMADDUBSWrm",
2115 "MMX_PMADDWDirm",
2116 "MMX_PMULHRSWrm",
2117 "MMX_PMULHUWirm",
2118 "MMX_PMULHWirm",
2119 "MMX_PMULLWirm",
2120 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002121 "(V?)RCPSSm",
2122 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002123 "VTESTPDYrm",
2124 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002125
2126def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2127 let Latency = 9;
2128 let NumMicroOps = 2;
2129 let ResourceCycles = [1,1];
2130}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002131def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002132 "VPMOVSXBWYrm",
2133 "VPMOVSXDQYrm",
2134 "VPMOVSXWDYrm",
2135 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002136 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002137
2138def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2139 let Latency = 9;
2140 let NumMicroOps = 2;
2141 let ResourceCycles = [1,1];
2142}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002143def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
2144 "(V?)ADDSSrm",
2145 "(V?)CMPSDrm",
2146 "(V?)CMPSSrm",
2147 "(V?)MAX(C?)SDrm",
2148 "(V?)MAX(C?)SSrm",
2149 "(V?)MIN(C?)SDrm",
2150 "(V?)MIN(C?)SSrm",
2151 "(V?)MULSDrm",
2152 "(V?)MULSSrm",
2153 "(V?)SUBSDrm",
2154 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00002155def: InstRW<[SKLWriteResGroup122],
2156 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002157
Craig Topper58afb4e2018-03-22 21:10:07 +00002158def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002159 let Latency = 9;
2160 let NumMicroOps = 2;
2161 let ResourceCycles = [1,1];
2162}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002163def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002164 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002165 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002166 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002167
Craig Topper58afb4e2018-03-22 21:10:07 +00002168def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002169 let Latency = 9;
2170 let NumMicroOps = 3;
2171 let ResourceCycles = [1,2];
2172}
Craig Topperfc179c62018-03-22 04:23:41 +00002173def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002174
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002175def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2176 let Latency = 9;
2177 let NumMicroOps = 3;
2178 let ResourceCycles = [1,2];
2179}
Craig Topperfc179c62018-03-22 04:23:41 +00002180def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
2181 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002182
2183def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2184 let Latency = 9;
2185 let NumMicroOps = 3;
2186 let ResourceCycles = [1,1,1];
2187}
Craig Topperfc179c62018-03-22 04:23:41 +00002188def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002189
2190def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
2191 let Latency = 9;
2192 let NumMicroOps = 3;
2193 let ResourceCycles = [1,1,1];
2194}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002195def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002196
2197def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002198 let Latency = 9;
2199 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002200 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002201}
Craig Topperfc179c62018-03-22 04:23:41 +00002202def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
2203 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002204
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002205def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2206 let Latency = 9;
2207 let NumMicroOps = 4;
2208 let ResourceCycles = [2,1,1];
2209}
Craig Topperfc179c62018-03-22 04:23:41 +00002210def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
2211 "(V?)PHADDWrm",
2212 "(V?)PHSUBDrm",
2213 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002214
2215def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
2216 let Latency = 9;
2217 let NumMicroOps = 4;
2218 let ResourceCycles = [1,1,1,1];
2219}
Craig Topperfc179c62018-03-22 04:23:41 +00002220def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
2221 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002222
2223def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2224 let Latency = 9;
2225 let NumMicroOps = 5;
2226 let ResourceCycles = [1,2,1,1];
2227}
Craig Topperfc179c62018-03-22 04:23:41 +00002228def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
2229 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002230
2231def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2232 let Latency = 10;
2233 let NumMicroOps = 2;
2234 let ResourceCycles = [1,1];
2235}
Simon Pilgrim7684e052018-03-22 13:18:08 +00002236def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002237 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002238
2239def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2240 let Latency = 10;
2241 let NumMicroOps = 2;
2242 let ResourceCycles = [1,1];
2243}
Craig Topperfc179c62018-03-22 04:23:41 +00002244def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
2245 "ADD_F64m",
2246 "ILD_F16m",
2247 "ILD_F32m",
2248 "ILD_F64m",
2249 "SUBR_F32m",
2250 "SUBR_F64m",
2251 "SUB_F32m",
2252 "SUB_F64m",
2253 "VPCMPGTQYrm",
2254 "VPERM2F128rm",
2255 "VPERM2I128rm",
2256 "VPERMDYrm",
2257 "VPERMPDYmi",
2258 "VPERMPSYrm",
2259 "VPERMQYmi",
2260 "VPMOVZXBDYrm",
2261 "VPMOVZXBQYrm",
2262 "VPMOVZXBWYrm",
2263 "VPMOVZXDQYrm",
2264 "VPMOVZXWQYrm",
2265 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002266
2267def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2268 let Latency = 10;
2269 let NumMicroOps = 2;
2270 let ResourceCycles = [1,1];
2271}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002272def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
2273 "(V?)ADDPSrm",
2274 "(V?)ADDSUBPDrm",
2275 "(V?)ADDSUBPSrm",
2276 "(V?)CMPPDrmi",
2277 "(V?)CMPPSrmi",
2278 "(V?)CVTDQ2PSrm",
2279 "(V?)CVTPH2PSYrm",
2280 "(V?)CVTPS2DQrm",
2281 "(V?)CVTSS2SDrm",
2282 "(V?)CVTTPS2DQrm",
2283 "(V?)MAX(C?)PDrm",
2284 "(V?)MAX(C?)PSrm",
2285 "(V?)MIN(C?)PDrm",
2286 "(V?)MIN(C?)PSrm",
2287 "(V?)MULPDrm",
2288 "(V?)MULPSrm",
2289 "(V?)PHMINPOSUWrm",
2290 "(V?)PMADDUBSWrm",
2291 "(V?)PMADDWDrm",
2292 "(V?)PMULDQrm",
2293 "(V?)PMULHRSWrm",
2294 "(V?)PMULHUWrm",
2295 "(V?)PMULHWrm",
2296 "(V?)PMULLWrm",
2297 "(V?)PMULUDQrm",
2298 "(V?)SUBPDrm",
2299 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00002300def: InstRW<[SKLWriteResGroup134],
2301 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002302
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002303def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2304 let Latency = 10;
2305 let NumMicroOps = 3;
2306 let ResourceCycles = [2,1];
2307}
Craig Topperfc179c62018-03-22 04:23:41 +00002308def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002309
2310def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2311 let Latency = 10;
2312 let NumMicroOps = 3;
2313 let ResourceCycles = [1,1,1];
2314}
Craig Topperfc179c62018-03-22 04:23:41 +00002315def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2316 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002317
Craig Topper58afb4e2018-03-22 21:10:07 +00002318def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002319 let Latency = 10;
2320 let NumMicroOps = 3;
2321 let ResourceCycles = [1,1,1];
2322}
Craig Topperfc179c62018-03-22 04:23:41 +00002323def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002324
2325def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002326 let Latency = 10;
2327 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002328 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002329}
Craig Topperfc179c62018-03-22 04:23:41 +00002330def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2331 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002332
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002333def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2334 let Latency = 10;
2335 let NumMicroOps = 4;
2336 let ResourceCycles = [2,1,1];
2337}
Craig Topperfc179c62018-03-22 04:23:41 +00002338def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2339 "VPHADDWYrm",
2340 "VPHSUBDYrm",
2341 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002342
2343def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002344 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002345 let NumMicroOps = 4;
2346 let ResourceCycles = [1,1,1,1];
2347}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002348def: InstRW<[SKLWriteResGroup142], (instrs IMUL32rm, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002349
2350def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2351 let Latency = 10;
2352 let NumMicroOps = 8;
2353 let ResourceCycles = [1,1,1,1,1,3];
2354}
Craig Topper13a16502018-03-19 00:56:09 +00002355def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002356
2357def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002358 let Latency = 10;
2359 let NumMicroOps = 10;
2360 let ResourceCycles = [9,1];
2361}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002362def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002363
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002364def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002365 let Latency = 11;
2366 let NumMicroOps = 1;
2367 let ResourceCycles = [1];
2368}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002369def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPS(Y?)rr",
2370 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002371
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002372def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002373 let Latency = 11;
2374 let NumMicroOps = 2;
2375 let ResourceCycles = [1,1];
2376}
Craig Topperfc179c62018-03-22 04:23:41 +00002377def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2378 "MUL_F64m",
2379 "VRCPPSYm",
2380 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002381
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002382def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2383 let Latency = 11;
2384 let NumMicroOps = 2;
2385 let ResourceCycles = [1,1];
2386}
Craig Topperfc179c62018-03-22 04:23:41 +00002387def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2388 "VADDPSYrm",
2389 "VADDSUBPDYrm",
2390 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002391 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002392 "VCMPPSYrmi",
2393 "VCVTDQ2PSYrm",
2394 "VCVTPS2DQYrm",
2395 "VCVTPS2PDYrm",
2396 "VCVTTPS2DQYrm",
2397 "VMAX(C?)PDYrm",
2398 "VMAX(C?)PSYrm",
2399 "VMIN(C?)PDYrm",
2400 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002401 "VMULPDYrm",
2402 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002403 "VPMADDUBSWYrm",
2404 "VPMADDWDYrm",
2405 "VPMULDQYrm",
2406 "VPMULHRSWYrm",
2407 "VPMULHUWYrm",
2408 "VPMULHWYrm",
2409 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002410 "VPMULUDQYrm",
2411 "VSUBPDYrm",
2412 "VSUBPSYrm")>;
2413def: InstRW<[SKLWriteResGroup147],
2414 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002415
2416def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2417 let Latency = 11;
2418 let NumMicroOps = 3;
2419 let ResourceCycles = [2,1];
2420}
Craig Topperfc179c62018-03-22 04:23:41 +00002421def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2422 "FICOM32m",
2423 "FICOMP16m",
2424 "FICOMP32m",
2425 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002426
2427def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2428 let Latency = 11;
2429 let NumMicroOps = 3;
2430 let ResourceCycles = [1,1,1];
2431}
Craig Topperfc179c62018-03-22 04:23:41 +00002432def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002433
Craig Topper58afb4e2018-03-22 21:10:07 +00002434def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002435 let Latency = 11;
2436 let NumMicroOps = 3;
2437 let ResourceCycles = [1,1,1];
2438}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002439def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2440 "(V?)CVTSD2SIrm",
2441 "(V?)CVTSS2SI64rm",
2442 "(V?)CVTSS2SIrm",
2443 "(V?)CVTTSD2SI64rm",
2444 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002445 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002446 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002447
Craig Topper58afb4e2018-03-22 21:10:07 +00002448def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002449 let Latency = 11;
2450 let NumMicroOps = 3;
2451 let ResourceCycles = [1,1,1];
2452}
Craig Topperfc179c62018-03-22 04:23:41 +00002453def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2454 "CVTPD2PSrm",
2455 "CVTTPD2DQrm",
2456 "MMX_CVTPD2PIirm",
2457 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002458
2459def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2460 let Latency = 11;
2461 let NumMicroOps = 6;
2462 let ResourceCycles = [1,1,1,2,1];
2463}
Craig Topperfc179c62018-03-22 04:23:41 +00002464def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2465 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002466
2467def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002468 let Latency = 11;
2469 let NumMicroOps = 7;
2470 let ResourceCycles = [2,3,2];
2471}
Craig Topperfc179c62018-03-22 04:23:41 +00002472def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2473 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002474
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002475def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476 let Latency = 11;
2477 let NumMicroOps = 9;
2478 let ResourceCycles = [1,5,1,2];
2479}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002480def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002481
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002482def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002483 let Latency = 11;
2484 let NumMicroOps = 11;
2485 let ResourceCycles = [2,9];
2486}
Craig Topperfc179c62018-03-22 04:23:41 +00002487def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002488
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002489def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002490 let Latency = 12;
2491 let NumMicroOps = 1;
2492 let ResourceCycles = [1];
2493}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002494def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPS(Y?)r",
2495 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002496
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002497def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2498 let Latency = 12;
2499 let NumMicroOps = 4;
2500 let ResourceCycles = [2,1,1];
2501}
Craig Topperfc179c62018-03-22 04:23:41 +00002502def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2503 "(V?)HADDPSrm",
2504 "(V?)HSUBPDrm",
2505 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002506
Craig Topper58afb4e2018-03-22 21:10:07 +00002507def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002508 let Latency = 12;
2509 let NumMicroOps = 4;
2510 let ResourceCycles = [1,1,1,1];
2511}
2512def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2513
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002514def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002515 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002516 let NumMicroOps = 3;
2517 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002518}
Craig Topperfc179c62018-03-22 04:23:41 +00002519def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2520 "ADD_FI32m",
2521 "SUBR_FI16m",
2522 "SUBR_FI32m",
2523 "SUB_FI16m",
2524 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002525
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002526def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2527 let Latency = 13;
2528 let NumMicroOps = 3;
2529 let ResourceCycles = [1,1,1];
2530}
2531def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2532
Craig Topper58afb4e2018-03-22 21:10:07 +00002533def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002534 let Latency = 13;
2535 let NumMicroOps = 4;
2536 let ResourceCycles = [1,3];
2537}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002538def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002539
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002540def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002541 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002542 let NumMicroOps = 4;
2543 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002544}
Craig Topperfc179c62018-03-22 04:23:41 +00002545def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2546 "VHADDPSYrm",
2547 "VHSUBPDYrm",
2548 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002549
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002550def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002551 let Latency = 14;
2552 let NumMicroOps = 1;
2553 let ResourceCycles = [1];
2554}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002555def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPD(Y?)rr",
2556 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002557
Craig Topper58afb4e2018-03-22 21:10:07 +00002558def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002559 let Latency = 14;
2560 let NumMicroOps = 3;
2561 let ResourceCycles = [1,2];
2562}
Craig Topperfc179c62018-03-22 04:23:41 +00002563def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2564def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2565def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2566def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002567
Craig Topperd25f1ac2018-03-20 23:39:48 +00002568def SKLWriteResGroup168_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2569 let Latency = 16;
2570 let NumMicroOps = 3;
2571 let ResourceCycles = [1,2];
2572}
Craig Topperfc179c62018-03-22 04:23:41 +00002573def: InstRW<[SKLWriteResGroup168_2], (instregex "(V?)PMULLDrm")>;
Craig Topperd25f1ac2018-03-20 23:39:48 +00002574
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002575def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2576 let Latency = 14;
2577 let NumMicroOps = 3;
2578 let ResourceCycles = [1,1,1];
2579}
Craig Topperfc179c62018-03-22 04:23:41 +00002580def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2581 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002582
2583def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002584 let Latency = 14;
2585 let NumMicroOps = 10;
2586 let ResourceCycles = [2,4,1,3];
2587}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002588def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002589
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002590def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002591 let Latency = 15;
2592 let NumMicroOps = 1;
2593 let ResourceCycles = [1];
2594}
Craig Topperfc179c62018-03-22 04:23:41 +00002595def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2596 "DIVR_FST0r",
2597 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002598
Craig Topper58afb4e2018-03-22 21:10:07 +00002599def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002600 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002601 let NumMicroOps = 3;
2602 let ResourceCycles = [1,2];
2603}
Craig Topper40d3b322018-03-22 21:55:20 +00002604def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2605 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002606
Craig Topperd25f1ac2018-03-20 23:39:48 +00002607def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2608 let Latency = 17;
2609 let NumMicroOps = 3;
2610 let ResourceCycles = [1,2];
2611}
2612def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2613
Craig Topper58afb4e2018-03-22 21:10:07 +00002614def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002615 let Latency = 15;
2616 let NumMicroOps = 4;
2617 let ResourceCycles = [1,1,2];
2618}
Craig Topperfc179c62018-03-22 04:23:41 +00002619def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002620
2621def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2622 let Latency = 15;
2623 let NumMicroOps = 10;
2624 let ResourceCycles = [1,1,1,5,1,1];
2625}
Craig Topper13a16502018-03-19 00:56:09 +00002626def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002627
2628def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2629 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002630 let NumMicroOps = 2;
2631 let ResourceCycles = [1,1];
2632}
Craig Topperfc179c62018-03-22 04:23:41 +00002633def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002634
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002635def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2636 let Latency = 16;
2637 let NumMicroOps = 14;
2638 let ResourceCycles = [1,1,1,4,2,5];
2639}
2640def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2641
2642def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002643 let Latency = 16;
2644 let NumMicroOps = 16;
2645 let ResourceCycles = [16];
2646}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002647def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002648
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002649def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2650 let Latency = 17;
2651 let NumMicroOps = 2;
2652 let ResourceCycles = [1,1];
2653}
Craig Topperfc179c62018-03-22 04:23:41 +00002654def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002655 "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002656
2657def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002658 let Latency = 17;
2659 let NumMicroOps = 15;
2660 let ResourceCycles = [2,1,2,4,2,4];
2661}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002662def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002663
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002664def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002665 let Latency = 18;
2666 let NumMicroOps = 1;
2667 let ResourceCycles = [1];
2668}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002669def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPD(Y?)r",
2670 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002671
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002672def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002673 let Latency = 18;
2674 let NumMicroOps = 2;
2675 let ResourceCycles = [1,1];
2676}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002677def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm",
2678 "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002679
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002680def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002681 let Latency = 18;
2682 let NumMicroOps = 8;
2683 let ResourceCycles = [1,1,1,5];
2684}
Craig Topperfc179c62018-03-22 04:23:41 +00002685def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002686
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002687def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002688 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002689 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002690 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002691}
Craig Topper13a16502018-03-19 00:56:09 +00002692def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002693
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002694def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2695 let Latency = 19;
2696 let NumMicroOps = 2;
2697 let ResourceCycles = [1,1];
2698}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002699def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002700 "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002701
Craig Topper58afb4e2018-03-22 21:10:07 +00002702def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002703 let Latency = 19;
2704 let NumMicroOps = 5;
2705 let ResourceCycles = [1,1,3];
2706}
Craig Topperfc179c62018-03-22 04:23:41 +00002707def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002708
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002709def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002710 let Latency = 20;
2711 let NumMicroOps = 1;
2712 let ResourceCycles = [1];
2713}
Craig Topperfc179c62018-03-22 04:23:41 +00002714def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2715 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002716 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002717
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002718def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002719 let Latency = 20;
2720 let NumMicroOps = 2;
2721 let ResourceCycles = [1,1];
2722}
Craig Topperfc179c62018-03-22 04:23:41 +00002723def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002724
Craig Topper58afb4e2018-03-22 21:10:07 +00002725def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002726 let Latency = 20;
2727 let NumMicroOps = 5;
2728 let ResourceCycles = [1,1,3];
2729}
2730def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2731
2732def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2733 let Latency = 20;
2734 let NumMicroOps = 8;
2735 let ResourceCycles = [1,1,1,1,1,1,2];
2736}
Craig Topperfc179c62018-03-22 04:23:41 +00002737def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2738 "INSL",
2739 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002740
2741def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002742 let Latency = 20;
2743 let NumMicroOps = 10;
2744 let ResourceCycles = [1,2,7];
2745}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002746def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002747
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002748def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2749 let Latency = 21;
2750 let NumMicroOps = 2;
2751 let ResourceCycles = [1,1];
2752}
2753def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2754
2755def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2756 let Latency = 22;
2757 let NumMicroOps = 2;
2758 let ResourceCycles = [1,1];
2759}
Craig Topperfc179c62018-03-22 04:23:41 +00002760def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2761 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002762
2763def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2764 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002765 let NumMicroOps = 5;
2766 let ResourceCycles = [1,2,1,1];
2767}
Craig Topper17a31182017-12-16 18:35:29 +00002768def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2769 VGATHERDPDrm,
2770 VGATHERQPDrm,
2771 VGATHERQPSrm,
2772 VPGATHERDDrm,
2773 VPGATHERDQrm,
2774 VPGATHERQDrm,
2775 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002776
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002777def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2778 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002779 let NumMicroOps = 5;
2780 let ResourceCycles = [1,2,1,1];
2781}
Craig Topper17a31182017-12-16 18:35:29 +00002782def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2783 VGATHERQPDYrm,
2784 VGATHERQPSYrm,
2785 VPGATHERDDYrm,
2786 VPGATHERDQYrm,
2787 VPGATHERQDYrm,
2788 VPGATHERQQYrm,
2789 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002790
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002791def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002792 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002793 let NumMicroOps = 2;
2794 let ResourceCycles = [1,1];
2795}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002796def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002797
2798def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2799 let Latency = 23;
2800 let NumMicroOps = 19;
2801 let ResourceCycles = [2,1,4,1,1,4,6];
2802}
2803def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2804
2805def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2806 let Latency = 24;
2807 let NumMicroOps = 2;
2808 let ResourceCycles = [1,1];
2809}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002810def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002811
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002812def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2813 let Latency = 25;
2814 let NumMicroOps = 2;
2815 let ResourceCycles = [1,1];
2816}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002817def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002818
2819def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2820 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002821 let NumMicroOps = 3;
2822 let ResourceCycles = [1,1,1];
2823}
Craig Topperfc179c62018-03-22 04:23:41 +00002824def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2825 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002826
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002827def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2828 let Latency = 27;
2829 let NumMicroOps = 2;
2830 let ResourceCycles = [1,1];
2831}
Craig Topperfc179c62018-03-22 04:23:41 +00002832def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2833 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002834
2835def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2836 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002837 let NumMicroOps = 8;
2838 let ResourceCycles = [2,4,1,1];
2839}
Craig Topper13a16502018-03-19 00:56:09 +00002840def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002841
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002842def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002843 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002844 let NumMicroOps = 3;
2845 let ResourceCycles = [1,1,1];
2846}
Craig Topperfc179c62018-03-22 04:23:41 +00002847def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2848 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002849
2850def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2851 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002852 let NumMicroOps = 23;
2853 let ResourceCycles = [1,5,3,4,10];
2854}
Craig Topperfc179c62018-03-22 04:23:41 +00002855def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2856 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002857
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002858def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2859 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002860 let NumMicroOps = 23;
2861 let ResourceCycles = [1,5,2,1,4,10];
2862}
Craig Topperfc179c62018-03-22 04:23:41 +00002863def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2864 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002865
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002866def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2867 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002868 let NumMicroOps = 31;
2869 let ResourceCycles = [1,8,1,21];
2870}
Craig Topper391c6f92017-12-10 01:24:08 +00002871def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002872
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002873def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2874 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002875 let NumMicroOps = 18;
2876 let ResourceCycles = [1,1,2,3,1,1,1,8];
2877}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002878def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002879
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002880def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2881 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002882 let NumMicroOps = 39;
2883 let ResourceCycles = [1,10,1,1,26];
2884}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002885def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002886
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002887def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002888 let Latency = 42;
2889 let NumMicroOps = 22;
2890 let ResourceCycles = [2,20];
2891}
Craig Topper2d451e72018-03-18 08:38:06 +00002892def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002893
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002894def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2895 let Latency = 42;
2896 let NumMicroOps = 40;
2897 let ResourceCycles = [1,11,1,1,26];
2898}
Craig Topper391c6f92017-12-10 01:24:08 +00002899def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002900
2901def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2902 let Latency = 46;
2903 let NumMicroOps = 44;
2904 let ResourceCycles = [1,11,1,1,30];
2905}
2906def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2907
2908def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2909 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002910 let NumMicroOps = 64;
2911 let ResourceCycles = [2,8,5,10,39];
2912}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002913def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002914
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002915def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2916 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002917 let NumMicroOps = 88;
2918 let ResourceCycles = [4,4,31,1,2,1,45];
2919}
Craig Topper2d451e72018-03-18 08:38:06 +00002920def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002921
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002922def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2923 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002924 let NumMicroOps = 90;
2925 let ResourceCycles = [4,2,33,1,2,1,47];
2926}
Craig Topper2d451e72018-03-18 08:38:06 +00002927def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002928
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002929def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002930 let Latency = 75;
2931 let NumMicroOps = 15;
2932 let ResourceCycles = [6,3,6];
2933}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002934def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002935
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002936def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002937 let Latency = 76;
2938 let NumMicroOps = 32;
2939 let ResourceCycles = [7,2,8,3,1,11];
2940}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002941def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002942
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002943def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002944 let Latency = 102;
2945 let NumMicroOps = 66;
2946 let ResourceCycles = [4,2,4,8,14,34];
2947}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002948def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002949
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002950def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2951 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002952 let NumMicroOps = 100;
2953 let ResourceCycles = [9,1,11,16,1,11,21,30];
2954}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002955def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002956
2957} // SchedModel