blob: 99859e5737779376b19b78846d4824b21cc47045 [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;
22
23 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
26 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
28 let CompleteModel = 0;
29}
30
31let SchedModel = SkylakeClientModel in {
32
33// Skylake Client can issue micro-ops to 8 different ports in one cycle.
34
35// Ports 0, 1, 5, and 6 handle all computation.
36// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def SKLPort0 : ProcResource<1>;
42def SKLPort1 : ProcResource<1>;
43def SKLPort2 : ProcResource<1>;
44def SKLPort3 : ProcResource<1>;
45def SKLPort4 : ProcResource<1>;
46def SKLPort5 : ProcResource<1>;
47def SKLPort6 : ProcResource<1>;
48def SKLPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
51def SKLPort01 : ProcResGroup<[SKLPort0, SKLPort1]>;
52def SKLPort23 : ProcResGroup<[SKLPort2, SKLPort3]>;
53def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54def SKLPort04 : ProcResGroup<[SKLPort0, SKLPort4]>;
55def SKLPort05 : ProcResGroup<[SKLPort0, SKLPort5]>;
56def SKLPort06 : ProcResGroup<[SKLPort0, SKLPort6]>;
57def SKLPort15 : ProcResGroup<[SKLPort1, SKLPort5]>;
58def SKLPort16 : ProcResGroup<[SKLPort1, SKLPort6]>;
59def SKLPort56 : ProcResGroup<[SKLPort5, SKLPort6]>;
60def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
64// 60 Entry Unified Scheduler
65def SKLPortAny : ProcResGroup<[SKLPort0, SKLPort1, SKLPort2, SKLPort3, SKLPort4,
66 SKLPort5, SKLPort6, SKLPort7]> {
67 let BufferSize=60;
68}
69
70// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
71// cycles after the memory operand.
72def : ReadAdvance<ReadAfterLd, 5>;
73
74// Many SchedWrites are defined in pairs with and without a folded load.
75// Instructions with folded loads are usually micro-fused, so they only appear
76// as two micro-ops when queued in the reservation station.
77// This multiclass defines the resource usage for variants with and without
78// folded loads.
79multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000080 list<ProcResourceKind> ExePorts,
81 int Lat, list<int> Res = [1], int UOps = 1> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +000082 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000083 def : WriteRes<SchedRW, ExePorts> {
84 let Latency = Lat;
85 let ResourceCycles = Res;
86 let NumMicroOps = UOps;
87 }
Gadi Haber6f8fbf42017-09-19 06:19:27 +000088
89 // Memory variant also uses a cycle on port 2/3 and adds 5 cycles to the
90 // latency.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000091 def : WriteRes<SchedRW.Folded, !listconcat([SKLPort23], ExePorts)> {
92 let Latency = !add(Lat, 5);
93 let ResourceCycles = !listconcat([1], Res);
94 let NumMicroOps = UOps;
Gadi Haber6f8fbf42017-09-19 06:19:27 +000095 }
96}
97
98// A folded store needs a cycle on port 4 for the store data, but it does not
99// need an extra port 2/3 cycle to recompute the address.
100def : WriteRes<WriteRMW, [SKLPort4]>;
101
102// Arithmetic.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000103defm : SKLWriteResPair<WriteALU, [SKLPort0156], 1>; // Simple integer ALU op.
104defm : SKLWriteResPair<WriteIMul, [SKLPort1], 3>; // Integer multiplication.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000105def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
106def SKLDivider : ProcResource<1>; // Integer division issued on port 0.
107def : WriteRes<WriteIDiv, [SKLPort0, SKLDivider]> { // Integer division.
108 let Latency = 25;
109 let ResourceCycles = [1, 10];
110}
111def : WriteRes<WriteIDivLd, [SKLPort23, SKLPort0, SKLDivider]> {
112 let Latency = 29;
113 let ResourceCycles = [1, 1, 10];
114}
115
116def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
117
118// Integer shifts and rotates.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000119defm : SKLWriteResPair<WriteShift, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000120
121// Loads, stores, and moves, not folded with other operations.
122def : WriteRes<WriteLoad, [SKLPort23]> { let Latency = 5; }
123def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
124def : WriteRes<WriteMove, [SKLPort0156]>;
125
126// Idioms that clear a register, like xorps %xmm0, %xmm0.
127// These can often bypass execution ports completely.
128def : WriteRes<WriteZero, []>;
129
130// Branches don't produce values, so they have no latency, but they still
131// consume resources. Indirect branches can fold loads.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000132defm : SKLWriteResPair<WriteJump, [SKLPort06], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000133
134// Floating point. This covers both scalar and vector operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000135def : WriteRes<WriteFLoad, [SKLPort23]> { let Latency = 6; }
136def : WriteRes<WriteFStore, [SKLPort237, SKLPort4]>;
137def : WriteRes<WriteFMove, [SKLPort015]>;
138
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000139defm : SKLWriteResPair<WriteFAdd, [SKLPort1], 3>; // Floating point add/sub/compare.
140defm : SKLWriteResPair<WriteFMul, [SKLPort0], 5>; // Floating point multiplication.
141defm : SKLWriteResPair<WriteFDiv, [SKLPort0], 12>; // 10-14 cycles. // Floating point division.
142defm : SKLWriteResPair<WriteFSqrt, [SKLPort0], 15>; // Floating point square root.
143defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 5>; // Floating point reciprocal estimate.
144defm : SKLWriteResPair<WriteFRsqrt, [SKLPort0], 5>; // Floating point reciprocal square root estimate.
145defm : SKLWriteResPair<WriteFMA, [SKLPort01], 4>; // Fused Multiply Add.
146defm : SKLWriteResPair<WriteFShuffle, [SKLPort5], 1>; // Floating point vector shuffles.
147defm : SKLWriteResPair<WriteFBlend, [SKLPort015], 1>; // Floating point vector blends.
148defm : SKLWriteResPair<WriteFVarBlend, [SKLPort5], 2, [2]>; // Fp vector variable blends.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000149
150// FMA Scheduling helper class.
151// class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
152
153// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000154def : WriteRes<WriteVecLoad, [SKLPort23]> { let Latency = 6; }
155def : WriteRes<WriteVecStore, [SKLPort237, SKLPort4]>;
156def : WriteRes<WriteVecMove, [SKLPort015]>;
157
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000158defm : SKLWriteResPair<WriteVecALU, [SKLPort15], 1>; // Vector integer ALU op, no logicals.
159defm : SKLWriteResPair<WriteVecShift, [SKLPort0], 1>; // Vector integer shifts.
160defm : SKLWriteResPair<WriteVecIMul, [SKLPort0], 5>; // Vector integer multiply.
161defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1>; // Vector shuffles.
162defm : SKLWriteResPair<WriteBlend, [SKLPort15], 1>; // Vector blends.
163defm : SKLWriteResPair<WriteVarBlend, [SKLPort5], 2, [2]>; // Vector variable blends.
164defm : SKLWriteResPair<WriteMPSAD, [SKLPort0, SKLPort5], 6, [1, 2]>; // Vector MPSAD.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000165
166// Vector bitwise operations.
167// These are often used on both floating point and integer vectors.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : SKLWriteResPair<WriteVecLogic, [SKLPort015], 1>; // Vector and/or/xor.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000169
170// Conversion between integer and float.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000171defm : SKLWriteResPair<WriteCvtF2I, [SKLPort1], 3>; // Float -> Integer.
172defm : SKLWriteResPair<WriteCvtI2F, [SKLPort1], 4>; // Integer -> Float.
173defm : SKLWriteResPair<WriteCvtF2F, [SKLPort1], 3>; // Float -> Float size conversion.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000174
175// Strings instructions.
176// Packed Compare Implicit Length Strings, Return Mask
177// String instructions.
178def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
179 let Latency = 10;
180 let ResourceCycles = [3];
181}
182def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
183 let Latency = 10;
184 let ResourceCycles = [3, 1];
185}
186// Packed Compare Explicit Length Strings, Return Mask
187def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort16, SKLPort5]> {
188 let Latency = 10;
189 let ResourceCycles = [3, 2, 4];
190}
191def : WriteRes<WritePCmpEStrMLd, [SKLPort05, SKLPort16, SKLPort23]> {
192 let Latency = 10;
193 let ResourceCycles = [6, 2, 1];
194}
195 // Packed Compare Implicit Length Strings, Return Index
196def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
197 let Latency = 11;
198 let ResourceCycles = [3];
199}
200def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
201 let Latency = 11;
202 let ResourceCycles = [3, 1];
203}
204// Packed Compare Explicit Length Strings, Return Index
205def : WriteRes<WritePCmpEStrI, [SKLPort05, SKLPort16]> {
206 let Latency = 11;
207 let ResourceCycles = [6, 2];
208}
209def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort16, SKLPort5, SKLPort23]> {
210 let Latency = 11;
211 let ResourceCycles = [3, 2, 2, 1];
212}
213
214// AES instructions.
215def : WriteRes<WriteAESDecEnc, [SKLPort5]> { // Decryption, encryption.
216 let Latency = 7;
217 let ResourceCycles = [1];
218}
219def : WriteRes<WriteAESDecEncLd, [SKLPort5, SKLPort23]> {
220 let Latency = 7;
221 let ResourceCycles = [1, 1];
222}
223def : WriteRes<WriteAESIMC, [SKLPort5]> { // InvMixColumn.
224 let Latency = 14;
225 let ResourceCycles = [2];
226}
227def : WriteRes<WriteAESIMCLd, [SKLPort5, SKLPort23]> {
228 let Latency = 14;
229 let ResourceCycles = [2, 1];
230}
231def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5]> { // Key Generation.
232 let Latency = 10;
233 let ResourceCycles = [2, 8];
234}
235def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23]> {
236 let Latency = 10;
237 let ResourceCycles = [2, 7, 1];
238}
239
240// Carry-less multiplication instructions.
241def : WriteRes<WriteCLMul, [SKLPort0, SKLPort5]> {
242 let Latency = 7;
243 let ResourceCycles = [2, 1];
244}
245def : WriteRes<WriteCLMulLd, [SKLPort0, SKLPort5, SKLPort23]> {
246 let Latency = 7;
247 let ResourceCycles = [2, 1, 1];
248}
249
250// Catch-all for expensive system instructions.
251def : WriteRes<WriteSystem, [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
252
253// AVX2.
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000254defm : SKLWriteResPair<WriteFShuffle256, [SKLPort5], 3>; // Fp 256-bit width vector shuffles.
255defm : SKLWriteResPair<WriteShuffle256, [SKLPort5], 3>; // 256-bit width vector shuffles.
256defm : SKLWriteResPair<WriteVarVecShift, [SKLPort0, SKLPort5], 2, [2, 1]>; // Variable vector shifts.
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000257
258// Old microcoded instructions that nobody use.
259def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
260
261// Fence instructions.
262def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
263
264// Nop, not very useful expect it provides a model for nops!
265def : WriteRes<WriteNop, []>;
266
267////////////////////////////////////////////////////////////////////////////////
268// Horizontal add/sub instructions.
269////////////////////////////////////////////////////////////////////////////////
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000270
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000271defm : SKLWriteResPair<WriteFHAdd, [SKLPort1], 3>;
272defm : SKLWriteResPair<WritePHAdd, [SKLPort15], 1>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000273
274// Remaining instrs.
275
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000276def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000277 let Latency = 1;
278 let NumMicroOps = 1;
279 let ResourceCycles = [1];
280}
Craig Topperfc179c62018-03-22 04:23:41 +0000281def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr",
282 "MMX_PADDSWirr",
283 "MMX_PADDUSBirr",
284 "MMX_PADDUSWirr",
285 "MMX_PAVGBirr",
286 "MMX_PAVGWirr",
287 "MMX_PCMPEQBirr",
288 "MMX_PCMPEQDirr",
289 "MMX_PCMPEQWirr",
290 "MMX_PCMPGTBirr",
291 "MMX_PCMPGTDirr",
292 "MMX_PCMPGTWirr",
293 "MMX_PMAXSWirr",
294 "MMX_PMAXUBirr",
295 "MMX_PMINSWirr",
296 "MMX_PMINUBirr",
297 "MMX_PSLLDri",
298 "MMX_PSLLDrr",
299 "MMX_PSLLQri",
300 "MMX_PSLLQrr",
301 "MMX_PSLLWri",
302 "MMX_PSLLWrr",
303 "MMX_PSRADri",
304 "MMX_PSRADrr",
305 "MMX_PSRAWri",
306 "MMX_PSRAWrr",
307 "MMX_PSRLDri",
308 "MMX_PSRLDrr",
309 "MMX_PSRLQri",
310 "MMX_PSRLQrr",
311 "MMX_PSRLWri",
312 "MMX_PSRLWrr",
313 "MMX_PSUBSBirr",
314 "MMX_PSUBSWirr",
315 "MMX_PSUBUSBirr",
316 "MMX_PSUBUSWirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000317
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000318def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000319 let Latency = 1;
320 let NumMicroOps = 1;
321 let ResourceCycles = [1];
322}
Craig Topperfc179c62018-03-22 04:23:41 +0000323def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r",
324 "COM_FST0r",
325 "INSERTPSrr",
326 "MMX_MOVD64rr",
327 "MMX_MOVD64to64rr",
328 "MMX_PALIGNRrri",
329 "MMX_PSHUFBrr",
330 "MMX_PSHUFWri",
331 "MMX_PUNPCKHBWirr",
332 "MMX_PUNPCKHDQirr",
333 "MMX_PUNPCKHWDirr",
334 "MMX_PUNPCKLBWirr",
335 "MMX_PUNPCKLDQirr",
336 "MMX_PUNPCKLWDirr",
337 "MOV64toPQIrr",
338 "MOVDDUPrr",
339 "MOVDI2PDIrr",
340 "MOVHLPSrr",
341 "MOVLHPSrr",
342 "MOVSDrr",
343 "MOVSHDUPrr",
344 "MOVSLDUPrr",
345 "MOVUPDrr",
346 "MOVUPSrr",
347 "PACKSSDWrr",
348 "PACKSSWBrr",
349 "PACKUSDWrr",
350 "PACKUSWBrr",
351 "PALIGNRrri",
352 "PBLENDWrri",
353 "PMOVSXBDrr",
354 "PMOVSXBQrr",
355 "PMOVSXBWrr",
356 "PMOVSXDQrr",
357 "PMOVSXWDrr",
358 "PMOVSXWQrr",
359 "PMOVZXBDrr",
360 "PMOVZXBQrr",
361 "PMOVZXBWrr",
362 "PMOVZXDQrr",
363 "PMOVZXWDrr",
364 "PMOVZXWQrr",
365 "PSHUFBrr",
366 "PSHUFDri",
367 "PSHUFHWri",
368 "PSHUFLWri",
369 "PSLLDQri",
370 "PSRLDQri",
371 "PUNPCKHBWrr",
372 "PUNPCKHDQrr",
373 "PUNPCKHQDQrr",
374 "PUNPCKHWDrr",
375 "PUNPCKLBWrr",
376 "PUNPCKLDQrr",
377 "PUNPCKLQDQrr",
378 "PUNPCKLWDrr",
379 "SHUFPDrri",
380 "SHUFPSrri",
381 "UCOM_FPr",
382 "UCOM_Fr",
383 "UNPCKHPDrr",
384 "UNPCKHPSrr",
385 "UNPCKLPDrr",
386 "UNPCKLPSrr",
387 "VBROADCASTSSrr",
388 "VINSERTPSrr",
389 "VMOV64toPQIrr",
390 "VMOVDDUPYrr",
391 "VMOVDDUPrr",
392 "VMOVDI2PDIrr",
393 "VMOVHLPSrr",
394 "VMOVLHPSrr",
395 "VMOVSDrr",
396 "VMOVSHDUPYrr",
397 "VMOVSHDUPrr",
398 "VMOVSLDUPYrr",
399 "VMOVSLDUPrr",
400 "VMOVUPDYrr",
401 "VMOVUPDrr",
402 "VMOVUPSYrr",
403 "VMOVUPSrr",
404 "VPACKSSDWYrr",
405 "VPACKSSDWrr",
406 "VPACKSSWBYrr",
407 "VPACKSSWBrr",
408 "VPACKUSDWYrr",
409 "VPACKUSDWrr",
410 "VPACKUSWBYrr",
411 "VPACKUSWBrr",
412 "VPALIGNRYrri",
413 "VPALIGNRrri",
414 "VPBLENDWYrri",
415 "VPBLENDWrri",
416 "VPBROADCASTDrr",
417 "VPBROADCASTQrr",
418 "VPERMILPDYri",
419 "VPERMILPDYrr",
420 "VPERMILPDri",
421 "VPERMILPDrr",
422 "VPERMILPSYri",
423 "VPERMILPSYrr",
424 "VPERMILPSri",
425 "VPERMILPSrr",
426 "VPMOVSXBDrr",
427 "VPMOVSXBQrr",
428 "VPMOVSXBWrr",
429 "VPMOVSXDQrr",
430 "VPMOVSXWDrr",
431 "VPMOVSXWQrr",
432 "VPMOVZXBDrr",
433 "VPMOVZXBQrr",
434 "VPMOVZXBWrr",
435 "VPMOVZXDQrr",
436 "VPMOVZXWDrr",
437 "VPMOVZXWQrr",
438 "VPSHUFBYrr",
439 "VPSHUFBrr",
440 "VPSHUFDYri",
441 "VPSHUFDri",
442 "VPSHUFHWYri",
443 "VPSHUFHWri",
444 "VPSHUFLWYri",
445 "VPSHUFLWri",
446 "VPSLLDQYri",
447 "VPSLLDQri",
448 "VPSRLDQYri",
449 "VPSRLDQri",
450 "VPUNPCKHBWYrr",
451 "VPUNPCKHBWrr",
452 "VPUNPCKHDQYrr",
453 "VPUNPCKHDQrr",
454 "VPUNPCKHQDQYrr",
455 "VPUNPCKHQDQrr",
456 "VPUNPCKHWDYrr",
457 "VPUNPCKHWDrr",
458 "VPUNPCKLBWYrr",
459 "VPUNPCKLBWrr",
460 "VPUNPCKLDQYrr",
461 "VPUNPCKLDQrr",
462 "VPUNPCKLQDQYrr",
463 "VPUNPCKLQDQrr",
464 "VPUNPCKLWDYrr",
465 "VPUNPCKLWDrr",
466 "VSHUFPDYrri",
467 "VSHUFPDrri",
468 "VSHUFPSYrri",
469 "VSHUFPSrri",
470 "VUNPCKHPDYrr",
471 "VUNPCKHPDrr",
472 "VUNPCKHPSYrr",
473 "VUNPCKHPSrr",
474 "VUNPCKLPDYrr",
475 "VUNPCKLPDrr",
476 "VUNPCKLPSYrr",
477 "VUNPCKLPSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000478
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000479def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000480 let Latency = 1;
481 let NumMicroOps = 1;
482 let ResourceCycles = [1];
483}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000484def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000485
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000486def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000487 let Latency = 1;
488 let NumMicroOps = 1;
489 let ResourceCycles = [1];
490}
Craig Topperfc179c62018-03-22 04:23:41 +0000491def: InstRW<[SKLWriteResGroup5], (instregex "PABSBrr",
492 "PABSDrr",
493 "PABSWrr",
494 "PADDSBrr",
495 "PADDSWrr",
496 "PADDUSBrr",
497 "PADDUSWrr",
498 "PAVGBrr",
499 "PAVGWrr",
500 "PCMPEQBrr",
501 "PCMPEQDrr",
502 "PCMPEQQrr",
503 "PCMPEQWrr",
504 "PCMPGTBrr",
505 "PCMPGTDrr",
506 "PCMPGTWrr",
507 "PMAXSBrr",
508 "PMAXSDrr",
509 "PMAXSWrr",
510 "PMAXUBrr",
511 "PMAXUDrr",
512 "PMAXUWrr",
513 "PMINSBrr",
514 "PMINSDrr",
515 "PMINSWrr",
516 "PMINUBrr",
517 "PMINUDrr",
518 "PMINUWrr",
519 "PSIGNBrr",
520 "PSIGNDrr",
521 "PSIGNWrr",
522 "PSLLDri",
523 "PSLLQri",
524 "PSLLWri",
525 "PSRADri",
526 "PSRAWri",
527 "PSRLDri",
528 "PSRLQri",
529 "PSRLWri",
530 "PSUBSBrr",
531 "PSUBSWrr",
532 "PSUBUSBrr",
533 "PSUBUSWrr",
534 "VPABSBYrr",
535 "VPABSBrr",
536 "VPABSDYrr",
537 "VPABSDrr",
538 "VPABSWYrr",
539 "VPABSWrr",
540 "VPADDSBYrr",
541 "VPADDSBrr",
542 "VPADDSWYrr",
543 "VPADDSWrr",
544 "VPADDUSBYrr",
545 "VPADDUSBrr",
546 "VPADDUSWYrr",
547 "VPADDUSWrr",
548 "VPAVGBYrr",
549 "VPAVGBrr",
550 "VPAVGWYrr",
551 "VPAVGWrr",
552 "VPCMPEQBYrr",
553 "VPCMPEQBrr",
554 "VPCMPEQDYrr",
555 "VPCMPEQDrr",
556 "VPCMPEQQYrr",
557 "VPCMPEQQrr",
558 "VPCMPEQWYrr",
559 "VPCMPEQWrr",
560 "VPCMPGTBYrr",
561 "VPCMPGTBrr",
562 "VPCMPGTDYrr",
563 "VPCMPGTDrr",
564 "VPCMPGTWYrr",
565 "VPCMPGTWrr",
566 "VPMAXSBYrr",
567 "VPMAXSBrr",
568 "VPMAXSDYrr",
569 "VPMAXSDrr",
570 "VPMAXSWYrr",
571 "VPMAXSWrr",
572 "VPMAXUBYrr",
573 "VPMAXUBrr",
574 "VPMAXUDYrr",
575 "VPMAXUDrr",
576 "VPMAXUWYrr",
577 "VPMAXUWrr",
578 "VPMINSBYrr",
579 "VPMINSBrr",
580 "VPMINSDYrr",
581 "VPMINSDrr",
582 "VPMINSWYrr",
583 "VPMINSWrr",
584 "VPMINUBYrr",
585 "VPMINUBrr",
586 "VPMINUDYrr",
587 "VPMINUDrr",
588 "VPMINUWYrr",
589 "VPMINUWrr",
590 "VPSIGNBYrr",
591 "VPSIGNBrr",
592 "VPSIGNDYrr",
593 "VPSIGNDrr",
594 "VPSIGNWYrr",
595 "VPSIGNWrr",
596 "VPSLLDYri",
597 "VPSLLDri",
598 "VPSLLQYri",
599 "VPSLLQri",
600 "VPSLLVDYrr",
601 "VPSLLVDrr",
602 "VPSLLVQYrr",
603 "VPSLLVQrr",
604 "VPSLLWYri",
605 "VPSLLWri",
606 "VPSRADYri",
607 "VPSRADri",
608 "VPSRAVDYrr",
609 "VPSRAVDrr",
610 "VPSRAWYri",
611 "VPSRAWri",
612 "VPSRLDYri",
613 "VPSRLDri",
614 "VPSRLQYri",
615 "VPSRLQri",
616 "VPSRLVDYrr",
617 "VPSRLVDrr",
618 "VPSRLVQYrr",
619 "VPSRLVQrr",
620 "VPSRLWYri",
621 "VPSRLWri",
622 "VPSUBSBYrr",
623 "VPSUBSBrr",
624 "VPSUBSWYrr",
625 "VPSUBSWrr",
626 "VPSUBUSBYrr",
627 "VPSUBUSBrr",
628 "VPSUBUSWYrr",
629 "VPSUBUSWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000630
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000631def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000632 let Latency = 1;
633 let NumMicroOps = 1;
634 let ResourceCycles = [1];
635}
Craig Topperfc179c62018-03-22 04:23:41 +0000636def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP",
637 "FNOP",
638 "MMX_MOVQ64rr",
639 "MMX_PABSBrr",
640 "MMX_PABSDrr",
641 "MMX_PABSWrr",
642 "MMX_PADDBirr",
643 "MMX_PADDDirr",
644 "MMX_PADDQirr",
645 "MMX_PADDWirr",
646 "MMX_PANDNirr",
647 "MMX_PANDirr",
648 "MMX_PORirr",
649 "MMX_PSIGNBrr",
650 "MMX_PSIGNDrr",
651 "MMX_PSIGNWrr",
652 "MMX_PSUBBirr",
653 "MMX_PSUBDirr",
654 "MMX_PSUBQirr",
655 "MMX_PSUBWirr",
656 "MMX_PXORirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000657
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000658def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000659 let Latency = 1;
660 let NumMicroOps = 1;
661 let ResourceCycles = [1];
662}
Craig Topperfc179c62018-03-22 04:23:41 +0000663def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri",
664 "ADC(16|32|64)i",
665 "ADC(8|16|32|64)rr",
666 "ADCX(32|64)rr",
667 "ADOX(32|64)rr",
668 "BT(16|32|64)ri8",
669 "BT(16|32|64)rr",
670 "BTC(16|32|64)ri8",
671 "BTC(16|32|64)rr",
672 "BTR(16|32|64)ri8",
673 "BTR(16|32|64)rr",
674 "BTS(16|32|64)ri8",
675 "BTS(16|32|64)rr",
676 "CDQ",
677 "CLAC",
678 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr",
679 "CQO",
680 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
681 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
682 "JMP_1",
683 "JMP_4",
684 "RORX(32|64)ri",
685 "SAR(8|16|32|64)r1",
686 "SAR(8|16|32|64)ri",
687 "SARX(32|64)rr",
688 "SBB(16|32|64)ri",
689 "SBB(16|32|64)i",
690 "SBB(8|16|32|64)rr",
691 "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)r",
692 "SHL(8|16|32|64)r1",
693 "SHL(8|16|32|64)ri",
694 "SHLX(32|64)rr",
695 "SHR(8|16|32|64)r1",
696 "SHR(8|16|32|64)ri",
697 "SHRX(32|64)rr",
698 "STAC")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000699
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000700def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
701 let Latency = 1;
702 let NumMicroOps = 1;
703 let ResourceCycles = [1];
704}
Craig Topperfc179c62018-03-22 04:23:41 +0000705def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr",
706 "BLSI(32|64)rr",
707 "BLSMSK(32|64)rr",
708 "BLSR(32|64)rr",
709 "BZHI(32|64)rr",
710 "LEA(16|32|64)(_32)?r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000711
712def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
713 let Latency = 1;
714 let NumMicroOps = 1;
715 let ResourceCycles = [1];
716}
Craig Topperfc179c62018-03-22 04:23:41 +0000717def: InstRW<[SKLWriteResGroup9], (instregex "ANDNPDrr",
718 "ANDNPSrr",
719 "ANDPDrr",
720 "ANDPSrr",
721 "BLENDPDrri",
722 "BLENDPSrri",
723 "MOVAPDrr",
724 "MOVAPSrr",
725 "MOVDQArr",
726 "MOVDQUrr",
727 "MOVPQI2QIrr",
728 "MOVSSrr",
729 "ORPDrr",
730 "ORPSrr",
731 "PADDBrr",
732 "PADDDrr",
733 "PADDQrr",
734 "PADDWrr",
735 "PANDNrr",
736 "PANDrr",
737 "PORrr",
738 "PSUBBrr",
739 "PSUBDrr",
740 "PSUBQrr",
741 "PSUBWrr",
742 "PXORrr",
743 "VANDNPDYrr",
744 "VANDNPDrr",
745 "VANDNPSYrr",
746 "VANDNPSrr",
747 "VANDPDYrr",
748 "VANDPDrr",
749 "VANDPSYrr",
750 "VANDPSrr",
751 "VBLENDPDYrri",
752 "VBLENDPDrri",
753 "VBLENDPSYrri",
754 "VBLENDPSrri",
755 "VMOVAPDYrr",
756 "VMOVAPDrr",
757 "VMOVAPSYrr",
758 "VMOVAPSrr",
759 "VMOVDQAYrr",
760 "VMOVDQArr",
761 "VMOVDQUYrr",
762 "VMOVDQUrr",
763 "VMOVPQI2QIrr",
764 "VMOVSSrr",
765 "VMOVZPQILo2PQIrr",
766 "VORPDYrr",
767 "VORPDrr",
768 "VORPSYrr",
769 "VORPSrr",
770 "VPADDBYrr",
771 "VPADDBrr",
772 "VPADDDYrr",
773 "VPADDDrr",
774 "VPADDQYrr",
775 "VPADDQrr",
776 "VPADDWYrr",
777 "VPADDWrr",
778 "VPANDNYrr",
779 "VPANDNrr",
780 "VPANDYrr",
781 "VPANDrr",
782 "VPBLENDDYrri",
783 "VPBLENDDrri",
784 "VPORYrr",
785 "VPORrr",
786 "VPSUBBYrr",
787 "VPSUBBrr",
788 "VPSUBDYrr",
789 "VPSUBDrr",
790 "VPSUBQYrr",
791 "VPSUBQrr",
792 "VPSUBWYrr",
793 "VPSUBWrr",
794 "VPXORYrr",
795 "VPXORrr",
796 "VXORPDYrr",
797 "VXORPDrr",
798 "VXORPSYrr",
799 "VXORPSrr",
800 "XORPDrr",
801 "XORPSrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000802
803def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
804 let Latency = 1;
805 let NumMicroOps = 1;
806 let ResourceCycles = [1];
807}
Craig Topper2d451e72018-03-18 08:38:06 +0000808def: InstRW<[SKLWriteResGroup10], (instrs CWDE)>;
Craig Topperfc179c62018-03-22 04:23:41 +0000809def: InstRW<[SKLWriteResGroup10], (instregex "ADD(8|16|32|64)ri",
810 "ADD(8|16|32|64)rr",
811 "ADD(8|16|32|64)i",
812 "AND(8|16|32|64)ri",
813 "AND(8|16|32|64)rr",
814 "AND(8|16|32|64)i",
815 "CBW",
816 "CLC",
817 "CMC",
818 "CMP(8|16|32|64)ri",
819 "CMP(8|16|32|64)rr",
820 "CMP(8|16|32|64)i",
821 "DEC(8|16|32|64)r",
822 "INC(8|16|32|64)r",
823 "LAHF",
824 "MOV(8|16|32|64)rr",
825 "MOV(8|16|32|64)ri",
826 "MOVSX(16|32|64)rr16",
827 "MOVSX(16|32|64)rr32",
828 "MOVSX(16|32|64)rr8",
829 "MOVZX(16|32|64)rr16",
830 "MOVZX(16|32|64)rr8",
831 "NEG(8|16|32|64)r",
832 "NOOP",
833 "NOT(8|16|32|64)r",
834 "OR(8|16|32|64)ri",
835 "OR(8|16|32|64)rr",
836 "OR(8|16|32|64)i",
837 "SAHF",
838 "SGDT64m",
839 "SIDT64m",
840 "SLDT64m",
841 "SMSW16m",
842 "STC",
843 "STRm",
844 "SUB(8|16|32|64)ri",
845 "SUB(8|16|32|64)rr",
846 "SUB(8|16|32|64)i",
847 "SYSCALL",
848 "TEST(8|16|32|64)rr",
849 "TEST(8|16|32|64)i",
850 "TEST(8|16|32|64)ri",
851 "XCHG(16|32|64)rr",
852 "XOR(8|16|32|64)ri",
853 "XOR(8|16|32|64)rr",
854 "XOR(8|16|32|64)i")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000855
856def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000857 let Latency = 1;
858 let NumMicroOps = 2;
859 let ResourceCycles = [1,1];
860}
Craig Topperfc179c62018-03-22 04:23:41 +0000861def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm",
862 "MMX_MOVD64from64rm",
863 "MMX_MOVD64mr",
864 "MMX_MOVNTQmr",
865 "MMX_MOVQ64mr",
866 "MOV(8|16|32|64)mr",
867 "MOV8mi",
868 "MOVAPDmr",
869 "MOVAPSmr",
870 "MOVDQAmr",
871 "MOVDQUmr",
872 "MOVHPDmr",
873 "MOVHPSmr",
874 "MOVLPDmr",
875 "MOVLPSmr",
876 "MOVNTDQmr",
877 "MOVNTI_64mr",
878 "MOVNTImr",
879 "MOVNTPDmr",
880 "MOVNTPSmr",
881 "MOVPDI2DImr",
882 "MOVPQI2QImr",
883 "MOVPQIto64mr",
884 "MOVSDmr",
885 "MOVSSmr",
886 "MOVUPDmr",
887 "MOVUPSmr",
888 "ST_FP32m",
889 "ST_FP64m",
890 "ST_FP80m",
891 "VEXTRACTF128mr",
892 "VEXTRACTI128mr",
893 "VMOVAPDYmr",
894 "VMOVAPDmr",
895 "VMOVAPSYmr",
896 "VMOVAPSmr",
897 "VMOVDQAYmr",
898 "VMOVDQAmr",
899 "VMOVDQUYmr",
900 "VMOVDQUmr",
901 "VMOVHPDmr",
902 "VMOVHPSmr",
903 "VMOVLPDmr",
904 "VMOVLPSmr",
905 "VMOVNTDQYmr",
906 "VMOVNTDQmr",
907 "VMOVNTPDYmr",
908 "VMOVNTPDmr",
909 "VMOVNTPSYmr",
910 "VMOVNTPSmr",
911 "VMOVPDI2DImr",
912 "VMOVPQI2QImr",
913 "VMOVPQIto64mr",
914 "VMOVSDmr",
915 "VMOVSSmr",
916 "VMOVUPDYmr",
917 "VMOVUPDmr",
918 "VMOVUPSYmr",
919 "VMOVUPSmr",
920 "VMPTRSTm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000921
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000922def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000923 let Latency = 2;
924 let NumMicroOps = 1;
925 let ResourceCycles = [1];
926}
Craig Topperfc179c62018-03-22 04:23:41 +0000927def: InstRW<[SKLWriteResGroup12], (instregex "COMISDrr",
928 "COMISSrr",
929 "MMX_MOVD64from64rr",
930 "MMX_MOVD64grr",
931 "MMX_PMOVMSKBrr",
932 "MOVMSKPDrr",
933 "MOVMSKPSrr",
934 "MOVPDI2DIrr",
935 "MOVPQIto64rr",
936 "PMOVMSKBrr",
937 "UCOMISDrr",
938 "UCOMISSrr",
939 "VCOMISDrr",
940 "VCOMISSrr",
941 "VMOVMSKPDYrr",
942 "VMOVMSKPDrr",
943 "VMOVMSKPSYrr",
944 "VMOVMSKPSrr",
945 "VMOVPDI2DIrr",
946 "VMOVPQIto64rr",
947 "VPMOVMSKBYrr",
948 "VPMOVMSKBrr",
949 "VTESTPDYrr",
950 "VTESTPDrr",
951 "VTESTPSYrr",
952 "VTESTPSrr",
953 "VUCOMISDrr",
954 "VUCOMISSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000955
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000956def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000957 let Latency = 2;
958 let NumMicroOps = 2;
959 let ResourceCycles = [2];
960}
Craig Topperfc179c62018-03-22 04:23:41 +0000961def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr",
962 "MMX_PINSRWrr",
963 "PINSRBrr",
964 "PINSRDrr",
965 "PINSRQrr",
966 "PINSRWrr",
967 "VPINSRBrr",
968 "VPINSRDrr",
969 "VPINSRQrr",
970 "VPINSRWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000971
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000972def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000973 let Latency = 2;
974 let NumMicroOps = 2;
975 let ResourceCycles = [2];
976}
Craig Topperfc179c62018-03-22 04:23:41 +0000977def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP",
978 "MMX_MOVDQ2Qrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000979
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000980def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000981 let Latency = 2;
982 let NumMicroOps = 2;
983 let ResourceCycles = [2];
984}
Craig Topperfc179c62018-03-22 04:23:41 +0000985def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr",
986 "ROL(8|16|32|64)r1",
987 "ROL(8|16|32|64)ri",
988 "ROR(8|16|32|64)r1",
989 "ROR(8|16|32|64)ri",
990 "SET(A|BE)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000991
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000992def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000993 let Latency = 2;
994 let NumMicroOps = 2;
995 let ResourceCycles = [2];
996}
Craig Topperfc179c62018-03-22 04:23:41 +0000997def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0",
998 "BLENDVPSrr0",
999 "PBLENDVBrr0",
1000 "VBLENDVPDYrr",
1001 "VBLENDVPDrr",
1002 "VBLENDVPSYrr",
1003 "VBLENDVPSrr",
1004 "VPBLENDVBYrr",
1005 "VPBLENDVBrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001006
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001007def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001008 let Latency = 2;
1009 let NumMicroOps = 2;
1010 let ResourceCycles = [2];
1011}
Craig Topperfc179c62018-03-22 04:23:41 +00001012def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE",
1013 "WAIT",
1014 "XGETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001015
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001016def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001017 let Latency = 2;
1018 let NumMicroOps = 2;
1019 let ResourceCycles = [1,1];
1020}
Craig Topperfc179c62018-03-22 04:23:41 +00001021def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPDYmr",
1022 "VMASKMOVPDmr",
1023 "VMASKMOVPSYmr",
1024 "VMASKMOVPSmr",
1025 "VPMASKMOVDYmr",
1026 "VPMASKMOVDmr",
1027 "VPMASKMOVQYmr",
1028 "VPMASKMOVQmr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001029
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001030def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001031 let Latency = 2;
1032 let NumMicroOps = 2;
1033 let ResourceCycles = [1,1];
1034}
Craig Topperfc179c62018-03-22 04:23:41 +00001035def: InstRW<[SKLWriteResGroup19], (instregex "PSLLDrr",
1036 "PSLLQrr",
1037 "PSLLWrr",
1038 "PSRADrr",
1039 "PSRAWrr",
1040 "PSRLDrr",
1041 "PSRLQrr",
1042 "PSRLWrr",
1043 "VPSLLDrr",
1044 "VPSLLQrr",
1045 "VPSLLWrr",
1046 "VPSRADrr",
1047 "VPSRAWrr",
1048 "VPSRLDrr",
1049 "VPSRLQrr",
1050 "VPSRLWrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001051
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001052def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001053 let Latency = 2;
1054 let NumMicroOps = 2;
1055 let ResourceCycles = [1,1];
1056}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001057def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001058
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001059def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001060 let Latency = 2;
1061 let NumMicroOps = 2;
1062 let ResourceCycles = [1,1];
1063}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001064def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001065
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001066def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001067 let Latency = 2;
1068 let NumMicroOps = 2;
1069 let ResourceCycles = [1,1];
1070}
Craig Topperfc179c62018-03-22 04:23:41 +00001071def: InstRW<[SKLWriteResGroup22], (instregex "BEXTR(32|64)rr",
1072 "BSWAP(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001073
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001074def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001075 let Latency = 2;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001076 let NumMicroOps = 2;
1077 let ResourceCycles = [1,1];
1078}
Craig Topper2d451e72018-03-18 08:38:06 +00001079def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +00001080def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001081def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8",
1082 "ADC8ri",
1083 "SBB8i8",
1084 "SBB8ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001085
1086def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
1087 let Latency = 2;
1088 let NumMicroOps = 3;
1089 let ResourceCycles = [1,1,1];
1090}
Craig Topperfc179c62018-03-22 04:23:41 +00001091def: InstRW<[SKLWriteResGroup24], (instregex "EXTRACTPSmr",
1092 "PEXTRBmr",
1093 "PEXTRDmr",
1094 "PEXTRQmr",
1095 "PEXTRWmr",
1096 "STMXCSR",
1097 "VEXTRACTPSmr",
1098 "VPEXTRBmr",
1099 "VPEXTRDmr",
1100 "VPEXTRQmr",
1101 "VPEXTRWmr",
1102 "VSTMXCSR")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001103
1104def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
1105 let Latency = 2;
1106 let NumMicroOps = 3;
1107 let ResourceCycles = [1,1,1];
1108}
1109def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
1110
1111def SKLWriteResGroup26 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
1112 let Latency = 2;
1113 let NumMicroOps = 3;
1114 let ResourceCycles = [1,1,1];
1115}
Craig Topperf4cd9082018-01-19 05:47:32 +00001116def: 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 +00001117
1118def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
1119 let Latency = 2;
1120 let NumMicroOps = 3;
1121 let ResourceCycles = [1,1,1];
1122}
1123def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
1124
1125def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
1126 let Latency = 2;
1127 let NumMicroOps = 3;
1128 let ResourceCycles = [1,1,1];
1129}
Craig Topper2d451e72018-03-18 08:38:06 +00001130def: InstRW<[SKLWriteResGroup28], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001131def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr",
1132 "PUSH64i8",
1133 "STOSB",
1134 "STOSL",
1135 "STOSQ",
1136 "STOSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001137
1138def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
1139 let Latency = 3;
1140 let NumMicroOps = 1;
1141 let ResourceCycles = [1];
1142}
Clement Courbet327fac42018-03-07 08:14:02 +00001143def: InstRW<[SKLWriteResGroup29], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001144def: InstRW<[SKLWriteResGroup29], (instrs IMUL8r, MUL8r)>;
1145def: InstRW<[SKLWriteResGroup29], (instregex "BSF(16|32|64)rr",
1146 "BSR(16|32|64)rr",
1147 "LZCNT(16|32|64)rr",
1148 "PDEP(32|64)rr",
1149 "PEXT(32|64)rr",
1150 "POPCNT(16|32|64)rr",
1151 "SHLD(16|32|64)rri8",
1152 "SHRD(16|32|64)rri8",
1153 "TZCNT(16|32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001154
Clement Courbet327fac42018-03-07 08:14:02 +00001155def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001156 let Latency = 3;
1157 let NumMicroOps = 2;
1158 let ResourceCycles = [1,1];
1159}
Clement Courbet327fac42018-03-07 08:14:02 +00001160def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001161
1162def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
1163 let Latency = 3;
1164 let NumMicroOps = 1;
1165 let ResourceCycles = [1];
1166}
Craig Topperfc179c62018-03-22 04:23:41 +00001167def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0",
1168 "ADD_FST0r",
1169 "ADD_FrST0",
1170 "MMX_PSADBWirr",
1171 "PCMPGTQrr",
1172 "PSADBWrr",
1173 "SUBR_FPrST0",
1174 "SUBR_FST0r",
1175 "SUBR_FrST0",
1176 "SUB_FPrST0",
1177 "SUB_FST0r",
1178 "SUB_FrST0",
1179 "VBROADCASTSDYrr",
1180 "VBROADCASTSSYrr",
1181 "VEXTRACTF128rr",
1182 "VEXTRACTI128rr",
1183 "VINSERTF128rr",
1184 "VINSERTI128rr",
1185 "VPBROADCASTBYrr",
1186 "VPBROADCASTBrr",
1187 "VPBROADCASTDYrr",
1188 "VPBROADCASTQYrr",
1189 "VPBROADCASTWYrr",
1190 "VPBROADCASTWrr",
1191 "VPCMPGTQYrr",
1192 "VPCMPGTQrr",
1193 "VPERM2F128rr",
1194 "VPERM2I128rr",
1195 "VPERMDYrr",
1196 "VPERMPDYri",
1197 "VPERMPSYrr",
1198 "VPERMQYri",
1199 "VPMOVSXBDYrr",
1200 "VPMOVSXBQYrr",
1201 "VPMOVSXBWYrr",
1202 "VPMOVSXDQYrr",
1203 "VPMOVSXWDYrr",
1204 "VPMOVSXWQYrr",
1205 "VPMOVZXBDYrr",
1206 "VPMOVZXBQYrr",
1207 "VPMOVZXBWYrr",
1208 "VPMOVZXDQYrr",
1209 "VPMOVZXWDYrr",
1210 "VPMOVZXWQYrr",
1211 "VPSADBWYrr",
1212 "VPSADBWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001213
1214def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
1215 let Latency = 3;
1216 let NumMicroOps = 2;
1217 let ResourceCycles = [1,1];
1218}
Craig Topperfc179c62018-03-22 04:23:41 +00001219def: InstRW<[SKLWriteResGroup31], (instregex "EXTRACTPSrr",
1220 "MMX_PEXTRWrr",
1221 "PEXTRBrr",
1222 "PEXTRDrr",
1223 "PEXTRQrr",
1224 "PEXTRWrr",
1225 "PTESTrr",
1226 "VEXTRACTPSrr",
1227 "VPEXTRBrr",
1228 "VPEXTRDrr",
1229 "VPEXTRQrr",
1230 "VPEXTRWrr",
1231 "VPTESTYrr",
1232 "VPTESTrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001233
1234def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
1235 let Latency = 3;
1236 let NumMicroOps = 2;
1237 let ResourceCycles = [1,1];
1238}
1239def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
1240
1241def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
1242 let Latency = 3;
1243 let NumMicroOps = 3;
1244 let ResourceCycles = [3];
1245}
Craig Topperfc179c62018-03-22 04:23:41 +00001246def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL",
1247 "ROR(8|16|32|64)rCL",
1248 "SAR(8|16|32|64)rCL",
1249 "SHL(8|16|32|64)rCL",
1250 "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001251
1252def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
1253 let Latency = 3;
1254 let NumMicroOps = 3;
1255 let ResourceCycles = [3];
1256}
Craig Topperfc179c62018-03-22 04:23:41 +00001257def: InstRW<[SKLWriteResGroup34], (instregex "XADD(8|16|32|64)rr",
1258 "XCHG8rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001259
1260def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
1261 let Latency = 3;
1262 let NumMicroOps = 3;
1263 let ResourceCycles = [1,2];
1264}
Craig Topperfc179c62018-03-22 04:23:41 +00001265def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PHADDSWrr",
1266 "MMX_PHSUBSWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001267
1268def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
1269 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001270 let NumMicroOps = 3;
1271 let ResourceCycles = [2,1];
1272}
Craig Topperfc179c62018-03-22 04:23:41 +00001273def: InstRW<[SKLWriteResGroup36], (instregex "PHADDSWrr",
1274 "PHSUBSWrr",
1275 "VPHADDSWrr",
1276 "VPHADDSWYrr",
1277 "VPHSUBSWrr",
1278 "VPHSUBSWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001279
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001280def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
1281 let Latency = 3;
1282 let NumMicroOps = 3;
1283 let ResourceCycles = [2,1];
1284}
Craig Topperfc179c62018-03-22 04:23:41 +00001285def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHADDDrr",
1286 "MMX_PHADDWrr",
1287 "MMX_PHSUBDrr",
1288 "MMX_PHSUBWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001289
1290def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
1291 let Latency = 3;
1292 let NumMicroOps = 3;
1293 let ResourceCycles = [2,1];
1294}
Craig Topperfc179c62018-03-22 04:23:41 +00001295def: InstRW<[SKLWriteResGroup38], (instregex "PHADDDrr",
1296 "PHADDWrr",
1297 "PHSUBDrr",
1298 "PHSUBWrr",
1299 "VPHADDDYrr",
1300 "VPHADDDrr",
1301 "VPHADDWYrr",
1302 "VPHADDWrr",
1303 "VPHSUBDYrr",
1304 "VPHSUBDrr",
1305 "VPHSUBWYrr",
1306 "VPHSUBWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001307
1308def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
1309 let Latency = 3;
1310 let NumMicroOps = 3;
1311 let ResourceCycles = [2,1];
1312}
Craig Topperfc179c62018-03-22 04:23:41 +00001313def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr",
1314 "MMX_PACKSSWBirr",
1315 "MMX_PACKUSWBirr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001316
1317def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
1318 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001319 let NumMicroOps = 3;
1320 let ResourceCycles = [1,2];
1321}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001322def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001323
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001324def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
1325 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001326 let NumMicroOps = 3;
1327 let ResourceCycles = [1,2];
1328}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001329def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001330
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001331def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
1332 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001333 let NumMicroOps = 3;
1334 let ResourceCycles = [1,2];
1335}
Craig Topperfc179c62018-03-22 04:23:41 +00001336def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1",
1337 "RCL(8|16|32|64)ri",
1338 "RCR(8|16|32|64)r1",
1339 "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001340
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001341def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
1342 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001343 let NumMicroOps = 3;
1344 let ResourceCycles = [1,1,1];
1345}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001346def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001347
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001348def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
1349 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001350 let NumMicroOps = 4;
1351 let ResourceCycles = [1,1,2];
1352}
Craig Topperf4cd9082018-01-19 05:47:32 +00001353def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001354
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001355def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
1356 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001357 let NumMicroOps = 4;
1358 let ResourceCycles = [1,1,1,1];
1359}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001360def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001361
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001362def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
1363 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001364 let NumMicroOps = 4;
1365 let ResourceCycles = [1,1,1,1];
1366}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001367def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001368
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001369def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001370 let Latency = 4;
1371 let NumMicroOps = 1;
1372 let ResourceCycles = [1];
1373}
Craig Topperfc179c62018-03-22 04:23:41 +00001374def: InstRW<[SKLWriteResGroup47], (instregex "AESDECLASTrr",
1375 "AESDECrr",
1376 "AESENCLASTrr",
1377 "AESENCrr",
1378 "MMX_PMADDUBSWrr",
1379 "MMX_PMADDWDirr",
1380 "MMX_PMULHRSWrr",
1381 "MMX_PMULHUWirr",
1382 "MMX_PMULHWirr",
1383 "MMX_PMULLWirr",
1384 "MMX_PMULUDQirr",
1385 "MUL_FPrST0",
1386 "MUL_FST0r",
1387 "MUL_FrST0",
1388 "RCPPSr",
1389 "RCPSSr",
1390 "RSQRTPSr",
1391 "RSQRTSSr",
1392 "VAESDECLASTrr",
1393 "VAESDECrr",
1394 "VAESENCLASTrr",
1395 "VAESENCrr",
1396 "VRCPPSYr",
1397 "VRCPPSr",
1398 "VRCPSSr",
1399 "VRSQRTPSYr",
1400 "VRSQRTPSr",
1401 "VRSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001402
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001403def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001404 let Latency = 4;
1405 let NumMicroOps = 1;
1406 let ResourceCycles = [1];
1407}
Craig Topperfc179c62018-03-22 04:23:41 +00001408def: InstRW<[SKLWriteResGroup48], (instregex "ADDPDrr",
1409 "ADDPSrr",
1410 "ADDSDrr",
1411 "ADDSSrr",
1412 "ADDSUBPDrr",
1413 "ADDSUBPSrr",
1414 "MULPDrr",
1415 "MULPSrr",
1416 "MULSDrr",
1417 "MULSSrr",
1418 "SUBPDrr",
1419 "SUBPSrr",
1420 "SUBSDrr",
1421 "SUBSSrr",
1422 "VADDPDYrr",
1423 "VADDPDrr",
1424 "VADDPSYrr",
1425 "VADDPSrr",
1426 "VADDSDrr",
1427 "VADDSSrr",
1428 "VADDSUBPDYrr",
1429 "VADDSUBPDrr",
1430 "VADDSUBPSYrr",
1431 "VADDSUBPSrr",
1432 "VMULPDYrr",
1433 "VMULPDrr",
1434 "VMULPSYrr",
1435 "VMULPSrr",
1436 "VMULSDrr",
1437 "VMULSSrr",
1438 "VSUBPDYrr",
1439 "VSUBPDrr",
1440 "VSUBPSYrr",
1441 "VSUBPSrr",
1442 "VSUBSDrr",
1443 "VSUBSSrr")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001444def: InstRW<[SKLWriteResGroup48],
1445 (instregex
1446 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1447 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001448
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001449def SKLWriteResGroup49 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001450 let Latency = 4;
1451 let NumMicroOps = 1;
1452 let ResourceCycles = [1];
1453}
Craig Topperfc179c62018-03-22 04:23:41 +00001454def: InstRW<[SKLWriteResGroup49], (instregex "CMPPDrri",
1455 "CMPPSrri",
1456 "CMPSDrr",
1457 "CMPSSrr",
1458 "CVTDQ2PSrr",
1459 "CVTPS2DQrr",
1460 "CVTTPS2DQrr",
1461 "MAX(C?)PDrr",
1462 "MAX(C?)PSrr",
1463 "MAX(C?)SDrr",
1464 "MAX(C?)SSrr",
1465 "MIN(C?)PDrr",
1466 "MIN(C?)PSrr",
1467 "MIN(C?)SDrr",
1468 "MIN(C?)SSrr",
1469 "PHMINPOSUWrr",
1470 "PMADDUBSWrr",
1471 "PMADDWDrr",
1472 "PMULDQrr",
1473 "PMULHRSWrr",
1474 "PMULHUWrr",
1475 "PMULHWrr",
1476 "PMULLWrr",
1477 "PMULUDQrr",
1478 "VCMPPDYrri",
1479 "VCMPPDrri",
1480 "VCMPPSYrri",
1481 "VCMPPSrri",
1482 "VCMPSDrr",
1483 "VCMPSSrr",
1484 "VCVTDQ2PSYrr",
1485 "VCVTDQ2PSrr",
1486 "VCVTPS2DQYrr",
1487 "VCVTPS2DQrr",
1488 "VCVTTPS2DQYrr",
1489 "VCVTTPS2DQrr",
1490 "VMAX(C?)PDYrr",
1491 "VMAX(C?)PDrr",
1492 "VMAX(C?)PSYrr",
1493 "VMAX(C?)PSrr",
1494 "VMAX(C?)SDrr",
1495 "VMAX(C?)SSrr",
1496 "VMIN(C?)PDYrr",
1497 "VMIN(C?)PDrr",
1498 "VMIN(C?)PSYrr",
1499 "VMIN(C?)PSrr",
1500 "VMIN(C?)SDrr",
1501 "VMIN(C?)SSrr",
1502 "VPHMINPOSUWrr",
1503 "VPMADDUBSWYrr",
1504 "VPMADDUBSWrr",
1505 "VPMADDWDYrr",
1506 "VPMADDWDrr",
1507 "VPMULDQYrr",
1508 "VPMULDQrr",
1509 "VPMULHRSWYrr",
1510 "VPMULHRSWrr",
1511 "VPMULHUWYrr",
1512 "VPMULHUWrr",
1513 "VPMULHWYrr",
1514 "VPMULHWrr",
1515 "VPMULLWYrr",
1516 "VPMULLWrr",
1517 "VPMULUDQYrr",
1518 "VPMULUDQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001519
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001520def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001521 let Latency = 4;
1522 let NumMicroOps = 2;
1523 let ResourceCycles = [2];
1524}
Craig Topperfc179c62018-03-22 04:23:41 +00001525def: InstRW<[SKLWriteResGroup50], (instregex "MPSADBWrri",
1526 "VMPSADBWYrri",
1527 "VMPSADBWrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001528
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001529def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001530 let Latency = 4;
1531 let NumMicroOps = 2;
1532 let ResourceCycles = [1,1];
1533}
Craig Topperfc179c62018-03-22 04:23:41 +00001534def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r, MUL64r,
1535 MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001536
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001537def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1538 let Latency = 4;
1539 let NumMicroOps = 4;
1540}
Craig Topperfc179c62018-03-22 04:23:41 +00001541def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r, MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001542
1543def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001544 let Latency = 4;
1545 let NumMicroOps = 2;
1546 let ResourceCycles = [1,1];
1547}
Craig Topperfc179c62018-03-22 04:23:41 +00001548def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr",
1549 "VPSLLQYrr",
1550 "VPSLLWYrr",
1551 "VPSRADYrr",
1552 "VPSRAWYrr",
1553 "VPSRLDYrr",
1554 "VPSRLQYrr",
1555 "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001556
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001557def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001558 let Latency = 4;
1559 let NumMicroOps = 3;
1560 let ResourceCycles = [1,1,1];
1561}
Craig Topperfc179c62018-03-22 04:23:41 +00001562def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m",
1563 "ISTT_FP32m",
1564 "ISTT_FP64m",
1565 "IST_F16m",
1566 "IST_F32m",
1567 "IST_FP16m",
1568 "IST_FP32m",
1569 "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001570
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001571def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001572 let Latency = 4;
1573 let NumMicroOps = 4;
1574 let ResourceCycles = [4];
1575}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001576def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001577
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001578def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001579 let Latency = 4;
1580 let NumMicroOps = 4;
1581 let ResourceCycles = [1,3];
1582}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001583def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001584
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001585def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001586 let Latency = 4;
1587 let NumMicroOps = 4;
1588 let ResourceCycles = [1,3];
1589}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001590def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001591
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001592def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001593 let Latency = 4;
1594 let NumMicroOps = 4;
1595 let ResourceCycles = [1,1,2];
1596}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001597def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001598
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001599def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1600 let Latency = 5;
1601 let NumMicroOps = 1;
1602 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001603}
Craig Topperfc179c62018-03-22 04:23:41 +00001604def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64rm",
1605 "MMX_MOVD64to64rm",
1606 "MMX_MOVQ64rm",
1607 "MOV(8|16|32|64)rm",
1608 "MOV64toPQIrm",
1609 "MOVDDUPrm",
1610 "MOVDI2PDIrm",
1611 "MOVQI2PQIrm",
1612 "MOVSDrm",
1613 "MOVSSrm",
1614 "MOVSX(16|32|64)rm16",
1615 "MOVSX(16|32|64)rm32",
1616 "MOVSX(16|32|64)rm8",
1617 "MOVZX(16|32|64)rm16",
1618 "MOVZX(16|32|64)rm8",
1619 "PREFETCHNTA",
1620 "PREFETCHT0",
1621 "PREFETCHT1",
1622 "PREFETCHT2",
1623 "VMOV64toPQIrm",
1624 "VMOVDDUPrm",
1625 "VMOVDI2PDIrm",
1626 "VMOVQI2PQIrm",
1627 "VMOVSDrm",
1628 "VMOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001629
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001630def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001631 let Latency = 5;
1632 let NumMicroOps = 2;
1633 let ResourceCycles = [1,1];
1634}
Craig Topperfc179c62018-03-22 04:23:41 +00001635def: InstRW<[SKLWriteResGroup59], (instregex "CVTDQ2PDrr",
1636 "MMX_CVTPI2PDirr",
1637 "VCVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001638
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001639def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001640 let Latency = 5;
1641 let NumMicroOps = 2;
1642 let ResourceCycles = [1,1];
1643}
Craig Topperfc179c62018-03-22 04:23:41 +00001644def: InstRW<[SKLWriteResGroup60], (instregex "CVTPD2DQrr",
1645 "CVTPD2PSrr",
1646 "CVTPS2PDrr",
1647 "CVTSD2SSrr",
1648 "CVTSI642SDrr",
1649 "CVTSI2SDrr",
1650 "CVTSI2SSrr",
1651 "CVTSS2SDrr",
1652 "CVTTPD2DQrr",
1653 "MMX_CVTPD2PIirr",
1654 "MMX_CVTPS2PIirr",
1655 "MMX_CVTTPD2PIirr",
1656 "MMX_CVTTPS2PIirr",
1657 "VCVTPD2DQrr",
1658 "VCVTPD2PSrr",
1659 "VCVTPH2PSrr",
1660 "VCVTPS2PDrr",
1661 "VCVTPS2PHrr",
1662 "VCVTSD2SSrr",
1663 "VCVTSI642SDrr",
1664 "VCVTSI2SDrr",
1665 "VCVTSI2SSrr",
1666 "VCVTSS2SDrr",
1667 "VCVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001668
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001669def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001670 let Latency = 5;
1671 let NumMicroOps = 3;
1672 let ResourceCycles = [1,1,1];
1673}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001674def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001675
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001676def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001677 let Latency = 5;
1678 let NumMicroOps = 3;
1679 let ResourceCycles = [1,1,1];
1680}
Craig Topperfc179c62018-03-22 04:23:41 +00001681def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r, MUL32r)>;
Craig Topperb369cdb2018-01-25 06:57:42 +00001682def: InstRW<[SKLWriteResGroup62], (instrs MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001683
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001684def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001685 let Latency = 5;
1686 let NumMicroOps = 5;
1687 let ResourceCycles = [1,4];
1688}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001689def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001690
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001691def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001692 let Latency = 5;
1693 let NumMicroOps = 5;
1694 let ResourceCycles = [2,3];
1695}
Craig Topper13a16502018-03-19 00:56:09 +00001696def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001697
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001698def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001699 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001700 let NumMicroOps = 6;
1701 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001702}
Craig Topperfc179c62018-03-22 04:23:41 +00001703def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16",
1704 "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001705
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001706def SKLWriteResGroup66 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001707 let Latency = 6;
1708 let NumMicroOps = 1;
1709 let ResourceCycles = [1];
1710}
Craig Topperfc179c62018-03-22 04:23:41 +00001711def: InstRW<[SKLWriteResGroup66], (instregex "(V?)PCLMULQDQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001712
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001713def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1714 let Latency = 6;
1715 let NumMicroOps = 1;
1716 let ResourceCycles = [1];
1717}
Craig Topperfc179c62018-03-22 04:23:41 +00001718def: InstRW<[SKLWriteResGroup67], (instregex "LDDQUrm",
1719 "MOVAPDrm",
1720 "MOVAPSrm",
1721 "MOVDQArm",
1722 "MOVDQUrm",
1723 "MOVNTDQArm",
1724 "MOVSHDUPrm",
1725 "MOVSLDUPrm",
1726 "MOVUPDrm",
1727 "MOVUPSrm",
1728 "VBROADCASTSSrm",
1729 "VLDDQUrm",
1730 "VMOVAPDrm",
1731 "VMOVAPSrm",
1732 "VMOVDQArm",
1733 "VMOVDQUrm",
1734 "VMOVNTDQArm",
1735 "VMOVSHDUPrm",
1736 "VMOVSLDUPrm",
1737 "VMOVUPDrm",
1738 "VMOVUPSrm",
1739 "VPBROADCASTDrm",
1740 "VPBROADCASTQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001741
1742def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001743 let Latency = 6;
1744 let NumMicroOps = 2;
1745 let ResourceCycles = [2];
1746}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001747def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001748
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001749def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001750 let Latency = 6;
1751 let NumMicroOps = 2;
1752 let ResourceCycles = [1,1];
1753}
Craig Topperfc179c62018-03-22 04:23:41 +00001754def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm",
1755 "MMX_PADDSWirm",
1756 "MMX_PADDUSBirm",
1757 "MMX_PADDUSWirm",
1758 "MMX_PAVGBirm",
1759 "MMX_PAVGWirm",
1760 "MMX_PCMPEQBirm",
1761 "MMX_PCMPEQDirm",
1762 "MMX_PCMPEQWirm",
1763 "MMX_PCMPGTBirm",
1764 "MMX_PCMPGTDirm",
1765 "MMX_PCMPGTWirm",
1766 "MMX_PMAXSWirm",
1767 "MMX_PMAXUBirm",
1768 "MMX_PMINSWirm",
1769 "MMX_PMINUBirm",
1770 "MMX_PSLLDrm",
1771 "MMX_PSLLQrm",
1772 "MMX_PSLLWrm",
1773 "MMX_PSRADrm",
1774 "MMX_PSRAWrm",
1775 "MMX_PSRLDrm",
1776 "MMX_PSRLQrm",
1777 "MMX_PSRLWrm",
1778 "MMX_PSUBSBirm",
1779 "MMX_PSUBSWirm",
1780 "MMX_PSUBUSBirm",
1781 "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001782
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001783def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001784 let Latency = 6;
1785 let NumMicroOps = 2;
1786 let ResourceCycles = [1,1];
1787}
Craig Topperfc179c62018-03-22 04:23:41 +00001788def: InstRW<[SKLWriteResGroup70], (instregex "CVTSD2SI64rr",
1789 "CVTSD2SIrr",
1790 "CVTSS2SI64rr",
1791 "CVTSS2SIrr",
1792 "CVTTSD2SI64rr",
1793 "CVTTSD2SIrr",
1794 "VCVTSD2SI64rr",
1795 "VCVTSD2SIrr",
1796 "VCVTSS2SI64rr",
1797 "VCVTSS2SIrr",
1798 "VCVTTSD2SI64rr",
1799 "VCVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001800
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001801def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1802 let Latency = 6;
1803 let NumMicroOps = 2;
1804 let ResourceCycles = [1,1];
1805}
Craig Topperfc179c62018-03-22 04:23:41 +00001806def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi",
1807 "MMX_PINSRWrm",
1808 "MMX_PSHUFBrm",
1809 "MMX_PSHUFWmi",
1810 "MMX_PUNPCKHBWirm",
1811 "MMX_PUNPCKHDQirm",
1812 "MMX_PUNPCKHWDirm",
1813 "MMX_PUNPCKLBWirm",
1814 "MMX_PUNPCKLDQirm",
1815 "MMX_PUNPCKLWDirm",
1816 "MOVHPDrm",
1817 "MOVHPSrm",
1818 "MOVLPDrm",
1819 "MOVLPSrm",
1820 "PINSRBrm",
1821 "PINSRDrm",
1822 "PINSRQrm",
1823 "PINSRWrm",
1824 "PMOVSXBDrm",
1825 "PMOVSXBQrm",
1826 "PMOVSXBWrm",
1827 "PMOVSXDQrm",
1828 "PMOVSXWDrm",
1829 "PMOVSXWQrm",
1830 "PMOVZXBDrm",
1831 "PMOVZXBQrm",
1832 "PMOVZXBWrm",
1833 "PMOVZXDQrm",
1834 "PMOVZXWDrm",
1835 "PMOVZXWQrm",
1836 "VMOVHPDrm",
1837 "VMOVHPSrm",
1838 "VMOVLPDrm",
1839 "VMOVLPSrm",
1840 "VPINSRBrm",
1841 "VPINSRDrm",
1842 "VPINSRQrm",
1843 "VPINSRWrm",
1844 "VPMOVSXBDrm",
1845 "VPMOVSXBQrm",
1846 "VPMOVSXBWrm",
1847 "VPMOVSXDQrm",
1848 "VPMOVSXWDrm",
1849 "VPMOVSXWQrm",
1850 "VPMOVZXBDrm",
1851 "VPMOVZXBQrm",
1852 "VPMOVZXBWrm",
1853 "VPMOVZXDQrm",
1854 "VPMOVZXWDrm",
1855 "VPMOVZXWQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001856
1857def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1858 let Latency = 6;
1859 let NumMicroOps = 2;
1860 let ResourceCycles = [1,1];
1861}
Craig Topperfc179c62018-03-22 04:23:41 +00001862def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64",
1863 "JMP(16|32|64)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001864
1865def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1866 let Latency = 6;
1867 let NumMicroOps = 2;
1868 let ResourceCycles = [1,1];
1869}
Craig Topperfc179c62018-03-22 04:23:41 +00001870def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSBrm",
1871 "MMX_PABSDrm",
1872 "MMX_PABSWrm",
1873 "MMX_PADDBirm",
1874 "MMX_PADDDirm",
1875 "MMX_PADDQirm",
1876 "MMX_PADDWirm",
1877 "MMX_PANDNirm",
1878 "MMX_PANDirm",
1879 "MMX_PORirm",
1880 "MMX_PSIGNBrm",
1881 "MMX_PSIGNDrm",
1882 "MMX_PSIGNWrm",
1883 "MMX_PSUBBirm",
1884 "MMX_PSUBDirm",
1885 "MMX_PSUBQirm",
1886 "MMX_PSUBWirm",
1887 "MMX_PXORirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001888
1889def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1890 let Latency = 6;
1891 let NumMicroOps = 2;
1892 let ResourceCycles = [1,1];
1893}
Craig Topperfc179c62018-03-22 04:23:41 +00001894def: InstRW<[SKLWriteResGroup74], (instregex "ADC(8|16|32|64)rm",
1895 "ADCX(32|64)rm",
1896 "ADOX(32|64)rm",
1897 "BT(16|32|64)mi8",
1898 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rm",
1899 "RORX(32|64)mi",
1900 "SARX(32|64)rm",
1901 "SBB(8|16|32|64)rm",
1902 "SHLX(32|64)rm",
1903 "SHRX(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001904
1905def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1906 let Latency = 6;
1907 let NumMicroOps = 2;
1908 let ResourceCycles = [1,1];
1909}
Craig Topperfc179c62018-03-22 04:23:41 +00001910def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm",
1911 "BLSI(32|64)rm",
1912 "BLSMSK(32|64)rm",
1913 "BLSR(32|64)rm",
1914 "BZHI(32|64)rm",
1915 "MOVBE(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001916
1917def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1918 let Latency = 6;
1919 let NumMicroOps = 2;
1920 let ResourceCycles = [1,1];
1921}
Craig Topper2d451e72018-03-18 08:38:06 +00001922def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
Craig Topperfc179c62018-03-22 04:23:41 +00001923def: InstRW<[SKLWriteResGroup76], (instregex "ADD(8|16|32|64)rm",
1924 "AND(8|16|32|64)rm",
1925 "CMP(8|16|32|64)mi",
1926 "CMP(8|16|32|64)mr",
1927 "CMP(8|16|32|64)rm",
1928 "OR(8|16|32|64)rm",
1929 "POP(16|32|64)rmr",
1930 "SUB(8|16|32|64)rm",
1931 "TEST(8|16|32|64)mr",
1932 "TEST(8|16|32|64)mi",
1933 "XOR(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001934
1935def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001936 let Latency = 6;
1937 let NumMicroOps = 3;
1938 let ResourceCycles = [2,1];
1939}
Craig Topperfc179c62018-03-22 04:23:41 +00001940def: InstRW<[SKLWriteResGroup77], (instregex "HADDPDrr",
1941 "HADDPSrr",
1942 "HSUBPDrr",
1943 "HSUBPSrr",
1944 "VHADDPDYrr",
1945 "VHADDPDrr",
1946 "VHADDPSYrr",
1947 "VHADDPSrr",
1948 "VHSUBPDYrr",
1949 "VHSUBPDrr",
1950 "VHSUBPSYrr",
1951 "VHSUBPSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001952
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001953def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001954 let Latency = 6;
1955 let NumMicroOps = 3;
1956 let ResourceCycles = [2,1];
1957}
Craig Topperfc179c62018-03-22 04:23:41 +00001958def: InstRW<[SKLWriteResGroup78], (instregex "(V?)CVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001959
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001960def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001961 let Latency = 6;
1962 let NumMicroOps = 4;
1963 let ResourceCycles = [1,2,1];
1964}
Craig Topperfc179c62018-03-22 04:23:41 +00001965def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL",
1966 "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001967
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001968def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001969 let Latency = 6;
1970 let NumMicroOps = 4;
1971 let ResourceCycles = [1,1,1,1];
1972}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001973def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001974
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001975def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort015]> {
1976 let Latency = 6;
1977 let NumMicroOps = 4;
1978 let ResourceCycles = [1,1,1,1];
1979}
1980def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1981
1982def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1983 let Latency = 6;
1984 let NumMicroOps = 4;
1985 let ResourceCycles = [1,1,1,1];
1986}
Craig Topperfc179c62018-03-22 04:23:41 +00001987def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8",
1988 "BTR(16|32|64)mi8",
1989 "BTS(16|32|64)mi8",
1990 "SAR(8|16|32|64)m1",
1991 "SAR(8|16|32|64)mi",
1992 "SHL(8|16|32|64)m1",
1993 "SHL(8|16|32|64)mi",
1994 "SHR(8|16|32|64)m1",
1995 "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001996
1997def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
1998 let Latency = 6;
1999 let NumMicroOps = 4;
2000 let ResourceCycles = [1,1,1,1];
2001}
Craig Topperfc179c62018-03-22 04:23:41 +00002002def: InstRW<[SKLWriteResGroup83], (instregex "ADD(8|16|32|64)mi",
2003 "ADD(8|16|32|64)mr",
2004 "AND(8|16|32|64)mi",
2005 "AND(8|16|32|64)mr",
2006 "DEC(8|16|32|64)m",
2007 "INC(8|16|32|64)m",
2008 "NEG(8|16|32|64)m",
2009 "NOT(8|16|32|64)m",
2010 "OR(8|16|32|64)mi",
2011 "OR(8|16|32|64)mr",
2012 "POP(16|32|64)rmm",
2013 "PUSH(16|32|64)rmm",
2014 "SUB(8|16|32|64)mi",
2015 "SUB(8|16|32|64)mr",
2016 "XOR(8|16|32|64)mi",
2017 "XOR(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002018
2019def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002020 let Latency = 6;
2021 let NumMicroOps = 6;
2022 let ResourceCycles = [1,5];
2023}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002024def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002025
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002026def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
2027 let Latency = 7;
2028 let NumMicroOps = 1;
2029 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002030}
Craig Topperfc179c62018-03-22 04:23:41 +00002031def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m",
2032 "LD_F64m",
2033 "LD_F80m",
2034 "VBROADCASTF128",
2035 "VBROADCASTI128",
2036 "VBROADCASTSDYrm",
2037 "VBROADCASTSSYrm",
2038 "VLDDQUYrm",
2039 "VMOVAPDYrm",
2040 "VMOVAPSYrm",
2041 "VMOVDDUPYrm",
2042 "VMOVDQAYrm",
2043 "VMOVDQUYrm",
2044 "VMOVNTDQAYrm",
2045 "VMOVSHDUPYrm",
2046 "VMOVSLDUPYrm",
2047 "VMOVUPDYrm",
2048 "VMOVUPSYrm",
2049 "VPBROADCASTDYrm",
2050 "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002051
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002052def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002053 let Latency = 7;
2054 let NumMicroOps = 2;
2055 let ResourceCycles = [1,1];
2056}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002057def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002058
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002059def SKLWriteResGroup87 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002060 let Latency = 7;
2061 let NumMicroOps = 2;
2062 let ResourceCycles = [1,1];
2063}
Craig Topperfc179c62018-03-22 04:23:41 +00002064def: InstRW<[SKLWriteResGroup87], (instregex "COMISDrm",
2065 "COMISSrm",
2066 "UCOMISDrm",
2067 "UCOMISSrm",
2068 "VCOMISDrm",
2069 "VCOMISSrm",
2070 "VUCOMISDrm",
2071 "VUCOMISSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002072
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002073def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2074 let Latency = 7;
2075 let NumMicroOps = 2;
2076 let ResourceCycles = [1,1];
2077}
Craig Topperfc179c62018-03-22 04:23:41 +00002078def: InstRW<[SKLWriteResGroup88], (instregex "INSERTPSrm",
2079 "PACKSSDWrm",
2080 "PACKSSWBrm",
2081 "PACKUSDWrm",
2082 "PACKUSWBrm",
2083 "PALIGNRrmi",
2084 "PBLENDWrmi",
2085 "PSHUFBrm",
2086 "PSHUFDmi",
2087 "PSHUFHWmi",
2088 "PSHUFLWmi",
2089 "PUNPCKHBWrm",
2090 "PUNPCKHDQrm",
2091 "PUNPCKHQDQrm",
2092 "PUNPCKHWDrm",
2093 "PUNPCKLBWrm",
2094 "PUNPCKLDQrm",
2095 "PUNPCKLQDQrm",
2096 "PUNPCKLWDrm",
2097 "SHUFPDrmi",
2098 "SHUFPSrmi",
2099 "UNPCKHPDrm",
2100 "UNPCKHPSrm",
2101 "UNPCKLPDrm",
2102 "UNPCKLPSrm",
2103 "VINSERTPSrm",
2104 "VPACKSSDWrm",
2105 "VPACKSSWBrm",
2106 "VPACKUSDWrm",
2107 "VPACKUSWBrm",
2108 "VPALIGNRrmi",
2109 "VPBLENDWrmi",
2110 "VPBROADCASTBrm",
2111 "VPBROADCASTWrm",
2112 "VPERMILPDmi",
2113 "VPERMILPDrm",
2114 "VPERMILPSmi",
2115 "VPERMILPSrm",
2116 "VPSHUFBrm",
2117 "VPSHUFDmi",
2118 "VPSHUFHWmi",
2119 "VPSHUFLWmi",
2120 "VPUNPCKHBWrm",
2121 "VPUNPCKHDQrm",
2122 "VPUNPCKHQDQrm",
2123 "VPUNPCKHWDrm",
2124 "VPUNPCKLBWrm",
2125 "VPUNPCKLDQrm",
2126 "VPUNPCKLQDQrm",
2127 "VPUNPCKLWDrm",
2128 "VSHUFPDrmi",
2129 "VSHUFPSrmi",
2130 "VUNPCKHPDrm",
2131 "VUNPCKHPSrm",
2132 "VUNPCKLPDrm",
2133 "VUNPCKLPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002134
2135def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort015]> {
2136 let Latency = 7;
2137 let NumMicroOps = 2;
2138 let ResourceCycles = [1,1];
2139}
Craig Topperfc179c62018-03-22 04:23:41 +00002140def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr",
2141 "VCVTPD2PSYrr",
2142 "VCVTPH2PSYrr",
2143 "VCVTPS2PDYrr",
2144 "VCVTPS2PHYrr",
2145 "VCVTTPD2DQYrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002146
2147def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2148 let Latency = 7;
2149 let NumMicroOps = 2;
2150 let ResourceCycles = [1,1];
2151}
Craig Topperfc179c62018-03-22 04:23:41 +00002152def: InstRW<[SKLWriteResGroup90], (instregex "PABSBrm",
2153 "PABSDrm",
2154 "PABSWrm",
2155 "PADDSBrm",
2156 "PADDSWrm",
2157 "PADDUSBrm",
2158 "PADDUSWrm",
2159 "PAVGBrm",
2160 "PAVGWrm",
2161 "PCMPEQBrm",
2162 "PCMPEQDrm",
2163 "PCMPEQQrm",
2164 "PCMPEQWrm",
2165 "PCMPGTBrm",
2166 "PCMPGTDrm",
2167 "PCMPGTWrm",
2168 "PMAXSBrm",
2169 "PMAXSDrm",
2170 "PMAXSWrm",
2171 "PMAXUBrm",
2172 "PMAXUDrm",
2173 "PMAXUWrm",
2174 "PMINSBrm",
2175 "PMINSDrm",
2176 "PMINSWrm",
2177 "PMINUBrm",
2178 "PMINUDrm",
2179 "PMINUWrm",
2180 "PSIGNBrm",
2181 "PSIGNDrm",
2182 "PSIGNWrm",
2183 "PSLLDrm",
2184 "PSLLQrm",
2185 "PSLLWrm",
2186 "PSRADrm",
2187 "PSRAWrm",
2188 "PSRLDrm",
2189 "PSRLQrm",
2190 "PSRLWrm",
2191 "PSUBSBrm",
2192 "PSUBSWrm",
2193 "PSUBUSBrm",
2194 "PSUBUSWrm",
2195 "VPABSBrm",
2196 "VPABSDrm",
2197 "VPABSWrm",
2198 "VPADDSBrm",
2199 "VPADDSWrm",
2200 "VPADDUSBrm",
2201 "VPADDUSWrm",
2202 "VPAVGBrm",
2203 "VPAVGWrm",
2204 "VPCMPEQBrm",
2205 "VPCMPEQDrm",
2206 "VPCMPEQQrm",
2207 "VPCMPEQWrm",
2208 "VPCMPGTBrm",
2209 "VPCMPGTDrm",
2210 "VPCMPGTWrm",
2211 "VPMAXSBrm",
2212 "VPMAXSDrm",
2213 "VPMAXSWrm",
2214 "VPMAXUBrm",
2215 "VPMAXUDrm",
2216 "VPMAXUWrm",
2217 "VPMINSBrm",
2218 "VPMINSDrm",
2219 "VPMINSWrm",
2220 "VPMINUBrm",
2221 "VPMINUDrm",
2222 "VPMINUWrm",
2223 "VPSIGNBrm",
2224 "VPSIGNDrm",
2225 "VPSIGNWrm",
2226 "VPSLLDrm",
2227 "VPSLLQrm",
2228 "VPSLLVDrm",
2229 "VPSLLVQrm",
2230 "VPSLLWrm",
2231 "VPSRADrm",
2232 "VPSRAVDrm",
2233 "VPSRAWrm",
2234 "VPSRLDrm",
2235 "VPSRLQrm",
2236 "VPSRLVDrm",
2237 "VPSRLVQrm",
2238 "VPSRLWrm",
2239 "VPSUBSBrm",
2240 "VPSUBSWrm",
2241 "VPSUBUSBrm",
2242 "VPSUBUSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002243
2244def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2245 let Latency = 7;
2246 let NumMicroOps = 2;
2247 let ResourceCycles = [1,1];
2248}
Craig Topperfc179c62018-03-22 04:23:41 +00002249def: InstRW<[SKLWriteResGroup91], (instregex "ANDNPDrm",
2250 "ANDNPSrm",
2251 "ANDPDrm",
2252 "ANDPSrm",
2253 "BLENDPDrmi",
2254 "BLENDPSrmi",
2255 "ORPDrm",
2256 "ORPSrm",
2257 "PADDBrm",
2258 "PADDDrm",
2259 "PADDQrm",
2260 "PADDWrm",
2261 "PANDNrm",
2262 "PANDrm",
2263 "PORrm",
2264 "PSUBBrm",
2265 "PSUBDrm",
2266 "PSUBQrm",
2267 "PSUBWrm",
2268 "PXORrm",
2269 "VANDNPDrm",
2270 "VANDNPSrm",
2271 "VANDPDrm",
2272 "VANDPSrm",
2273 "VBLENDPDrmi",
2274 "VBLENDPSrmi",
2275 "VINSERTF128rm",
2276 "VINSERTI128rm",
2277 "VMASKMOVPDrm",
2278 "VMASKMOVPSrm",
2279 "VORPDrm",
2280 "VORPSrm",
2281 "VPADDBrm",
2282 "VPADDDrm",
2283 "VPADDQrm",
2284 "VPADDWrm",
2285 "VPANDNrm",
2286 "VPANDrm",
2287 "VPBLENDDrmi",
2288 "VPMASKMOVDrm",
2289 "VPMASKMOVQrm",
2290 "VPORrm",
2291 "VPSUBBrm",
2292 "VPSUBDrm",
2293 "VPSUBQrm",
2294 "VPSUBWrm",
2295 "VPXORrm",
2296 "VXORPDrm",
2297 "VXORPSrm",
2298 "XORPDrm",
2299 "XORPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002300
2301def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2302 let Latency = 7;
2303 let NumMicroOps = 3;
2304 let ResourceCycles = [2,1];
2305}
Craig Topperfc179c62018-03-22 04:23:41 +00002306def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm",
2307 "MMX_PACKSSWBirm",
2308 "MMX_PACKUSWBirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002309
2310def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
2311 let Latency = 7;
2312 let NumMicroOps = 3;
2313 let ResourceCycles = [1,2];
2314}
Craig Topperf4cd9082018-01-19 05:47:32 +00002315def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002316
2317def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
2318 let Latency = 7;
2319 let NumMicroOps = 3;
2320 let ResourceCycles = [1,2];
2321}
Craig Topperfc179c62018-03-22 04:23:41 +00002322def: InstRW<[SKLWriteResGroup94], (instregex "LEAVE64",
2323 "SCASB",
2324 "SCASL",
2325 "SCASQ",
2326 "SCASW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002327
2328def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002329 let Latency = 7;
2330 let NumMicroOps = 3;
2331 let ResourceCycles = [1,1,1];
2332}
Craig Topperfc179c62018-03-22 04:23:41 +00002333def: InstRW<[SKLWriteResGroup95], (instregex "(V?)CVTTSS2SI64rr",
2334 "(V?)CVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002335
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002336def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002337 let Latency = 7;
2338 let NumMicroOps = 3;
2339 let ResourceCycles = [1,1,1];
2340}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002341def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002342
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002343def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002344 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002345 let NumMicroOps = 3;
2346 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002347}
Craig Topperfc179c62018-03-22 04:23:41 +00002348def: InstRW<[SKLWriteResGroup97], (instregex "(V?)LDMXCSR")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002349
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002350def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002351 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002352 let NumMicroOps = 3;
2353 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002354}
Craig Topperfc179c62018-03-22 04:23:41 +00002355def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ",
2356 "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002357
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002358def SKLWriteResGroup99 : SchedWriteRes<[SKLPort23,SKLPort06,SKLPort15]> {
2359 let Latency = 7;
2360 let NumMicroOps = 3;
2361 let ResourceCycles = [1,1,1];
2362}
Craig Toppera42a2ba2017-12-16 18:35:31 +00002363def: InstRW<[SKLWriteResGroup99], (instregex "BEXTR(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002364
2365def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2366 let Latency = 7;
2367 let NumMicroOps = 5;
2368 let ResourceCycles = [1,1,1,2];
2369}
Craig Topperfc179c62018-03-22 04:23:41 +00002370def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1",
2371 "ROL(8|16|32|64)mi",
2372 "ROR(8|16|32|64)m1",
2373 "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002374
2375def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
2376 let Latency = 7;
2377 let NumMicroOps = 5;
2378 let ResourceCycles = [1,1,1,2];
2379}
Craig Topper13a16502018-03-19 00:56:09 +00002380def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002381
2382def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2383 let Latency = 7;
2384 let NumMicroOps = 5;
2385 let ResourceCycles = [1,1,1,1,1];
2386}
Craig Topperfc179c62018-03-22 04:23:41 +00002387def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m",
2388 "FARCALL64")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002389
2390def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002391 let Latency = 7;
2392 let NumMicroOps = 7;
2393 let ResourceCycles = [1,3,1,2];
2394}
Craig Topper2d451e72018-03-18 08:38:06 +00002395def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002396
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002397def SKLWriteResGroup104 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002398 let Latency = 8;
2399 let NumMicroOps = 2;
2400 let ResourceCycles = [2];
2401}
Craig Topperfc179c62018-03-22 04:23:41 +00002402def: InstRW<[SKLWriteResGroup104], (instregex "(V?)AESIMCrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002403
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002404def SKLWriteResGroup105 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002405 let Latency = 8;
2406 let NumMicroOps = 2;
2407 let ResourceCycles = [2];
2408}
Craig Topperfc179c62018-03-22 04:23:41 +00002409def: InstRW<[SKLWriteResGroup105], (instregex "ROUNDPDr",
2410 "ROUNDPSr",
2411 "ROUNDSDr",
2412 "ROUNDSSr",
2413 "VROUNDPDr",
2414 "VROUNDPSr",
2415 "VROUNDSDr",
2416 "VROUNDSSr",
2417 "VROUNDYPDr",
2418 "VROUNDYPSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002419
Craig Topperd25f1ac2018-03-20 23:39:48 +00002420def SKLWriteResGroup105_2 : SchedWriteRes<[SKLPort01]> {
2421 let Latency = 10;
2422 let NumMicroOps = 2;
2423 let ResourceCycles = [2];
2424}
Craig Topperfc179c62018-03-22 04:23:41 +00002425def: InstRW<[SKLWriteResGroup105_2], (instregex "PMULLDrr",
2426 "VPMULLDYrr",
2427 "VPMULLDrr")>;
Craig Topperd25f1ac2018-03-20 23:39:48 +00002428
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002429def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002430 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002431 let NumMicroOps = 2;
2432 let ResourceCycles = [1,1];
2433}
Craig Topperfc179c62018-03-22 04:23:41 +00002434def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm",
2435 "VTESTPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002436
2437def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
2438 let Latency = 8;
2439 let NumMicroOps = 2;
2440 let ResourceCycles = [1,1];
2441}
Craig Topperfc179c62018-03-22 04:23:41 +00002442def: InstRW<[SKLWriteResGroup107], (instrs IMUL64m, MUL64m)>;
Craig Topperb369cdb2018-01-25 06:57:42 +00002443def: InstRW<[SKLWriteResGroup107], (instrs IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
Craig Topperfc179c62018-03-22 04:23:41 +00002444def: InstRW<[SKLWriteResGroup107], (instrs IMUL8m, MUL8m)>;
2445def: InstRW<[SKLWriteResGroup107], (instregex "BSF(16|32|64)rm",
2446 "BSR(16|32|64)rm",
2447 "LZCNT(16|32|64)rm",
2448 "PDEP(32|64)rm",
2449 "PEXT(32|64)rm",
2450 "POPCNT(16|32|64)rm",
2451 "TZCNT(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002452
2453def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00002454 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002455 let NumMicroOps = 3;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002456 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002457}
Craig Topperb369cdb2018-01-25 06:57:42 +00002458def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002459
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002460def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00002461 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002462 let NumMicroOps = 5;
2463}
Craig Topperfc179c62018-03-22 04:23:41 +00002464def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m, MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002465
2466def SKLWriteResGroup107_32 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00002467 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002468 let NumMicroOps = 3;
2469 let ResourceCycles = [1,1,1];
2470}
Craig Topperfc179c62018-03-22 04:23:41 +00002471def: InstRW<[SKLWriteResGroup107_32], (instrs IMUL32m, MUL32m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002472
2473def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2474 let Latency = 8;
2475 let NumMicroOps = 2;
2476 let ResourceCycles = [1,1];
2477}
Craig Topperfc179c62018-03-22 04:23:41 +00002478def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m",
2479 "FCOM64m",
2480 "FCOMP32m",
2481 "FCOMP64m",
2482 "MMX_PSADBWirm",
2483 "VPACKSSDWYrm",
2484 "VPACKSSWBYrm",
2485 "VPACKUSDWYrm",
2486 "VPACKUSWBYrm",
2487 "VPALIGNRYrmi",
2488 "VPBLENDWYrmi",
2489 "VPBROADCASTBYrm",
2490 "VPBROADCASTWYrm",
2491 "VPERMILPDYmi",
2492 "VPERMILPDYrm",
2493 "VPERMILPSYmi",
2494 "VPERMILPSYrm",
2495 "VPMOVSXBDYrm",
2496 "VPMOVSXBQYrm",
2497 "VPMOVSXWQYrm",
2498 "VPSHUFBYrm",
2499 "VPSHUFDYmi",
2500 "VPSHUFHWYmi",
2501 "VPSHUFLWYmi",
2502 "VPUNPCKHBWYrm",
2503 "VPUNPCKHDQYrm",
2504 "VPUNPCKHQDQYrm",
2505 "VPUNPCKHWDYrm",
2506 "VPUNPCKLBWYrm",
2507 "VPUNPCKLDQYrm",
2508 "VPUNPCKLQDQYrm",
2509 "VPUNPCKLWDYrm",
2510 "VSHUFPDYrmi",
2511 "VSHUFPSYrmi",
2512 "VUNPCKHPDYrm",
2513 "VUNPCKHPSYrm",
2514 "VUNPCKLPDYrm",
2515 "VUNPCKLPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002516
2517def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2518 let Latency = 8;
2519 let NumMicroOps = 2;
2520 let ResourceCycles = [1,1];
2521}
Craig Topperfc179c62018-03-22 04:23:41 +00002522def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm",
2523 "VPABSDYrm",
2524 "VPABSWYrm",
2525 "VPADDSBYrm",
2526 "VPADDSWYrm",
2527 "VPADDUSBYrm",
2528 "VPADDUSWYrm",
2529 "VPAVGBYrm",
2530 "VPAVGWYrm",
2531 "VPCMPEQBYrm",
2532 "VPCMPEQDYrm",
2533 "VPCMPEQQYrm",
2534 "VPCMPEQWYrm",
2535 "VPCMPGTBYrm",
2536 "VPCMPGTDYrm",
2537 "VPCMPGTWYrm",
2538 "VPMAXSBYrm",
2539 "VPMAXSDYrm",
2540 "VPMAXSWYrm",
2541 "VPMAXUBYrm",
2542 "VPMAXUDYrm",
2543 "VPMAXUWYrm",
2544 "VPMINSBYrm",
2545 "VPMINSDYrm",
2546 "VPMINSWYrm",
2547 "VPMINUBYrm",
2548 "VPMINUDYrm",
2549 "VPMINUWYrm",
2550 "VPSIGNBYrm",
2551 "VPSIGNDYrm",
2552 "VPSIGNWYrm",
2553 "VPSLLDYrm",
2554 "VPSLLQYrm",
2555 "VPSLLVDYrm",
2556 "VPSLLVQYrm",
2557 "VPSLLWYrm",
2558 "VPSRADYrm",
2559 "VPSRAVDYrm",
2560 "VPSRAWYrm",
2561 "VPSRLDYrm",
2562 "VPSRLQYrm",
2563 "VPSRLVDYrm",
2564 "VPSRLVQYrm",
2565 "VPSRLWYrm",
2566 "VPSUBSBYrm",
2567 "VPSUBSWYrm",
2568 "VPSUBUSBYrm",
2569 "VPSUBUSWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002570
2571def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2572 let Latency = 8;
2573 let NumMicroOps = 2;
2574 let ResourceCycles = [1,1];
2575}
Craig Topperfc179c62018-03-22 04:23:41 +00002576def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm",
2577 "VANDNPSYrm",
2578 "VANDPDYrm",
2579 "VANDPSYrm",
2580 "VBLENDPDYrmi",
2581 "VBLENDPSYrmi",
2582 "VMASKMOVPDYrm",
2583 "VMASKMOVPSYrm",
2584 "VORPDYrm",
2585 "VORPSYrm",
2586 "VPADDBYrm",
2587 "VPADDDYrm",
2588 "VPADDQYrm",
2589 "VPADDWYrm",
2590 "VPANDNYrm",
2591 "VPANDYrm",
2592 "VPBLENDDYrmi",
2593 "VPMASKMOVDYrm",
2594 "VPMASKMOVQYrm",
2595 "VPORYrm",
2596 "VPSUBBYrm",
2597 "VPSUBDYrm",
2598 "VPSUBQYrm",
2599 "VPSUBWYrm",
2600 "VPXORYrm",
2601 "VXORPDYrm",
2602 "VXORPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002603
2604def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002605 let Latency = 8;
2606 let NumMicroOps = 3;
2607 let ResourceCycles = [1,2];
2608}
Craig Topperfc179c62018-03-22 04:23:41 +00002609def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0",
2610 "BLENDVPSrm0",
2611 "PBLENDVBrm0",
2612 "VBLENDVPDrm",
2613 "VBLENDVPSrm",
2614 "VPBLENDVBYrm",
2615 "VPBLENDVBrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002616
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002617def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2618 let Latency = 8;
2619 let NumMicroOps = 4;
2620 let ResourceCycles = [1,2,1];
2621}
Craig Topperfc179c62018-03-22 04:23:41 +00002622def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PHADDSWrm",
2623 "MMX_PHSUBSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002624
2625def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
2626 let Latency = 8;
2627 let NumMicroOps = 4;
2628 let ResourceCycles = [2,1,1];
2629}
Craig Topperfc179c62018-03-22 04:23:41 +00002630def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHADDDrm",
2631 "MMX_PHADDWrm",
2632 "MMX_PHSUBDrm",
2633 "MMX_PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002634
2635def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort015]> {
2636 let Latency = 8;
2637 let NumMicroOps = 4;
2638 let ResourceCycles = [1,1,1,1];
2639}
2640def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
2641
2642def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
2643 let Latency = 8;
2644 let NumMicroOps = 5;
2645 let ResourceCycles = [1,1,3];
2646}
Craig Topper13a16502018-03-19 00:56:09 +00002647def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002648
2649def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2650 let Latency = 8;
2651 let NumMicroOps = 5;
2652 let ResourceCycles = [1,1,1,2];
2653}
Craig Topperfc179c62018-03-22 04:23:41 +00002654def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1",
2655 "RCL(8|16|32|64)mi",
2656 "RCR(8|16|32|64)m1",
2657 "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002658
2659def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2660 let Latency = 8;
2661 let NumMicroOps = 6;
2662 let ResourceCycles = [1,1,1,3];
2663}
Craig Topperfc179c62018-03-22 04:23:41 +00002664def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL",
2665 "SAR(8|16|32|64)mCL",
2666 "SHL(8|16|32|64)mCL",
2667 "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002668
2669def SKLWriteResGroup118 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
2670 let Latency = 8;
2671 let NumMicroOps = 6;
2672 let ResourceCycles = [1,1,1,3];
2673}
Craig Topper13a16502018-03-19 00:56:09 +00002674def: InstRW<[SKLWriteResGroup118], (instregex "ADC(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002675
2676def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2677 let Latency = 8;
2678 let NumMicroOps = 6;
2679 let ResourceCycles = [1,1,1,2,1];
2680}
Craig Topperfc179c62018-03-22 04:23:41 +00002681def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mr",
2682 "CMPXCHG(8|16|32|64)rm",
2683 "SBB(8|16|32|64)mi",
2684 "SBB(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002685
2686def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2687 let Latency = 9;
2688 let NumMicroOps = 2;
2689 let ResourceCycles = [1,1];
2690}
Craig Topperfc179c62018-03-22 04:23:41 +00002691def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm",
2692 "MMX_PMADDUBSWrm",
2693 "MMX_PMADDWDirm",
2694 "MMX_PMULHRSWrm",
2695 "MMX_PMULHUWirm",
2696 "MMX_PMULHWirm",
2697 "MMX_PMULLWirm",
2698 "MMX_PMULUDQirm",
2699 "RCPSSm",
2700 "RSQRTSSm",
2701 "VRCPSSm",
2702 "VRSQRTSSm",
2703 "VTESTPDYrm",
2704 "VTESTPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002705
2706def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2707 let Latency = 9;
2708 let NumMicroOps = 2;
2709 let ResourceCycles = [1,1];
2710}
Craig Topperfc179c62018-03-22 04:23:41 +00002711def: InstRW<[SKLWriteResGroup121], (instregex "PCMPGTQrm",
2712 "PSADBWrm",
2713 "VPCMPGTQrm",
2714 "VPMOVSXBWYrm",
2715 "VPMOVSXDQYrm",
2716 "VPMOVSXWDYrm",
2717 "VPMOVZXWDYrm",
2718 "VPSADBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002719
2720def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2721 let Latency = 9;
2722 let NumMicroOps = 2;
2723 let ResourceCycles = [1,1];
2724}
Craig Topperfc179c62018-03-22 04:23:41 +00002725def: InstRW<[SKLWriteResGroup122], (instregex "ADDSDrm",
2726 "ADDSSrm",
2727 "MULSDrm",
2728 "MULSSrm",
2729 "SUBSDrm",
2730 "SUBSSrm",
2731 "VADDSDrm",
2732 "VADDSSrm",
2733 "VMULSDrm",
2734 "VMULSSrm",
2735 "VSUBSDrm",
2736 "VSUBSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00002737def: InstRW<[SKLWriteResGroup122],
2738 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002739
2740def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2741 let Latency = 9;
2742 let NumMicroOps = 2;
2743 let ResourceCycles = [1,1];
2744}
Craig Topperfc179c62018-03-22 04:23:41 +00002745def: InstRW<[SKLWriteResGroup123], (instregex "CMPSDrm",
2746 "CMPSSrm",
2747 "CVTPS2PDrm",
2748 "MAX(C?)SDrm",
2749 "MAX(C?)SSrm",
2750 "MIN(C?)SDrm",
2751 "MIN(C?)SSrm",
2752 "MMX_CVTPS2PIirm",
2753 "MMX_CVTTPS2PIirm",
2754 "VCMPSDrm",
2755 "VCMPSSrm",
2756 "VCVTPH2PSrm",
2757 "VCVTPS2PDrm",
2758 "VMAX(C?)SDrm",
2759 "VMAX(C?)SSrm",
2760 "VMIN(C?)SDrm",
2761 "VMIN(C?)SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002762
2763def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002764 let Latency = 9;
2765 let NumMicroOps = 3;
2766 let ResourceCycles = [1,2];
2767}
Craig Topperfc179c62018-03-22 04:23:41 +00002768def: InstRW<[SKLWriteResGroup124], (instregex "(V?)DPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002769
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002770def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2771 let Latency = 9;
2772 let NumMicroOps = 3;
2773 let ResourceCycles = [1,2];
2774}
Craig Topperfc179c62018-03-22 04:23:41 +00002775def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm",
2776 "VBLENDVPSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002777
2778def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2779 let Latency = 9;
2780 let NumMicroOps = 3;
2781 let ResourceCycles = [1,1,1];
2782}
Craig Topperfc179c62018-03-22 04:23:41 +00002783def: InstRW<[SKLWriteResGroup126], (instregex "(V?)PTESTrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002784
2785def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
2786 let Latency = 9;
2787 let NumMicroOps = 3;
2788 let ResourceCycles = [1,1,1];
2789}
Craig Topperb369cdb2018-01-25 06:57:42 +00002790def: InstRW<[SKLWriteResGroup127], (instrs MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002791
2792def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002793 let Latency = 9;
2794 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002795 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002796}
Craig Topperfc179c62018-03-22 04:23:41 +00002797def: InstRW<[SKLWriteResGroup128], (instregex "(V?)PHADDSWrm",
2798 "(V?)PHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002799
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002800def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2801 let Latency = 9;
2802 let NumMicroOps = 4;
2803 let ResourceCycles = [2,1,1];
2804}
Craig Topperfc179c62018-03-22 04:23:41 +00002805def: InstRW<[SKLWriteResGroup129], (instregex "(V?)PHADDDrm",
2806 "(V?)PHADDWrm",
2807 "(V?)PHSUBDrm",
2808 "(V?)PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002809
2810def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
2811 let Latency = 9;
2812 let NumMicroOps = 4;
2813 let ResourceCycles = [1,1,1,1];
2814}
Craig Topperfc179c62018-03-22 04:23:41 +00002815def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8",
2816 "SHRD(16|32|64)mri8")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002817
2818def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2819 let Latency = 9;
2820 let NumMicroOps = 5;
2821 let ResourceCycles = [1,2,1,1];
2822}
Craig Topperfc179c62018-03-22 04:23:41 +00002823def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm",
2824 "LSL(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002825
2826def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2827 let Latency = 10;
2828 let NumMicroOps = 2;
2829 let ResourceCycles = [1,1];
2830}
Craig Topperfc179c62018-03-22 04:23:41 +00002831def: InstRW<[SKLWriteResGroup132], (instregex "(V?)AESDECLASTrm",
2832 "(V?)AESDECrm",
2833 "(V?)AESENCLASTrm",
2834 "(V?)AESENCrm",
2835 "(V?)RCPPSm",
2836 "(V?)RSQRTPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002837
2838def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2839 let Latency = 10;
2840 let NumMicroOps = 2;
2841 let ResourceCycles = [1,1];
2842}
Craig Topperfc179c62018-03-22 04:23:41 +00002843def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m",
2844 "ADD_F64m",
2845 "ILD_F16m",
2846 "ILD_F32m",
2847 "ILD_F64m",
2848 "SUBR_F32m",
2849 "SUBR_F64m",
2850 "SUB_F32m",
2851 "SUB_F64m",
2852 "VPCMPGTQYrm",
2853 "VPERM2F128rm",
2854 "VPERM2I128rm",
2855 "VPERMDYrm",
2856 "VPERMPDYmi",
2857 "VPERMPSYrm",
2858 "VPERMQYmi",
2859 "VPMOVZXBDYrm",
2860 "VPMOVZXBQYrm",
2861 "VPMOVZXBWYrm",
2862 "VPMOVZXDQYrm",
2863 "VPMOVZXWQYrm",
2864 "VPSADBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002865
2866def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2867 let Latency = 10;
2868 let NumMicroOps = 2;
2869 let ResourceCycles = [1,1];
2870}
Craig Topperfc179c62018-03-22 04:23:41 +00002871def: InstRW<[SKLWriteResGroup134], (instregex "ADDPDrm",
2872 "ADDPSrm",
2873 "ADDSUBPDrm",
2874 "ADDSUBPSrm",
2875 "MULPDrm",
2876 "MULPSrm",
2877 "SUBPDrm",
2878 "SUBPSrm",
2879 "VADDPDrm",
2880 "VADDPSrm",
2881 "VADDSUBPDrm",
2882 "VADDSUBPSrm",
2883 "VMULPDrm",
2884 "VMULPSrm",
2885 "VSUBPDrm",
2886 "VSUBPSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00002887def: InstRW<[SKLWriteResGroup134],
2888 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002889
2890def SKLWriteResGroup135 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2891 let Latency = 10;
2892 let NumMicroOps = 2;
2893 let ResourceCycles = [1,1];
2894}
Craig Topperfc179c62018-03-22 04:23:41 +00002895def: InstRW<[SKLWriteResGroup135], (instregex "CMPPDrmi",
2896 "CMPPSrmi",
2897 "CVTDQ2PSrm",
2898 "CVTPS2DQrm",
2899 "CVTSS2SDrm",
2900 "CVTTPS2DQrm",
2901 "MAX(C?)PDrm",
2902 "MAX(C?)PSrm",
2903 "MIN(C?)PDrm",
2904 "MIN(C?)PSrm",
2905 "PHMINPOSUWrm",
2906 "PMADDUBSWrm",
2907 "PMADDWDrm",
2908 "PMULDQrm",
2909 "PMULHRSWrm",
2910 "PMULHUWrm",
2911 "PMULHWrm",
2912 "PMULLWrm",
2913 "PMULUDQrm",
2914 "VCMPPDrmi",
2915 "VCMPPSrmi",
2916 "VCVTDQ2PSrm",
2917 "VCVTPH2PSYrm",
2918 "VCVTPS2DQrm",
2919 "VCVTSS2SDrm",
2920 "VCVTTPS2DQrm",
2921 "VMAX(C?)PDrm",
2922 "VMAX(C?)PSrm",
2923 "VMIN(C?)PDrm",
2924 "VMIN(C?)PSrm",
2925 "VPHMINPOSUWrm",
2926 "VPMADDUBSWrm",
2927 "VPMADDWDrm",
2928 "VPMULDQrm",
2929 "VPMULHRSWrm",
2930 "VPMULHUWrm",
2931 "VPMULHWrm",
2932 "VPMULLWrm",
2933 "VPMULUDQrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002934
2935def SKLWriteResGroup136 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002936 let Latency = 10;
2937 let NumMicroOps = 3;
2938 let ResourceCycles = [3];
2939}
Craig Topperfc179c62018-03-22 04:23:41 +00002940def: InstRW<[SKLWriteResGroup136], (instregex "(V?)PCMPISTRIrr",
2941 "(V?)PCMPISTRM128rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002942
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002943def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2944 let Latency = 10;
2945 let NumMicroOps = 3;
2946 let ResourceCycles = [2,1];
2947}
Craig Topperfc179c62018-03-22 04:23:41 +00002948def: InstRW<[SKLWriteResGroup137], (instregex "(V?)MPSADBWrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002949
2950def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2951 let Latency = 10;
2952 let NumMicroOps = 3;
2953 let ResourceCycles = [1,1,1];
2954}
Craig Topperfc179c62018-03-22 04:23:41 +00002955def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm",
2956 "VPTESTYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002957
2958def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2959 let Latency = 10;
2960 let NumMicroOps = 3;
2961 let ResourceCycles = [1,1,1];
2962}
Craig Topperfc179c62018-03-22 04:23:41 +00002963def: InstRW<[SKLWriteResGroup139], (instregex "(V?)CVTSD2SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002964
2965def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002966 let Latency = 10;
2967 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002968 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002969}
Craig Topperfc179c62018-03-22 04:23:41 +00002970def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm",
2971 "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002972
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002973def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2974 let Latency = 10;
2975 let NumMicroOps = 4;
2976 let ResourceCycles = [2,1,1];
2977}
Craig Topperfc179c62018-03-22 04:23:41 +00002978def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm",
2979 "VPHADDWYrm",
2980 "VPHSUBDYrm",
2981 "VPHSUBWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002982
2983def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
2984 let Latency = 10;
2985 let NumMicroOps = 4;
2986 let ResourceCycles = [1,1,1,1];
2987}
Craig Topperb369cdb2018-01-25 06:57:42 +00002988def: InstRW<[SKLWriteResGroup142], (instrs MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002989
2990def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2991 let Latency = 10;
2992 let NumMicroOps = 8;
2993 let ResourceCycles = [1,1,1,1,1,3];
2994}
Craig Topper13a16502018-03-19 00:56:09 +00002995def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002996
2997def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002998 let Latency = 10;
2999 let NumMicroOps = 10;
3000 let ResourceCycles = [9,1];
3001}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003002def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003003
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003004def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003005 let Latency = 11;
3006 let NumMicroOps = 1;
3007 let ResourceCycles = [1];
3008}
Craig Topperfc179c62018-03-22 04:23:41 +00003009def: InstRW<[SKLWriteResGroup145], (instregex "DIVPSrr",
3010 "DIVSSrr",
3011 "VDIVPSYrr",
3012 "VDIVPSrr",
3013 "VDIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003014
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003015def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003016 let Latency = 11;
3017 let NumMicroOps = 2;
3018 let ResourceCycles = [1,1];
3019}
Craig Topperfc179c62018-03-22 04:23:41 +00003020def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m",
3021 "MUL_F64m",
3022 "VRCPPSYm",
3023 "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003024
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003025def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
3026 let Latency = 11;
3027 let NumMicroOps = 2;
3028 let ResourceCycles = [1,1];
3029}
Craig Topperfc179c62018-03-22 04:23:41 +00003030def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm",
3031 "VADDPSYrm",
3032 "VADDSUBPDYrm",
3033 "VADDSUBPSYrm",
3034 "VMULPDYrm",
3035 "VMULPSYrm",
3036 "VSUBPDYrm",
3037 "VSUBPSYrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00003038def: InstRW<[SKLWriteResGroup147],
3039 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003040
3041def SKLWriteResGroup148 : SchedWriteRes<[SKLPort23,SKLPort015]> {
3042 let Latency = 11;
3043 let NumMicroOps = 2;
3044 let ResourceCycles = [1,1];
3045}
Craig Topperfc179c62018-03-22 04:23:41 +00003046def: InstRW<[SKLWriteResGroup148], (instregex "VCMPPDYrmi",
3047 "VCMPPSYrmi",
3048 "VCVTDQ2PSYrm",
3049 "VCVTPS2DQYrm",
3050 "VCVTPS2PDYrm",
3051 "VCVTTPS2DQYrm",
3052 "VMAX(C?)PDYrm",
3053 "VMAX(C?)PSYrm",
3054 "VMIN(C?)PDYrm",
3055 "VMIN(C?)PSYrm",
3056 "VPMADDUBSWYrm",
3057 "VPMADDWDYrm",
3058 "VPMULDQYrm",
3059 "VPMULHRSWYrm",
3060 "VPMULHUWYrm",
3061 "VPMULHWYrm",
3062 "VPMULLWYrm",
3063 "VPMULUDQYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003064
3065def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
3066 let Latency = 11;
3067 let NumMicroOps = 3;
3068 let ResourceCycles = [2,1];
3069}
Craig Topperfc179c62018-03-22 04:23:41 +00003070def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m",
3071 "FICOM32m",
3072 "FICOMP16m",
3073 "FICOMP32m",
3074 "VMPSADBWYrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003075
3076def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3077 let Latency = 11;
3078 let NumMicroOps = 3;
3079 let ResourceCycles = [1,1,1];
3080}
Craig Topperfc179c62018-03-22 04:23:41 +00003081def: InstRW<[SKLWriteResGroup150], (instregex "(V?)CVTDQ2PDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003082
3083def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort015]> {
3084 let Latency = 11;
3085 let NumMicroOps = 3;
3086 let ResourceCycles = [1,1,1];
3087}
Craig Topperfc179c62018-03-22 04:23:41 +00003088def: InstRW<[SKLWriteResGroup151], (instregex "CVTSD2SI64rm",
3089 "CVTSD2SIrm",
3090 "CVTSS2SI64rm",
3091 "CVTSS2SIrm",
3092 "CVTTSD2SI64rm",
3093 "CVTTSD2SIrm",
3094 "CVTTSS2SIrm",
3095 "VCVTSD2SI64rm",
3096 "VCVTSD2SIrm",
3097 "VCVTSS2SI64rm",
3098 "VCVTSS2SIrm",
3099 "VCVTTSD2SI64rm",
3100 "VCVTTSD2SIrm",
3101 "VCVTTSS2SI64rm",
3102 "VCVTTSS2SIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003103
3104def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3105 let Latency = 11;
3106 let NumMicroOps = 3;
3107 let ResourceCycles = [1,1,1];
3108}
Craig Topperfc179c62018-03-22 04:23:41 +00003109def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm",
3110 "CVTPD2PSrm",
3111 "CVTTPD2DQrm",
3112 "MMX_CVTPD2PIirm",
3113 "MMX_CVTTPD2PIirm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003114
3115def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3116 let Latency = 11;
3117 let NumMicroOps = 6;
3118 let ResourceCycles = [1,1,1,2,1];
3119}
Craig Topperfc179c62018-03-22 04:23:41 +00003120def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL",
3121 "SHRD(16|32|64)mrCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003122
3123def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003124 let Latency = 11;
3125 let NumMicroOps = 7;
3126 let ResourceCycles = [2,3,2];
3127}
Craig Topperfc179c62018-03-22 04:23:41 +00003128def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL",
3129 "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003130
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003131def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003132 let Latency = 11;
3133 let NumMicroOps = 9;
3134 let ResourceCycles = [1,5,1,2];
3135}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003136def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003137
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003138def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003139 let Latency = 11;
3140 let NumMicroOps = 11;
3141 let ResourceCycles = [2,9];
3142}
Craig Topperfc179c62018-03-22 04:23:41 +00003143def: InstRW<[SKLWriteResGroup156], (instrs LOOPE, LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003144
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003145def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003146 let Latency = 12;
3147 let NumMicroOps = 1;
3148 let ResourceCycles = [1];
3149}
Craig Topperfc179c62018-03-22 04:23:41 +00003150def: InstRW<[SKLWriteResGroup157], (instregex "VSQRTPSYr",
3151 "VSQRTPSr",
3152 "VSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003153
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003154def SKLWriteResGroup158 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003155 let Latency = 12;
3156 let NumMicroOps = 2;
3157 let ResourceCycles = [1,1];
3158}
Craig Topperfc179c62018-03-22 04:23:41 +00003159def: InstRW<[SKLWriteResGroup158], (instregex "(V?)PCLMULQDQrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003160
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003161def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
3162 let Latency = 12;
3163 let NumMicroOps = 4;
3164 let ResourceCycles = [2,1,1];
3165}
Craig Topperfc179c62018-03-22 04:23:41 +00003166def: InstRW<[SKLWriteResGroup159], (instregex "(V?)HADDPDrm",
3167 "(V?)HADDPSrm",
3168 "(V?)HSUBPDrm",
3169 "(V?)HSUBPSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003170
3171def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort015]> {
3172 let Latency = 12;
3173 let NumMicroOps = 4;
3174 let ResourceCycles = [1,1,1,1];
3175}
3176def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
3177
3178def SKLWriteResGroup161 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003179 let Latency = 13;
3180 let NumMicroOps = 1;
3181 let ResourceCycles = [1];
3182}
Craig Topperfc179c62018-03-22 04:23:41 +00003183def: InstRW<[SKLWriteResGroup161], (instregex "SQRTPSr",
3184 "SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003185
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003186def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003187 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003188 let NumMicroOps = 3;
3189 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003190}
Craig Topperfc179c62018-03-22 04:23:41 +00003191def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m",
3192 "ADD_FI32m",
3193 "SUBR_FI16m",
3194 "SUBR_FI32m",
3195 "SUB_FI16m",
3196 "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003197
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003198def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3199 let Latency = 13;
3200 let NumMicroOps = 3;
3201 let ResourceCycles = [1,1,1];
3202}
3203def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
3204
3205def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003206 let Latency = 13;
3207 let NumMicroOps = 4;
3208 let ResourceCycles = [1,3];
3209}
Craig Topperfc179c62018-03-22 04:23:41 +00003210def: InstRW<[SKLWriteResGroup164], (instregex "DPPSrri",
3211 "VDPPSYrri",
3212 "VDPPSrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003213
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003214def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003215 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003216 let NumMicroOps = 4;
3217 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003218}
Craig Topperfc179c62018-03-22 04:23:41 +00003219def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm",
3220 "VHADDPSYrm",
3221 "VHSUBPDYrm",
3222 "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003223
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003224def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003225 let Latency = 14;
3226 let NumMicroOps = 1;
3227 let ResourceCycles = [1];
3228}
Craig Topperfc179c62018-03-22 04:23:41 +00003229def: InstRW<[SKLWriteResGroup166], (instregex "DIVPDrr",
3230 "DIVSDrr",
3231 "VDIVPDYrr",
3232 "VDIVPDrr",
3233 "VDIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003234
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003235def SKLWriteResGroup167 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003236 let Latency = 14;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003237 let NumMicroOps = 3;
3238 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003239}
Craig Topperfc179c62018-03-22 04:23:41 +00003240def: InstRW<[SKLWriteResGroup167], (instregex "(V?)AESIMCrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003241
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003242def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort015]> {
3243 let Latency = 14;
3244 let NumMicroOps = 3;
3245 let ResourceCycles = [1,2];
3246}
Craig Topperfc179c62018-03-22 04:23:41 +00003247def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPDm")>;
3248def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDPSm")>;
3249def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSDm")>;
3250def: InstRW<[SKLWriteResGroup168], (instregex "(V?)ROUNDSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003251
Craig Topperd25f1ac2018-03-20 23:39:48 +00003252def SKLWriteResGroup168_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
3253 let Latency = 16;
3254 let NumMicroOps = 3;
3255 let ResourceCycles = [1,2];
3256}
Craig Topperfc179c62018-03-22 04:23:41 +00003257def: InstRW<[SKLWriteResGroup168_2], (instregex "(V?)PMULLDrm")>;
Craig Topperd25f1ac2018-03-20 23:39:48 +00003258
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003259def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3260 let Latency = 14;
3261 let NumMicroOps = 3;
3262 let ResourceCycles = [1,1,1];
3263}
Craig Topperfc179c62018-03-22 04:23:41 +00003264def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m",
3265 "MUL_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003266
3267def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003268 let Latency = 14;
3269 let NumMicroOps = 10;
3270 let ResourceCycles = [2,4,1,3];
3271}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003272def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003273
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003274def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003275 let Latency = 15;
3276 let NumMicroOps = 1;
3277 let ResourceCycles = [1];
3278}
Craig Topperfc179c62018-03-22 04:23:41 +00003279def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0",
3280 "DIVR_FST0r",
3281 "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003282
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003283def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003284 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003285 let NumMicroOps = 3;
3286 let ResourceCycles = [1,2];
3287}
Craig Topperfc179c62018-03-22 04:23:41 +00003288def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDYPDm",
3289 "VROUNDYPSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003290
Craig Topperd25f1ac2018-03-20 23:39:48 +00003291def SKLWriteResGroup172_2 : SchedWriteRes<[SKLPort23,SKLPort01]> {
3292 let Latency = 17;
3293 let NumMicroOps = 3;
3294 let ResourceCycles = [1,2];
3295}
3296def: InstRW<[SKLWriteResGroup172_2], (instregex "VPMULLDYrm")>;
3297
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003298def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3299 let Latency = 15;
3300 let NumMicroOps = 4;
3301 let ResourceCycles = [1,1,2];
3302}
Craig Topperfc179c62018-03-22 04:23:41 +00003303def: InstRW<[SKLWriteResGroup173], (instregex "(V?)DPPDrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003304
3305def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
3306 let Latency = 15;
3307 let NumMicroOps = 10;
3308 let ResourceCycles = [1,1,1,5,1,1];
3309}
Craig Topper13a16502018-03-19 00:56:09 +00003310def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003311
3312def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3313 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003314 let NumMicroOps = 2;
3315 let ResourceCycles = [1,1];
3316}
Craig Topperfc179c62018-03-22 04:23:41 +00003317def: InstRW<[SKLWriteResGroup175], (instregex "(V?)DIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003318
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003319def SKLWriteResGroup176 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3320 let Latency = 16;
3321 let NumMicroOps = 4;
3322 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003323}
Craig Topperfc179c62018-03-22 04:23:41 +00003324def: InstRW<[SKLWriteResGroup176], (instregex "(V?)PCMPISTRIrm",
3325 "(V?)PCMPISTRM128rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003326
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003327def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
3328 let Latency = 16;
3329 let NumMicroOps = 14;
3330 let ResourceCycles = [1,1,1,4,2,5];
3331}
3332def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
3333
3334def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003335 let Latency = 16;
3336 let NumMicroOps = 16;
3337 let ResourceCycles = [16];
3338}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003339def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003340
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003341def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3342 let Latency = 17;
3343 let NumMicroOps = 2;
3344 let ResourceCycles = [1,1];
3345}
Craig Topperfc179c62018-03-22 04:23:41 +00003346def: InstRW<[SKLWriteResGroup179], (instregex "(V?)DIVPSrm",
3347 "VSQRTSSm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003348
3349def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003350 let Latency = 17;
3351 let NumMicroOps = 15;
3352 let ResourceCycles = [2,1,2,4,2,4];
3353}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003354def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003355
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003356def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003357 let Latency = 18;
3358 let NumMicroOps = 1;
3359 let ResourceCycles = [1];
3360}
Craig Topperfc179c62018-03-22 04:23:41 +00003361def: InstRW<[SKLWriteResGroup181], (instregex "VSQRTPDYr",
3362 "VSQRTPDr",
3363 "VSQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003364
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003365def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003366 let Latency = 18;
3367 let NumMicroOps = 2;
3368 let ResourceCycles = [1,1];
3369}
Craig Topperfc179c62018-03-22 04:23:41 +00003370def: InstRW<[SKLWriteResGroup182], (instregex "SQRTSSm",
3371 "VDIVPSYrm",
3372 "VSQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003373
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003374def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003375 let Latency = 18;
3376 let NumMicroOps = 8;
3377 let ResourceCycles = [4,3,1];
3378}
Craig Topperfc179c62018-03-22 04:23:41 +00003379def: InstRW<[SKLWriteResGroup183], (instregex "(V?)PCMPESTRIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003380
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003381def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003382 let Latency = 18;
3383 let NumMicroOps = 8;
3384 let ResourceCycles = [1,1,1,5];
3385}
Craig Topperfc179c62018-03-22 04:23:41 +00003386def: InstRW<[SKLWriteResGroup184], (instrs CPUID, RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003387
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003388def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003389 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003390 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003391 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003392}
Craig Topper13a16502018-03-19 00:56:09 +00003393def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003394
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003395def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3396 let Latency = 19;
3397 let NumMicroOps = 2;
3398 let ResourceCycles = [1,1];
3399}
Craig Topperfc179c62018-03-22 04:23:41 +00003400def: InstRW<[SKLWriteResGroup186], (instregex "DIVSDrm",
3401 "SQRTPSm",
3402 "VDIVSDrm",
3403 "VSQRTPSYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003404
3405def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3406 let Latency = 19;
3407 let NumMicroOps = 5;
3408 let ResourceCycles = [1,1,3];
3409}
Craig Topperfc179c62018-03-22 04:23:41 +00003410def: InstRW<[SKLWriteResGroup187], (instregex "(V?)DPPSrmi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003411
3412def SKLWriteResGroup188 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort015,SKLPort0156]> {
3413 let Latency = 19;
3414 let NumMicroOps = 9;
3415 let ResourceCycles = [4,3,1,1];
3416}
Craig Topperfc179c62018-03-22 04:23:41 +00003417def: InstRW<[SKLWriteResGroup188], (instregex "(V?)PCMPESTRM128rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003418
3419def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003420 let Latency = 20;
3421 let NumMicroOps = 1;
3422 let ResourceCycles = [1];
3423}
Craig Topperfc179c62018-03-22 04:23:41 +00003424def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0",
3425 "DIV_FST0r",
3426 "DIV_FrST0",
3427 "SQRTPDr",
3428 "SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003429
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003430def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003431 let Latency = 20;
3432 let NumMicroOps = 2;
3433 let ResourceCycles = [1,1];
3434}
Craig Topperfc179c62018-03-22 04:23:41 +00003435def: InstRW<[SKLWriteResGroup190], (instregex "(V?)DIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003436
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003437def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3438 let Latency = 20;
3439 let NumMicroOps = 5;
3440 let ResourceCycles = [1,1,3];
3441}
3442def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
3443
3444def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3445 let Latency = 20;
3446 let NumMicroOps = 8;
3447 let ResourceCycles = [1,1,1,1,1,1,2];
3448}
Craig Topperfc179c62018-03-22 04:23:41 +00003449def: InstRW<[SKLWriteResGroup192], (instregex "INSB",
3450 "INSL",
3451 "INSW")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003452
3453def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003454 let Latency = 20;
3455 let NumMicroOps = 10;
3456 let ResourceCycles = [1,2,7];
3457}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003458def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003459
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003460def SKLWriteResGroup194 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003461 let Latency = 20;
3462 let NumMicroOps = 11;
3463 let ResourceCycles = [3,6,2];
3464}
Craig Topperfc179c62018-03-22 04:23:41 +00003465def: InstRW<[SKLWriteResGroup194], (instregex "(V?)AESKEYGENASSIST128rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003466
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003467def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3468 let Latency = 21;
3469 let NumMicroOps = 2;
3470 let ResourceCycles = [1,1];
3471}
3472def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
3473
3474def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3475 let Latency = 22;
3476 let NumMicroOps = 2;
3477 let ResourceCycles = [1,1];
3478}
Craig Topperfc179c62018-03-22 04:23:41 +00003479def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m",
3480 "DIV_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003481
3482def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
3483 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003484 let NumMicroOps = 5;
3485 let ResourceCycles = [1,2,1,1];
3486}
Craig Topper17a31182017-12-16 18:35:29 +00003487def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
3488 VGATHERDPDrm,
3489 VGATHERQPDrm,
3490 VGATHERQPSrm,
3491 VPGATHERDDrm,
3492 VPGATHERDQrm,
3493 VPGATHERQDrm,
3494 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003495
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003496def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
3497 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003498 let NumMicroOps = 5;
3499 let ResourceCycles = [1,2,1,1];
3500}
Craig Topper17a31182017-12-16 18:35:29 +00003501def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
3502 VGATHERQPDYrm,
3503 VGATHERQPSYrm,
3504 VPGATHERDDYrm,
3505 VPGATHERDQYrm,
3506 VPGATHERQDYrm,
3507 VPGATHERQQYrm,
3508 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003509
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003510def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003511 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003512 let NumMicroOps = 2;
3513 let ResourceCycles = [1,1];
3514}
3515def: InstRW<[SKLWriteResGroup197], (instregex "VSQRTSDm")>;
3516
3517def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3518 let Latency = 23;
3519 let NumMicroOps = 19;
3520 let ResourceCycles = [2,1,4,1,1,4,6];
3521}
3522def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
3523
3524def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3525 let Latency = 24;
3526 let NumMicroOps = 2;
3527 let ResourceCycles = [1,1];
3528}
3529def: InstRW<[SKLWriteResGroup199], (instregex "VSQRTPDm")>;
3530
3531def SKLWriteResGroup200 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
3532 let Latency = 24;
3533 let NumMicroOps = 9;
3534 let ResourceCycles = [4,3,1,1];
3535}
Craig Topperfc179c62018-03-22 04:23:41 +00003536def: InstRW<[SKLWriteResGroup200], (instregex "(V?)PCMPESTRIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003537
3538def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3539 let Latency = 25;
3540 let NumMicroOps = 2;
3541 let ResourceCycles = [1,1];
3542}
Craig Topperfc179c62018-03-22 04:23:41 +00003543def: InstRW<[SKLWriteResGroup201], (instregex "SQRTSDm",
3544 "VSQRTPDYm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003545
3546def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3547 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003548 let NumMicroOps = 3;
3549 let ResourceCycles = [1,1,1];
3550}
Craig Topperfc179c62018-03-22 04:23:41 +00003551def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m",
3552 "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003553
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003554def SKLWriteResGroup203 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort015,SKLPort0156]> {
3555 let Latency = 25;
3556 let NumMicroOps = 10;
3557 let ResourceCycles = [4,3,1,1,1];
3558}
Craig Topperfc179c62018-03-22 04:23:41 +00003559def: InstRW<[SKLWriteResGroup203], (instregex "(V?)PCMPESTRM128rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003560
3561def SKLWriteResGroup204 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort015]> {
3562 let Latency = 25;
3563 let NumMicroOps = 11;
3564 let ResourceCycles = [3,6,1,1];
3565}
Craig Topperfc179c62018-03-22 04:23:41 +00003566def: InstRW<[SKLWriteResGroup204], (instregex "(V?)AESKEYGENASSIST128rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003567
3568def SKLWriteResGroup205 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3569 let Latency = 26;
3570 let NumMicroOps = 2;
3571 let ResourceCycles = [1,1];
3572}
3573def: InstRW<[SKLWriteResGroup205], (instregex "SQRTPDm")>;
3574
3575def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3576 let Latency = 27;
3577 let NumMicroOps = 2;
3578 let ResourceCycles = [1,1];
3579}
Craig Topperfc179c62018-03-22 04:23:41 +00003580def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m",
3581 "DIVR_F64m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003582
3583def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
3584 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003585 let NumMicroOps = 8;
3586 let ResourceCycles = [2,4,1,1];
3587}
Craig Topper13a16502018-03-19 00:56:09 +00003588def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003589
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003590def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003591 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003592 let NumMicroOps = 3;
3593 let ResourceCycles = [1,1,1];
3594}
Craig Topperfc179c62018-03-22 04:23:41 +00003595def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m",
3596 "DIVR_FI32m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003597
3598def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
3599 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003600 let NumMicroOps = 23;
3601 let ResourceCycles = [1,5,3,4,10];
3602}
Craig Topperfc179c62018-03-22 04:23:41 +00003603def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri",
3604 "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003605
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003606def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3607 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003608 let NumMicroOps = 23;
3609 let ResourceCycles = [1,5,2,1,4,10];
3610}
Craig Topperfc179c62018-03-22 04:23:41 +00003611def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir",
3612 "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003613
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003614def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
3615 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003616 let NumMicroOps = 31;
3617 let ResourceCycles = [1,8,1,21];
3618}
Craig Topper391c6f92017-12-10 01:24:08 +00003619def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003620
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003621def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
3622 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003623 let NumMicroOps = 18;
3624 let ResourceCycles = [1,1,2,3,1,1,1,8];
3625}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003626def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003627
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003628def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
3629 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003630 let NumMicroOps = 39;
3631 let ResourceCycles = [1,10,1,1,26];
3632}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003633def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003634
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003635def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003636 let Latency = 42;
3637 let NumMicroOps = 22;
3638 let ResourceCycles = [2,20];
3639}
Craig Topper2d451e72018-03-18 08:38:06 +00003640def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003641
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003642def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
3643 let Latency = 42;
3644 let NumMicroOps = 40;
3645 let ResourceCycles = [1,11,1,1,26];
3646}
Craig Topper391c6f92017-12-10 01:24:08 +00003647def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003648
3649def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
3650 let Latency = 46;
3651 let NumMicroOps = 44;
3652 let ResourceCycles = [1,11,1,1,30];
3653}
3654def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
3655
3656def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
3657 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003658 let NumMicroOps = 64;
3659 let ResourceCycles = [2,8,5,10,39];
3660}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003661def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003662
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003663def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
3664 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003665 let NumMicroOps = 88;
3666 let ResourceCycles = [4,4,31,1,2,1,45];
3667}
Craig Topper2d451e72018-03-18 08:38:06 +00003668def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003669
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003670def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
3671 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003672 let NumMicroOps = 90;
3673 let ResourceCycles = [4,2,33,1,2,1,47];
3674}
Craig Topper2d451e72018-03-18 08:38:06 +00003675def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003676
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003677def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003678 let Latency = 75;
3679 let NumMicroOps = 15;
3680 let ResourceCycles = [6,3,6];
3681}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003682def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003683
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003684def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003685 let Latency = 76;
3686 let NumMicroOps = 32;
3687 let ResourceCycles = [7,2,8,3,1,11];
3688}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003689def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003690
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003691def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003692 let Latency = 102;
3693 let NumMicroOps = 66;
3694 let ResourceCycles = [4,2,4,8,14,34];
3695}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003696def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003697
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003698def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
3699 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003700 let NumMicroOps = 100;
3701 let ResourceCycles = [9,1,11,16,1,11,21,30];
3702}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003703def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003704
3705} // SchedModel