blob: 019b95aac4e6ca3af47fe0af87acb524ff04e340 [file] [log] [blame]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001//=- X86SchedSkylake.td - X86 Skylake Client Scheduling ------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Skylake Client to support
11// instruction scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def SkylakeClientModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and SKylake can
17 // decode 6 instructions per cycle.
18 let IssueWidth = 6;
19 let MicroOpBufferSize = 224; // Based on the reorder buffer.
20 let LoadLatency = 5;
21 let MispredictPenalty = 14;
Simon Pilgrim31a96332018-03-24 20:40:14 +000022
Gadi Haber6f8fbf42017-09-19 06:19:27 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000064def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
Craig Topper8104f262018-04-02 05:33:28 +000065// FP division and sqrt on port 0.
66def SKLFPDivider : ProcResource<1>;
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +000067
Gadi Haber6f8fbf42017-09-19 06:19:27 +000068// 60 Entry Unified Scheduler
69def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
70 SKLPort5, SKLPort6, SKLPort7]> {
71 let BufferSize=60;
72}
73
74// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
75// cycles after the memory operand.
76def : ReadAdvance<ReadAfterLd, 5>;
77
78// Many SchedWrites are defined in pairs with and without a folded load.
79// Instructions with folded loads are usually micro-fused, so they only appear
80// as two micro-ops when queued in the reservation station.
81// This multiclass defines the resource usage for variants with and without
82// folded loads.
83multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000084 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000085 int Lat, list<int> Res = [1], int UOps = 1,
86 int LoadLat = 5> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000087 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000088 def : WriteRes<SchedRW, ExePorts> {
89 let Latency = Lat;
90 let ResourceCycles = Res;
91 let NumMicroOps = UOps;
92 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000093
Simon Pilgrime3547af2018-03-25 10:21:19 +000094 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
95 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000096 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000097 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000098 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +000099 let NumMicroOps = !add(UOps, 1);
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000100 }
101}
102
Craig Topperf131b602018-04-06 16:16:46 +0000103// A folded store needs a cycle on port 4 for the store data, and an extra port
104// 2/3/7 cycle to recompute the address.
105def : WriteRes<WriteRMW, [SKLPort237,SKLPort4]>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000106
107// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000108defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
109defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000110defm : SKLWriteResPair<WriteIDiv, [SKLPort0, SKLDivider], 25, [1,10], 1, 4>; // Integer division.
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000111defm : SKLWriteResPair<WriteCRC32, [SKLPort1], 3>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000112
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000113def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000114def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
115
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000116// Bit counts.
117defm : SKLWriteResPair<WriteBitScan, [SKLPort1], 3>;
118defm : SKLWriteResPair<WriteLZCNT, [SKLPort1], 3>;
119defm : SKLWriteResPair<WriteTZCNT, [SKLPort1], 3>;
120defm : SKLWriteResPair<WritePOPCNT, [SKLPort1], 3>;
121
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000122// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000123defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000124
Craig Topper89310f52018-03-29 20:41:39 +0000125// BMI1 BEXTR, BMI2 BZHI
126defm : SKLWriteResPair<WriteBEXTR, [SKLPort06,SKLPort15], 2, [1,1], 2>;
127defm : SKLWriteResPair<WriteBZHI, [SKLPort15], 1>;
128
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000129// Loads, stores, and moves, not folded with other operations.
130def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
131def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
132def : WriteRes<WriteMove, [SKLPort0156]>;
133
134// Idioms that clear a register, like xorps %xmm0, %xmm0.
135// These can often bypass execution ports completely.
136def : WriteRes<WriteZero, []>;
137
138// Branches don't produce values, so they have no latency, but they still
139// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000140defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000141
142// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000143def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
144def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
145def : WriteRes<WriteFMove, [SKLPort015]>;
146
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000147defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub/compare.
148defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
149defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
150defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
151defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 5>; // Floating point reciprocal estimate.
152defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 5>; // Floating point reciprocal square root estimate.
153defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
154defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
155defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1>; // Floating point vector blends.
156defm : SKLWriteResPair<WriteFVarBlend, [SKLPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000157
158// FMA Scheduling helper class.
159// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
160
161// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000162def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
163def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
164def : WriteRes<WriteVecMove, [SKLPort015]>;
165
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000166defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
167defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
168defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
Craig Topper13a0f832018-03-31 04:54:32 +0000169defm : SKLWriteResPair<WritePMULLD, [SKLPort01], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000170defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
171defm : SKLWriteResPair<WriteBlend, [SKLPort15], 1>; // Vector blends.
172defm : SKLWriteResPair<WriteVarBlend, [SKLPort5], 2, [2]>; // Vector variable blends.
173defm : SKLWriteResPair<WriteMPSAD, [SKLPort0, SKLPort5], 6, [1, 2]>; // Vector MPSAD.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000174
175// Vector bitwise operations.
176// These are often used on both floating point and integer vectors.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000177defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1>; // Vector and/or/xor.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000178
179// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000180defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
181defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
182defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000183
184// Strings instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000185
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000186// Packed Compare Implicit Length Strings, Return Mask
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000187def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
188 let Latency = 10;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000189 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000190 let ResourceCycles = [3];
191}
192def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000193 let Latency = 16;
194 let NumMicroOps = 4;
195 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000196}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000197
198// Packed Compare Explicit Length Strings, Return Mask
199def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort5, SKLPort015, SKLPort0156]> {
200 let Latency = 19;
201 let NumMicroOps = 9;
202 let ResourceCycles = [4,3,1,1];
203}
204def : WriteRes<WritePCmpEStrMLd, [SKLPort0, SKLPort5,SKLPort23, SKLPort015, SKLPort0156]> {
205 let Latency = 25;
206 let NumMicroOps = 10;
207 let ResourceCycles = [4,3,1,1,1];
208}
209
210// Packed Compare Implicit Length Strings, Return Index
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000211def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000212 let Latency = 10;
213 let NumMicroOps = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000214 let ResourceCycles = [3];
215}
216def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000217 let Latency = 16;
218 let NumMicroOps = 4;
219 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000220}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000221
222// Packed Compare Explicit Length Strings, Return Index
223def : WriteRes<WritePCmpEStrI, [SKLPort0, SKLPort5, SKLPort0156]> {
224 let Latency = 18;
225 let NumMicroOps = 8;
226 let ResourceCycles = [4,3,1];
227}
228def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort5, SKLPort23, SKLPort0156]> {
229 let Latency = 24;
230 let NumMicroOps = 9;
231 let ResourceCycles = [4,3,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000232}
233
Simon Pilgrima2f26782018-03-27 20:38:54 +0000234// MOVMSK Instructions.
235def : WriteRes<WriteFMOVMSK, [SKLPort0]> { let Latency = 2; }
236def : WriteRes<WriteVecMOVMSK, [SKLPort0]> { let Latency = 2; }
237def : WriteRes<WriteMMXMOVMSK, [SKLPort0]> { let Latency = 2; }
238
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000239// AES instructions.
Simon Pilgrim7684e052018-03-22 13:18:08 +0000240def : WriteRes<WriteAESDecEnc, [SKLPort0]> { // Decryption, encryption.
241 let Latency = 4;
242 let NumMicroOps = 1;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000243 let ResourceCycles = [1];
244}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000245def : WriteRes<WriteAESDecEncLd, [SKLPort0, SKLPort23]> {
246 let Latency = 10;
247 let NumMicroOps = 2;
248 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000249}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000250
251def : WriteRes<WriteAESIMC, [SKLPort0]> { // InvMixColumn.
252 let Latency = 8;
253 let NumMicroOps = 2;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000254 let ResourceCycles = [2];
255}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000256def : WriteRes<WriteAESIMCLd, [SKLPort0, SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000257 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000258 let NumMicroOps = 3;
259 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000260}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261
262def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5, SKLPort015]> { // Key Generation.
263 let Latency = 20;
264 let NumMicroOps = 11;
265 let ResourceCycles = [3,6,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000266}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000267def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23, SKLPort015]> {
268 let Latency = 25;
269 let NumMicroOps = 11;
270 let ResourceCycles = [3,6,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000271}
272
273// Carry-less multiplication instructions.
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000274def : WriteRes<WriteCLMul, [SKLPort5]> {
275 let Latency = 6;
276 let NumMicroOps = 1;
277 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000278}
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000279def : WriteRes<WriteCLMulLd, [SKLPort5, SKLPort23]> {
280 let Latency = 12;
281 let NumMicroOps = 2;
282 let ResourceCycles = [1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000283}
284
285// Catch-all for expensive system instructions.
286def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
287
288// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000289defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
290defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
291defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000292
293// Old microcoded instructions that nobody use.
294def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
295
296// Fence instructions.
297def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
298
299// Nop, not very useful expect it provides a model for nops!
300def : WriteRes<WriteNop, []>;
301
302////////////////////////////////////////////////////////////////////////////////
303// Horizontal add/sub instructions.
304////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000305
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000306defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
307defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000308
309// Remaining instrs.
310
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000311def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000312 let Latency = 1;
313 let NumMicroOps = 1;
314 let ResourceCycles = [1];
315}
Craig Topperfc179c62018-03-22 04:23:41 +0000316def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
317 "MMX_PADDSWirr",
318 "MMX_PADDUSBirr",
319 "MMX_PADDUSWirr",
320 "MMX_PAVGBirr",
321 "MMX_PAVGWirr",
322 "MMX_PCMPEQBirr",
323 "MMX_PCMPEQDirr",
324 "MMX_PCMPEQWirr",
325 "MMX_PCMPGTBirr",
326 "MMX_PCMPGTDirr",
327 "MMX_PCMPGTWirr",
328 "MMX_PMAXSWirr",
329 "MMX_PMAXUBirr",
330 "MMX_PMINSWirr",
331 "MMX_PMINUBirr",
332 "MMX_PSLLDri",
333 "MMX_PSLLDrr",
334 "MMX_PSLLQri",
335 "MMX_PSLLQrr",
336 "MMX_PSLLWri",
337 "MMX_PSLLWrr",
338 "MMX_PSRADri",
339 "MMX_PSRADrr",
340 "MMX_PSRAWri",
341 "MMX_PSRAWrr",
342 "MMX_PSRLDri",
343 "MMX_PSRLDrr",
344 "MMX_PSRLQri",
345 "MMX_PSRLQrr",
346 "MMX_PSRLWri",
347 "MMX_PSRLWrr",
348 "MMX_PSUBSBirr",
349 "MMX_PSUBSWirr",
350 "MMX_PSUBUSBirr",
351 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000352
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000353def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000354 let Latency = 1;
355 let NumMicroOps = 1;
356 let ResourceCycles = [1];
357}
Craig Topperfc179c62018-03-22 04:23:41 +0000358def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
359 "COM_FST0r",
Craig Topperfc179c62018-03-22 04:23:41 +0000360 "MMX_MOVD64rr",
361 "MMX_MOVD64to64rr",
362 "MMX_PALIGNRrri",
363 "MMX_PSHUFBrr",
364 "MMX_PSHUFWri",
365 "MMX_PUNPCKHBWirr",
366 "MMX_PUNPCKHDQirr",
367 "MMX_PUNPCKHWDirr",
368 "MMX_PUNPCKLBWirr",
369 "MMX_PUNPCKLDQirr",
370 "MMX_PUNPCKLWDirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000371 "UCOM_FPr",
372 "UCOM_Fr",
Craig Topperfc179c62018-03-22 04:23:41 +0000373 "VBROADCASTSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000374 "(V?)INSERTPSrr",
375 "(V?)MOV64toPQIrr",
376 "(V?)MOVDDUP(Y?)rr",
377 "(V?)MOVDI2PDIrr",
378 "(V?)MOVHLPSrr",
379 "(V?)MOVLHPSrr",
380 "(V?)MOVSDrr",
381 "(V?)MOVSHDUP(Y?)rr",
382 "(V?)MOVSLDUP(Y?)rr",
Craig Topper15fef892018-03-25 23:40:56 +0000383 "(V?)MOVSSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000384 "(V?)PACKSSDW(Y?)rr",
385 "(V?)PACKSSWB(Y?)rr",
386 "(V?)PACKUSDW(Y?)rr",
387 "(V?)PACKUSWB(Y?)rr",
388 "(V?)PALIGNR(Y?)rri",
389 "(V?)PBLENDW(Y?)rri",
Craig Topperfc179c62018-03-22 04:23:41 +0000390 "VPBROADCASTDrr",
391 "VPBROADCASTQrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000392 "VPERMILPD(Y?)ri",
393 "VPERMILPD(Y?)rr",
394 "VPERMILPS(Y?)ri",
395 "VPERMILPS(Y?)rr",
396 "(V?)PMOVSXBDrr",
397 "(V?)PMOVSXBQrr",
398 "(V?)PMOVSXBWrr",
399 "(V?)PMOVSXDQrr",
400 "(V?)PMOVSXWDrr",
401 "(V?)PMOVSXWQrr",
402 "(V?)PMOVZXBDrr",
403 "(V?)PMOVZXBQrr",
404 "(V?)PMOVZXBWrr",
405 "(V?)PMOVZXDQrr",
406 "(V?)PMOVZXWDrr",
407 "(V?)PMOVZXWQrr",
408 "(V?)PSHUFB(Y?)rr",
409 "(V?)PSHUFD(Y?)ri",
410 "(V?)PSHUFHW(Y?)ri",
411 "(V?)PSHUFLW(Y?)ri",
412 "(V?)PSLLDQ(Y?)ri",
413 "(V?)PSRLDQ(Y?)ri",
414 "(V?)PUNPCKHBW(Y?)rr",
415 "(V?)PUNPCKHDQ(Y?)rr",
416 "(V?)PUNPCKHQDQ(Y?)rr",
417 "(V?)PUNPCKHWD(Y?)rr",
418 "(V?)PUNPCKLBW(Y?)rr",
419 "(V?)PUNPCKLDQ(Y?)rr",
420 "(V?)PUNPCKLQDQ(Y?)rr",
421 "(V?)PUNPCKLWD(Y?)rr",
422 "(V?)SHUFPD(Y?)rri",
423 "(V?)SHUFPS(Y?)rri",
424 "(V?)UNPCKHPD(Y?)rr",
425 "(V?)UNPCKHPS(Y?)rr",
426 "(V?)UNPCKLPD(Y?)rr",
427 "(V?)UNPCKLPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000428
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000429def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000430 let Latency = 1;
431 let NumMicroOps = 1;
432 let ResourceCycles = [1];
433}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000434def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000435
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000436def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000437 let Latency = 1;
438 let NumMicroOps = 1;
439 let ResourceCycles = [1];
440}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000441def: InstRW<[SKLWriteResGroup5], (instregex "(V?)PABSB(Y?)rr",
442 "(V?)PABSD(Y?)rr",
443 "(V?)PABSW(Y?)rr",
444 "(V?)PADDSB(Y?)rr",
445 "(V?)PADDSW(Y?)rr",
446 "(V?)PADDUSB(Y?)rr",
447 "(V?)PADDUSW(Y?)rr",
448 "(V?)PAVGB(Y?)rr",
449 "(V?)PAVGW(Y?)rr",
450 "(V?)PCMPEQB(Y?)rr",
451 "(V?)PCMPEQD(Y?)rr",
452 "(V?)PCMPEQQ(Y?)rr",
453 "(V?)PCMPEQW(Y?)rr",
454 "(V?)PCMPGTB(Y?)rr",
455 "(V?)PCMPGTD(Y?)rr",
456 "(V?)PCMPGTW(Y?)rr",
457 "(V?)PMAXSB(Y?)rr",
458 "(V?)PMAXSD(Y?)rr",
459 "(V?)PMAXSW(Y?)rr",
460 "(V?)PMAXUB(Y?)rr",
461 "(V?)PMAXUD(Y?)rr",
462 "(V?)PMAXUW(Y?)rr",
463 "(V?)PMINSB(Y?)rr",
464 "(V?)PMINSD(Y?)rr",
465 "(V?)PMINSW(Y?)rr",
466 "(V?)PMINUB(Y?)rr",
467 "(V?)PMINUD(Y?)rr",
468 "(V?)PMINUW(Y?)rr",
469 "(V?)PSIGNB(Y?)rr",
470 "(V?)PSIGND(Y?)rr",
471 "(V?)PSIGNW(Y?)rr",
472 "(V?)PSLLD(Y?)ri",
473 "(V?)PSLLQ(Y?)ri",
474 "VPSLLVD(Y?)rr",
475 "VPSLLVQ(Y?)rr",
476 "(V?)PSLLW(Y?)ri",
477 "(V?)PSRAD(Y?)ri",
478 "VPSRAVD(Y?)rr",
479 "(V?)PSRAW(Y?)ri",
480 "(V?)PSRLD(Y?)ri",
481 "(V?)PSRLQ(Y?)ri",
482 "VPSRLVD(Y?)rr",
483 "VPSRLVQ(Y?)rr",
484 "(V?)PSRLW(Y?)ri",
485 "(V?)PSUBSB(Y?)rr",
486 "(V?)PSUBSW(Y?)rr",
487 "(V?)PSUBUSB(Y?)rr",
488 "(V?)PSUBUSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000489
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000490def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000491 let Latency = 1;
492 let NumMicroOps = 1;
493 let ResourceCycles = [1];
494}
Craig Topperfc179c62018-03-22 04:23:41 +0000495def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
496 "FNOP",
497 "MMX_MOVQ64rr",
498 "MMX_PABSBrr",
499 "MMX_PABSDrr",
500 "MMX_PABSWrr",
501 "MMX_PADDBirr",
502 "MMX_PADDDirr",
503 "MMX_PADDQirr",
504 "MMX_PADDWirr",
505 "MMX_PANDNirr",
506 "MMX_PANDirr",
507 "MMX_PORirr",
508 "MMX_PSIGNBrr",
509 "MMX_PSIGNDrr",
510 "MMX_PSIGNWrr",
511 "MMX_PSUBBirr",
512 "MMX_PSUBDirr",
513 "MMX_PSUBQirr",
514 "MMX_PSUBWirr",
515 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000516
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000517def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000518 let Latency = 1;
519 let NumMicroOps = 1;
520 let ResourceCycles = [1];
521}
Craig Topperfbe31322018-04-05 21:56:19 +0000522def: InstRW<[SKLWriteResGroup7], (instrs CDQ, CQO)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000523def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
524 "ADC(16|32|64)i",
525 "ADC(8|16|32|64)rr",
526 "ADCX(32|64)rr",
527 "ADOX(32|64)rr",
528 "BT(16|32|64)ri8",
529 "BT(16|32|64)rr",
530 "BTC(16|32|64)ri8",
531 "BTC(16|32|64)rr",
532 "BTR(16|32|64)ri8",
533 "BTR(16|32|64)rr",
534 "BTS(16|32|64)ri8",
535 "BTS(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000536 "CLAC",
537 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000538 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
539 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
540 "JMP_1",
541 "JMP_4",
542 "RORX(32|64)ri",
543 "SAR(8|16|32|64)r1",
544 "SAR(8|16|32|64)ri",
545 "SARX(32|64)rr",
546 "SBB(16|32|64)ri",
547 "SBB(16|32|64)i",
548 "SBB(8|16|32|64)rr",
549 "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)r",
550 "SHL(8|16|32|64)r1",
551 "SHL(8|16|32|64)ri",
552 "SHLX(32|64)rr",
553 "SHR(8|16|32|64)r1",
554 "SHR(8|16|32|64)ri",
555 "SHRX(32|64)rr",
556 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000557
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000558def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
559 let Latency = 1;
560 let NumMicroOps = 1;
561 let ResourceCycles = [1];
562}
Craig Topperfc179c62018-03-22 04:23:41 +0000563def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
564 "BLSI(32|64)rr",
565 "BLSMSK(32|64)rr",
566 "BLSR(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000567 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000568
569def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
570 let Latency = 1;
571 let NumMicroOps = 1;
572 let ResourceCycles = [1];
573}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000574def: InstRW<[SKLWriteResGroup9], (instregex "(V?)ANDNPD(Y?)rr",
575 "(V?)ANDNPS(Y?)rr",
576 "(V?)ANDPD(Y?)rr",
577 "(V?)ANDPS(Y?)rr",
578 "(V?)BLENDPD(Y?)rri",
579 "(V?)BLENDPS(Y?)rri",
580 "(V?)MOVAPD(Y?)rr",
581 "(V?)MOVAPS(Y?)rr",
582 "(V?)MOVDQA(Y?)rr",
583 "(V?)MOVDQU(Y?)rr",
584 "(V?)MOVPQI2QIrr",
Craig Topper15fef892018-03-25 23:40:56 +0000585 "(V?)MOVUPD(Y?)rr",
586 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000587 "(V?)MOVZPQILo2PQIrr",
588 "(V?)ORPD(Y?)rr",
589 "(V?)ORPS(Y?)rr",
590 "(V?)PADDB(Y?)rr",
591 "(V?)PADDD(Y?)rr",
592 "(V?)PADDQ(Y?)rr",
593 "(V?)PADDW(Y?)rr",
594 "(V?)PANDN(Y?)rr",
595 "(V?)PAND(Y?)rr",
596 "VPBLENDD(Y?)rri",
597 "(V?)POR(Y?)rr",
598 "(V?)PSUBB(Y?)rr",
599 "(V?)PSUBD(Y?)rr",
600 "(V?)PSUBQ(Y?)rr",
601 "(V?)PSUBW(Y?)rr",
602 "(V?)PXOR(Y?)rr",
Simon Pilgrimfecb0b72018-03-25 19:17:17 +0000603 "(V?)XORPD(Y?)rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000604 "(V?)XORPS(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000605
606def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
607 let Latency = 1;
608 let NumMicroOps = 1;
609 let ResourceCycles = [1];
610}
Craig Topperfbe31322018-04-05 21:56:19 +0000611def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000612def: InstRW<[SKLWriteResGroup10], (instregex "CLC",
Craig Topperfc179c62018-03-22 04:23:41 +0000613 "CMC",
Craig Topperfc179c62018-03-22 04:23:41 +0000614 "LAHF",
Craig Topperfc179c62018-03-22 04:23:41 +0000615 "NOOP",
Craig Topperfc179c62018-03-22 04:23:41 +0000616 "SAHF",
617 "SGDT64m",
618 "SIDT64m",
619 "SLDT64m",
620 "SMSW16m",
621 "STC",
622 "STRm",
Craig Topperfc179c62018-03-22 04:23:41 +0000623 "SYSCALL",
Craig Topperf0d04262018-04-06 16:16:48 +0000624 "XCHG(16|32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000625
626def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000627 let Latency = 1;
628 let NumMicroOps = 2;
629 let ResourceCycles = [1,1];
630}
Craig Topperfc179c62018-03-22 04:23:41 +0000631def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
632 "MMX_MOVD64from64rm",
633 "MMX_MOVD64mr",
634 "MMX_MOVNTQmr",
635 "MMX_MOVQ64mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000636 "MOVNTI_64mr",
637 "MOVNTImr",
Craig Topperfc179c62018-03-22 04:23:41 +0000638 "ST_FP32m",
639 "ST_FP64m",
640 "ST_FP80m",
641 "VEXTRACTF128mr",
642 "VEXTRACTI128mr",
Craig Topper972bdbd2018-03-25 17:33:14 +0000643 "(V?)MOVAPDYmr",
644 "(V?)MOVAPS(Y?)mr",
645 "(V?)MOVDQA(Y?)mr",
646 "(V?)MOVDQU(Y?)mr",
647 "(V?)MOVHPDmr",
648 "(V?)MOVHPSmr",
649 "(V?)MOVLPDmr",
650 "(V?)MOVLPSmr",
651 "(V?)MOVNTDQ(Y?)mr",
652 "(V?)MOVNTPD(Y?)mr",
653 "(V?)MOVNTPS(Y?)mr",
654 "(V?)MOVPDI2DImr",
655 "(V?)MOVPQI2QImr",
656 "(V?)MOVPQIto64mr",
657 "(V?)MOVSDmr",
658 "(V?)MOVSSmr",
659 "(V?)MOVUPD(Y?)mr",
660 "(V?)MOVUPS(Y?)mr",
Craig Topperfc179c62018-03-22 04:23:41 +0000661 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000662
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000663def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000664 let Latency = 2;
665 let NumMicroOps = 1;
666 let ResourceCycles = [1];
667}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000668def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000669 "MMX_MOVD64grr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000670 "(V?)COMISDrr",
671 "(V?)COMISSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000672 "(V?)MOVPDI2DIrr",
673 "(V?)MOVPQIto64rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000674 "VTESTPD(Y?)rr",
675 "VTESTPS(Y?)rr",
676 "(V?)UCOMISDrr",
677 "(V?)UCOMISSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000678
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000679def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000680 let Latency = 2;
681 let NumMicroOps = 2;
682 let ResourceCycles = [2];
683}
Craig Topperfc179c62018-03-22 04:23:41 +0000684def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
685 "MMX_PINSRWrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000686 "(V?)PINSRBrr",
687 "(V?)PINSRDrr",
688 "(V?)PINSRQrr",
689 "(V?)PINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000690
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000691def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000692 let Latency = 2;
693 let NumMicroOps = 2;
694 let ResourceCycles = [2];
695}
Craig Topperfc179c62018-03-22 04:23:41 +0000696def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
697 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000698
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000699def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000700 let Latency = 2;
701 let NumMicroOps = 2;
702 let ResourceCycles = [2];
703}
Craig Topperfc179c62018-03-22 04:23:41 +0000704def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
705 "ROL(8|16|32|64)r1",
706 "ROL(8|16|32|64)ri",
707 "ROR(8|16|32|64)r1",
708 "ROR(8|16|32|64)ri",
709 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000710
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000711def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000712 let Latency = 2;
713 let NumMicroOps = 2;
714 let ResourceCycles = [2];
715}
Craig Topperfc179c62018-03-22 04:23:41 +0000716def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
717 "BLENDVPSrr0",
718 "PBLENDVBrr0",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000719 "VBLENDVPD(Y?)rr",
720 "VBLENDVPS(Y?)rr",
721 "VPBLENDVB(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000722
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000723def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000724 let Latency = 2;
725 let NumMicroOps = 2;
726 let ResourceCycles = [2];
727}
Craig Topperfc179c62018-03-22 04:23:41 +0000728def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
729 "WAIT",
730 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000731
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000732def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000733 let Latency = 2;
734 let NumMicroOps = 2;
735 let ResourceCycles = [1,1];
736}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000737def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPD(Y?)mr",
738 "VMASKMOVPS(Y?)mr",
739 "VPMASKMOVD(Y?)mr",
740 "VPMASKMOVQ(Y?)mr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000741
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000742def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000743 let Latency = 2;
744 let NumMicroOps = 2;
745 let ResourceCycles = [1,1];
746}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000747def: InstRW<[SKLWriteResGroup19], (instregex "(V?)PSLLDrr",
748 "(V?)PSLLQrr",
749 "(V?)PSLLWrr",
750 "(V?)PSRADrr",
751 "(V?)PSRAWrr",
752 "(V?)PSRLDrr",
753 "(V?)PSRLQrr",
754 "(V?)PSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000755
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000756def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000757 let Latency = 2;
758 let NumMicroOps = 2;
759 let ResourceCycles = [1,1];
760}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000761def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000762
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000763def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000764 let Latency = 2;
765 let NumMicroOps = 2;
766 let ResourceCycles = [1,1];
767}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000768def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000769
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000770def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000771 let Latency = 2;
772 let NumMicroOps = 2;
773 let ResourceCycles = [1,1];
774}
Craig Topper498875f2018-04-04 17:54:19 +0000775def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>;
776
777def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> {
778 let Latency = 1;
779 let NumMicroOps = 1;
780 let ResourceCycles = [1];
781}
782def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000783
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000784def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000785 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000786 let NumMicroOps = 2;
787 let ResourceCycles = [1,1];
788}
Craig Topper2d451e72018-03-18 08:38:06 +0000789def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +0000790def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000791def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
792 "ADC8ri",
793 "SBB8i8",
794 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000795
796def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
797 let Latency = 2;
798 let NumMicroOps = 3;
799 let ResourceCycles = [1,1,1];
800}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000801def: InstRW<[SKLWriteResGroup24], (instregex "(V?)EXTRACTPSmr",
802 "(V?)PEXTRBmr",
803 "(V?)PEXTRDmr",
804 "(V?)PEXTRQmr",
805 "(V?)PEXTRWmr",
806 "(V?)STMXCSR")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000807
808def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
809 let Latency = 2;
810 let NumMicroOps = 3;
811 let ResourceCycles = [1,1,1];
812}
813def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
814
815def SKLWriteResGroup26 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
816 let Latency = 2;
817 let NumMicroOps = 3;
818 let ResourceCycles = [1,1,1];
819}
Craig Topperf4cd9082018-01-19 05:47:32 +0000820def: 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 +0000821
822def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
823 let Latency = 2;
824 let NumMicroOps = 3;
825 let ResourceCycles = [1,1,1];
826}
827def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
828
829def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
830 let Latency = 2;
831 let NumMicroOps = 3;
832 let ResourceCycles = [1,1,1];
833}
Craig Topper2d451e72018-03-18 08:38:06 +0000834def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000835def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
836 "PUSH64i8",
837 "STOSB",
838 "STOSL",
839 "STOSQ",
840 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000841
842def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
843 let Latency = 3;
844 let NumMicroOps = 1;
845 let ResourceCycles = [1];
846}
Clement Courbet327fac42018-03-07 08:14:02 +0000847def: InstRW<[SKLWriteResGroup29], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000848def: InstRW<[SKLWriteResGroup29], (instrs IMUL8r, MUL8r)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000849def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000850 "PEXT(32|64)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000851 "SHLD(16|32|64)rri8",
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000852 "SHRD(16|32|64)rri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000853
Clement Courbet327fac42018-03-07 08:14:02 +0000854def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000855 let Latency = 3;
856 let NumMicroOps = 2;
857 let ResourceCycles = [1,1];
858}
Clement Courbet327fac42018-03-07 08:14:02 +0000859def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000860
861def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
862 let Latency = 3;
863 let NumMicroOps = 1;
864 let ResourceCycles = [1];
865}
Craig Topperfc179c62018-03-22 04:23:41 +0000866def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
867 "ADD_FST0r",
868 "ADD_FrST0",
869 "MMX_PSADBWirr",
Craig Topperfc179c62018-03-22 04:23:41 +0000870 "SUBR_FPrST0",
871 "SUBR_FST0r",
872 "SUBR_FrST0",
873 "SUB_FPrST0",
874 "SUB_FST0r",
875 "SUB_FrST0",
876 "VBROADCASTSDYrr",
877 "VBROADCASTSSYrr",
878 "VEXTRACTF128rr",
879 "VEXTRACTI128rr",
880 "VINSERTF128rr",
881 "VINSERTI128rr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000882 "VPBROADCASTB(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000883 "VPBROADCASTDYrr",
884 "VPBROADCASTQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000885 "VPBROADCASTW(Y?)rr",
886 "(V?)PCMPGTQ(Y?)rr",
Craig Topperfc179c62018-03-22 04:23:41 +0000887 "VPERM2F128rr",
888 "VPERM2I128rr",
889 "VPERMDYrr",
890 "VPERMPDYri",
891 "VPERMPSYrr",
892 "VPERMQYri",
893 "VPMOVSXBDYrr",
894 "VPMOVSXBQYrr",
895 "VPMOVSXBWYrr",
896 "VPMOVSXDQYrr",
897 "VPMOVSXWDYrr",
898 "VPMOVSXWQYrr",
899 "VPMOVZXBDYrr",
900 "VPMOVZXBQYrr",
901 "VPMOVZXBWYrr",
902 "VPMOVZXDQYrr",
903 "VPMOVZXWDYrr",
904 "VPMOVZXWQYrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +0000905 "(V?)PSADBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000906
907def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
908 let Latency = 3;
909 let NumMicroOps = 2;
910 let ResourceCycles = [1,1];
911}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000912def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr",
913 "(V?)EXTRACTPSrr",
914 "(V?)PEXTRBrr",
915 "(V?)PEXTRDrr",
916 "(V?)PEXTRQrr",
917 "(V?)PEXTRWrr",
918 "(V?)PTEST(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000919
920def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
921 let Latency = 3;
922 let NumMicroOps = 2;
923 let ResourceCycles = [1,1];
924}
925def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
926
927def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
928 let Latency = 3;
929 let NumMicroOps = 3;
930 let ResourceCycles = [3];
931}
Craig Topperfc179c62018-03-22 04:23:41 +0000932def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
933 "ROR(8|16|32|64)rCL",
934 "SAR(8|16|32|64)rCL",
935 "SHL(8|16|32|64)rCL",
936 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000937
938def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
939 let Latency = 3;
940 let NumMicroOps = 3;
941 let ResourceCycles = [3];
942}
Craig Topperfc179c62018-03-22 04:23:41 +0000943def: InstRW<[SKLWriteResGroup34], (instregex "XADD(8|16|32|64)rr",
944 "XCHG8rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000945
946def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
947 let Latency = 3;
948 let NumMicroOps = 3;
949 let ResourceCycles = [1,2];
950}
Craig Topperfc179c62018-03-22 04:23:41 +0000951def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PHADDSWrr",
952 "MMX_PHSUBSWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000953
954def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
955 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000956 let NumMicroOps = 3;
957 let ResourceCycles = [2,1];
958}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000959def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
960 "(V?)PHSUBSW(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000961
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000962def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
963 let Latency = 3;
964 let NumMicroOps = 3;
965 let ResourceCycles = [2,1];
966}
Craig Topperfc179c62018-03-22 04:23:41 +0000967def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHADDDrr",
968 "MMX_PHADDWrr",
969 "MMX_PHSUBDrr",
970 "MMX_PHSUBWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000971
972def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
973 let Latency = 3;
974 let NumMicroOps = 3;
975 let ResourceCycles = [2,1];
976}
Simon Pilgrim31a96332018-03-24 20:40:14 +0000977def: InstRW<[SKLWriteResGroup38], (instregex "(V?)PHADDD(Y?)rr",
978 "(V?)PHADDW(Y?)rr",
979 "(V?)PHSUBD(Y?)rr",
980 "(V?)PHSUBW(Y?)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000981
982def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
983 let Latency = 3;
984 let NumMicroOps = 3;
985 let ResourceCycles = [2,1];
986}
Craig Topperfc179c62018-03-22 04:23:41 +0000987def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
988 "MMX_PACKSSWBirr",
989 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000990
991def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
992 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000993 let NumMicroOps = 3;
994 let ResourceCycles = [1,2];
995}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000996def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000997
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000998def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
999 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001000 let NumMicroOps = 3;
1001 let ResourceCycles = [1,2];
1002}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001003def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001004
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001005def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
1006 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001007 let NumMicroOps = 3;
1008 let ResourceCycles = [1,2];
1009}
Craig Topperfc179c62018-03-22 04:23:41 +00001010def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
1011 "RCL(8|16|32|64)ri",
1012 "RCR(8|16|32|64)r1",
1013 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001014
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001015def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
1016 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001017 let NumMicroOps = 3;
1018 let ResourceCycles = [1,1,1];
1019}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001020def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001021
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001022def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
1023 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001024 let NumMicroOps = 4;
1025 let ResourceCycles = [1,1,2];
1026}
Craig Topperf4cd9082018-01-19 05:47:32 +00001027def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001028
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001029def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
1030 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001031 let NumMicroOps = 4;
1032 let ResourceCycles = [1,1,1,1];
1033}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001034def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001035
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001036def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
1037 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001038 let NumMicroOps = 4;
1039 let ResourceCycles = [1,1,1,1];
1040}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001041def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001042
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001043def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001044 let Latency = 4;
1045 let NumMicroOps = 1;
1046 let ResourceCycles = [1];
1047}
Simon Pilgrim7684e052018-03-22 13:18:08 +00001048def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001049 "MMX_PMADDWDirr",
1050 "MMX_PMULHRSWrr",
1051 "MMX_PMULHUWirr",
1052 "MMX_PMULHWirr",
1053 "MMX_PMULLWirr",
1054 "MMX_PMULUDQirr",
1055 "MUL_FPrST0",
1056 "MUL_FST0r",
1057 "MUL_FrST0",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001058 "(V?)RCPPS(Y?)r",
1059 "(V?)RCPSSr",
1060 "(V?)RSQRTPS(Y?)r",
1061 "(V?)RSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001062
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001063def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001064 let Latency = 4;
1065 let NumMicroOps = 1;
1066 let ResourceCycles = [1];
1067}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001068def: InstRW<[SKLWriteResGroup48], (instregex "(V?)ADDPD(Y?)rr",
1069 "(V?)ADDPS(Y?)rr",
1070 "(V?)ADDSDrr",
1071 "(V?)ADDSSrr",
1072 "(V?)ADDSUBPD(Y?)rr",
1073 "(V?)ADDSUBPS(Y?)rr",
1074 "(V?)CMPPD(Y?)rri",
1075 "(V?)CMPPS(Y?)rri",
1076 "(V?)CMPSDrr",
1077 "(V?)CMPSSrr",
1078 "(V?)CVTDQ2PS(Y?)rr",
1079 "(V?)CVTPS2DQ(Y?)rr",
1080 "(V?)CVTTPS2DQ(Y?)rr",
1081 "(V?)MAX(C?)PD(Y?)rr",
1082 "(V?)MAX(C?)PS(Y?)rr",
1083 "(V?)MAX(C?)SDrr",
1084 "(V?)MAX(C?)SSrr",
1085 "(V?)MIN(C?)PD(Y?)rr",
1086 "(V?)MIN(C?)PS(Y?)rr",
1087 "(V?)MIN(C?)SDrr",
1088 "(V?)MIN(C?)SSrr",
1089 "(V?)MULPD(Y?)rr",
1090 "(V?)MULPS(Y?)rr",
1091 "(V?)MULSDrr",
1092 "(V?)MULSSrr",
1093 "(V?)PHMINPOSUWrr",
1094 "(V?)PMADDUBSW(Y?)rr",
1095 "(V?)PMADDWD(Y?)rr",
1096 "(V?)PMULDQ(Y?)rr",
1097 "(V?)PMULHRSW(Y?)rr",
1098 "(V?)PMULHUW(Y?)rr",
1099 "(V?)PMULHW(Y?)rr",
1100 "(V?)PMULLW(Y?)rr",
1101 "(V?)PMULUDQ(Y?)rr",
1102 "(V?)SUBPD(Y?)rr",
1103 "(V?)SUBPS(Y?)rr",
1104 "(V?)SUBSDrr",
1105 "(V?)SUBSSrr")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00001106def: InstRW<[SKLWriteResGroup48],
1107 (instregex
1108 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1109 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001110
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001111def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001112 let Latency = 4;
1113 let NumMicroOps = 2;
1114 let ResourceCycles = [2];
1115}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001116def: InstRW<[SKLWriteResGroup50], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001117
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001118def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001119 let Latency = 4;
1120 let NumMicroOps = 2;
1121 let ResourceCycles = [1,1];
1122}
Craig Topperfc179c62018-03-22 04:23:41 +00001123def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r,
1124 MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001125
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001126def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1127 let Latency = 4;
1128 let NumMicroOps = 4;
1129}
Craig Topperfc179c62018-03-22 04:23:41 +00001130def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001131
1132def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001133 let Latency = 4;
1134 let NumMicroOps = 2;
1135 let ResourceCycles = [1,1];
1136}
Craig Topperfc179c62018-03-22 04:23:41 +00001137def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1138 "VPSLLQYrr",
1139 "VPSLLWYrr",
1140 "VPSRADYrr",
1141 "VPSRAWYrr",
1142 "VPSRLDYrr",
1143 "VPSRLQYrr",
1144 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001145
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001146def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001147 let Latency = 4;
1148 let NumMicroOps = 3;
1149 let ResourceCycles = [1,1,1];
1150}
Craig Topperfc179c62018-03-22 04:23:41 +00001151def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1152 "ISTT_FP32m",
1153 "ISTT_FP64m",
1154 "IST_F16m",
1155 "IST_F32m",
1156 "IST_FP16m",
1157 "IST_FP32m",
1158 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001159
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001160def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001161 let Latency = 4;
1162 let NumMicroOps = 4;
1163 let ResourceCycles = [4];
1164}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001165def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001166
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001167def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001168 let Latency = 4;
1169 let NumMicroOps = 4;
1170 let ResourceCycles = [1,3];
1171}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001172def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001173
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001174def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001175 let Latency = 4;
1176 let NumMicroOps = 4;
1177 let ResourceCycles = [1,3];
1178}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001179def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001180
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001181def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001182 let Latency = 4;
1183 let NumMicroOps = 4;
1184 let ResourceCycles = [1,1,2];
1185}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001186def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001187
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001188def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1189 let Latency = 5;
1190 let NumMicroOps = 1;
1191 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001192}
Craig Topperfc179c62018-03-22 04:23:41 +00001193def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64rm",
1194 "MMX_MOVD64to64rm",
1195 "MMX_MOVQ64rm",
1196 "MOV(8|16|32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001197 "MOVSX(16|32|64)rm16",
1198 "MOVSX(16|32|64)rm32",
1199 "MOVSX(16|32|64)rm8",
1200 "MOVZX(16|32|64)rm16",
1201 "MOVZX(16|32|64)rm8",
1202 "PREFETCHNTA",
1203 "PREFETCHT0",
1204 "PREFETCHT1",
1205 "PREFETCHT2",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001206 "(V?)MOV64toPQIrm",
1207 "(V?)MOVDDUPrm",
1208 "(V?)MOVDI2PDIrm",
1209 "(V?)MOVQI2PQIrm",
1210 "(V?)MOVSDrm",
1211 "(V?)MOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001212
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001213def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001214 let Latency = 5;
1215 let NumMicroOps = 2;
1216 let ResourceCycles = [1,1];
1217}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001218def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr",
1219 "(V?)CVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001220
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001221def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001222 let Latency = 5;
1223 let NumMicroOps = 2;
1224 let ResourceCycles = [1,1];
1225}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001226def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr",
Craig Topperfc179c62018-03-22 04:23:41 +00001227 "MMX_CVTPS2PIirr",
1228 "MMX_CVTTPD2PIirr",
1229 "MMX_CVTTPS2PIirr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001230 "(V?)CVTPD2DQrr",
1231 "(V?)CVTPD2PSrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001232 "VCVTPH2PSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001233 "(V?)CVTPS2PDrr",
Craig Topperfc179c62018-03-22 04:23:41 +00001234 "VCVTPS2PHrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001235 "(V?)CVTSD2SSrr",
1236 "(V?)CVTSI642SDrr",
1237 "(V?)CVTSI2SDrr",
1238 "(V?)CVTSI2SSrr",
1239 "(V?)CVTSS2SDrr",
1240 "(V?)CVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001241
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001242def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001243 let Latency = 5;
1244 let NumMicroOps = 3;
1245 let ResourceCycles = [1,1,1];
1246}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001247def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001248
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001249def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001250 let Latency = 4;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001251 let NumMicroOps = 3;
1252 let ResourceCycles = [1,1,1];
1253}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001254def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001255
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001256def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001257 let Latency = 5;
1258 let NumMicroOps = 5;
1259 let ResourceCycles = [1,4];
1260}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001261def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001262
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001263def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001264 let Latency = 5;
1265 let NumMicroOps = 5;
1266 let ResourceCycles = [2,3];
1267}
Craig Topper13a16502018-03-19 00:56:09 +00001268def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001269
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001270def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001271 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001272 let NumMicroOps = 6;
1273 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001274}
Craig Topperfc179c62018-03-22 04:23:41 +00001275def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1276 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001277
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001278def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1279 let Latency = 6;
1280 let NumMicroOps = 1;
1281 let ResourceCycles = [1];
1282}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001283def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm",
1284 "(V?)LDDQUrm",
1285 "(V?)MOVAPDrm",
1286 "(V?)MOVAPSrm",
1287 "(V?)MOVDQArm",
1288 "(V?)MOVDQUrm",
1289 "(V?)MOVNTDQArm",
1290 "(V?)MOVSHDUPrm",
1291 "(V?)MOVSLDUPrm",
1292 "(V?)MOVUPDrm",
1293 "(V?)MOVUPSrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001294 "VPBROADCASTDrm",
1295 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001296
1297def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001298 let Latency = 6;
1299 let NumMicroOps = 2;
1300 let ResourceCycles = [2];
1301}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001302def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001303
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001304def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001305 let Latency = 6;
1306 let NumMicroOps = 2;
1307 let ResourceCycles = [1,1];
1308}
Craig Topperfc179c62018-03-22 04:23:41 +00001309def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1310 "MMX_PADDSWirm",
1311 "MMX_PADDUSBirm",
1312 "MMX_PADDUSWirm",
1313 "MMX_PAVGBirm",
1314 "MMX_PAVGWirm",
1315 "MMX_PCMPEQBirm",
1316 "MMX_PCMPEQDirm",
1317 "MMX_PCMPEQWirm",
1318 "MMX_PCMPGTBirm",
1319 "MMX_PCMPGTDirm",
1320 "MMX_PCMPGTWirm",
1321 "MMX_PMAXSWirm",
1322 "MMX_PMAXUBirm",
1323 "MMX_PMINSWirm",
1324 "MMX_PMINUBirm",
1325 "MMX_PSLLDrm",
1326 "MMX_PSLLQrm",
1327 "MMX_PSLLWrm",
1328 "MMX_PSRADrm",
1329 "MMX_PSRAWrm",
1330 "MMX_PSRLDrm",
1331 "MMX_PSRLQrm",
1332 "MMX_PSRLWrm",
1333 "MMX_PSUBSBirm",
1334 "MMX_PSUBSWirm",
1335 "MMX_PSUBUSBirm",
1336 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001337
Craig Topper58afb4e2018-03-22 21:10:07 +00001338def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001339 let Latency = 6;
1340 let NumMicroOps = 2;
1341 let ResourceCycles = [1,1];
1342}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001343def: InstRW<[SKLWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1344 "(V?)CVTSD2SIrr",
1345 "(V?)CVTSS2SI64rr",
1346 "(V?)CVTSS2SIrr",
1347 "(V?)CVTTSD2SI64rr",
1348 "(V?)CVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001349
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001350def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1351 let Latency = 6;
1352 let NumMicroOps = 2;
1353 let ResourceCycles = [1,1];
1354}
Craig Topperfc179c62018-03-22 04:23:41 +00001355def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1356 "MMX_PINSRWrm",
1357 "MMX_PSHUFBrm",
1358 "MMX_PSHUFWmi",
1359 "MMX_PUNPCKHBWirm",
1360 "MMX_PUNPCKHDQirm",
1361 "MMX_PUNPCKHWDirm",
1362 "MMX_PUNPCKLBWirm",
1363 "MMX_PUNPCKLDQirm",
1364 "MMX_PUNPCKLWDirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001365 "(V?)MOVHPDrm",
1366 "(V?)MOVHPSrm",
1367 "(V?)MOVLPDrm",
1368 "(V?)MOVLPSrm",
1369 "(V?)PINSRBrm",
1370 "(V?)PINSRDrm",
1371 "(V?)PINSRQrm",
1372 "(V?)PINSRWrm",
1373 "(V?)PMOVSXBDrm",
1374 "(V?)PMOVSXBQrm",
1375 "(V?)PMOVSXBWrm",
1376 "(V?)PMOVSXDQrm",
1377 "(V?)PMOVSXWDrm",
1378 "(V?)PMOVSXWQrm",
1379 "(V?)PMOVZXBDrm",
1380 "(V?)PMOVZXBQrm",
1381 "(V?)PMOVZXBWrm",
1382 "(V?)PMOVZXDQrm",
1383 "(V?)PMOVZXWDrm",
1384 "(V?)PMOVZXWQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001385
1386def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1387 let Latency = 6;
1388 let NumMicroOps = 2;
1389 let ResourceCycles = [1,1];
1390}
Craig Topperfc179c62018-03-22 04:23:41 +00001391def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1392 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001393
1394def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1395 let Latency = 6;
1396 let NumMicroOps = 2;
1397 let ResourceCycles = [1,1];
1398}
Craig Topperfc179c62018-03-22 04:23:41 +00001399def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSBrm",
1400 "MMX_PABSDrm",
1401 "MMX_PABSWrm",
1402 "MMX_PADDBirm",
1403 "MMX_PADDDirm",
1404 "MMX_PADDQirm",
1405 "MMX_PADDWirm",
1406 "MMX_PANDNirm",
1407 "MMX_PANDirm",
1408 "MMX_PORirm",
1409 "MMX_PSIGNBrm",
1410 "MMX_PSIGNDrm",
1411 "MMX_PSIGNWrm",
1412 "MMX_PSUBBirm",
1413 "MMX_PSUBDirm",
1414 "MMX_PSUBQirm",
1415 "MMX_PSUBWirm",
1416 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001417
1418def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1419 let Latency = 6;
1420 let NumMicroOps = 2;
1421 let ResourceCycles = [1,1];
1422}
Craig Topperfc179c62018-03-22 04:23:41 +00001423def: InstRW<[SKLWriteResGroup74], (instregex "ADC(8|16|32|64)rm",
1424 "ADCX(32|64)rm",
1425 "ADOX(32|64)rm",
1426 "BT(16|32|64)mi8",
1427 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rm",
1428 "RORX(32|64)mi",
1429 "SARX(32|64)rm",
1430 "SBB(8|16|32|64)rm",
1431 "SHLX(32|64)rm",
1432 "SHRX(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001433
1434def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1435 let Latency = 6;
1436 let NumMicroOps = 2;
1437 let ResourceCycles = [1,1];
1438}
Craig Topperfc179c62018-03-22 04:23:41 +00001439def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1440 "BLSI(32|64)rm",
1441 "BLSMSK(32|64)rm",
1442 "BLSR(32|64)rm",
Craig Topperfc179c62018-03-22 04:23:41 +00001443 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001444
1445def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1446 let Latency = 6;
1447 let NumMicroOps = 2;
1448 let ResourceCycles = [1,1];
1449}
Craig Topper2d451e72018-03-18 08:38:06 +00001450def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001451def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001452
1453def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001454 let Latency = 6;
1455 let NumMicroOps = 3;
1456 let ResourceCycles = [2,1];
1457}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001458def: InstRW<[SKLWriteResGroup77], (instregex "(V?)HADDPD(Y?)rr",
1459 "(V?)HADDPS(Y?)rr",
1460 "(V?)HSUBPD(Y?)rr",
1461 "(V?)HSUBPS(Y?)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001462
Craig Topper58afb4e2018-03-22 21:10:07 +00001463def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001464 let Latency = 6;
1465 let NumMicroOps = 3;
1466 let ResourceCycles = [2,1];
1467}
Craig Topperfc179c62018-03-22 04:23:41 +00001468def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001469
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001470def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001471 let Latency = 6;
1472 let NumMicroOps = 4;
1473 let ResourceCycles = [1,2,1];
1474}
Craig Topperfc179c62018-03-22 04:23:41 +00001475def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1476 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001477
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001478def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001479 let Latency = 6;
1480 let NumMicroOps = 4;
1481 let ResourceCycles = [1,1,1,1];
1482}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001483def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001484
Craig Topper58afb4e2018-03-22 21:10:07 +00001485def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001486 let Latency = 6;
1487 let NumMicroOps = 4;
1488 let ResourceCycles = [1,1,1,1];
1489}
1490def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1491
1492def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1493 let Latency = 6;
1494 let NumMicroOps = 4;
1495 let ResourceCycles = [1,1,1,1];
1496}
Craig Topperfc179c62018-03-22 04:23:41 +00001497def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1498 "BTR(16|32|64)mi8",
1499 "BTS(16|32|64)mi8",
1500 "SAR(8|16|32|64)m1",
1501 "SAR(8|16|32|64)mi",
1502 "SHL(8|16|32|64)m1",
1503 "SHL(8|16|32|64)mi",
1504 "SHR(8|16|32|64)m1",
1505 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001506
1507def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1508 let Latency = 6;
1509 let NumMicroOps = 4;
1510 let ResourceCycles = [1,1,1,1];
1511}
Craig Topperf0d04262018-04-06 16:16:48 +00001512def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm",
1513 "PUSH(16|32|64)rmm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001514
1515def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001516 let Latency = 6;
1517 let NumMicroOps = 6;
1518 let ResourceCycles = [1,5];
1519}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001520def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001521
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001522def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
1523 let Latency = 7;
1524 let NumMicroOps = 1;
1525 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001526}
Craig Topperfc179c62018-03-22 04:23:41 +00001527def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
1528 "LD_F64m",
1529 "LD_F80m",
1530 "VBROADCASTF128",
1531 "VBROADCASTI128",
1532 "VBROADCASTSDYrm",
1533 "VBROADCASTSSYrm",
1534 "VLDDQUYrm",
1535 "VMOVAPDYrm",
1536 "VMOVAPSYrm",
1537 "VMOVDDUPYrm",
1538 "VMOVDQAYrm",
1539 "VMOVDQUYrm",
1540 "VMOVNTDQAYrm",
1541 "VMOVSHDUPYrm",
1542 "VMOVSLDUPYrm",
1543 "VMOVUPDYrm",
1544 "VMOVUPSYrm",
1545 "VPBROADCASTDYrm",
1546 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001547
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001548def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001549 let Latency = 7;
1550 let NumMicroOps = 2;
1551 let ResourceCycles = [1,1];
1552}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001553def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001554
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001555def SKLWriteResGroup87 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001556 let Latency = 7;
1557 let NumMicroOps = 2;
1558 let ResourceCycles = [1,1];
1559}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001560def: InstRW<[SKLWriteResGroup87], (instregex "(V?)COMISDrm",
1561 "(V?)COMISSrm",
1562 "(V?)UCOMISDrm",
1563 "(V?)UCOMISSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001564
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001565def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1566 let Latency = 7;
1567 let NumMicroOps = 2;
1568 let ResourceCycles = [1,1];
1569}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001570def: InstRW<[SKLWriteResGroup88], (instregex "(V?)INSERTPSrm",
1571 "(V?)PACKSSDWrm",
1572 "(V?)PACKSSWBrm",
1573 "(V?)PACKUSDWrm",
1574 "(V?)PACKUSWBrm",
1575 "(V?)PALIGNRrmi",
1576 "(V?)PBLENDWrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00001577 "VPBROADCASTBrm",
1578 "VPBROADCASTWrm",
1579 "VPERMILPDmi",
1580 "VPERMILPDrm",
1581 "VPERMILPSmi",
1582 "VPERMILPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001583 "(V?)PSHUFBrm",
1584 "(V?)PSHUFDmi",
1585 "(V?)PSHUFHWmi",
1586 "(V?)PSHUFLWmi",
1587 "(V?)PUNPCKHBWrm",
1588 "(V?)PUNPCKHDQrm",
1589 "(V?)PUNPCKHQDQrm",
1590 "(V?)PUNPCKHWDrm",
1591 "(V?)PUNPCKLBWrm",
1592 "(V?)PUNPCKLDQrm",
1593 "(V?)PUNPCKLQDQrm",
1594 "(V?)PUNPCKLWDrm",
1595 "(V?)SHUFPDrmi",
1596 "(V?)SHUFPSrmi",
1597 "(V?)UNPCKHPDrm",
1598 "(V?)UNPCKHPSrm",
1599 "(V?)UNPCKLPDrm",
1600 "(V?)UNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001601
Craig Topper58afb4e2018-03-22 21:10:07 +00001602def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001603 let Latency = 7;
1604 let NumMicroOps = 2;
1605 let ResourceCycles = [1,1];
1606}
Craig Topperfc179c62018-03-22 04:23:41 +00001607def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
1608 "VCVTPD2PSYrr",
1609 "VCVTPH2PSYrr",
1610 "VCVTPS2PDYrr",
1611 "VCVTPS2PHYrr",
1612 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001613
1614def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1615 let Latency = 7;
1616 let NumMicroOps = 2;
1617 let ResourceCycles = [1,1];
1618}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001619def: InstRW<[SKLWriteResGroup90], (instregex "(V?)PABSBrm",
1620 "(V?)PABSDrm",
1621 "(V?)PABSWrm",
1622 "(V?)PADDSBrm",
1623 "(V?)PADDSWrm",
1624 "(V?)PADDUSBrm",
1625 "(V?)PADDUSWrm",
1626 "(V?)PAVGBrm",
1627 "(V?)PAVGWrm",
1628 "(V?)PCMPEQBrm",
1629 "(V?)PCMPEQDrm",
1630 "(V?)PCMPEQQrm",
1631 "(V?)PCMPEQWrm",
1632 "(V?)PCMPGTBrm",
1633 "(V?)PCMPGTDrm",
1634 "(V?)PCMPGTWrm",
1635 "(V?)PMAXSBrm",
1636 "(V?)PMAXSDrm",
1637 "(V?)PMAXSWrm",
1638 "(V?)PMAXUBrm",
1639 "(V?)PMAXUDrm",
1640 "(V?)PMAXUWrm",
1641 "(V?)PMINSBrm",
1642 "(V?)PMINSDrm",
1643 "(V?)PMINSWrm",
1644 "(V?)PMINUBrm",
1645 "(V?)PMINUDrm",
1646 "(V?)PMINUWrm",
1647 "(V?)PSIGNBrm",
1648 "(V?)PSIGNDrm",
1649 "(V?)PSIGNWrm",
1650 "(V?)PSLLDrm",
1651 "(V?)PSLLQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001652 "VPSLLVDrm",
1653 "VPSLLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001654 "(V?)PSLLWrm",
1655 "(V?)PSRADrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001656 "VPSRAVDrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001657 "(V?)PSRAWrm",
1658 "(V?)PSRLDrm",
1659 "(V?)PSRLQrm",
1660 "(V?)PSRLVDrm",
Craig Topperfc179c62018-03-22 04:23:41 +00001661 "VPSRLVQrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001662 "(V?)PSRLWrm",
1663 "(V?)PSUBSBrm",
1664 "(V?)PSUBSWrm",
1665 "(V?)PSUBUSBrm",
1666 "(V?)PSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001667
1668def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1669 let Latency = 7;
1670 let NumMicroOps = 2;
1671 let ResourceCycles = [1,1];
1672}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001673def: InstRW<[SKLWriteResGroup91], (instregex "(V?)ANDNPDrm",
1674 "(V?)ANDNPSrm",
1675 "(V?)ANDPDrm",
1676 "(V?)ANDPSrm",
1677 "(V?)BLENDPDrmi",
1678 "(V?)BLENDPSrmi",
1679 "(V?)INSERTF128rm",
1680 "(V?)INSERTI128rm",
1681 "(V?)MASKMOVPDrm",
1682 "(V?)MASKMOVPSrm",
1683 "(V?)ORPDrm",
1684 "(V?)ORPSrm",
1685 "(V?)PADDBrm",
1686 "(V?)PADDDrm",
1687 "(V?)PADDQrm",
1688 "(V?)PADDWrm",
1689 "(V?)PANDNrm",
1690 "(V?)PANDrm",
1691 "(V?)PBLENDDrmi",
1692 "(V?)PMASKMOVDrm",
1693 "(V?)PMASKMOVQrm",
1694 "(V?)PORrm",
1695 "(V?)PSUBBrm",
1696 "(V?)PSUBDrm",
1697 "(V?)PSUBQrm",
1698 "(V?)PSUBWrm",
1699 "(V?)PXORrm",
1700 "(V?)XORPDrm",
1701 "(V?)XORPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001702
1703def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1704 let Latency = 7;
1705 let NumMicroOps = 3;
1706 let ResourceCycles = [2,1];
1707}
Craig Topperfc179c62018-03-22 04:23:41 +00001708def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
1709 "MMX_PACKSSWBirm",
1710 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001711
1712def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1713 let Latency = 7;
1714 let NumMicroOps = 3;
1715 let ResourceCycles = [1,2];
1716}
Craig Topperf4cd9082018-01-19 05:47:32 +00001717def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001718
1719def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1720 let Latency = 7;
1721 let NumMicroOps = 3;
1722 let ResourceCycles = [1,2];
1723}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001724def: InstRW<[SKLWriteResGroup94], (instrs LEAVE, LEAVE64,
1725 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001726
Craig Topper58afb4e2018-03-22 21:10:07 +00001727def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001728 let Latency = 7;
1729 let NumMicroOps = 3;
1730 let ResourceCycles = [1,1,1];
1731}
Craig Topperfc179c62018-03-22 04:23:41 +00001732def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
1733 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001734
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001735def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001736 let Latency = 7;
1737 let NumMicroOps = 3;
1738 let ResourceCycles = [1,1,1];
1739}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001740def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001741
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001742def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001743 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001744 let NumMicroOps = 3;
1745 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001746}
Craig Topperfc179c62018-03-22 04:23:41 +00001747def: InstRW<[SKLWriteResGroup97], (instregex "(V?)LDMXCSR")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001748
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001749def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001750 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001751 let NumMicroOps = 3;
1752 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001753}
Craig Topperfc179c62018-03-22 04:23:41 +00001754def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
1755 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001756
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001757def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1758 let Latency = 7;
1759 let NumMicroOps = 5;
1760 let ResourceCycles = [1,1,1,2];
1761}
Craig Topperfc179c62018-03-22 04:23:41 +00001762def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
1763 "ROL(8|16|32|64)mi",
1764 "ROR(8|16|32|64)m1",
1765 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001766
1767def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1768 let Latency = 7;
1769 let NumMicroOps = 5;
1770 let ResourceCycles = [1,1,1,2];
1771}
Craig Topper13a16502018-03-19 00:56:09 +00001772def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001773
1774def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
1775 let Latency = 7;
1776 let NumMicroOps = 5;
1777 let ResourceCycles = [1,1,1,1,1];
1778}
Craig Topperfc179c62018-03-22 04:23:41 +00001779def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
1780 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001781
1782def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001783 let Latency = 7;
1784 let NumMicroOps = 7;
1785 let ResourceCycles = [1,3,1,2];
1786}
Craig Topper2d451e72018-03-18 08:38:06 +00001787def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001788
Craig Topper58afb4e2018-03-22 21:10:07 +00001789def SKLWriteResGroup105 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001790 let Latency = 8;
1791 let NumMicroOps = 2;
1792 let ResourceCycles = [2];
1793}
Simon Pilgrim31a96332018-03-24 20:40:14 +00001794def: InstRW<[SKLWriteResGroup105], (instregex "(V?)ROUNDPD(Y?)r",
1795 "(V?)ROUNDPS(Y?)r",
1796 "(V?)ROUNDSDr",
1797 "(V?)ROUNDSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001798
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001799def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001800 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001801 let NumMicroOps = 2;
1802 let ResourceCycles = [1,1];
1803}
Craig Topperfc179c62018-03-22 04:23:41 +00001804def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
1805 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001806
1807def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
1808 let Latency = 8;
1809 let NumMicroOps = 2;
1810 let ResourceCycles = [1,1];
1811}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001812def: InstRW<[SKLWriteResGroup107], (instrs IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001813def: InstRW<[SKLWriteResGroup107], (instrs IMUL8m, MUL8m)>;
Simon Pilgrimf33d9052018-03-26 18:19:28 +00001814def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm",
1815 "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001816
1817def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001818 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001819 let NumMicroOps = 3;
Simon Pilgrim31a96332018-03-24 20:40:14 +00001820 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001821}
Craig Topperb369cdb2018-01-25 06:57:42 +00001822def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001823
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001824def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00001825 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001826 let NumMicroOps = 5;
1827}
Craig Topperfc179c62018-03-22 04:23:41 +00001828def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001829
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001830def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1831 let Latency = 8;
1832 let NumMicroOps = 2;
1833 let ResourceCycles = [1,1];
1834}
Craig Topperfc179c62018-03-22 04:23:41 +00001835def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
1836 "FCOM64m",
1837 "FCOMP32m",
1838 "FCOMP64m",
1839 "MMX_PSADBWirm",
1840 "VPACKSSDWYrm",
1841 "VPACKSSWBYrm",
1842 "VPACKUSDWYrm",
1843 "VPACKUSWBYrm",
1844 "VPALIGNRYrmi",
1845 "VPBLENDWYrmi",
1846 "VPBROADCASTBYrm",
1847 "VPBROADCASTWYrm",
1848 "VPERMILPDYmi",
1849 "VPERMILPDYrm",
1850 "VPERMILPSYmi",
1851 "VPERMILPSYrm",
1852 "VPMOVSXBDYrm",
1853 "VPMOVSXBQYrm",
1854 "VPMOVSXWQYrm",
1855 "VPSHUFBYrm",
1856 "VPSHUFDYmi",
1857 "VPSHUFHWYmi",
1858 "VPSHUFLWYmi",
1859 "VPUNPCKHBWYrm",
1860 "VPUNPCKHDQYrm",
1861 "VPUNPCKHQDQYrm",
1862 "VPUNPCKHWDYrm",
1863 "VPUNPCKLBWYrm",
1864 "VPUNPCKLDQYrm",
1865 "VPUNPCKLQDQYrm",
1866 "VPUNPCKLWDYrm",
1867 "VSHUFPDYrmi",
1868 "VSHUFPSYrmi",
1869 "VUNPCKHPDYrm",
1870 "VUNPCKHPSYrm",
1871 "VUNPCKLPDYrm",
1872 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001873
1874def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
1875 let Latency = 8;
1876 let NumMicroOps = 2;
1877 let ResourceCycles = [1,1];
1878}
Craig Topperfc179c62018-03-22 04:23:41 +00001879def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
1880 "VPABSDYrm",
1881 "VPABSWYrm",
1882 "VPADDSBYrm",
1883 "VPADDSWYrm",
1884 "VPADDUSBYrm",
1885 "VPADDUSWYrm",
1886 "VPAVGBYrm",
1887 "VPAVGWYrm",
1888 "VPCMPEQBYrm",
1889 "VPCMPEQDYrm",
1890 "VPCMPEQQYrm",
1891 "VPCMPEQWYrm",
1892 "VPCMPGTBYrm",
1893 "VPCMPGTDYrm",
1894 "VPCMPGTWYrm",
1895 "VPMAXSBYrm",
1896 "VPMAXSDYrm",
1897 "VPMAXSWYrm",
1898 "VPMAXUBYrm",
1899 "VPMAXUDYrm",
1900 "VPMAXUWYrm",
1901 "VPMINSBYrm",
1902 "VPMINSDYrm",
1903 "VPMINSWYrm",
1904 "VPMINUBYrm",
1905 "VPMINUDYrm",
1906 "VPMINUWYrm",
1907 "VPSIGNBYrm",
1908 "VPSIGNDYrm",
1909 "VPSIGNWYrm",
1910 "VPSLLDYrm",
1911 "VPSLLQYrm",
1912 "VPSLLVDYrm",
1913 "VPSLLVQYrm",
1914 "VPSLLWYrm",
1915 "VPSRADYrm",
1916 "VPSRAVDYrm",
1917 "VPSRAWYrm",
1918 "VPSRLDYrm",
1919 "VPSRLQYrm",
1920 "VPSRLVDYrm",
1921 "VPSRLVQYrm",
1922 "VPSRLWYrm",
1923 "VPSUBSBYrm",
1924 "VPSUBSWYrm",
1925 "VPSUBUSBYrm",
1926 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001927
1928def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
1929 let Latency = 8;
1930 let NumMicroOps = 2;
1931 let ResourceCycles = [1,1];
1932}
Craig Topperfc179c62018-03-22 04:23:41 +00001933def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
1934 "VANDNPSYrm",
1935 "VANDPDYrm",
1936 "VANDPSYrm",
1937 "VBLENDPDYrmi",
1938 "VBLENDPSYrmi",
1939 "VMASKMOVPDYrm",
1940 "VMASKMOVPSYrm",
1941 "VORPDYrm",
1942 "VORPSYrm",
1943 "VPADDBYrm",
1944 "VPADDDYrm",
1945 "VPADDQYrm",
1946 "VPADDWYrm",
1947 "VPANDNYrm",
1948 "VPANDYrm",
1949 "VPBLENDDYrmi",
1950 "VPMASKMOVDYrm",
1951 "VPMASKMOVQYrm",
1952 "VPORYrm",
1953 "VPSUBBYrm",
1954 "VPSUBDYrm",
1955 "VPSUBQYrm",
1956 "VPSUBWYrm",
1957 "VPXORYrm",
1958 "VXORPDYrm",
1959 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001960
1961def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001962 let Latency = 8;
1963 let NumMicroOps = 3;
1964 let ResourceCycles = [1,2];
1965}
Craig Topperfc179c62018-03-22 04:23:41 +00001966def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
1967 "BLENDVPSrm0",
1968 "PBLENDVBrm0",
1969 "VBLENDVPDrm",
1970 "VBLENDVPSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00001971 "VPBLENDVB(Y?)rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001972
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001973def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
1974 let Latency = 8;
1975 let NumMicroOps = 4;
1976 let ResourceCycles = [1,2,1];
1977}
Craig Topperfc179c62018-03-22 04:23:41 +00001978def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PHADDSWrm",
1979 "MMX_PHSUBSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001980
1981def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
1982 let Latency = 8;
1983 let NumMicroOps = 4;
1984 let ResourceCycles = [2,1,1];
1985}
Craig Topperfc179c62018-03-22 04:23:41 +00001986def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHADDDrm",
1987 "MMX_PHADDWrm",
1988 "MMX_PHSUBDrm",
1989 "MMX_PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001990
Craig Topper58afb4e2018-03-22 21:10:07 +00001991def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001992 let Latency = 8;
1993 let NumMicroOps = 4;
1994 let ResourceCycles = [1,1,1,1];
1995}
1996def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
1997
1998def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
1999 let Latency = 8;
2000 let NumMicroOps = 5;
2001 let ResourceCycles = [1,1,3];
2002}
Craig Topper13a16502018-03-19 00:56:09 +00002003def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002004
2005def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2006 let Latency = 8;
2007 let NumMicroOps = 5;
2008 let ResourceCycles = [1,1,1,2];
2009}
Craig Topperfc179c62018-03-22 04:23:41 +00002010def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
2011 "RCL(8|16|32|64)mi",
2012 "RCR(8|16|32|64)m1",
2013 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002014
2015def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2016 let Latency = 8;
2017 let NumMicroOps = 6;
2018 let ResourceCycles = [1,1,1,3];
2019}
Craig Topperfc179c62018-03-22 04:23:41 +00002020def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
2021 "SAR(8|16|32|64)mCL",
2022 "SHL(8|16|32|64)mCL",
2023 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002024
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002025def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2026 let Latency = 8;
2027 let NumMicroOps = 6;
2028 let ResourceCycles = [1,1,1,2,1];
2029}
Craig Topper9f834812018-04-01 21:54:24 +00002030def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mi",
2031 "ADC(8|16|32|64)mr",
Craig Topperfc179c62018-03-22 04:23:41 +00002032 "CMPXCHG(8|16|32|64)rm",
2033 "SBB(8|16|32|64)mi",
2034 "SBB(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002035
2036def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2037 let Latency = 9;
2038 let NumMicroOps = 2;
2039 let ResourceCycles = [1,1];
2040}
Craig Topperfc179c62018-03-22 04:23:41 +00002041def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
2042 "MMX_PMADDUBSWrm",
2043 "MMX_PMADDWDirm",
2044 "MMX_PMULHRSWrm",
2045 "MMX_PMULHUWirm",
2046 "MMX_PMULHWirm",
2047 "MMX_PMULLWirm",
2048 "MMX_PMULUDQirm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002049 "(V?)RCPSSm",
2050 "(V?)RSQRTSSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002051 "VTESTPDYrm",
2052 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002053
2054def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2055 let Latency = 9;
2056 let NumMicroOps = 2;
2057 let ResourceCycles = [1,1];
2058}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002059def: InstRW<[SKLWriteResGroup121], (instregex "(V?)PCMPGTQrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002060 "VPMOVSXBWYrm",
2061 "VPMOVSXDQYrm",
2062 "VPMOVSXWDYrm",
2063 "VPMOVZXWDYrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002064 "(V?)PSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002065
2066def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2067 let Latency = 9;
2068 let NumMicroOps = 2;
2069 let ResourceCycles = [1,1];
2070}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002071def: InstRW<[SKLWriteResGroup122], (instregex "(V?)ADDSDrm",
2072 "(V?)ADDSSrm",
2073 "(V?)CMPSDrm",
2074 "(V?)CMPSSrm",
2075 "(V?)MAX(C?)SDrm",
2076 "(V?)MAX(C?)SSrm",
2077 "(V?)MIN(C?)SDrm",
2078 "(V?)MIN(C?)SSrm",
2079 "(V?)MULSDrm",
2080 "(V?)MULSSrm",
2081 "(V?)SUBSDrm",
2082 "(V?)SUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00002083def: InstRW<[SKLWriteResGroup122],
2084 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002085
Craig Topper58afb4e2018-03-22 21:10:07 +00002086def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002087 let Latency = 9;
2088 let NumMicroOps = 2;
2089 let ResourceCycles = [1,1];
2090}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002091def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002092 "MMX_CVTTPS2PIirm",
Craig Topperfc179c62018-03-22 04:23:41 +00002093 "VCVTPH2PSrm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002094 "(V?)CVTPS2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002095
Craig Topper58afb4e2018-03-22 21:10:07 +00002096def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002097 let Latency = 9;
2098 let NumMicroOps = 3;
2099 let ResourceCycles = [1,2];
2100}
Craig Topperfc179c62018-03-22 04:23:41 +00002101def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002102
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002103def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2104 let Latency = 9;
2105 let NumMicroOps = 3;
2106 let ResourceCycles = [1,2];
2107}
Craig Topperfc179c62018-03-22 04:23:41 +00002108def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
2109 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002110
2111def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2112 let Latency = 9;
2113 let NumMicroOps = 3;
2114 let ResourceCycles = [1,1,1];
2115}
Craig Topperfc179c62018-03-22 04:23:41 +00002116def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002117
2118def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
2119 let Latency = 9;
2120 let NumMicroOps = 3;
2121 let ResourceCycles = [1,1,1];
2122}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002123def: InstRW<[SKLWriteResGroup127], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002124
2125def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002126 let Latency = 9;
2127 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002128 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002129}
Craig Topperfc179c62018-03-22 04:23:41 +00002130def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
2131 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002132
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002133def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2134 let Latency = 9;
2135 let NumMicroOps = 4;
2136 let ResourceCycles = [2,1,1];
2137}
Craig Topperfc179c62018-03-22 04:23:41 +00002138def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
2139 "(V?)PHADDWrm",
2140 "(V?)PHSUBDrm",
2141 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002142
2143def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
2144 let Latency = 9;
2145 let NumMicroOps = 4;
2146 let ResourceCycles = [1,1,1,1];
2147}
Craig Topperfc179c62018-03-22 04:23:41 +00002148def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
2149 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002150
2151def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2152 let Latency = 9;
2153 let NumMicroOps = 5;
2154 let ResourceCycles = [1,2,1,1];
2155}
Craig Topperfc179c62018-03-22 04:23:41 +00002156def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
2157 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002158
2159def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2160 let Latency = 10;
2161 let NumMicroOps = 2;
2162 let ResourceCycles = [1,1];
2163}
Simon Pilgrim7684e052018-03-22 13:18:08 +00002164def: InstRW<[SKLWriteResGroup132], (instregex "(V?)RCPPSm",
Craig Topperfc179c62018-03-22 04:23:41 +00002165 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002166
2167def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2168 let Latency = 10;
2169 let NumMicroOps = 2;
2170 let ResourceCycles = [1,1];
2171}
Craig Topperfc179c62018-03-22 04:23:41 +00002172def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
2173 "ADD_F64m",
2174 "ILD_F16m",
2175 "ILD_F32m",
2176 "ILD_F64m",
2177 "SUBR_F32m",
2178 "SUBR_F64m",
2179 "SUB_F32m",
2180 "SUB_F64m",
2181 "VPCMPGTQYrm",
2182 "VPERM2F128rm",
2183 "VPERM2I128rm",
2184 "VPERMDYrm",
2185 "VPERMPDYmi",
2186 "VPERMPSYrm",
2187 "VPERMQYmi",
2188 "VPMOVZXBDYrm",
2189 "VPMOVZXBQYrm",
2190 "VPMOVZXBWYrm",
2191 "VPMOVZXDQYrm",
2192 "VPMOVZXWQYrm",
2193 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002194
2195def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2196 let Latency = 10;
2197 let NumMicroOps = 2;
2198 let ResourceCycles = [1,1];
2199}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002200def: InstRW<[SKLWriteResGroup134], (instregex "(V?)ADDPDrm",
2201 "(V?)ADDPSrm",
2202 "(V?)ADDSUBPDrm",
2203 "(V?)ADDSUBPSrm",
2204 "(V?)CMPPDrmi",
2205 "(V?)CMPPSrmi",
2206 "(V?)CVTDQ2PSrm",
2207 "(V?)CVTPH2PSYrm",
2208 "(V?)CVTPS2DQrm",
2209 "(V?)CVTSS2SDrm",
2210 "(V?)CVTTPS2DQrm",
2211 "(V?)MAX(C?)PDrm",
2212 "(V?)MAX(C?)PSrm",
2213 "(V?)MIN(C?)PDrm",
2214 "(V?)MIN(C?)PSrm",
2215 "(V?)MULPDrm",
2216 "(V?)MULPSrm",
2217 "(V?)PHMINPOSUWrm",
2218 "(V?)PMADDUBSWrm",
2219 "(V?)PMADDWDrm",
2220 "(V?)PMULDQrm",
2221 "(V?)PMULHRSWrm",
2222 "(V?)PMULHUWrm",
2223 "(V?)PMULHWrm",
2224 "(V?)PMULLWrm",
2225 "(V?)PMULUDQrm",
2226 "(V?)SUBPDrm",
2227 "(V?)SUBPSrm")>;
Craig Topper58afb4e2018-03-22 21:10:07 +00002228def: InstRW<[SKLWriteResGroup134],
2229 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002230
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002231def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2232 let Latency = 10;
2233 let NumMicroOps = 3;
2234 let ResourceCycles = [2,1];
2235}
Craig Topperfc179c62018-03-22 04:23:41 +00002236def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002237
2238def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2239 let Latency = 10;
2240 let NumMicroOps = 3;
2241 let ResourceCycles = [1,1,1];
2242}
Craig Topperfc179c62018-03-22 04:23:41 +00002243def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2244 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002245
Craig Topper58afb4e2018-03-22 21:10:07 +00002246def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002247 let Latency = 10;
2248 let NumMicroOps = 3;
2249 let ResourceCycles = [1,1,1];
2250}
Craig Topperfc179c62018-03-22 04:23:41 +00002251def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002252
2253def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002254 let Latency = 10;
2255 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002256 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002257}
Craig Topperfc179c62018-03-22 04:23:41 +00002258def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2259 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002260
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002261def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2262 let Latency = 10;
2263 let NumMicroOps = 4;
2264 let ResourceCycles = [2,1,1];
2265}
Craig Topperfc179c62018-03-22 04:23:41 +00002266def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2267 "VPHADDWYrm",
2268 "VPHSUBDYrm",
2269 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002270
2271def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002272 let Latency = 9;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002273 let NumMicroOps = 4;
2274 let ResourceCycles = [1,1,1,1];
2275}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002276def: InstRW<[SKLWriteResGroup142], (instrs IMUL32rm, MUL32m, MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002277
2278def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2279 let Latency = 10;
2280 let NumMicroOps = 8;
2281 let ResourceCycles = [1,1,1,1,1,3];
2282}
Craig Topper13a16502018-03-19 00:56:09 +00002283def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002284
2285def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002286 let Latency = 10;
2287 let NumMicroOps = 10;
2288 let ResourceCycles = [9,1];
2289}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002290def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002291
Craig Topper8104f262018-04-02 05:33:28 +00002292def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002293 let Latency = 11;
2294 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002295 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002296}
Craig Topper8104f262018-04-02 05:33:28 +00002297def: InstRW<[SKLWriteResGroup145], (instregex "(V?)DIVPSrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002298 "(V?)DIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002299
Craig Topper8104f262018-04-02 05:33:28 +00002300def SKLWriteResGroup145_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2301 let Latency = 11;
2302 let NumMicroOps = 1;
2303 let ResourceCycles = [1,5];
2304}
2305def: InstRW<[SKLWriteResGroup145_1], (instregex "VDIVPSYrr")>;
2306
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002307def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002308 let Latency = 11;
2309 let NumMicroOps = 2;
2310 let ResourceCycles = [1,1];
2311}
Craig Topperfc179c62018-03-22 04:23:41 +00002312def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
2313 "MUL_F64m",
2314 "VRCPPSYm",
2315 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002316
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002317def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2318 let Latency = 11;
2319 let NumMicroOps = 2;
2320 let ResourceCycles = [1,1];
2321}
Craig Topperfc179c62018-03-22 04:23:41 +00002322def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
2323 "VADDPSYrm",
2324 "VADDSUBPDYrm",
2325 "VADDSUBPSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002326 "VCMPPDYrmi",
Craig Topperfc179c62018-03-22 04:23:41 +00002327 "VCMPPSYrmi",
2328 "VCVTDQ2PSYrm",
2329 "VCVTPS2DQYrm",
2330 "VCVTPS2PDYrm",
2331 "VCVTTPS2DQYrm",
2332 "VMAX(C?)PDYrm",
2333 "VMAX(C?)PSYrm",
2334 "VMIN(C?)PDYrm",
2335 "VMIN(C?)PSYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002336 "VMULPDYrm",
2337 "VMULPSYrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002338 "VPMADDUBSWYrm",
2339 "VPMADDWDYrm",
2340 "VPMULDQYrm",
2341 "VPMULHRSWYrm",
2342 "VPMULHUWYrm",
2343 "VPMULHWYrm",
2344 "VPMULLWYrm",
Craig Topper58afb4e2018-03-22 21:10:07 +00002345 "VPMULUDQYrm",
2346 "VSUBPDYrm",
2347 "VSUBPSYrm")>;
2348def: InstRW<[SKLWriteResGroup147],
2349 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002350
2351def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2352 let Latency = 11;
2353 let NumMicroOps = 3;
2354 let ResourceCycles = [2,1];
2355}
Craig Topperfc179c62018-03-22 04:23:41 +00002356def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
2357 "FICOM32m",
2358 "FICOMP16m",
2359 "FICOMP32m",
2360 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002361
2362def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2363 let Latency = 11;
2364 let NumMicroOps = 3;
2365 let ResourceCycles = [1,1,1];
2366}
Craig Topperfc179c62018-03-22 04:23:41 +00002367def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002368
Craig Topper58afb4e2018-03-22 21:10:07 +00002369def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002370 let Latency = 11;
2371 let NumMicroOps = 3;
2372 let ResourceCycles = [1,1,1];
2373}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002374def: InstRW<[SKLWriteResGroup151], (instregex "(V?)CVTSD2SI64rm",
2375 "(V?)CVTSD2SIrm",
2376 "(V?)CVTSS2SI64rm",
2377 "(V?)CVTSS2SIrm",
2378 "(V?)CVTTSD2SI64rm",
2379 "(V?)CVTTSD2SIrm",
Craig Topperfc179c62018-03-22 04:23:41 +00002380 "VCVTTSS2SI64rm",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002381 "(V?)CVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002382
Craig Topper58afb4e2018-03-22 21:10:07 +00002383def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002384 let Latency = 11;
2385 let NumMicroOps = 3;
2386 let ResourceCycles = [1,1,1];
2387}
Craig Topperfc179c62018-03-22 04:23:41 +00002388def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
2389 "CVTPD2PSrm",
2390 "CVTTPD2DQrm",
2391 "MMX_CVTPD2PIirm",
2392 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002393
2394def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2395 let Latency = 11;
2396 let NumMicroOps = 6;
2397 let ResourceCycles = [1,1,1,2,1];
2398}
Craig Topperfc179c62018-03-22 04:23:41 +00002399def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
2400 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002401
2402def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002403 let Latency = 11;
2404 let NumMicroOps = 7;
2405 let ResourceCycles = [2,3,2];
2406}
Craig Topperfc179c62018-03-22 04:23:41 +00002407def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
2408 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002409
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002410def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002411 let Latency = 11;
2412 let NumMicroOps = 9;
2413 let ResourceCycles = [1,5,1,2];
2414}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002415def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002416
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002417def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002418 let Latency = 11;
2419 let NumMicroOps = 11;
2420 let ResourceCycles = [2,9];
2421}
Craig Topperfc179c62018-03-22 04:23:41 +00002422def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002423
Craig Topper8104f262018-04-02 05:33:28 +00002424def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002425 let Latency = 12;
2426 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002427 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002428}
Craig Topper8104f262018-04-02 05:33:28 +00002429def: InstRW<[SKLWriteResGroup157], (instregex "(V?)SQRTPSr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002430 "(V?)SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002431
Craig Topper8104f262018-04-02 05:33:28 +00002432def SKLWriteResGroup158 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2433 let Latency = 12;
2434 let NumMicroOps = 1;
2435 let ResourceCycles = [1,6];
2436}
2437def: InstRW<[SKLWriteResGroup158], (instregex "VSQRTPSYr")>;
2438
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002439def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
2440 let Latency = 12;
2441 let NumMicroOps = 4;
2442 let ResourceCycles = [2,1,1];
2443}
Craig Topperfc179c62018-03-22 04:23:41 +00002444def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
2445 "(V?)HADDPSrm",
2446 "(V?)HSUBPDrm",
2447 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002448
Craig Topper58afb4e2018-03-22 21:10:07 +00002449def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002450 let Latency = 12;
2451 let NumMicroOps = 4;
2452 let ResourceCycles = [1,1,1,1];
2453}
2454def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
2455
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002456def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002457 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002458 let NumMicroOps = 3;
2459 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002460}
Craig Topperfc179c62018-03-22 04:23:41 +00002461def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
2462 "ADD_FI32m",
2463 "SUBR_FI16m",
2464 "SUBR_FI32m",
2465 "SUB_FI16m",
2466 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002467
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002468def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2469 let Latency = 13;
2470 let NumMicroOps = 3;
2471 let ResourceCycles = [1,1,1];
2472}
2473def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
2474
Craig Topper58afb4e2018-03-22 21:10:07 +00002475def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002476 let Latency = 13;
2477 let NumMicroOps = 4;
2478 let ResourceCycles = [1,3];
2479}
Simon Pilgrim31a96332018-03-24 20:40:14 +00002480def: InstRW<[SKLWriteResGroup164], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002481
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002482def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002483 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002484 let NumMicroOps = 4;
2485 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002486}
Craig Topperfc179c62018-03-22 04:23:41 +00002487def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
2488 "VHADDPSYrm",
2489 "VHSUBPDYrm",
2490 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002491
Craig Topper8104f262018-04-02 05:33:28 +00002492def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002493 let Latency = 14;
2494 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002495 let ResourceCycles = [1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002496}
Craig Topper8104f262018-04-02 05:33:28 +00002497def: InstRW<[SKLWriteResGroup166], (instregex "(V?)DIVPDrr",
Simon Pilgrim31a96332018-03-24 20:40:14 +00002498 "(V?)DIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002499
Craig Topper8104f262018-04-02 05:33:28 +00002500def SKLWriteResGroup166_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2501 let Latency = 14;
2502 let NumMicroOps = 1;
2503 let ResourceCycles = [1,5];
2504}
2505def: InstRW<[SKLWriteResGroup166_1], (instregex "VDIVPDYrr")>;
2506
Craig Topper58afb4e2018-03-22 21:10:07 +00002507def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002508 let Latency = 14;
2509 let NumMicroOps = 3;
2510 let ResourceCycles = [1,2];
2511}
Craig Topperfc179c62018-03-22 04:23:41 +00002512def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
2513def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
2514def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
2515def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002516
2517def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2518 let Latency = 14;
2519 let NumMicroOps = 3;
2520 let ResourceCycles = [1,1,1];
2521}
Craig Topperfc179c62018-03-22 04:23:41 +00002522def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
2523 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002524
2525def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002526 let Latency = 14;
2527 let NumMicroOps = 10;
2528 let ResourceCycles = [2,4,1,3];
2529}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002530def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002531
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002532def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002533 let Latency = 15;
2534 let NumMicroOps = 1;
2535 let ResourceCycles = [1];
2536}
Craig Topperfc179c62018-03-22 04:23:41 +00002537def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
2538 "DIVR_FST0r",
2539 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002540
Craig Topper58afb4e2018-03-22 21:10:07 +00002541def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002542 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002543 let NumMicroOps = 3;
2544 let ResourceCycles = [1,2];
2545}
Craig Topper40d3b322018-03-22 21:55:20 +00002546def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDPDYm",
2547 "VROUNDPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002548
Craig Topperd25f1ac2018-03-20 23:39:48 +00002549def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
2550 let Latency = 17;
2551 let NumMicroOps = 3;
2552 let ResourceCycles = [1,2];
2553}
2554def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
2555
Craig Topper58afb4e2018-03-22 21:10:07 +00002556def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002557 let Latency = 15;
2558 let NumMicroOps = 4;
2559 let ResourceCycles = [1,1,2];
2560}
Craig Topperfc179c62018-03-22 04:23:41 +00002561def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002562
2563def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2564 let Latency = 15;
2565 let NumMicroOps = 10;
2566 let ResourceCycles = [1,1,1,5,1,1];
2567}
Craig Topper13a16502018-03-19 00:56:09 +00002568def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002569
Craig Topper8104f262018-04-02 05:33:28 +00002570def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002571 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002572 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002573 let ResourceCycles = [1,1,3];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002574}
Craig Topperfc179c62018-03-22 04:23:41 +00002575def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002576
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002577def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
2578 let Latency = 16;
2579 let NumMicroOps = 14;
2580 let ResourceCycles = [1,1,1,4,2,5];
2581}
2582def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
2583
2584def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002585 let Latency = 16;
2586 let NumMicroOps = 16;
2587 let ResourceCycles = [16];
2588}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002589def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002590
Craig Topper8104f262018-04-02 05:33:28 +00002591def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002592 let Latency = 17;
2593 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002594 let ResourceCycles = [1,1,5];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002595}
Craig Topper8104f262018-04-02 05:33:28 +00002596def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm")>;
2597
2598def SKLWriteResGroup179_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2599 let Latency = 17;
2600 let NumMicroOps = 2;
2601 let ResourceCycles = [1,1,3];
2602}
2603def: InstRW<[SKLWriteResGroup179_1], (instregex "(V?)SQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002604
2605def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002606 let Latency = 17;
2607 let NumMicroOps = 15;
2608 let ResourceCycles = [2,1,2,4,2,4];
2609}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002610def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002611
Craig Topper8104f262018-04-02 05:33:28 +00002612def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002613 let Latency = 18;
2614 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002615 let ResourceCycles = [1,6];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002616}
Craig Topper8104f262018-04-02 05:33:28 +00002617def: InstRW<[SKLWriteResGroup181], (instregex "(V?)SQRTPDr",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002618 "(V?)SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002619
Craig Topper8104f262018-04-02 05:33:28 +00002620def SKLWriteResGroup181_1 : SchedWriteRes<[SKLPort0,SKLFPDivider]> {
2621 let Latency = 18;
2622 let NumMicroOps = 1;
2623 let ResourceCycles = [1,12];
2624}
2625def: InstRW<[SKLWriteResGroup181_1], (instregex "VSQRTPDYr")>;
2626
2627def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002628 let Latency = 18;
2629 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002630 let ResourceCycles = [1,1,5];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002631}
Craig Topper8104f262018-04-02 05:33:28 +00002632def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
2633
2634def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2635 let Latency = 18;
2636 let NumMicroOps = 2;
2637 let ResourceCycles = [1,1,3];
2638}
2639def: InstRW<[SKLWriteResGroup183], (instregex "(V?)SQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002640
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002641def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002642 let Latency = 18;
2643 let NumMicroOps = 8;
2644 let ResourceCycles = [1,1,1,5];
2645}
Craig Topperfc179c62018-03-22 04:23:41 +00002646def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002647
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002648def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002649 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002650 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002651 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002652}
Craig Topper13a16502018-03-19 00:56:09 +00002653def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002654
Craig Topper8104f262018-04-02 05:33:28 +00002655def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002656 let Latency = 19;
2657 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002658 let ResourceCycles = [1,1,4];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002659}
Craig Topper8104f262018-04-02 05:33:28 +00002660def: InstRW<[SKLWriteResGroup186], (instregex "(V?)DIVSDrm")>;
2661
2662def SKLWriteResGroup186_1 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
2663 let Latency = 19;
2664 let NumMicroOps = 2;
2665 let ResourceCycles = [1,1,6];
2666}
2667def: InstRW<[SKLWriteResGroup186_1], (instregex "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002668
Craig Topper58afb4e2018-03-22 21:10:07 +00002669def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002670 let Latency = 19;
2671 let NumMicroOps = 5;
2672 let ResourceCycles = [1,1,3];
2673}
Craig Topperfc179c62018-03-22 04:23:41 +00002674def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002675
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002676def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002677 let Latency = 20;
2678 let NumMicroOps = 1;
2679 let ResourceCycles = [1];
2680}
Craig Topperfc179c62018-03-22 04:23:41 +00002681def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
2682 "DIV_FST0r",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002683 "DIV_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002684
Craig Topper8104f262018-04-02 05:33:28 +00002685def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002686 let Latency = 20;
2687 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002688 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002689}
Craig Topperfc179c62018-03-22 04:23:41 +00002690def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002691
Craig Topper58afb4e2018-03-22 21:10:07 +00002692def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort01]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002693 let Latency = 20;
2694 let NumMicroOps = 5;
2695 let ResourceCycles = [1,1,3];
2696}
2697def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
2698
2699def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2700 let Latency = 20;
2701 let NumMicroOps = 8;
2702 let ResourceCycles = [1,1,1,1,1,1,2];
2703}
Craig Topperfc179c62018-03-22 04:23:41 +00002704def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
2705 "INSL",
2706 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002707
2708def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002709 let Latency = 20;
2710 let NumMicroOps = 10;
2711 let ResourceCycles = [1,2,7];
2712}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002713def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002714
Craig Topper8104f262018-04-02 05:33:28 +00002715def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002716 let Latency = 21;
2717 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002718 let ResourceCycles = [1,1,8];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002719}
2720def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
2721
2722def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2723 let Latency = 22;
2724 let NumMicroOps = 2;
2725 let ResourceCycles = [1,1];
2726}
Craig Topperfc179c62018-03-22 04:23:41 +00002727def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
2728 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002729
2730def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2731 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002732 let NumMicroOps = 5;
2733 let ResourceCycles = [1,2,1,1];
2734}
Craig Topper17a31182017-12-16 18:35:29 +00002735def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
2736 VGATHERDPDrm,
2737 VGATHERQPDrm,
2738 VGATHERQPSrm,
2739 VPGATHERDDrm,
2740 VPGATHERDQrm,
2741 VPGATHERQDrm,
2742 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002743
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002744def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
2745 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002746 let NumMicroOps = 5;
2747 let ResourceCycles = [1,2,1,1];
2748}
Craig Topper17a31182017-12-16 18:35:29 +00002749def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
2750 VGATHERQPDYrm,
2751 VGATHERQPSYrm,
2752 VPGATHERDDYrm,
2753 VPGATHERDQYrm,
2754 VPGATHERQDYrm,
2755 VPGATHERQQYrm,
2756 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002757
Craig Topper8104f262018-04-02 05:33:28 +00002758def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002759 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002760 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002761 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002762}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002763def: InstRW<[SKLWriteResGroup197], (instregex "(V?)SQRTSDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002764
2765def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2766 let Latency = 23;
2767 let NumMicroOps = 19;
2768 let ResourceCycles = [2,1,4,1,1,4,6];
2769}
2770def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
2771
Craig Topper8104f262018-04-02 05:33:28 +00002772def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002773 let Latency = 24;
2774 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002775 let ResourceCycles = [1,1,6];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002776}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002777def: InstRW<[SKLWriteResGroup199], (instregex "(V?)SQRTPDm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002778
Craig Topper8104f262018-04-02 05:33:28 +00002779def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23,SKLFPDivider]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002780 let Latency = 25;
2781 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002782 let ResourceCycles = [1,1,12];
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002783}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002784def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002785
2786def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2787 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002788 let NumMicroOps = 3;
2789 let ResourceCycles = [1,1,1];
2790}
Craig Topperfc179c62018-03-22 04:23:41 +00002791def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
2792 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002793
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002794def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2795 let Latency = 27;
2796 let NumMicroOps = 2;
2797 let ResourceCycles = [1,1];
2798}
Craig Topperfc179c62018-03-22 04:23:41 +00002799def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
2800 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002801
2802def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
2803 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002804 let NumMicroOps = 8;
2805 let ResourceCycles = [2,4,1,1];
2806}
Craig Topper13a16502018-03-19 00:56:09 +00002807def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002808
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002809def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002810 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002811 let NumMicroOps = 3;
2812 let ResourceCycles = [1,1,1];
2813}
Craig Topperfc179c62018-03-22 04:23:41 +00002814def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
2815 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002816
2817def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
2818 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002819 let NumMicroOps = 23;
2820 let ResourceCycles = [1,5,3,4,10];
2821}
Craig Topperfc179c62018-03-22 04:23:41 +00002822def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
2823 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002824
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002825def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2826 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002827 let NumMicroOps = 23;
2828 let ResourceCycles = [1,5,2,1,4,10];
2829}
Craig Topperfc179c62018-03-22 04:23:41 +00002830def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
2831 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002832
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002833def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2834 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002835 let NumMicroOps = 31;
2836 let ResourceCycles = [1,8,1,21];
2837}
Craig Topper391c6f92017-12-10 01:24:08 +00002838def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002839
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002840def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
2841 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002842 let NumMicroOps = 18;
2843 let ResourceCycles = [1,1,2,3,1,1,1,8];
2844}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002845def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002846
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002847def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2848 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002849 let NumMicroOps = 39;
2850 let ResourceCycles = [1,10,1,1,26];
2851}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002852def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002853
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002854def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002855 let Latency = 42;
2856 let NumMicroOps = 22;
2857 let ResourceCycles = [2,20];
2858}
Craig Topper2d451e72018-03-18 08:38:06 +00002859def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002860
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002861def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2862 let Latency = 42;
2863 let NumMicroOps = 40;
2864 let ResourceCycles = [1,11,1,1,26];
2865}
Craig Topper391c6f92017-12-10 01:24:08 +00002866def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002867
2868def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2869 let Latency = 46;
2870 let NumMicroOps = 44;
2871 let ResourceCycles = [1,11,1,1,30];
2872}
2873def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
2874
2875def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
2876 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002877 let NumMicroOps = 64;
2878 let ResourceCycles = [2,8,5,10,39];
2879}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002880def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002881
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002882def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2883 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002884 let NumMicroOps = 88;
2885 let ResourceCycles = [4,4,31,1,2,1,45];
2886}
Craig Topper2d451e72018-03-18 08:38:06 +00002887def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002888
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002889def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
2890 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002891 let NumMicroOps = 90;
2892 let ResourceCycles = [4,2,33,1,2,1,47];
2893}
Craig Topper2d451e72018-03-18 08:38:06 +00002894def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002895
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002896def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002897 let Latency = 75;
2898 let NumMicroOps = 15;
2899 let ResourceCycles = [6,3,6];
2900}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002901def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002902
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002903def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002904 let Latency = 76;
2905 let NumMicroOps = 32;
2906 let ResourceCycles = [7,2,8,3,1,11];
2907}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002908def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002909
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002910def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002911 let Latency = 102;
2912 let NumMicroOps = 66;
2913 let ResourceCycles = [4,2,4,8,14,34];
2914}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002915def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002916
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002917def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
2918 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002919 let NumMicroOps = 100;
2920 let ResourceCycles = [9,1,11,16,1,11,21,30];
2921}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002922def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002923
2924} // SchedModel