blob: b4d5f880434bf1f414088b66be081e43a8ed57e9 [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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000281def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr")>;
282def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSWirr")>;
283def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDUSBirr")>;
284def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDUSWirr")>;
285def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PAVGBirr")>;
286def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PAVGWirr")>;
287def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPEQBirr")>;
288def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPEQDirr")>;
289def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPEQWirr")>;
290def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPGTBirr")>;
291def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPGTDirr")>;
292def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPGTWirr")>;
293def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PMAXSWirr")>;
294def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PMAXUBirr")>;
295def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PMINSWirr")>;
296def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PMINUBirr")>;
297def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLDri")>;
298def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLDrr")>;
299def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLQri")>;
300def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLQrr")>;
301def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLWri")>;
302def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLWrr")>;
303def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRADri")>;
304def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRADrr")>;
305def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRAWri")>;
306def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRAWrr")>;
307def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLDri")>;
308def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLDrr")>;
309def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLQri")>;
310def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLQrr")>;
311def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLWri")>;
312def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLWrr")>;
313def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSUBSBirr")>;
314def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSUBSWirr")>;
315def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSUBUSBirr")>;
316def: InstRW<[SKLWriteResGroup1], (instregex "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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000323def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r")>;
324def: InstRW<[SKLWriteResGroup3], (instregex "COM_FST0r")>;
325def: InstRW<[SKLWriteResGroup3], (instregex "INSERTPSrr")>;
326def: InstRW<[SKLWriteResGroup3], (instregex "MMX_MOVD64rr")>;
327def: InstRW<[SKLWriteResGroup3], (instregex "MMX_MOVD64to64rr")>;
Craig Topperdbddac02018-01-25 04:45:30 +0000328def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PALIGNRrri")>;
329def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PSHUFBrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000330def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PSHUFWri")>;
331def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKHBWirr")>;
332def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKHDQirr")>;
333def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKHWDirr")>;
334def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKLBWirr")>;
335def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKLDQirr")>;
336def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKLWDirr")>;
337def: InstRW<[SKLWriteResGroup3], (instregex "MOV64toPQIrr")>;
338def: InstRW<[SKLWriteResGroup3], (instregex "MOVDDUPrr")>;
339def: InstRW<[SKLWriteResGroup3], (instregex "MOVDI2PDIrr")>;
340def: InstRW<[SKLWriteResGroup3], (instregex "MOVHLPSrr")>;
341def: InstRW<[SKLWriteResGroup3], (instregex "MOVLHPSrr")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000342def: InstRW<[SKLWriteResGroup3], (instregex "MOVSDrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000343def: InstRW<[SKLWriteResGroup3], (instregex "MOVSHDUPrr")>;
344def: InstRW<[SKLWriteResGroup3], (instregex "MOVSLDUPrr")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000345def: InstRW<[SKLWriteResGroup3], (instregex "MOVUPDrr")>;
346def: InstRW<[SKLWriteResGroup3], (instregex "MOVUPSrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000347def: InstRW<[SKLWriteResGroup3], (instregex "PACKSSDWrr")>;
348def: InstRW<[SKLWriteResGroup3], (instregex "PACKSSWBrr")>;
349def: InstRW<[SKLWriteResGroup3], (instregex "PACKUSDWrr")>;
350def: InstRW<[SKLWriteResGroup3], (instregex "PACKUSWBrr")>;
351def: InstRW<[SKLWriteResGroup3], (instregex "PALIGNRrri")>;
352def: InstRW<[SKLWriteResGroup3], (instregex "PBLENDWrri")>;
353def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXBDrr")>;
354def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXBQrr")>;
355def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXBWrr")>;
356def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXDQrr")>;
357def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXWDrr")>;
358def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXWQrr")>;
359def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXBDrr")>;
360def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXBQrr")>;
361def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXBWrr")>;
362def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXDQrr")>;
363def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXWDrr")>;
364def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXWQrr")>;
365def: InstRW<[SKLWriteResGroup3], (instregex "PSHUFBrr")>;
366def: InstRW<[SKLWriteResGroup3], (instregex "PSHUFDri")>;
367def: InstRW<[SKLWriteResGroup3], (instregex "PSHUFHWri")>;
368def: InstRW<[SKLWriteResGroup3], (instregex "PSHUFLWri")>;
369def: InstRW<[SKLWriteResGroup3], (instregex "PSLLDQri")>;
370def: InstRW<[SKLWriteResGroup3], (instregex "PSRLDQri")>;
371def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKHBWrr")>;
372def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKHDQrr")>;
373def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKHQDQrr")>;
374def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKHWDrr")>;
375def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKLBWrr")>;
376def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKLDQrr")>;
377def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKLQDQrr")>;
378def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKLWDrr")>;
379def: InstRW<[SKLWriteResGroup3], (instregex "SHUFPDrri")>;
380def: InstRW<[SKLWriteResGroup3], (instregex "SHUFPSrri")>;
381def: InstRW<[SKLWriteResGroup3], (instregex "UCOM_FPr")>;
382def: InstRW<[SKLWriteResGroup3], (instregex "UCOM_Fr")>;
383def: InstRW<[SKLWriteResGroup3], (instregex "UNPCKHPDrr")>;
384def: InstRW<[SKLWriteResGroup3], (instregex "UNPCKHPSrr")>;
385def: InstRW<[SKLWriteResGroup3], (instregex "UNPCKLPDrr")>;
386def: InstRW<[SKLWriteResGroup3], (instregex "UNPCKLPSrr")>;
387def: InstRW<[SKLWriteResGroup3], (instregex "VBROADCASTSSrr")>;
388def: InstRW<[SKLWriteResGroup3], (instregex "VINSERTPSrr")>;
389def: InstRW<[SKLWriteResGroup3], (instregex "VMOV64toPQIrr")>;
390def: InstRW<[SKLWriteResGroup3], (instregex "VMOVDDUPYrr")>;
391def: InstRW<[SKLWriteResGroup3], (instregex "VMOVDDUPrr")>;
392def: InstRW<[SKLWriteResGroup3], (instregex "VMOVDI2PDIrr")>;
393def: InstRW<[SKLWriteResGroup3], (instregex "VMOVHLPSrr")>;
394def: InstRW<[SKLWriteResGroup3], (instregex "VMOVLHPSrr")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000395def: InstRW<[SKLWriteResGroup3], (instregex "VMOVSDrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000396def: InstRW<[SKLWriteResGroup3], (instregex "VMOVSHDUPYrr")>;
397def: InstRW<[SKLWriteResGroup3], (instregex "VMOVSHDUPrr")>;
398def: InstRW<[SKLWriteResGroup3], (instregex "VMOVSLDUPYrr")>;
399def: InstRW<[SKLWriteResGroup3], (instregex "VMOVSLDUPrr")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000400def: InstRW<[SKLWriteResGroup3], (instregex "VMOVUPDYrr")>;
401def: InstRW<[SKLWriteResGroup3], (instregex "VMOVUPDrr")>;
402def: InstRW<[SKLWriteResGroup3], (instregex "VMOVUPSYrr")>;
403def: InstRW<[SKLWriteResGroup3], (instregex "VMOVUPSrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000404def: InstRW<[SKLWriteResGroup3], (instregex "VPACKSSDWYrr")>;
405def: InstRW<[SKLWriteResGroup3], (instregex "VPACKSSDWrr")>;
406def: InstRW<[SKLWriteResGroup3], (instregex "VPACKSSWBYrr")>;
407def: InstRW<[SKLWriteResGroup3], (instregex "VPACKSSWBrr")>;
408def: InstRW<[SKLWriteResGroup3], (instregex "VPACKUSDWYrr")>;
409def: InstRW<[SKLWriteResGroup3], (instregex "VPACKUSDWrr")>;
410def: InstRW<[SKLWriteResGroup3], (instregex "VPACKUSWBYrr")>;
411def: InstRW<[SKLWriteResGroup3], (instregex "VPACKUSWBrr")>;
412def: InstRW<[SKLWriteResGroup3], (instregex "VPALIGNRYrri")>;
413def: InstRW<[SKLWriteResGroup3], (instregex "VPALIGNRrri")>;
414def: InstRW<[SKLWriteResGroup3], (instregex "VPBLENDWYrri")>;
415def: InstRW<[SKLWriteResGroup3], (instregex "VPBLENDWrri")>;
416def: InstRW<[SKLWriteResGroup3], (instregex "VPBROADCASTDrr")>;
417def: InstRW<[SKLWriteResGroup3], (instregex "VPBROADCASTQrr")>;
418def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPDYri")>;
419def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPDYrr")>;
420def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPDri")>;
421def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPDrr")>;
422def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPSYri")>;
423def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPSYrr")>;
424def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPSri")>;
425def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPSrr")>;
426def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXBDrr")>;
427def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXBQrr")>;
428def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXBWrr")>;
429def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXDQrr")>;
430def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXWDrr")>;
431def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXWQrr")>;
432def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXBDrr")>;
433def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXBQrr")>;
434def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXBWrr")>;
435def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXDQrr")>;
436def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXWDrr")>;
437def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXWQrr")>;
438def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFBYrr")>;
439def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFBrr")>;
440def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFDYri")>;
441def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFDri")>;
442def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFHWYri")>;
443def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFHWri")>;
444def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFLWYri")>;
445def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFLWri")>;
446def: InstRW<[SKLWriteResGroup3], (instregex "VPSLLDQYri")>;
447def: InstRW<[SKLWriteResGroup3], (instregex "VPSLLDQri")>;
448def: InstRW<[SKLWriteResGroup3], (instregex "VPSRLDQYri")>;
449def: InstRW<[SKLWriteResGroup3], (instregex "VPSRLDQri")>;
450def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHBWYrr")>;
451def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHBWrr")>;
452def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHDQYrr")>;
453def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHDQrr")>;
454def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHQDQYrr")>;
455def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHQDQrr")>;
456def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHWDYrr")>;
457def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHWDrr")>;
458def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLBWYrr")>;
459def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLBWrr")>;
460def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLDQYrr")>;
461def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLDQrr")>;
462def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLQDQYrr")>;
463def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLQDQrr")>;
464def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLWDYrr")>;
465def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLWDrr")>;
466def: InstRW<[SKLWriteResGroup3], (instregex "VSHUFPDYrri")>;
467def: InstRW<[SKLWriteResGroup3], (instregex "VSHUFPDrri")>;
468def: InstRW<[SKLWriteResGroup3], (instregex "VSHUFPSYrri")>;
469def: InstRW<[SKLWriteResGroup3], (instregex "VSHUFPSrri")>;
470def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKHPDYrr")>;
471def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKHPDrr")>;
472def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKHPSYrr")>;
473def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKHPSrr")>;
474def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKLPDYrr")>;
475def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKLPDrr")>;
476def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKLPSYrr")>;
477def: InstRW<[SKLWriteResGroup3], (instregex "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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000491def: InstRW<[SKLWriteResGroup5], (instregex "PABSBrr")>;
492def: InstRW<[SKLWriteResGroup5], (instregex "PABSDrr")>;
493def: InstRW<[SKLWriteResGroup5], (instregex "PABSWrr")>;
494def: InstRW<[SKLWriteResGroup5], (instregex "PADDSBrr")>;
495def: InstRW<[SKLWriteResGroup5], (instregex "PADDSWrr")>;
496def: InstRW<[SKLWriteResGroup5], (instregex "PADDUSBrr")>;
497def: InstRW<[SKLWriteResGroup5], (instregex "PADDUSWrr")>;
498def: InstRW<[SKLWriteResGroup5], (instregex "PAVGBrr")>;
499def: InstRW<[SKLWriteResGroup5], (instregex "PAVGWrr")>;
500def: InstRW<[SKLWriteResGroup5], (instregex "PCMPEQBrr")>;
501def: InstRW<[SKLWriteResGroup5], (instregex "PCMPEQDrr")>;
502def: InstRW<[SKLWriteResGroup5], (instregex "PCMPEQQrr")>;
503def: InstRW<[SKLWriteResGroup5], (instregex "PCMPEQWrr")>;
504def: InstRW<[SKLWriteResGroup5], (instregex "PCMPGTBrr")>;
505def: InstRW<[SKLWriteResGroup5], (instregex "PCMPGTDrr")>;
506def: InstRW<[SKLWriteResGroup5], (instregex "PCMPGTWrr")>;
507def: InstRW<[SKLWriteResGroup5], (instregex "PMAXSBrr")>;
508def: InstRW<[SKLWriteResGroup5], (instregex "PMAXSDrr")>;
509def: InstRW<[SKLWriteResGroup5], (instregex "PMAXSWrr")>;
510def: InstRW<[SKLWriteResGroup5], (instregex "PMAXUBrr")>;
511def: InstRW<[SKLWriteResGroup5], (instregex "PMAXUDrr")>;
512def: InstRW<[SKLWriteResGroup5], (instregex "PMAXUWrr")>;
513def: InstRW<[SKLWriteResGroup5], (instregex "PMINSBrr")>;
514def: InstRW<[SKLWriteResGroup5], (instregex "PMINSDrr")>;
515def: InstRW<[SKLWriteResGroup5], (instregex "PMINSWrr")>;
516def: InstRW<[SKLWriteResGroup5], (instregex "PMINUBrr")>;
517def: InstRW<[SKLWriteResGroup5], (instregex "PMINUDrr")>;
518def: InstRW<[SKLWriteResGroup5], (instregex "PMINUWrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +0000519def: InstRW<[SKLWriteResGroup5], (instregex "PSIGNBrr")>;
520def: InstRW<[SKLWriteResGroup5], (instregex "PSIGNDrr")>;
521def: InstRW<[SKLWriteResGroup5], (instregex "PSIGNWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000522def: InstRW<[SKLWriteResGroup5], (instregex "PSLLDri")>;
523def: InstRW<[SKLWriteResGroup5], (instregex "PSLLQri")>;
524def: InstRW<[SKLWriteResGroup5], (instregex "PSLLWri")>;
525def: InstRW<[SKLWriteResGroup5], (instregex "PSRADri")>;
526def: InstRW<[SKLWriteResGroup5], (instregex "PSRAWri")>;
527def: InstRW<[SKLWriteResGroup5], (instregex "PSRLDri")>;
528def: InstRW<[SKLWriteResGroup5], (instregex "PSRLQri")>;
529def: InstRW<[SKLWriteResGroup5], (instregex "PSRLWri")>;
530def: InstRW<[SKLWriteResGroup5], (instregex "PSUBSBrr")>;
531def: InstRW<[SKLWriteResGroup5], (instregex "PSUBSWrr")>;
532def: InstRW<[SKLWriteResGroup5], (instregex "PSUBUSBrr")>;
533def: InstRW<[SKLWriteResGroup5], (instregex "PSUBUSWrr")>;
534def: InstRW<[SKLWriteResGroup5], (instregex "VPABSBYrr")>;
535def: InstRW<[SKLWriteResGroup5], (instregex "VPABSBrr")>;
536def: InstRW<[SKLWriteResGroup5], (instregex "VPABSDYrr")>;
537def: InstRW<[SKLWriteResGroup5], (instregex "VPABSDrr")>;
538def: InstRW<[SKLWriteResGroup5], (instregex "VPABSWYrr")>;
539def: InstRW<[SKLWriteResGroup5], (instregex "VPABSWrr")>;
540def: InstRW<[SKLWriteResGroup5], (instregex "VPADDSBYrr")>;
541def: InstRW<[SKLWriteResGroup5], (instregex "VPADDSBrr")>;
542def: InstRW<[SKLWriteResGroup5], (instregex "VPADDSWYrr")>;
543def: InstRW<[SKLWriteResGroup5], (instregex "VPADDSWrr")>;
544def: InstRW<[SKLWriteResGroup5], (instregex "VPADDUSBYrr")>;
545def: InstRW<[SKLWriteResGroup5], (instregex "VPADDUSBrr")>;
546def: InstRW<[SKLWriteResGroup5], (instregex "VPADDUSWYrr")>;
547def: InstRW<[SKLWriteResGroup5], (instregex "VPADDUSWrr")>;
548def: InstRW<[SKLWriteResGroup5], (instregex "VPAVGBYrr")>;
549def: InstRW<[SKLWriteResGroup5], (instregex "VPAVGBrr")>;
550def: InstRW<[SKLWriteResGroup5], (instregex "VPAVGWYrr")>;
551def: InstRW<[SKLWriteResGroup5], (instregex "VPAVGWrr")>;
552def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQBYrr")>;
553def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQBrr")>;
554def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQDYrr")>;
555def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQDrr")>;
556def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQQYrr")>;
557def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQQrr")>;
558def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQWYrr")>;
559def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQWrr")>;
560def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTBYrr")>;
561def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTBrr")>;
562def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTDYrr")>;
563def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTDrr")>;
564def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTWYrr")>;
565def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTWrr")>;
566def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSBYrr")>;
567def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSBrr")>;
568def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSDYrr")>;
569def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSDrr")>;
570def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSWYrr")>;
571def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSWrr")>;
572def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUBYrr")>;
573def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUBrr")>;
574def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUDYrr")>;
575def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUDrr")>;
576def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUWYrr")>;
577def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUWrr")>;
578def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSBYrr")>;
579def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSBrr")>;
580def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSDYrr")>;
581def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSDrr")>;
582def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSWYrr")>;
583def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSWrr")>;
584def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUBYrr")>;
585def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUBrr")>;
586def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUDYrr")>;
587def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUDrr")>;
588def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUWYrr")>;
589def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUWrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +0000590def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNBYrr")>;
591def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNBrr")>;
592def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNDYrr")>;
593def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNDrr")>;
594def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNWYrr")>;
595def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000596def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLDYri")>;
597def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLDri")>;
598def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLQYri")>;
599def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLQri")>;
600def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLVDYrr")>;
601def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLVDrr")>;
602def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLVQYrr")>;
603def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLVQrr")>;
604def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLWYri")>;
605def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLWri")>;
606def: InstRW<[SKLWriteResGroup5], (instregex "VPSRADYri")>;
607def: InstRW<[SKLWriteResGroup5], (instregex "VPSRADri")>;
608def: InstRW<[SKLWriteResGroup5], (instregex "VPSRAVDYrr")>;
609def: InstRW<[SKLWriteResGroup5], (instregex "VPSRAVDrr")>;
610def: InstRW<[SKLWriteResGroup5], (instregex "VPSRAWYri")>;
611def: InstRW<[SKLWriteResGroup5], (instregex "VPSRAWri")>;
612def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLDYri")>;
613def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLDri")>;
614def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLQYri")>;
615def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLQri")>;
616def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLVDYrr")>;
617def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLVDrr")>;
618def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLVQYrr")>;
619def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLVQrr")>;
620def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLWYri")>;
621def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLWri")>;
622def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBSBYrr")>;
623def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBSBrr")>;
624def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBSWYrr")>;
625def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBSWrr")>;
626def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBUSBYrr")>;
627def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBUSBrr")>;
628def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBUSWYrr")>;
629def: InstRW<[SKLWriteResGroup5], (instregex "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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000636def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP")>;
637def: InstRW<[SKLWriteResGroup6], (instregex "FNOP")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000638def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr")>;
Craig Topperdbddac02018-01-25 04:45:30 +0000639def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PABSBrr")>;
640def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PABSDrr")>;
641def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PABSWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000642def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PADDBirr")>;
643def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PADDDirr")>;
644def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PADDQirr")>;
645def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PADDWirr")>;
646def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PANDNirr")>;
647def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PANDirr")>;
648def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PORirr")>;
Craig Topperdbddac02018-01-25 04:45:30 +0000649def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSIGNBrr")>;
650def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSIGNDrr")>;
651def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSIGNWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000652def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSUBBirr")>;
653def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSUBDirr")>;
654def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSUBQirr")>;
655def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSUBWirr")>;
656def: InstRW<[SKLWriteResGroup6], (instregex "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 Topper1a88c502017-12-10 09:14:39 +0000663def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri")>;
Craig Topperd10ceff2018-03-19 04:21:40 +0000664def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)i")>;
Craig Topper13a16502018-03-19 00:56:09 +0000665def: InstRW<[SKLWriteResGroup7], (instregex "ADC(8|16|32|64)rr")>;
Craig Toppera42a2ba2017-12-16 18:35:31 +0000666def: InstRW<[SKLWriteResGroup7], (instregex "ADCX(32|64)rr")>;
667def: InstRW<[SKLWriteResGroup7], (instregex "ADOX(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000668def: InstRW<[SKLWriteResGroup7], (instregex "BT(16|32|64)ri8")>;
669def: InstRW<[SKLWriteResGroup7], (instregex "BT(16|32|64)rr")>;
670def: InstRW<[SKLWriteResGroup7], (instregex "BTC(16|32|64)ri8")>;
671def: InstRW<[SKLWriteResGroup7], (instregex "BTC(16|32|64)rr")>;
672def: InstRW<[SKLWriteResGroup7], (instregex "BTR(16|32|64)ri8")>;
673def: InstRW<[SKLWriteResGroup7], (instregex "BTR(16|32|64)rr")>;
674def: InstRW<[SKLWriteResGroup7], (instregex "BTS(16|32|64)ri8")>;
675def: InstRW<[SKLWriteResGroup7], (instregex "BTS(16|32|64)rr")>;
676def: InstRW<[SKLWriteResGroup7], (instregex "CDQ")>;
677def: InstRW<[SKLWriteResGroup7], (instregex "CLAC")>;
Craig Topperf4cd9082018-01-19 05:47:32 +0000678def: InstRW<[SKLWriteResGroup7], (instregex "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000679def: InstRW<[SKLWriteResGroup7], (instregex "CQO")>;
Craig Topperf4cd9082018-01-19 05:47:32 +0000680def: InstRW<[SKLWriteResGroup7], (instregex "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1")>;
681def: InstRW<[SKLWriteResGroup7], (instregex "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000682def: InstRW<[SKLWriteResGroup7], (instregex "JMP_1")>;
683def: InstRW<[SKLWriteResGroup7], (instregex "JMP_4")>;
Craig Toppera42a2ba2017-12-16 18:35:31 +0000684def: InstRW<[SKLWriteResGroup7], (instregex "RORX(32|64)ri")>;
Craig Topper13a16502018-03-19 00:56:09 +0000685def: InstRW<[SKLWriteResGroup7], (instregex "SAR(8|16|32|64)r1")>;
686def: InstRW<[SKLWriteResGroup7], (instregex "SAR(8|16|32|64)ri")>;
Craig Toppera42a2ba2017-12-16 18:35:31 +0000687def: InstRW<[SKLWriteResGroup7], (instregex "SARX(32|64)rr")>;
Craig Topper1a88c502017-12-10 09:14:39 +0000688def: InstRW<[SKLWriteResGroup7], (instregex "SBB(16|32|64)ri")>;
Craig Topperd10ceff2018-03-19 04:21:40 +0000689def: InstRW<[SKLWriteResGroup7], (instregex "SBB(16|32|64)i")>;
Craig Topper13a16502018-03-19 00:56:09 +0000690def: InstRW<[SKLWriteResGroup7], (instregex "SBB(8|16|32|64)rr")>;
Craig Topperf4cd9082018-01-19 05:47:32 +0000691def: InstRW<[SKLWriteResGroup7], (instregex "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)r")>;
Craig Topper13a16502018-03-19 00:56:09 +0000692def: InstRW<[SKLWriteResGroup7], (instregex "SHL(8|16|32|64)r1")>;
693def: InstRW<[SKLWriteResGroup7], (instregex "SHL(8|16|32|64)ri")>;
Craig Toppera42a2ba2017-12-16 18:35:31 +0000694def: InstRW<[SKLWriteResGroup7], (instregex "SHLX(32|64)rr")>;
Craig Topper13a16502018-03-19 00:56:09 +0000695def: InstRW<[SKLWriteResGroup7], (instregex "SHR(8|16|32|64)r1")>;
696def: InstRW<[SKLWriteResGroup7], (instregex "SHR(8|16|32|64)ri")>;
Craig Toppera42a2ba2017-12-16 18:35:31 +0000697def: InstRW<[SKLWriteResGroup7], (instregex "SHRX(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000698def: InstRW<[SKLWriteResGroup7], (instregex "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 Toppera42a2ba2017-12-16 18:35:31 +0000705def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr")>;
706def: InstRW<[SKLWriteResGroup8], (instregex "BLSI(32|64)rr")>;
707def: InstRW<[SKLWriteResGroup8], (instregex "BLSMSK(32|64)rr")>;
708def: InstRW<[SKLWriteResGroup8], (instregex "BLSR(32|64)rr")>;
709def: InstRW<[SKLWriteResGroup8], (instregex "BZHI(32|64)rr")>;
Craig Topper28e55382017-12-10 09:14:42 +0000710def: InstRW<[SKLWriteResGroup8], (instregex "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}
717def: InstRW<[SKLWriteResGroup9], (instregex "ANDNPDrr")>;
718def: InstRW<[SKLWriteResGroup9], (instregex "ANDNPSrr")>;
719def: InstRW<[SKLWriteResGroup9], (instregex "ANDPDrr")>;
720def: InstRW<[SKLWriteResGroup9], (instregex "ANDPSrr")>;
721def: InstRW<[SKLWriteResGroup9], (instregex "BLENDPDrri")>;
722def: InstRW<[SKLWriteResGroup9], (instregex "BLENDPSrri")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000723def: InstRW<[SKLWriteResGroup9], (instregex "MOVAPDrr")>;
724def: InstRW<[SKLWriteResGroup9], (instregex "MOVAPSrr")>;
725def: InstRW<[SKLWriteResGroup9], (instregex "MOVDQArr")>;
726def: InstRW<[SKLWriteResGroup9], (instregex "MOVDQUrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000727def: InstRW<[SKLWriteResGroup9], (instregex "MOVPQI2QIrr")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000728def: InstRW<[SKLWriteResGroup9], (instregex "MOVSSrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000729def: InstRW<[SKLWriteResGroup9], (instregex "ORPDrr")>;
730def: InstRW<[SKLWriteResGroup9], (instregex "ORPSrr")>;
731def: InstRW<[SKLWriteResGroup9], (instregex "PADDBrr")>;
732def: InstRW<[SKLWriteResGroup9], (instregex "PADDDrr")>;
733def: InstRW<[SKLWriteResGroup9], (instregex "PADDQrr")>;
734def: InstRW<[SKLWriteResGroup9], (instregex "PADDWrr")>;
735def: InstRW<[SKLWriteResGroup9], (instregex "PANDNrr")>;
736def: InstRW<[SKLWriteResGroup9], (instregex "PANDrr")>;
737def: InstRW<[SKLWriteResGroup9], (instregex "PORrr")>;
738def: InstRW<[SKLWriteResGroup9], (instregex "PSUBBrr")>;
739def: InstRW<[SKLWriteResGroup9], (instregex "PSUBDrr")>;
740def: InstRW<[SKLWriteResGroup9], (instregex "PSUBQrr")>;
741def: InstRW<[SKLWriteResGroup9], (instregex "PSUBWrr")>;
742def: InstRW<[SKLWriteResGroup9], (instregex "PXORrr")>;
743def: InstRW<[SKLWriteResGroup9], (instregex "VANDNPDYrr")>;
744def: InstRW<[SKLWriteResGroup9], (instregex "VANDNPDrr")>;
745def: InstRW<[SKLWriteResGroup9], (instregex "VANDNPSYrr")>;
746def: InstRW<[SKLWriteResGroup9], (instregex "VANDNPSrr")>;
747def: InstRW<[SKLWriteResGroup9], (instregex "VANDPDYrr")>;
748def: InstRW<[SKLWriteResGroup9], (instregex "VANDPDrr")>;
749def: InstRW<[SKLWriteResGroup9], (instregex "VANDPSYrr")>;
750def: InstRW<[SKLWriteResGroup9], (instregex "VANDPSrr")>;
751def: InstRW<[SKLWriteResGroup9], (instregex "VBLENDPDYrri")>;
752def: InstRW<[SKLWriteResGroup9], (instregex "VBLENDPDrri")>;
753def: InstRW<[SKLWriteResGroup9], (instregex "VBLENDPSYrri")>;
754def: InstRW<[SKLWriteResGroup9], (instregex "VBLENDPSrri")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000755def: InstRW<[SKLWriteResGroup9], (instregex "VMOVAPDYrr")>;
756def: InstRW<[SKLWriteResGroup9], (instregex "VMOVAPDrr")>;
757def: InstRW<[SKLWriteResGroup9], (instregex "VMOVAPSYrr")>;
758def: InstRW<[SKLWriteResGroup9], (instregex "VMOVAPSrr")>;
759def: InstRW<[SKLWriteResGroup9], (instregex "VMOVDQAYrr")>;
760def: InstRW<[SKLWriteResGroup9], (instregex "VMOVDQArr")>;
761def: InstRW<[SKLWriteResGroup9], (instregex "VMOVDQUYrr")>;
762def: InstRW<[SKLWriteResGroup9], (instregex "VMOVDQUrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000763def: InstRW<[SKLWriteResGroup9], (instregex "VMOVPQI2QIrr")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000764def: InstRW<[SKLWriteResGroup9], (instregex "VMOVSSrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000765def: InstRW<[SKLWriteResGroup9], (instregex "VMOVZPQILo2PQIrr")>;
766def: InstRW<[SKLWriteResGroup9], (instregex "VORPDYrr")>;
767def: InstRW<[SKLWriteResGroup9], (instregex "VORPDrr")>;
768def: InstRW<[SKLWriteResGroup9], (instregex "VORPSYrr")>;
769def: InstRW<[SKLWriteResGroup9], (instregex "VORPSrr")>;
770def: InstRW<[SKLWriteResGroup9], (instregex "VPADDBYrr")>;
771def: InstRW<[SKLWriteResGroup9], (instregex "VPADDBrr")>;
772def: InstRW<[SKLWriteResGroup9], (instregex "VPADDDYrr")>;
773def: InstRW<[SKLWriteResGroup9], (instregex "VPADDDrr")>;
774def: InstRW<[SKLWriteResGroup9], (instregex "VPADDQYrr")>;
775def: InstRW<[SKLWriteResGroup9], (instregex "VPADDQrr")>;
776def: InstRW<[SKLWriteResGroup9], (instregex "VPADDWYrr")>;
777def: InstRW<[SKLWriteResGroup9], (instregex "VPADDWrr")>;
778def: InstRW<[SKLWriteResGroup9], (instregex "VPANDNYrr")>;
779def: InstRW<[SKLWriteResGroup9], (instregex "VPANDNrr")>;
780def: InstRW<[SKLWriteResGroup9], (instregex "VPANDYrr")>;
781def: InstRW<[SKLWriteResGroup9], (instregex "VPANDrr")>;
782def: InstRW<[SKLWriteResGroup9], (instregex "VPBLENDDYrri")>;
783def: InstRW<[SKLWriteResGroup9], (instregex "VPBLENDDrri")>;
784def: InstRW<[SKLWriteResGroup9], (instregex "VPORYrr")>;
785def: InstRW<[SKLWriteResGroup9], (instregex "VPORrr")>;
786def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBBYrr")>;
787def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBBrr")>;
788def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBDYrr")>;
789def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBDrr")>;
790def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBQYrr")>;
791def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBQrr")>;
792def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBWYrr")>;
793def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBWrr")>;
794def: InstRW<[SKLWriteResGroup9], (instregex "VPXORYrr")>;
795def: InstRW<[SKLWriteResGroup9], (instregex "VPXORrr")>;
796def: InstRW<[SKLWriteResGroup9], (instregex "VXORPDYrr")>;
797def: InstRW<[SKLWriteResGroup9], (instregex "VXORPDrr")>;
798def: InstRW<[SKLWriteResGroup9], (instregex "VXORPSYrr")>;
799def: InstRW<[SKLWriteResGroup9], (instregex "VXORPSrr")>;
800def: InstRW<[SKLWriteResGroup9], (instregex "XORPDrr")>;
801def: InstRW<[SKLWriteResGroup9], (instregex "XORPSrr")>;
802
803def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
804 let Latency = 1;
805 let NumMicroOps = 1;
806 let ResourceCycles = [1];
807}
Craig Topper13a16502018-03-19 00:56:09 +0000808def: InstRW<[SKLWriteResGroup10], (instregex "ADD(8|16|32|64)ri")>;
809def: InstRW<[SKLWriteResGroup10], (instregex "ADD(8|16|32|64)rr")>;
Craig Topperd10ceff2018-03-19 04:21:40 +0000810def: InstRW<[SKLWriteResGroup10], (instregex "ADD(8|16|32|64)i")>;
Craig Topper13a16502018-03-19 00:56:09 +0000811def: InstRW<[SKLWriteResGroup10], (instregex "AND(8|16|32|64)ri")>;
812def: InstRW<[SKLWriteResGroup10], (instregex "AND(8|16|32|64)rr")>;
Craig Topperd10ceff2018-03-19 04:21:40 +0000813def: InstRW<[SKLWriteResGroup10], (instregex "AND(8|16|32|64)i")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000814def: InstRW<[SKLWriteResGroup10], (instregex "CBW")>;
815def: InstRW<[SKLWriteResGroup10], (instregex "CLC")>;
816def: InstRW<[SKLWriteResGroup10], (instregex "CMC")>;
Craig Topper13a16502018-03-19 00:56:09 +0000817def: InstRW<[SKLWriteResGroup10], (instregex "CMP(8|16|32|64)ri")>;
818def: InstRW<[SKLWriteResGroup10], (instregex "CMP(8|16|32|64)rr")>;
Craig Topperd10ceff2018-03-19 04:21:40 +0000819def: InstRW<[SKLWriteResGroup10], (instregex "CMP(8|16|32|64)i")>;
Craig Topper2d451e72018-03-18 08:38:06 +0000820def: InstRW<[SKLWriteResGroup10], (instrs CWDE)>;
Craig Topper13a16502018-03-19 00:56:09 +0000821def: InstRW<[SKLWriteResGroup10], (instregex "DEC(8|16|32|64)r")>;
822def: InstRW<[SKLWriteResGroup10], (instregex "INC(8|16|32|64)r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000823def: InstRW<[SKLWriteResGroup10], (instregex "LAHF")>;
Craig Topper13a16502018-03-19 00:56:09 +0000824def: InstRW<[SKLWriteResGroup10], (instregex "MOV(8|16|32|64)rr")>;
Craig Topper645e5312018-03-19 17:46:59 +0000825def: InstRW<[SKLWriteResGroup10], (instregex "MOV(8|16|32|64)ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000826def: InstRW<[SKLWriteResGroup10], (instregex "MOVSX(16|32|64)rr16")>;
827def: InstRW<[SKLWriteResGroup10], (instregex "MOVSX(16|32|64)rr32")>;
828def: InstRW<[SKLWriteResGroup10], (instregex "MOVSX(16|32|64)rr8")>;
829def: InstRW<[SKLWriteResGroup10], (instregex "MOVZX(16|32|64)rr16")>;
830def: InstRW<[SKLWriteResGroup10], (instregex "MOVZX(16|32|64)rr8")>;
Craig Topper13a16502018-03-19 00:56:09 +0000831def: InstRW<[SKLWriteResGroup10], (instregex "NEG(8|16|32|64)r")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000832def: InstRW<[SKLWriteResGroup10], (instregex "NOOP")>;
Craig Topper13a16502018-03-19 00:56:09 +0000833def: InstRW<[SKLWriteResGroup10], (instregex "NOT(8|16|32|64)r")>;
834def: InstRW<[SKLWriteResGroup10], (instregex "OR(8|16|32|64)ri")>;
835def: InstRW<[SKLWriteResGroup10], (instregex "OR(8|16|32|64)rr")>;
Craig Topperd10ceff2018-03-19 04:21:40 +0000836def: InstRW<[SKLWriteResGroup10], (instregex "OR(8|16|32|64)i")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000837def: InstRW<[SKLWriteResGroup10], (instregex "SAHF")>;
838def: InstRW<[SKLWriteResGroup10], (instregex "SGDT64m")>;
839def: InstRW<[SKLWriteResGroup10], (instregex "SIDT64m")>;
840def: InstRW<[SKLWriteResGroup10], (instregex "SLDT64m")>;
841def: InstRW<[SKLWriteResGroup10], (instregex "SMSW16m")>;
842def: InstRW<[SKLWriteResGroup10], (instregex "STC")>;
843def: InstRW<[SKLWriteResGroup10], (instregex "STRm")>;
Craig Topper13a16502018-03-19 00:56:09 +0000844def: InstRW<[SKLWriteResGroup10], (instregex "SUB(8|16|32|64)ri")>;
845def: InstRW<[SKLWriteResGroup10], (instregex "SUB(8|16|32|64)rr")>;
Craig Topperd10ceff2018-03-19 04:21:40 +0000846def: InstRW<[SKLWriteResGroup10], (instregex "SUB(8|16|32|64)i")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000847def: InstRW<[SKLWriteResGroup10], (instregex "SYSCALL")>;
Craig Topper13a16502018-03-19 00:56:09 +0000848def: InstRW<[SKLWriteResGroup10], (instregex "TEST(8|16|32|64)rr")>;
Craig Topper836cfb32018-03-19 17:58:41 +0000849def: InstRW<[SKLWriteResGroup10], (instregex "TEST(8|16|32|64)i")>;
850def: InstRW<[SKLWriteResGroup10], (instregex "TEST(8|16|32|64)ri")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000851def: InstRW<[SKLWriteResGroup10], (instregex "XCHG(16|32|64)rr")>;
Craig Topper13a16502018-03-19 00:56:09 +0000852def: InstRW<[SKLWriteResGroup10], (instregex "XOR(8|16|32|64)ri")>;
853def: InstRW<[SKLWriteResGroup10], (instregex "XOR(8|16|32|64)rr")>;
Craig Topperd10ceff2018-03-19 04:21:40 +0000854def: InstRW<[SKLWriteResGroup10], (instregex "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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000861def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm")>;
862def: InstRW<[SKLWriteResGroup11], (instregex "MMX_MOVD64from64rm")>;
863def: InstRW<[SKLWriteResGroup11], (instregex "MMX_MOVD64mr")>;
864def: InstRW<[SKLWriteResGroup11], (instregex "MMX_MOVNTQmr")>;
865def: InstRW<[SKLWriteResGroup11], (instregex "MMX_MOVQ64mr")>;
Craig Topper13a16502018-03-19 00:56:09 +0000866def: InstRW<[SKLWriteResGroup11], (instregex "MOV(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000867def: InstRW<[SKLWriteResGroup11], (instregex "MOV8mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000868def: InstRW<[SKLWriteResGroup11], (instregex "MOVAPDmr")>;
869def: InstRW<[SKLWriteResGroup11], (instregex "MOVAPSmr")>;
870def: InstRW<[SKLWriteResGroup11], (instregex "MOVDQAmr")>;
871def: InstRW<[SKLWriteResGroup11], (instregex "MOVDQUmr")>;
872def: InstRW<[SKLWriteResGroup11], (instregex "MOVHPDmr")>;
873def: InstRW<[SKLWriteResGroup11], (instregex "MOVHPSmr")>;
874def: InstRW<[SKLWriteResGroup11], (instregex "MOVLPDmr")>;
875def: InstRW<[SKLWriteResGroup11], (instregex "MOVLPSmr")>;
876def: InstRW<[SKLWriteResGroup11], (instregex "MOVNTDQmr")>;
877def: InstRW<[SKLWriteResGroup11], (instregex "MOVNTI_64mr")>;
878def: InstRW<[SKLWriteResGroup11], (instregex "MOVNTImr")>;
879def: InstRW<[SKLWriteResGroup11], (instregex "MOVNTPDmr")>;
880def: InstRW<[SKLWriteResGroup11], (instregex "MOVNTPSmr")>;
881def: InstRW<[SKLWriteResGroup11], (instregex "MOVPDI2DImr")>;
882def: InstRW<[SKLWriteResGroup11], (instregex "MOVPQI2QImr")>;
883def: InstRW<[SKLWriteResGroup11], (instregex "MOVPQIto64mr")>;
Craig Topper90c9c152017-12-10 09:14:44 +0000884def: InstRW<[SKLWriteResGroup11], (instregex "MOVSDmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000885def: InstRW<[SKLWriteResGroup11], (instregex "MOVSSmr")>;
886def: InstRW<[SKLWriteResGroup11], (instregex "MOVUPDmr")>;
887def: InstRW<[SKLWriteResGroup11], (instregex "MOVUPSmr")>;
888def: InstRW<[SKLWriteResGroup11], (instregex "ST_FP32m")>;
889def: InstRW<[SKLWriteResGroup11], (instregex "ST_FP64m")>;
890def: InstRW<[SKLWriteResGroup11], (instregex "ST_FP80m")>;
891def: InstRW<[SKLWriteResGroup11], (instregex "VEXTRACTF128mr")>;
892def: InstRW<[SKLWriteResGroup11], (instregex "VEXTRACTI128mr")>;
893def: InstRW<[SKLWriteResGroup11], (instregex "VMOVAPDYmr")>;
894def: InstRW<[SKLWriteResGroup11], (instregex "VMOVAPDmr")>;
895def: InstRW<[SKLWriteResGroup11], (instregex "VMOVAPSYmr")>;
896def: InstRW<[SKLWriteResGroup11], (instregex "VMOVAPSmr")>;
897def: InstRW<[SKLWriteResGroup11], (instregex "VMOVDQAYmr")>;
898def: InstRW<[SKLWriteResGroup11], (instregex "VMOVDQAmr")>;
899def: InstRW<[SKLWriteResGroup11], (instregex "VMOVDQUYmr")>;
900def: InstRW<[SKLWriteResGroup11], (instregex "VMOVDQUmr")>;
901def: InstRW<[SKLWriteResGroup11], (instregex "VMOVHPDmr")>;
902def: InstRW<[SKLWriteResGroup11], (instregex "VMOVHPSmr")>;
903def: InstRW<[SKLWriteResGroup11], (instregex "VMOVLPDmr")>;
904def: InstRW<[SKLWriteResGroup11], (instregex "VMOVLPSmr")>;
905def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTDQYmr")>;
906def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTDQmr")>;
907def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTPDYmr")>;
908def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTPDmr")>;
909def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTPSYmr")>;
910def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTPSmr")>;
911def: InstRW<[SKLWriteResGroup11], (instregex "VMOVPDI2DImr")>;
912def: InstRW<[SKLWriteResGroup11], (instregex "VMOVPQI2QImr")>;
913def: InstRW<[SKLWriteResGroup11], (instregex "VMOVPQIto64mr")>;
914def: InstRW<[SKLWriteResGroup11], (instregex "VMOVSDmr")>;
915def: InstRW<[SKLWriteResGroup11], (instregex "VMOVSSmr")>;
916def: InstRW<[SKLWriteResGroup11], (instregex "VMOVUPDYmr")>;
917def: InstRW<[SKLWriteResGroup11], (instregex "VMOVUPDmr")>;
918def: InstRW<[SKLWriteResGroup11], (instregex "VMOVUPSYmr")>;
919def: InstRW<[SKLWriteResGroup11], (instregex "VMOVUPSmr")>;
920def: InstRW<[SKLWriteResGroup11], (instregex "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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000927def: InstRW<[SKLWriteResGroup12], (instregex "COMISDrr")>;
928def: InstRW<[SKLWriteResGroup12], (instregex "COMISSrr")>;
929def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr")>;
930def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64grr")>;
931def: InstRW<[SKLWriteResGroup12], (instregex "MMX_PMOVMSKBrr")>;
932def: InstRW<[SKLWriteResGroup12], (instregex "MOVMSKPDrr")>;
933def: InstRW<[SKLWriteResGroup12], (instregex "MOVMSKPSrr")>;
934def: InstRW<[SKLWriteResGroup12], (instregex "MOVPDI2DIrr")>;
935def: InstRW<[SKLWriteResGroup12], (instregex "MOVPQIto64rr")>;
936def: InstRW<[SKLWriteResGroup12], (instregex "PMOVMSKBrr")>;
937def: InstRW<[SKLWriteResGroup12], (instregex "UCOMISDrr")>;
938def: InstRW<[SKLWriteResGroup12], (instregex "UCOMISSrr")>;
939def: InstRW<[SKLWriteResGroup12], (instregex "VCOMISDrr")>;
940def: InstRW<[SKLWriteResGroup12], (instregex "VCOMISSrr")>;
941def: InstRW<[SKLWriteResGroup12], (instregex "VMOVMSKPDYrr")>;
942def: InstRW<[SKLWriteResGroup12], (instregex "VMOVMSKPDrr")>;
943def: InstRW<[SKLWriteResGroup12], (instregex "VMOVMSKPSYrr")>;
944def: InstRW<[SKLWriteResGroup12], (instregex "VMOVMSKPSrr")>;
945def: InstRW<[SKLWriteResGroup12], (instregex "VMOVPDI2DIrr")>;
946def: InstRW<[SKLWriteResGroup12], (instregex "VMOVPQIto64rr")>;
947def: InstRW<[SKLWriteResGroup12], (instregex "VPMOVMSKBYrr")>;
948def: InstRW<[SKLWriteResGroup12], (instregex "VPMOVMSKBrr")>;
949def: InstRW<[SKLWriteResGroup12], (instregex "VTESTPDYrr")>;
950def: InstRW<[SKLWriteResGroup12], (instregex "VTESTPDrr")>;
951def: InstRW<[SKLWriteResGroup12], (instregex "VTESTPSYrr")>;
952def: InstRW<[SKLWriteResGroup12], (instregex "VTESTPSrr")>;
953def: InstRW<[SKLWriteResGroup12], (instregex "VUCOMISDrr")>;
954def: InstRW<[SKLWriteResGroup12], (instregex "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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000961def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
Craig Topperb85b4842018-01-24 17:58:51 +0000962def: InstRW<[SKLWriteResGroup13], (instregex "MMX_PINSRWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000963def: InstRW<[SKLWriteResGroup13], (instregex "PINSRBrr")>;
964def: InstRW<[SKLWriteResGroup13], (instregex "PINSRDrr")>;
965def: InstRW<[SKLWriteResGroup13], (instregex "PINSRQrr")>;
Craig Topperb85b4842018-01-24 17:58:51 +0000966def: InstRW<[SKLWriteResGroup13], (instregex "PINSRWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000967def: InstRW<[SKLWriteResGroup13], (instregex "VPINSRBrr")>;
968def: InstRW<[SKLWriteResGroup13], (instregex "VPINSRDrr")>;
969def: InstRW<[SKLWriteResGroup13], (instregex "VPINSRQrr")>;
Craig Topperb85b4842018-01-24 17:58:51 +0000970def: InstRW<[SKLWriteResGroup13], (instregex "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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000977def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP")>;
978def: InstRW<[SKLWriteResGroup14], (instregex "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 Topperf4cd9082018-01-19 05:47:32 +0000985def: InstRW<[SKLWriteResGroup15], (instregex "CMOV(A|BE)(16|32|64)rr")>;
Craig Topper13a16502018-03-19 00:56:09 +0000986def: InstRW<[SKLWriteResGroup15], (instregex "ROL(8|16|32|64)r1")>;
987def: InstRW<[SKLWriteResGroup15], (instregex "ROL(8|16|32|64)ri")>;
988def: InstRW<[SKLWriteResGroup15], (instregex "ROR(8|16|32|64)r1")>;
989def: InstRW<[SKLWriteResGroup15], (instregex "ROR(8|16|32|64)ri")>;
Craig Topperf4cd9082018-01-19 05:47:32 +0000990def: InstRW<[SKLWriteResGroup15], (instregex "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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000997def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0")>;
998def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPSrr0")>;
999def: InstRW<[SKLWriteResGroup16], (instregex "PBLENDVBrr0")>;
1000def: InstRW<[SKLWriteResGroup16], (instregex "VBLENDVPDYrr")>;
1001def: InstRW<[SKLWriteResGroup16], (instregex "VBLENDVPDrr")>;
1002def: InstRW<[SKLWriteResGroup16], (instregex "VBLENDVPSYrr")>;
1003def: InstRW<[SKLWriteResGroup16], (instregex "VBLENDVPSrr")>;
1004def: InstRW<[SKLWriteResGroup16], (instregex "VPBLENDVBYrr")>;
1005def: InstRW<[SKLWriteResGroup16], (instregex "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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001012def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE")>;
1013def: InstRW<[SKLWriteResGroup17], (instregex "WAIT")>;
1014def: InstRW<[SKLWriteResGroup17], (instregex "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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001021def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPDYmr")>;
1022def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPDmr")>;
1023def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPSYmr")>;
1024def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPSmr")>;
1025def: InstRW<[SKLWriteResGroup18], (instregex "VPMASKMOVDYmr")>;
1026def: InstRW<[SKLWriteResGroup18], (instregex "VPMASKMOVDmr")>;
1027def: InstRW<[SKLWriteResGroup18], (instregex "VPMASKMOVQYmr")>;
1028def: InstRW<[SKLWriteResGroup18], (instregex "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}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001035def: InstRW<[SKLWriteResGroup19], (instregex "PSLLDrr")>;
1036def: InstRW<[SKLWriteResGroup19], (instregex "PSLLQrr")>;
1037def: InstRW<[SKLWriteResGroup19], (instregex "PSLLWrr")>;
1038def: InstRW<[SKLWriteResGroup19], (instregex "PSRADrr")>;
1039def: InstRW<[SKLWriteResGroup19], (instregex "PSRAWrr")>;
1040def: InstRW<[SKLWriteResGroup19], (instregex "PSRLDrr")>;
1041def: InstRW<[SKLWriteResGroup19], (instregex "PSRLQrr")>;
1042def: InstRW<[SKLWriteResGroup19], (instregex "PSRLWrr")>;
1043def: InstRW<[SKLWriteResGroup19], (instregex "VPSLLDrr")>;
1044def: InstRW<[SKLWriteResGroup19], (instregex "VPSLLQrr")>;
1045def: InstRW<[SKLWriteResGroup19], (instregex "VPSLLWrr")>;
1046def: InstRW<[SKLWriteResGroup19], (instregex "VPSRADrr")>;
1047def: InstRW<[SKLWriteResGroup19], (instregex "VPSRAWrr")>;
1048def: InstRW<[SKLWriteResGroup19], (instregex "VPSRLDrr")>;
1049def: InstRW<[SKLWriteResGroup19], (instregex "VPSRLQrr")>;
1050def: InstRW<[SKLWriteResGroup19], (instregex "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 Toppera42a2ba2017-12-16 18:35:31 +00001071def: InstRW<[SKLWriteResGroup22], (instregex "BEXTR(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001072def: InstRW<[SKLWriteResGroup22], (instregex "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}
1079def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8")>;
1080def: InstRW<[SKLWriteResGroup23], (instregex "ADC8ri")>;
Craig Topper2d451e72018-03-18 08:38:06 +00001081def: InstRW<[SKLWriteResGroup23], (instrs CWD)>;
Craig Topperb4c78732018-03-19 19:00:32 +00001082def: InstRW<[SKLWriteResGroup23], (instrs JCXZ, JECXZ, JRCXZ)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001083def: InstRW<[SKLWriteResGroup23], (instregex "SBB8i8")>;
1084def: InstRW<[SKLWriteResGroup23], (instregex "SBB8ri")>;
1085
1086def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
1087 let Latency = 2;
1088 let NumMicroOps = 3;
1089 let ResourceCycles = [1,1,1];
1090}
1091def: InstRW<[SKLWriteResGroup24], (instregex "EXTRACTPSmr")>;
1092def: InstRW<[SKLWriteResGroup24], (instregex "PEXTRBmr")>;
1093def: InstRW<[SKLWriteResGroup24], (instregex "PEXTRDmr")>;
1094def: InstRW<[SKLWriteResGroup24], (instregex "PEXTRQmr")>;
1095def: InstRW<[SKLWriteResGroup24], (instregex "PEXTRWmr")>;
1096def: InstRW<[SKLWriteResGroup24], (instregex "STMXCSR")>;
1097def: InstRW<[SKLWriteResGroup24], (instregex "VEXTRACTPSmr")>;
1098def: InstRW<[SKLWriteResGroup24], (instregex "VPEXTRBmr")>;
1099def: InstRW<[SKLWriteResGroup24], (instregex "VPEXTRDmr")>;
1100def: InstRW<[SKLWriteResGroup24], (instregex "VPEXTRQmr")>;
1101def: InstRW<[SKLWriteResGroup24], (instregex "VPEXTRWmr")>;
1102def: InstRW<[SKLWriteResGroup24], (instregex "VSTMXCSR")>;
1103
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)>;
1131def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)rmr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001132def: InstRW<[SKLWriteResGroup28], (instregex "PUSH64i8")>;
1133def: InstRW<[SKLWriteResGroup28], (instregex "STOSB")>;
1134def: InstRW<[SKLWriteResGroup28], (instregex "STOSL")>;
1135def: InstRW<[SKLWriteResGroup28], (instregex "STOSQ")>;
1136def: InstRW<[SKLWriteResGroup28], (instregex "STOSW")>;
1137
1138def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
1139 let Latency = 3;
1140 let NumMicroOps = 1;
1141 let ResourceCycles = [1];
1142}
1143def: InstRW<[SKLWriteResGroup29], (instregex "BSF(16|32|64)rr")>;
1144def: InstRW<[SKLWriteResGroup29], (instregex "BSR(16|32|64)rr")>;
Clement Courbet327fac42018-03-07 08:14:02 +00001145def: InstRW<[SKLWriteResGroup29], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topperb369cdb2018-01-25 06:57:42 +00001146def: InstRW<[SKLWriteResGroup29], (instrs IMUL8r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001147def: InstRW<[SKLWriteResGroup29], (instregex "LZCNT(16|32|64)rr")>;
Craig Topperb369cdb2018-01-25 06:57:42 +00001148def: InstRW<[SKLWriteResGroup29], (instrs MUL8r)>;
Craig Toppera42a2ba2017-12-16 18:35:31 +00001149def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr")>;
1150def: InstRW<[SKLWriteResGroup29], (instregex "PEXT(32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001151def: InstRW<[SKLWriteResGroup29], (instregex "POPCNT(16|32|64)rr")>;
1152def: InstRW<[SKLWriteResGroup29], (instregex "SHLD(16|32|64)rri8")>;
1153def: InstRW<[SKLWriteResGroup29], (instregex "SHRD(16|32|64)rri8")>;
1154def: InstRW<[SKLWriteResGroup29], (instregex "TZCNT(16|32|64)rr")>;
1155
Clement Courbet327fac42018-03-07 08:14:02 +00001156def SKLWriteResGroup29_16i : SchedWriteRes<[SKLPort1, SKLPort0156]> {
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001157 let Latency = 3;
1158 let NumMicroOps = 2;
1159 let ResourceCycles = [1,1];
1160}
Clement Courbet327fac42018-03-07 08:14:02 +00001161def: InstRW<[SKLWriteResGroup29_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001162
1163def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
1164 let Latency = 3;
1165 let NumMicroOps = 1;
1166 let ResourceCycles = [1];
1167}
1168def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0")>;
1169def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FST0r")>;
1170def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FrST0")>;
1171def: InstRW<[SKLWriteResGroup30], (instregex "MMX_PSADBWirr")>;
1172def: InstRW<[SKLWriteResGroup30], (instregex "PCMPGTQrr")>;
1173def: InstRW<[SKLWriteResGroup30], (instregex "PSADBWrr")>;
1174def: InstRW<[SKLWriteResGroup30], (instregex "SUBR_FPrST0")>;
1175def: InstRW<[SKLWriteResGroup30], (instregex "SUBR_FST0r")>;
1176def: InstRW<[SKLWriteResGroup30], (instregex "SUBR_FrST0")>;
1177def: InstRW<[SKLWriteResGroup30], (instregex "SUB_FPrST0")>;
1178def: InstRW<[SKLWriteResGroup30], (instregex "SUB_FST0r")>;
1179def: InstRW<[SKLWriteResGroup30], (instregex "SUB_FrST0")>;
1180def: InstRW<[SKLWriteResGroup30], (instregex "VBROADCASTSDYrr")>;
1181def: InstRW<[SKLWriteResGroup30], (instregex "VBROADCASTSSYrr")>;
1182def: InstRW<[SKLWriteResGroup30], (instregex "VEXTRACTF128rr")>;
1183def: InstRW<[SKLWriteResGroup30], (instregex "VEXTRACTI128rr")>;
1184def: InstRW<[SKLWriteResGroup30], (instregex "VINSERTF128rr")>;
1185def: InstRW<[SKLWriteResGroup30], (instregex "VINSERTI128rr")>;
1186def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTBYrr")>;
1187def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTBrr")>;
1188def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTDYrr")>;
1189def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTQYrr")>;
1190def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTWYrr")>;
1191def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTWrr")>;
1192def: InstRW<[SKLWriteResGroup30], (instregex "VPCMPGTQYrr")>;
1193def: InstRW<[SKLWriteResGroup30], (instregex "VPCMPGTQrr")>;
1194def: InstRW<[SKLWriteResGroup30], (instregex "VPERM2F128rr")>;
1195def: InstRW<[SKLWriteResGroup30], (instregex "VPERM2I128rr")>;
1196def: InstRW<[SKLWriteResGroup30], (instregex "VPERMDYrr")>;
1197def: InstRW<[SKLWriteResGroup30], (instregex "VPERMPDYri")>;
1198def: InstRW<[SKLWriteResGroup30], (instregex "VPERMPSYrr")>;
1199def: InstRW<[SKLWriteResGroup30], (instregex "VPERMQYri")>;
1200def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXBDYrr")>;
1201def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXBQYrr")>;
1202def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXBWYrr")>;
1203def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXDQYrr")>;
1204def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXWDYrr")>;
1205def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXWQYrr")>;
1206def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXBDYrr")>;
1207def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXBQYrr")>;
1208def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXBWYrr")>;
1209def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXDQYrr")>;
1210def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXWDYrr")>;
1211def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXWQYrr")>;
1212def: InstRW<[SKLWriteResGroup30], (instregex "VPSADBWYrr")>;
1213def: InstRW<[SKLWriteResGroup30], (instregex "VPSADBWrr")>;
1214
1215def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
1216 let Latency = 3;
1217 let NumMicroOps = 2;
1218 let ResourceCycles = [1,1];
1219}
1220def: InstRW<[SKLWriteResGroup31], (instregex "EXTRACTPSrr")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001221def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001222def: InstRW<[SKLWriteResGroup31], (instregex "PEXTRBrr")>;
1223def: InstRW<[SKLWriteResGroup31], (instregex "PEXTRDrr")>;
1224def: InstRW<[SKLWriteResGroup31], (instregex "PEXTRQrr")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001225def: InstRW<[SKLWriteResGroup31], (instregex "PEXTRWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001226def: InstRW<[SKLWriteResGroup31], (instregex "PTESTrr")>;
1227def: InstRW<[SKLWriteResGroup31], (instregex "VEXTRACTPSrr")>;
1228def: InstRW<[SKLWriteResGroup31], (instregex "VPEXTRBrr")>;
1229def: InstRW<[SKLWriteResGroup31], (instregex "VPEXTRDrr")>;
1230def: InstRW<[SKLWriteResGroup31], (instregex "VPEXTRQrr")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001231def: InstRW<[SKLWriteResGroup31], (instregex "VPEXTRWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001232def: InstRW<[SKLWriteResGroup31], (instregex "VPTESTYrr")>;
1233def: InstRW<[SKLWriteResGroup31], (instregex "VPTESTrr")>;
1234
1235def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
1236 let Latency = 3;
1237 let NumMicroOps = 2;
1238 let ResourceCycles = [1,1];
1239}
1240def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
1241
1242def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
1243 let Latency = 3;
1244 let NumMicroOps = 3;
1245 let ResourceCycles = [3];
1246}
Craig Topper13a16502018-03-19 00:56:09 +00001247def: InstRW<[SKLWriteResGroup33], (instregex "ROL(8|16|32|64)rCL")>;
1248def: InstRW<[SKLWriteResGroup33], (instregex "ROR(8|16|32|64)rCL")>;
1249def: InstRW<[SKLWriteResGroup33], (instregex "SAR(8|16|32|64)rCL")>;
1250def: InstRW<[SKLWriteResGroup33], (instregex "SHL(8|16|32|64)rCL")>;
1251def: InstRW<[SKLWriteResGroup33], (instregex "SHR(8|16|32|64)rCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001252
1253def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
1254 let Latency = 3;
1255 let NumMicroOps = 3;
1256 let ResourceCycles = [3];
1257}
Craig Topper13a16502018-03-19 00:56:09 +00001258def: InstRW<[SKLWriteResGroup34], (instregex "XADD(8|16|32|64)rr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001259def: InstRW<[SKLWriteResGroup34], (instregex "XCHG8rr")>;
1260
1261def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
1262 let Latency = 3;
1263 let NumMicroOps = 3;
1264 let ResourceCycles = [1,2];
1265}
Craig Topperdbddac02018-01-25 04:45:30 +00001266def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PHADDSWrr")>;
1267def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PHSUBSWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001268
1269def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
1270 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001271 let NumMicroOps = 3;
1272 let ResourceCycles = [2,1];
1273}
Craig Topperdbddac02018-01-25 04:45:30 +00001274def: InstRW<[SKLWriteResGroup36], (instregex "PHADDSWrr")>;
1275def: InstRW<[SKLWriteResGroup36], (instregex "PHSUBSWrr")>;
1276def: InstRW<[SKLWriteResGroup36], (instregex "VPHADDSWrr")>;
1277def: InstRW<[SKLWriteResGroup36], (instregex "VPHADDSWYrr")>;
1278def: InstRW<[SKLWriteResGroup36], (instregex "VPHSUBSWrr")>;
1279def: InstRW<[SKLWriteResGroup36], (instregex "VPHSUBSWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001280
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001281def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
1282 let Latency = 3;
1283 let NumMicroOps = 3;
1284 let ResourceCycles = [2,1];
1285}
Craig Topper066e7372018-01-25 04:45:32 +00001286def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHADDDrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001287def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHADDWrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001288def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHSUBDrr")>;
1289def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHSUBWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001290
1291def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
1292 let Latency = 3;
1293 let NumMicroOps = 3;
1294 let ResourceCycles = [2,1];
1295}
1296def: InstRW<[SKLWriteResGroup38], (instregex "PHADDDrr")>;
1297def: InstRW<[SKLWriteResGroup38], (instregex "PHADDWrr")>;
1298def: InstRW<[SKLWriteResGroup38], (instregex "PHSUBDrr")>;
1299def: InstRW<[SKLWriteResGroup38], (instregex "PHSUBWrr")>;
1300def: InstRW<[SKLWriteResGroup38], (instregex "VPHADDDYrr")>;
1301def: InstRW<[SKLWriteResGroup38], (instregex "VPHADDDrr")>;
1302def: InstRW<[SKLWriteResGroup38], (instregex "VPHADDWYrr")>;
1303def: InstRW<[SKLWriteResGroup38], (instregex "VPHADDWrr")>;
1304def: InstRW<[SKLWriteResGroup38], (instregex "VPHSUBDYrr")>;
1305def: InstRW<[SKLWriteResGroup38], (instregex "VPHSUBDrr")>;
1306def: InstRW<[SKLWriteResGroup38], (instregex "VPHSUBWYrr")>;
1307def: InstRW<[SKLWriteResGroup38], (instregex "VPHSUBWrr")>;
1308
1309def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
1310 let Latency = 3;
1311 let NumMicroOps = 3;
1312 let ResourceCycles = [2,1];
1313}
1314def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr")>;
1315def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSWBirr")>;
1316def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKUSWBirr")>;
1317
1318def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
1319 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001320 let NumMicroOps = 3;
1321 let ResourceCycles = [1,2];
1322}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001323def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001324
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001325def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
1326 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001327 let NumMicroOps = 3;
1328 let ResourceCycles = [1,2];
1329}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001330def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001331
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001332def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
1333 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001334 let NumMicroOps = 3;
1335 let ResourceCycles = [1,2];
1336}
Craig Topper13a16502018-03-19 00:56:09 +00001337def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)r1")>;
1338def: InstRW<[SKLWriteResGroup42], (instregex "RCL(8|16|32|64)ri")>;
1339def: InstRW<[SKLWriteResGroup42], (instregex "RCR(8|16|32|64)r1")>;
1340def: InstRW<[SKLWriteResGroup42], (instregex "RCR(8|16|32|64)ri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001341
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001342def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
1343 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001344 let NumMicroOps = 3;
1345 let ResourceCycles = [1,1,1];
1346}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001347def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001348
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001349def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
1350 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001351 let NumMicroOps = 4;
1352 let ResourceCycles = [1,1,2];
1353}
Craig Topperf4cd9082018-01-19 05:47:32 +00001354def: InstRW<[SKLWriteResGroup44], (instregex "SET(A|BE)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001355
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001356def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
1357 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001358 let NumMicroOps = 4;
1359 let ResourceCycles = [1,1,1,1];
1360}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001361def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001362
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001363def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
1364 let Latency = 3;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001365 let NumMicroOps = 4;
1366 let ResourceCycles = [1,1,1,1];
1367}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001368def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001369
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001370def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001371 let Latency = 4;
1372 let NumMicroOps = 1;
1373 let ResourceCycles = [1];
1374}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001375def: InstRW<[SKLWriteResGroup47], (instregex "AESDECLASTrr")>;
1376def: InstRW<[SKLWriteResGroup47], (instregex "AESDECrr")>;
1377def: InstRW<[SKLWriteResGroup47], (instregex "AESENCLASTrr")>;
1378def: InstRW<[SKLWriteResGroup47], (instregex "AESENCrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001379def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001380def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDWDirr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001381def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMULHRSWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001382def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMULHUWirr")>;
1383def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMULHWirr")>;
1384def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMULLWirr")>;
1385def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMULUDQirr")>;
1386def: InstRW<[SKLWriteResGroup47], (instregex "MUL_FPrST0")>;
1387def: InstRW<[SKLWriteResGroup47], (instregex "MUL_FST0r")>;
1388def: InstRW<[SKLWriteResGroup47], (instregex "MUL_FrST0")>;
1389def: InstRW<[SKLWriteResGroup47], (instregex "RCPPSr")>;
1390def: InstRW<[SKLWriteResGroup47], (instregex "RCPSSr")>;
1391def: InstRW<[SKLWriteResGroup47], (instregex "RSQRTPSr")>;
1392def: InstRW<[SKLWriteResGroup47], (instregex "RSQRTSSr")>;
1393def: InstRW<[SKLWriteResGroup47], (instregex "VAESDECLASTrr")>;
1394def: InstRW<[SKLWriteResGroup47], (instregex "VAESDECrr")>;
1395def: InstRW<[SKLWriteResGroup47], (instregex "VAESENCLASTrr")>;
1396def: InstRW<[SKLWriteResGroup47], (instregex "VAESENCrr")>;
1397def: InstRW<[SKLWriteResGroup47], (instregex "VRCPPSYr")>;
1398def: InstRW<[SKLWriteResGroup47], (instregex "VRCPPSr")>;
1399def: InstRW<[SKLWriteResGroup47], (instregex "VRCPSSr")>;
1400def: InstRW<[SKLWriteResGroup47], (instregex "VRSQRTPSYr")>;
1401def: InstRW<[SKLWriteResGroup47], (instregex "VRSQRTPSr")>;
1402def: InstRW<[SKLWriteResGroup47], (instregex "VRSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001403
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001404def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001405 let Latency = 4;
1406 let NumMicroOps = 1;
1407 let ResourceCycles = [1];
1408}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001409def: InstRW<[SKLWriteResGroup48], (instregex "ADDPDrr")>;
1410def: InstRW<[SKLWriteResGroup48], (instregex "ADDPSrr")>;
1411def: InstRW<[SKLWriteResGroup48], (instregex "ADDSDrr")>;
1412def: InstRW<[SKLWriteResGroup48], (instregex "ADDSSrr")>;
1413def: InstRW<[SKLWriteResGroup48], (instregex "ADDSUBPDrr")>;
1414def: InstRW<[SKLWriteResGroup48], (instregex "ADDSUBPSrr")>;
1415def: InstRW<[SKLWriteResGroup48], (instregex "MULPDrr")>;
1416def: InstRW<[SKLWriteResGroup48], (instregex "MULPSrr")>;
1417def: InstRW<[SKLWriteResGroup48], (instregex "MULSDrr")>;
1418def: InstRW<[SKLWriteResGroup48], (instregex "MULSSrr")>;
1419def: InstRW<[SKLWriteResGroup48], (instregex "SUBPDrr")>;
1420def: InstRW<[SKLWriteResGroup48], (instregex "SUBPSrr")>;
1421def: InstRW<[SKLWriteResGroup48], (instregex "SUBSDrr")>;
1422def: InstRW<[SKLWriteResGroup48], (instregex "SUBSSrr")>;
1423def: InstRW<[SKLWriteResGroup48], (instregex "VADDPDYrr")>;
1424def: InstRW<[SKLWriteResGroup48], (instregex "VADDPDrr")>;
1425def: InstRW<[SKLWriteResGroup48], (instregex "VADDPSYrr")>;
1426def: InstRW<[SKLWriteResGroup48], (instregex "VADDPSrr")>;
1427def: InstRW<[SKLWriteResGroup48], (instregex "VADDSDrr")>;
1428def: InstRW<[SKLWriteResGroup48], (instregex "VADDSSrr")>;
1429def: InstRW<[SKLWriteResGroup48], (instregex "VADDSUBPDYrr")>;
1430def: InstRW<[SKLWriteResGroup48], (instregex "VADDSUBPDrr")>;
1431def: InstRW<[SKLWriteResGroup48], (instregex "VADDSUBPSYrr")>;
1432def: InstRW<[SKLWriteResGroup48], (instregex "VADDSUBPSrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001433def: InstRW<[SKLWriteResGroup48], (instregex "VMULPDYrr")>;
1434def: InstRW<[SKLWriteResGroup48], (instregex "VMULPDrr")>;
1435def: InstRW<[SKLWriteResGroup48], (instregex "VMULPSYrr")>;
1436def: InstRW<[SKLWriteResGroup48], (instregex "VMULPSrr")>;
1437def: InstRW<[SKLWriteResGroup48], (instregex "VMULSDrr")>;
1438def: InstRW<[SKLWriteResGroup48], (instregex "VMULSSrr")>;
1439def: InstRW<[SKLWriteResGroup48], (instregex "VSUBPDYrr")>;
1440def: InstRW<[SKLWriteResGroup48], (instregex "VSUBPDrr")>;
1441def: InstRW<[SKLWriteResGroup48], (instregex "VSUBPSYrr")>;
1442def: InstRW<[SKLWriteResGroup48], (instregex "VSUBPSrr")>;
1443def: InstRW<[SKLWriteResGroup48], (instregex "VSUBSDrr")>;
1444def: InstRW<[SKLWriteResGroup48], (instregex "VSUBSSrr")>;
Craig Topperf82867c2017-12-13 23:11:30 +00001445def: InstRW<[SKLWriteResGroup48],
1446 (instregex
1447 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1448 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001449
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001450def SKLWriteResGroup49 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001451 let Latency = 4;
1452 let NumMicroOps = 1;
1453 let ResourceCycles = [1];
1454}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001455def: InstRW<[SKLWriteResGroup49], (instregex "CMPPDrri")>;
1456def: InstRW<[SKLWriteResGroup49], (instregex "CMPPSrri")>;
Craig Topper6c659102017-12-10 09:14:37 +00001457def: InstRW<[SKLWriteResGroup49], (instregex "CMPSDrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001458def: InstRW<[SKLWriteResGroup49], (instregex "CMPSSrr")>;
1459def: InstRW<[SKLWriteResGroup49], (instregex "CVTDQ2PSrr")>;
1460def: InstRW<[SKLWriteResGroup49], (instregex "CVTPS2DQrr")>;
1461def: InstRW<[SKLWriteResGroup49], (instregex "CVTTPS2DQrr")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00001462def: InstRW<[SKLWriteResGroup49], (instregex "MAX(C?)PDrr")>;
1463def: InstRW<[SKLWriteResGroup49], (instregex "MAX(C?)PSrr")>;
1464def: InstRW<[SKLWriteResGroup49], (instregex "MAX(C?)SDrr")>;
1465def: InstRW<[SKLWriteResGroup49], (instregex "MAX(C?)SSrr")>;
1466def: InstRW<[SKLWriteResGroup49], (instregex "MIN(C?)PDrr")>;
1467def: InstRW<[SKLWriteResGroup49], (instregex "MIN(C?)PSrr")>;
1468def: InstRW<[SKLWriteResGroup49], (instregex "MIN(C?)SDrr")>;
1469def: InstRW<[SKLWriteResGroup49], (instregex "MIN(C?)SSrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001470def: InstRW<[SKLWriteResGroup49], (instregex "PHMINPOSUWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001471def: InstRW<[SKLWriteResGroup49], (instregex "PMADDUBSWrr")>;
1472def: InstRW<[SKLWriteResGroup49], (instregex "PMADDWDrr")>;
1473def: InstRW<[SKLWriteResGroup49], (instregex "PMULDQrr")>;
1474def: InstRW<[SKLWriteResGroup49], (instregex "PMULHRSWrr")>;
1475def: InstRW<[SKLWriteResGroup49], (instregex "PMULHUWrr")>;
1476def: InstRW<[SKLWriteResGroup49], (instregex "PMULHWrr")>;
1477def: InstRW<[SKLWriteResGroup49], (instregex "PMULLWrr")>;
1478def: InstRW<[SKLWriteResGroup49], (instregex "PMULUDQrr")>;
1479def: InstRW<[SKLWriteResGroup49], (instregex "VCMPPDYrri")>;
1480def: InstRW<[SKLWriteResGroup49], (instregex "VCMPPDrri")>;
1481def: InstRW<[SKLWriteResGroup49], (instregex "VCMPPSYrri")>;
1482def: InstRW<[SKLWriteResGroup49], (instregex "VCMPPSrri")>;
1483def: InstRW<[SKLWriteResGroup49], (instregex "VCMPSDrr")>;
1484def: InstRW<[SKLWriteResGroup49], (instregex "VCMPSSrr")>;
1485def: InstRW<[SKLWriteResGroup49], (instregex "VCVTDQ2PSYrr")>;
1486def: InstRW<[SKLWriteResGroup49], (instregex "VCVTDQ2PSrr")>;
1487def: InstRW<[SKLWriteResGroup49], (instregex "VCVTPS2DQYrr")>;
1488def: InstRW<[SKLWriteResGroup49], (instregex "VCVTPS2DQrr")>;
1489def: InstRW<[SKLWriteResGroup49], (instregex "VCVTTPS2DQYrr")>;
1490def: InstRW<[SKLWriteResGroup49], (instregex "VCVTTPS2DQrr")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00001491def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)PDYrr")>;
1492def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)PDrr")>;
1493def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)PSYrr")>;
1494def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)PSrr")>;
1495def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)SDrr")>;
1496def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)SSrr")>;
1497def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)PDYrr")>;
1498def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)PDrr")>;
1499def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)PSYrr")>;
1500def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)PSrr")>;
1501def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)SDrr")>;
1502def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)SSrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001503def: InstRW<[SKLWriteResGroup49], (instregex "VPHMINPOSUWrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001504def: InstRW<[SKLWriteResGroup49], (instregex "VPMADDUBSWYrr")>;
1505def: InstRW<[SKLWriteResGroup49], (instregex "VPMADDUBSWrr")>;
1506def: InstRW<[SKLWriteResGroup49], (instregex "VPMADDWDYrr")>;
1507def: InstRW<[SKLWriteResGroup49], (instregex "VPMADDWDrr")>;
1508def: InstRW<[SKLWriteResGroup49], (instregex "VPMULDQYrr")>;
1509def: InstRW<[SKLWriteResGroup49], (instregex "VPMULDQrr")>;
1510def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHRSWYrr")>;
1511def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHRSWrr")>;
1512def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHUWYrr")>;
1513def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHUWrr")>;
1514def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHWYrr")>;
1515def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHWrr")>;
1516def: InstRW<[SKLWriteResGroup49], (instregex "VPMULLWYrr")>;
1517def: InstRW<[SKLWriteResGroup49], (instregex "VPMULLWrr")>;
1518def: InstRW<[SKLWriteResGroup49], (instregex "VPMULUDQYrr")>;
1519def: InstRW<[SKLWriteResGroup49], (instregex "VPMULUDQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001520
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001521def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001522 let Latency = 4;
1523 let NumMicroOps = 2;
1524 let ResourceCycles = [2];
1525}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001526def: InstRW<[SKLWriteResGroup50], (instregex "MPSADBWrri")>;
1527def: InstRW<[SKLWriteResGroup50], (instregex "VMPSADBWYrri")>;
1528def: InstRW<[SKLWriteResGroup50], (instregex "VMPSADBWrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001529
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001530def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001531 let Latency = 4;
1532 let NumMicroOps = 2;
1533 let ResourceCycles = [1,1];
1534}
Craig Topperb369cdb2018-01-25 06:57:42 +00001535def: InstRW<[SKLWriteResGroup51], (instrs IMUL64r)>;
1536def: InstRW<[SKLWriteResGroup51], (instrs MUL64r)>;
1537def: InstRW<[SKLWriteResGroup51], (instrs MULX64rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001538
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001539def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1540 let Latency = 4;
1541 let NumMicroOps = 4;
1542}
Craig Topperb369cdb2018-01-25 06:57:42 +00001543def: InstRW<[SKLWriteResGroup51_16], (instrs IMUL16r)>;
1544def: InstRW<[SKLWriteResGroup51_16], (instrs MUL16r)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001545
1546def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001547 let Latency = 4;
1548 let NumMicroOps = 2;
1549 let ResourceCycles = [1,1];
1550}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001551def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr")>;
1552def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLQYrr")>;
1553def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLWYrr")>;
1554def: InstRW<[SKLWriteResGroup52], (instregex "VPSRADYrr")>;
1555def: InstRW<[SKLWriteResGroup52], (instregex "VPSRAWYrr")>;
1556def: InstRW<[SKLWriteResGroup52], (instregex "VPSRLDYrr")>;
1557def: InstRW<[SKLWriteResGroup52], (instregex "VPSRLQYrr")>;
1558def: InstRW<[SKLWriteResGroup52], (instregex "VPSRLWYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001559
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001560def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001561 let Latency = 4;
1562 let NumMicroOps = 3;
1563 let ResourceCycles = [1,1,1];
1564}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001565def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m")>;
1566def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP32m")>;
1567def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP64m")>;
1568def: InstRW<[SKLWriteResGroup53], (instregex "IST_F16m")>;
1569def: InstRW<[SKLWriteResGroup53], (instregex "IST_F32m")>;
1570def: InstRW<[SKLWriteResGroup53], (instregex "IST_FP16m")>;
1571def: InstRW<[SKLWriteResGroup53], (instregex "IST_FP32m")>;
1572def: InstRW<[SKLWriteResGroup53], (instregex "IST_FP64m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001573
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001574def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001575 let Latency = 4;
1576 let NumMicroOps = 4;
1577 let ResourceCycles = [4];
1578}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001579def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001580
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001581def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001582 let Latency = 4;
1583 let NumMicroOps = 4;
1584 let ResourceCycles = [1,3];
1585}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001586def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001587
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001588def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001589 let Latency = 4;
1590 let NumMicroOps = 4;
1591 let ResourceCycles = [1,3];
1592}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001593def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001594
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001595def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001596 let Latency = 4;
1597 let NumMicroOps = 4;
1598 let ResourceCycles = [1,1,2];
1599}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001600def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001601
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001602def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1603 let Latency = 5;
1604 let NumMicroOps = 1;
1605 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001606}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001607def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64rm")>;
1608def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64to64rm")>;
1609def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVQ64rm")>;
Craig Topper13a16502018-03-19 00:56:09 +00001610def: InstRW<[SKLWriteResGroup58], (instregex "MOV(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001611def: InstRW<[SKLWriteResGroup58], (instregex "MOV64toPQIrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001612def: InstRW<[SKLWriteResGroup58], (instregex "MOVDDUPrm")>;
1613def: InstRW<[SKLWriteResGroup58], (instregex "MOVDI2PDIrm")>;
Craig Topper90c9c152017-12-10 09:14:44 +00001614def: InstRW<[SKLWriteResGroup58], (instregex "MOVQI2PQIrm")>;
1615def: InstRW<[SKLWriteResGroup58], (instregex "MOVSDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001616def: InstRW<[SKLWriteResGroup58], (instregex "MOVSSrm")>;
1617def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16")>;
1618def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm32")>;
1619def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm8")>;
1620def: InstRW<[SKLWriteResGroup58], (instregex "MOVZX(16|32|64)rm16")>;
1621def: InstRW<[SKLWriteResGroup58], (instregex "MOVZX(16|32|64)rm8")>;
1622def: InstRW<[SKLWriteResGroup58], (instregex "PREFETCHNTA")>;
1623def: InstRW<[SKLWriteResGroup58], (instregex "PREFETCHT0")>;
1624def: InstRW<[SKLWriteResGroup58], (instregex "PREFETCHT1")>;
1625def: InstRW<[SKLWriteResGroup58], (instregex "PREFETCHT2")>;
1626def: InstRW<[SKLWriteResGroup58], (instregex "VMOV64toPQIrm")>;
1627def: InstRW<[SKLWriteResGroup58], (instregex "VMOVDDUPrm")>;
1628def: InstRW<[SKLWriteResGroup58], (instregex "VMOVDI2PDIrm")>;
1629def: InstRW<[SKLWriteResGroup58], (instregex "VMOVQI2PQIrm")>;
1630def: InstRW<[SKLWriteResGroup58], (instregex "VMOVSDrm")>;
1631def: InstRW<[SKLWriteResGroup58], (instregex "VMOVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001632
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001633def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001634 let Latency = 5;
1635 let NumMicroOps = 2;
1636 let ResourceCycles = [1,1];
1637}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001638def: InstRW<[SKLWriteResGroup59], (instregex "CVTDQ2PDrr")>;
1639def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr")>;
1640def: InstRW<[SKLWriteResGroup59], (instregex "VCVTDQ2PDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001641
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001642def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001643 let Latency = 5;
1644 let NumMicroOps = 2;
1645 let ResourceCycles = [1,1];
1646}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001647def: InstRW<[SKLWriteResGroup60], (instregex "CVTPD2DQrr")>;
1648def: InstRW<[SKLWriteResGroup60], (instregex "CVTPD2PSrr")>;
1649def: InstRW<[SKLWriteResGroup60], (instregex "CVTPS2PDrr")>;
1650def: InstRW<[SKLWriteResGroup60], (instregex "CVTSD2SSrr")>;
Craig Toppera0be5a02017-12-10 19:47:56 +00001651def: InstRW<[SKLWriteResGroup60], (instregex "CVTSI642SDrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001652def: InstRW<[SKLWriteResGroup60], (instregex "CVTSI2SDrr")>;
1653def: InstRW<[SKLWriteResGroup60], (instregex "CVTSI2SSrr")>;
1654def: InstRW<[SKLWriteResGroup60], (instregex "CVTSS2SDrr")>;
1655def: InstRW<[SKLWriteResGroup60], (instregex "CVTTPD2DQrr")>;
1656def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr")>;
1657def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPS2PIirr")>;
1658def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTTPD2PIirr")>;
1659def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTTPS2PIirr")>;
1660def: InstRW<[SKLWriteResGroup60], (instregex "VCVTPD2DQrr")>;
1661def: InstRW<[SKLWriteResGroup60], (instregex "VCVTPD2PSrr")>;
1662def: InstRW<[SKLWriteResGroup60], (instregex "VCVTPH2PSrr")>;
1663def: InstRW<[SKLWriteResGroup60], (instregex "VCVTPS2PDrr")>;
1664def: InstRW<[SKLWriteResGroup60], (instregex "VCVTPS2PHrr")>;
1665def: InstRW<[SKLWriteResGroup60], (instregex "VCVTSD2SSrr")>;
Craig Toppera0be5a02017-12-10 19:47:56 +00001666def: InstRW<[SKLWriteResGroup60], (instregex "VCVTSI642SDrr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001667def: InstRW<[SKLWriteResGroup60], (instregex "VCVTSI2SDrr")>;
1668def: InstRW<[SKLWriteResGroup60], (instregex "VCVTSI2SSrr")>;
1669def: InstRW<[SKLWriteResGroup60], (instregex "VCVTSS2SDrr")>;
1670def: InstRW<[SKLWriteResGroup60], (instregex "VCVTTPD2DQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001671
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001672def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001673 let Latency = 5;
1674 let NumMicroOps = 3;
1675 let ResourceCycles = [1,1,1];
1676}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001677def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001678
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001679def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001680 let Latency = 5;
1681 let NumMicroOps = 3;
1682 let ResourceCycles = [1,1,1];
1683}
Craig Topperb369cdb2018-01-25 06:57:42 +00001684def: InstRW<[SKLWriteResGroup62], (instrs IMUL32r)>;
1685def: InstRW<[SKLWriteResGroup62], (instrs MUL32r)>;
1686def: InstRW<[SKLWriteResGroup62], (instrs MULX32rr)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001687
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001688def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001689 let Latency = 5;
1690 let NumMicroOps = 5;
1691 let ResourceCycles = [1,4];
1692}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001693def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001694
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001695def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001696 let Latency = 5;
1697 let NumMicroOps = 5;
1698 let ResourceCycles = [2,3];
1699}
Craig Topper13a16502018-03-19 00:56:09 +00001700def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001701
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001702def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001703 let Latency = 5;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001704 let NumMicroOps = 6;
1705 let ResourceCycles = [1,1,4];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001706}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001707def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16")>;
1708def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001709
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001710def SKLWriteResGroup66 : SchedWriteRes<[SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001711 let Latency = 6;
1712 let NumMicroOps = 1;
1713 let ResourceCycles = [1];
1714}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001715def: InstRW<[SKLWriteResGroup66], (instregex "PCLMULQDQrr")>;
1716def: InstRW<[SKLWriteResGroup66], (instregex "VPCLMULQDQrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001717
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001718def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1719 let Latency = 6;
1720 let NumMicroOps = 1;
1721 let ResourceCycles = [1];
1722}
1723def: InstRW<[SKLWriteResGroup67], (instregex "LDDQUrm")>;
1724def: InstRW<[SKLWriteResGroup67], (instregex "MOVAPDrm")>;
1725def: InstRW<[SKLWriteResGroup67], (instregex "MOVAPSrm")>;
1726def: InstRW<[SKLWriteResGroup67], (instregex "MOVDQArm")>;
1727def: InstRW<[SKLWriteResGroup67], (instregex "MOVDQUrm")>;
1728def: InstRW<[SKLWriteResGroup67], (instregex "MOVNTDQArm")>;
1729def: InstRW<[SKLWriteResGroup67], (instregex "MOVSHDUPrm")>;
1730def: InstRW<[SKLWriteResGroup67], (instregex "MOVSLDUPrm")>;
1731def: InstRW<[SKLWriteResGroup67], (instregex "MOVUPDrm")>;
1732def: InstRW<[SKLWriteResGroup67], (instregex "MOVUPSrm")>;
1733def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm")>;
1734def: InstRW<[SKLWriteResGroup67], (instregex "VLDDQUrm")>;
1735def: InstRW<[SKLWriteResGroup67], (instregex "VMOVAPDrm")>;
1736def: InstRW<[SKLWriteResGroup67], (instregex "VMOVAPSrm")>;
1737def: InstRW<[SKLWriteResGroup67], (instregex "VMOVDQArm")>;
1738def: InstRW<[SKLWriteResGroup67], (instregex "VMOVDQUrm")>;
1739def: InstRW<[SKLWriteResGroup67], (instregex "VMOVNTDQArm")>;
1740def: InstRW<[SKLWriteResGroup67], (instregex "VMOVSHDUPrm")>;
1741def: InstRW<[SKLWriteResGroup67], (instregex "VMOVSLDUPrm")>;
1742def: InstRW<[SKLWriteResGroup67], (instregex "VMOVUPDrm")>;
1743def: InstRW<[SKLWriteResGroup67], (instregex "VMOVUPSrm")>;
1744def: InstRW<[SKLWriteResGroup67], (instregex "VPBROADCASTDrm")>;
1745def: InstRW<[SKLWriteResGroup67], (instregex "VPBROADCASTQrm")>;
1746
1747def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001748 let Latency = 6;
1749 let NumMicroOps = 2;
1750 let ResourceCycles = [2];
1751}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001752def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001753
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001754def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001755 let Latency = 6;
1756 let NumMicroOps = 2;
1757 let ResourceCycles = [1,1];
1758}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001759def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm")>;
1760def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSWirm")>;
1761def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDUSBirm")>;
1762def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDUSWirm")>;
1763def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PAVGBirm")>;
1764def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PAVGWirm")>;
1765def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPEQBirm")>;
1766def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPEQDirm")>;
1767def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPEQWirm")>;
1768def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPGTBirm")>;
1769def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPGTDirm")>;
1770def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPGTWirm")>;
1771def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PMAXSWirm")>;
1772def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PMAXUBirm")>;
1773def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PMINSWirm")>;
1774def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PMINUBirm")>;
1775def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSLLDrm")>;
1776def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSLLQrm")>;
1777def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSLLWrm")>;
1778def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSRADrm")>;
1779def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSRAWrm")>;
1780def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSRLDrm")>;
1781def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSRLQrm")>;
1782def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSRLWrm")>;
1783def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSUBSBirm")>;
1784def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSUBSWirm")>;
1785def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSUBUSBirm")>;
1786def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSUBUSWirm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001787
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001788def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001789 let Latency = 6;
1790 let NumMicroOps = 2;
1791 let ResourceCycles = [1,1];
1792}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001793def: InstRW<[SKLWriteResGroup70], (instregex "CVTSD2SI64rr")>;
1794def: InstRW<[SKLWriteResGroup70], (instregex "CVTSD2SIrr")>;
1795def: InstRW<[SKLWriteResGroup70], (instregex "CVTSS2SI64rr")>;
1796def: InstRW<[SKLWriteResGroup70], (instregex "CVTSS2SIrr")>;
1797def: InstRW<[SKLWriteResGroup70], (instregex "CVTTSD2SI64rr")>;
1798def: InstRW<[SKLWriteResGroup70], (instregex "CVTTSD2SIrr")>;
1799def: InstRW<[SKLWriteResGroup70], (instregex "VCVTSD2SI64rr")>;
1800def: InstRW<[SKLWriteResGroup70], (instregex "VCVTSD2SIrr")>;
1801def: InstRW<[SKLWriteResGroup70], (instregex "VCVTSS2SI64rr")>;
1802def: InstRW<[SKLWriteResGroup70], (instregex "VCVTSS2SIrr")>;
1803def: InstRW<[SKLWriteResGroup70], (instregex "VCVTTSD2SI64rr")>;
1804def: InstRW<[SKLWriteResGroup70], (instregex "VCVTTSD2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001805
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001806def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1807 let Latency = 6;
1808 let NumMicroOps = 2;
1809 let ResourceCycles = [1,1];
1810}
Craig Topperdbddac02018-01-25 04:45:30 +00001811def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNRrmi")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001812def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PINSRWrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001813def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PSHUFBrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001814def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PSHUFWmi")>;
1815def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKHBWirm")>;
1816def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKHDQirm")>;
1817def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKHWDirm")>;
1818def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKLBWirm")>;
1819def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKLDQirm")>;
1820def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKLWDirm")>;
1821def: InstRW<[SKLWriteResGroup71], (instregex "MOVHPDrm")>;
1822def: InstRW<[SKLWriteResGroup71], (instregex "MOVHPSrm")>;
1823def: InstRW<[SKLWriteResGroup71], (instregex "MOVLPDrm")>;
1824def: InstRW<[SKLWriteResGroup71], (instregex "MOVLPSrm")>;
1825def: InstRW<[SKLWriteResGroup71], (instregex "PINSRBrm")>;
1826def: InstRW<[SKLWriteResGroup71], (instregex "PINSRDrm")>;
1827def: InstRW<[SKLWriteResGroup71], (instregex "PINSRQrm")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001828def: InstRW<[SKLWriteResGroup71], (instregex "PINSRWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001829def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXBDrm")>;
1830def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXBQrm")>;
1831def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXBWrm")>;
1832def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXDQrm")>;
1833def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXWDrm")>;
1834def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXWQrm")>;
1835def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXBDrm")>;
1836def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXBQrm")>;
1837def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXBWrm")>;
1838def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXDQrm")>;
1839def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXWDrm")>;
1840def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXWQrm")>;
1841def: InstRW<[SKLWriteResGroup71], (instregex "VMOVHPDrm")>;
1842def: InstRW<[SKLWriteResGroup71], (instregex "VMOVHPSrm")>;
1843def: InstRW<[SKLWriteResGroup71], (instregex "VMOVLPDrm")>;
1844def: InstRW<[SKLWriteResGroup71], (instregex "VMOVLPSrm")>;
1845def: InstRW<[SKLWriteResGroup71], (instregex "VPINSRBrm")>;
1846def: InstRW<[SKLWriteResGroup71], (instregex "VPINSRDrm")>;
1847def: InstRW<[SKLWriteResGroup71], (instregex "VPINSRQrm")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001848def: InstRW<[SKLWriteResGroup71], (instregex "VPINSRWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001849def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXBDrm")>;
1850def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXBQrm")>;
1851def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXBWrm")>;
1852def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXDQrm")>;
1853def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXWDrm")>;
1854def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXWQrm")>;
1855def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXBDrm")>;
1856def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXBQrm")>;
1857def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXBWrm")>;
1858def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXDQrm")>;
1859def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXWDrm")>;
1860def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXWQrm")>;
1861
1862def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
1863 let Latency = 6;
1864 let NumMicroOps = 2;
1865 let ResourceCycles = [1,1];
1866}
1867def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64")>;
1868def: InstRW<[SKLWriteResGroup72], (instregex "JMP(16|32|64)m")>;
1869
1870def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
1871 let Latency = 6;
1872 let NumMicroOps = 2;
1873 let ResourceCycles = [1,1];
1874}
Craig Topperdbddac02018-01-25 04:45:30 +00001875def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSBrm")>;
1876def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSDrm")>;
1877def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001878def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PADDBirm")>;
1879def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PADDDirm")>;
1880def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PADDQirm")>;
1881def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PADDWirm")>;
1882def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PANDNirm")>;
1883def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PANDirm")>;
1884def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PORirm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001885def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSIGNBrm")>;
1886def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSIGNDrm")>;
1887def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSIGNWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001888def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSUBBirm")>;
1889def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSUBDirm")>;
1890def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSUBQirm")>;
1891def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSUBWirm")>;
1892def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PXORirm")>;
1893
1894def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
1895 let Latency = 6;
1896 let NumMicroOps = 2;
1897 let ResourceCycles = [1,1];
1898}
Craig Topper13a16502018-03-19 00:56:09 +00001899def: InstRW<[SKLWriteResGroup74], (instregex "ADC(8|16|32|64)rm")>;
Craig Toppera42a2ba2017-12-16 18:35:31 +00001900def: InstRW<[SKLWriteResGroup74], (instregex "ADCX(32|64)rm")>;
1901def: InstRW<[SKLWriteResGroup74], (instregex "ADOX(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001902def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
Craig Topperf4cd9082018-01-19 05:47:32 +00001903def: InstRW<[SKLWriteResGroup74], (instregex "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rm")>;
Craig Topper9b60dcb2018-03-19 00:56:11 +00001904def: InstRW<[SKLWriteResGroup74], (instregex "RORX(32|64)mi")>;
1905def: InstRW<[SKLWriteResGroup74], (instregex "SARX(32|64)rm")>;
Craig Topper13a16502018-03-19 00:56:09 +00001906def: InstRW<[SKLWriteResGroup74], (instregex "SBB(8|16|32|64)rm")>;
Craig Topper9b60dcb2018-03-19 00:56:11 +00001907def: InstRW<[SKLWriteResGroup74], (instregex "SHLX(32|64)rm")>;
1908def: InstRW<[SKLWriteResGroup74], (instregex "SHRX(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001909
1910def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
1911 let Latency = 6;
1912 let NumMicroOps = 2;
1913 let ResourceCycles = [1,1];
1914}
Craig Toppera42a2ba2017-12-16 18:35:31 +00001915def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm")>;
1916def: InstRW<[SKLWriteResGroup75], (instregex "BLSI(32|64)rm")>;
1917def: InstRW<[SKLWriteResGroup75], (instregex "BLSMSK(32|64)rm")>;
1918def: InstRW<[SKLWriteResGroup75], (instregex "BLSR(32|64)rm")>;
1919def: InstRW<[SKLWriteResGroup75], (instregex "BZHI(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001920def: InstRW<[SKLWriteResGroup75], (instregex "MOVBE(16|32|64)rm")>;
1921
1922def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
1923 let Latency = 6;
1924 let NumMicroOps = 2;
1925 let ResourceCycles = [1,1];
1926}
Craig Topper13a16502018-03-19 00:56:09 +00001927def: InstRW<[SKLWriteResGroup76], (instregex "ADD(8|16|32|64)rm")>;
1928def: InstRW<[SKLWriteResGroup76], (instregex "AND(8|16|32|64)rm")>;
1929def: InstRW<[SKLWriteResGroup76], (instregex "CMP(8|16|32|64)mi")>;
1930def: InstRW<[SKLWriteResGroup76], (instregex "CMP(8|16|32|64)mr")>;
1931def: InstRW<[SKLWriteResGroup76], (instregex "CMP(8|16|32|64)rm")>;
1932def: InstRW<[SKLWriteResGroup76], (instregex "OR(8|16|32|64)rm")>;
Craig Topper2d451e72018-03-18 08:38:06 +00001933def: InstRW<[SKLWriteResGroup76], (instrs POP16r, POP32r, POP64r)>;
1934def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)rmr")>;
Craig Topper13a16502018-03-19 00:56:09 +00001935def: InstRW<[SKLWriteResGroup76], (instregex "SUB(8|16|32|64)rm")>;
1936def: InstRW<[SKLWriteResGroup76], (instregex "TEST(8|16|32|64)mr")>;
Craig Topper3e946262018-03-20 03:02:03 +00001937def: InstRW<[SKLWriteResGroup76], (instregex "TEST(8|16|32|64)mi")>;
Craig Topper13a16502018-03-19 00:56:09 +00001938def: InstRW<[SKLWriteResGroup76], (instregex "XOR(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001939
1940def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001941 let Latency = 6;
1942 let NumMicroOps = 3;
1943 let ResourceCycles = [2,1];
1944}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001945def: InstRW<[SKLWriteResGroup77], (instregex "HADDPDrr")>;
1946def: InstRW<[SKLWriteResGroup77], (instregex "HADDPSrr")>;
1947def: InstRW<[SKLWriteResGroup77], (instregex "HSUBPDrr")>;
1948def: InstRW<[SKLWriteResGroup77], (instregex "HSUBPSrr")>;
1949def: InstRW<[SKLWriteResGroup77], (instregex "VHADDPDYrr")>;
1950def: InstRW<[SKLWriteResGroup77], (instregex "VHADDPDrr")>;
1951def: InstRW<[SKLWriteResGroup77], (instregex "VHADDPSYrr")>;
1952def: InstRW<[SKLWriteResGroup77], (instregex "VHADDPSrr")>;
1953def: InstRW<[SKLWriteResGroup77], (instregex "VHSUBPDYrr")>;
1954def: InstRW<[SKLWriteResGroup77], (instregex "VHSUBPDrr")>;
1955def: InstRW<[SKLWriteResGroup77], (instregex "VHSUBPSYrr")>;
1956def: InstRW<[SKLWriteResGroup77], (instregex "VHSUBPSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001957
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001958def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001959 let Latency = 6;
1960 let NumMicroOps = 3;
1961 let ResourceCycles = [2,1];
1962}
Craig Toppera0be5a02017-12-10 19:47:56 +00001963def: InstRW<[SKLWriteResGroup78], (instregex "CVTSI642SSrr")>;
1964def: InstRW<[SKLWriteResGroup78], (instregex "VCVTSI642SSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001965
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001966def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001967 let Latency = 6;
1968 let NumMicroOps = 4;
1969 let ResourceCycles = [1,2,1];
1970}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001971def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL")>;
1972def: InstRW<[SKLWriteResGroup79], (instregex "SHRD(16|32|64)rrCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001973
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001974def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001975 let Latency = 6;
1976 let NumMicroOps = 4;
1977 let ResourceCycles = [1,1,1,1];
1978}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001979def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001980
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001981def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort015]> {
1982 let Latency = 6;
1983 let NumMicroOps = 4;
1984 let ResourceCycles = [1,1,1,1];
1985}
1986def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
1987
1988def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
1989 let Latency = 6;
1990 let NumMicroOps = 4;
1991 let ResourceCycles = [1,1,1,1];
1992}
1993def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8")>;
1994def: InstRW<[SKLWriteResGroup82], (instregex "BTR(16|32|64)mi8")>;
1995def: InstRW<[SKLWriteResGroup82], (instregex "BTS(16|32|64)mi8")>;
Craig Topper13a16502018-03-19 00:56:09 +00001996def: InstRW<[SKLWriteResGroup82], (instregex "SAR(8|16|32|64)m1")>;
1997def: InstRW<[SKLWriteResGroup82], (instregex "SAR(8|16|32|64)mi")>;
1998def: InstRW<[SKLWriteResGroup82], (instregex "SHL(8|16|32|64)m1")>;
1999def: InstRW<[SKLWriteResGroup82], (instregex "SHL(8|16|32|64)mi")>;
2000def: InstRW<[SKLWriteResGroup82], (instregex "SHR(8|16|32|64)m1")>;
2001def: InstRW<[SKLWriteResGroup82], (instregex "SHR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002002
2003def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
2004 let Latency = 6;
2005 let NumMicroOps = 4;
2006 let ResourceCycles = [1,1,1,1];
2007}
Craig Topper13a16502018-03-19 00:56:09 +00002008def: InstRW<[SKLWriteResGroup83], (instregex "ADD(8|16|32|64)mi")>;
2009def: InstRW<[SKLWriteResGroup83], (instregex "ADD(8|16|32|64)mr")>;
2010def: InstRW<[SKLWriteResGroup83], (instregex "AND(8|16|32|64)mi")>;
2011def: InstRW<[SKLWriteResGroup83], (instregex "AND(8|16|32|64)mr")>;
2012def: InstRW<[SKLWriteResGroup83], (instregex "DEC(8|16|32|64)m")>;
2013def: InstRW<[SKLWriteResGroup83], (instregex "INC(8|16|32|64)m")>;
2014def: InstRW<[SKLWriteResGroup83], (instregex "NEG(8|16|32|64)m")>;
2015def: InstRW<[SKLWriteResGroup83], (instregex "NOT(8|16|32|64)m")>;
2016def: InstRW<[SKLWriteResGroup83], (instregex "OR(8|16|32|64)mi")>;
2017def: InstRW<[SKLWriteResGroup83], (instregex "OR(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002018def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm")>;
2019def: InstRW<[SKLWriteResGroup83], (instregex "PUSH(16|32|64)rmm")>;
Craig Topper13a16502018-03-19 00:56:09 +00002020def: InstRW<[SKLWriteResGroup83], (instregex "SUB(8|16|32|64)mi")>;
2021def: InstRW<[SKLWriteResGroup83], (instregex "SUB(8|16|32|64)mr")>;
2022def: InstRW<[SKLWriteResGroup83], (instregex "XOR(8|16|32|64)mi")>;
2023def: InstRW<[SKLWriteResGroup83], (instregex "XOR(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002024
2025def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002026 let Latency = 6;
2027 let NumMicroOps = 6;
2028 let ResourceCycles = [1,5];
2029}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002030def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002031
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002032def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
2033 let Latency = 7;
2034 let NumMicroOps = 1;
2035 let ResourceCycles = [1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002036}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002037def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m")>;
2038def: InstRW<[SKLWriteResGroup85], (instregex "LD_F64m")>;
2039def: InstRW<[SKLWriteResGroup85], (instregex "LD_F80m")>;
2040def: InstRW<[SKLWriteResGroup85], (instregex "VBROADCASTF128")>;
2041def: InstRW<[SKLWriteResGroup85], (instregex "VBROADCASTI128")>;
2042def: InstRW<[SKLWriteResGroup85], (instregex "VBROADCASTSDYrm")>;
2043def: InstRW<[SKLWriteResGroup85], (instregex "VBROADCASTSSYrm")>;
2044def: InstRW<[SKLWriteResGroup85], (instregex "VLDDQUYrm")>;
2045def: InstRW<[SKLWriteResGroup85], (instregex "VMOVAPDYrm")>;
2046def: InstRW<[SKLWriteResGroup85], (instregex "VMOVAPSYrm")>;
2047def: InstRW<[SKLWriteResGroup85], (instregex "VMOVDDUPYrm")>;
2048def: InstRW<[SKLWriteResGroup85], (instregex "VMOVDQAYrm")>;
2049def: InstRW<[SKLWriteResGroup85], (instregex "VMOVDQUYrm")>;
2050def: InstRW<[SKLWriteResGroup85], (instregex "VMOVNTDQAYrm")>;
2051def: InstRW<[SKLWriteResGroup85], (instregex "VMOVSHDUPYrm")>;
2052def: InstRW<[SKLWriteResGroup85], (instregex "VMOVSLDUPYrm")>;
2053def: InstRW<[SKLWriteResGroup85], (instregex "VMOVUPDYrm")>;
2054def: InstRW<[SKLWriteResGroup85], (instregex "VMOVUPSYrm")>;
2055def: InstRW<[SKLWriteResGroup85], (instregex "VPBROADCASTDYrm")>;
2056def: InstRW<[SKLWriteResGroup85], (instregex "VPBROADCASTQYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002057
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002058def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002059 let Latency = 7;
2060 let NumMicroOps = 2;
2061 let ResourceCycles = [1,1];
2062}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002063def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002064
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002065def SKLWriteResGroup87 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002066 let Latency = 7;
2067 let NumMicroOps = 2;
2068 let ResourceCycles = [1,1];
2069}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002070def: InstRW<[SKLWriteResGroup87], (instregex "COMISDrm")>;
2071def: InstRW<[SKLWriteResGroup87], (instregex "COMISSrm")>;
2072def: InstRW<[SKLWriteResGroup87], (instregex "UCOMISDrm")>;
2073def: InstRW<[SKLWriteResGroup87], (instregex "UCOMISSrm")>;
2074def: InstRW<[SKLWriteResGroup87], (instregex "VCOMISDrm")>;
2075def: InstRW<[SKLWriteResGroup87], (instregex "VCOMISSrm")>;
2076def: InstRW<[SKLWriteResGroup87], (instregex "VUCOMISDrm")>;
2077def: InstRW<[SKLWriteResGroup87], (instregex "VUCOMISSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002078
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002079def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2080 let Latency = 7;
2081 let NumMicroOps = 2;
2082 let ResourceCycles = [1,1];
2083}
2084def: InstRW<[SKLWriteResGroup88], (instregex "INSERTPSrm")>;
2085def: InstRW<[SKLWriteResGroup88], (instregex "PACKSSDWrm")>;
2086def: InstRW<[SKLWriteResGroup88], (instregex "PACKSSWBrm")>;
2087def: InstRW<[SKLWriteResGroup88], (instregex "PACKUSDWrm")>;
2088def: InstRW<[SKLWriteResGroup88], (instregex "PACKUSWBrm")>;
2089def: InstRW<[SKLWriteResGroup88], (instregex "PALIGNRrmi")>;
2090def: InstRW<[SKLWriteResGroup88], (instregex "PBLENDWrmi")>;
2091def: InstRW<[SKLWriteResGroup88], (instregex "PSHUFBrm")>;
2092def: InstRW<[SKLWriteResGroup88], (instregex "PSHUFDmi")>;
2093def: InstRW<[SKLWriteResGroup88], (instregex "PSHUFHWmi")>;
2094def: InstRW<[SKLWriteResGroup88], (instregex "PSHUFLWmi")>;
2095def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKHBWrm")>;
2096def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKHDQrm")>;
2097def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKHQDQrm")>;
2098def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKHWDrm")>;
2099def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKLBWrm")>;
2100def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKLDQrm")>;
2101def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKLQDQrm")>;
2102def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKLWDrm")>;
2103def: InstRW<[SKLWriteResGroup88], (instregex "SHUFPDrmi")>;
2104def: InstRW<[SKLWriteResGroup88], (instregex "SHUFPSrmi")>;
2105def: InstRW<[SKLWriteResGroup88], (instregex "UNPCKHPDrm")>;
2106def: InstRW<[SKLWriteResGroup88], (instregex "UNPCKHPSrm")>;
2107def: InstRW<[SKLWriteResGroup88], (instregex "UNPCKLPDrm")>;
2108def: InstRW<[SKLWriteResGroup88], (instregex "UNPCKLPSrm")>;
2109def: InstRW<[SKLWriteResGroup88], (instregex "VINSERTPSrm")>;
2110def: InstRW<[SKLWriteResGroup88], (instregex "VPACKSSDWrm")>;
2111def: InstRW<[SKLWriteResGroup88], (instregex "VPACKSSWBrm")>;
2112def: InstRW<[SKLWriteResGroup88], (instregex "VPACKUSDWrm")>;
2113def: InstRW<[SKLWriteResGroup88], (instregex "VPACKUSWBrm")>;
2114def: InstRW<[SKLWriteResGroup88], (instregex "VPALIGNRrmi")>;
2115def: InstRW<[SKLWriteResGroup88], (instregex "VPBLENDWrmi")>;
2116def: InstRW<[SKLWriteResGroup88], (instregex "VPBROADCASTBrm")>;
2117def: InstRW<[SKLWriteResGroup88], (instregex "VPBROADCASTWrm")>;
2118def: InstRW<[SKLWriteResGroup88], (instregex "VPERMILPDmi")>;
2119def: InstRW<[SKLWriteResGroup88], (instregex "VPERMILPDrm")>;
2120def: InstRW<[SKLWriteResGroup88], (instregex "VPERMILPSmi")>;
2121def: InstRW<[SKLWriteResGroup88], (instregex "VPERMILPSrm")>;
2122def: InstRW<[SKLWriteResGroup88], (instregex "VPSHUFBrm")>;
2123def: InstRW<[SKLWriteResGroup88], (instregex "VPSHUFDmi")>;
2124def: InstRW<[SKLWriteResGroup88], (instregex "VPSHUFHWmi")>;
2125def: InstRW<[SKLWriteResGroup88], (instregex "VPSHUFLWmi")>;
2126def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKHBWrm")>;
2127def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKHDQrm")>;
2128def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKHQDQrm")>;
2129def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKHWDrm")>;
2130def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKLBWrm")>;
2131def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKLDQrm")>;
2132def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKLQDQrm")>;
2133def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKLWDrm")>;
2134def: InstRW<[SKLWriteResGroup88], (instregex "VSHUFPDrmi")>;
2135def: InstRW<[SKLWriteResGroup88], (instregex "VSHUFPSrmi")>;
2136def: InstRW<[SKLWriteResGroup88], (instregex "VUNPCKHPDrm")>;
2137def: InstRW<[SKLWriteResGroup88], (instregex "VUNPCKHPSrm")>;
2138def: InstRW<[SKLWriteResGroup88], (instregex "VUNPCKLPDrm")>;
2139def: InstRW<[SKLWriteResGroup88], (instregex "VUNPCKLPSrm")>;
2140
2141def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort015]> {
2142 let Latency = 7;
2143 let NumMicroOps = 2;
2144 let ResourceCycles = [1,1];
2145}
2146def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr")>;
2147def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2PSYrr")>;
2148def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPH2PSYrr")>;
2149def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPS2PDYrr")>;
2150def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPS2PHYrr")>;
2151def: InstRW<[SKLWriteResGroup89], (instregex "VCVTTPD2DQYrr")>;
2152
2153def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2154 let Latency = 7;
2155 let NumMicroOps = 2;
2156 let ResourceCycles = [1,1];
2157}
2158def: InstRW<[SKLWriteResGroup90], (instregex "PABSBrm")>;
2159def: InstRW<[SKLWriteResGroup90], (instregex "PABSDrm")>;
2160def: InstRW<[SKLWriteResGroup90], (instregex "PABSWrm")>;
2161def: InstRW<[SKLWriteResGroup90], (instregex "PADDSBrm")>;
2162def: InstRW<[SKLWriteResGroup90], (instregex "PADDSWrm")>;
2163def: InstRW<[SKLWriteResGroup90], (instregex "PADDUSBrm")>;
2164def: InstRW<[SKLWriteResGroup90], (instregex "PADDUSWrm")>;
2165def: InstRW<[SKLWriteResGroup90], (instregex "PAVGBrm")>;
2166def: InstRW<[SKLWriteResGroup90], (instregex "PAVGWrm")>;
2167def: InstRW<[SKLWriteResGroup90], (instregex "PCMPEQBrm")>;
2168def: InstRW<[SKLWriteResGroup90], (instregex "PCMPEQDrm")>;
2169def: InstRW<[SKLWriteResGroup90], (instregex "PCMPEQQrm")>;
2170def: InstRW<[SKLWriteResGroup90], (instregex "PCMPEQWrm")>;
2171def: InstRW<[SKLWriteResGroup90], (instregex "PCMPGTBrm")>;
2172def: InstRW<[SKLWriteResGroup90], (instregex "PCMPGTDrm")>;
2173def: InstRW<[SKLWriteResGroup90], (instregex "PCMPGTWrm")>;
2174def: InstRW<[SKLWriteResGroup90], (instregex "PMAXSBrm")>;
2175def: InstRW<[SKLWriteResGroup90], (instregex "PMAXSDrm")>;
2176def: InstRW<[SKLWriteResGroup90], (instregex "PMAXSWrm")>;
2177def: InstRW<[SKLWriteResGroup90], (instregex "PMAXUBrm")>;
2178def: InstRW<[SKLWriteResGroup90], (instregex "PMAXUDrm")>;
2179def: InstRW<[SKLWriteResGroup90], (instregex "PMAXUWrm")>;
2180def: InstRW<[SKLWriteResGroup90], (instregex "PMINSBrm")>;
2181def: InstRW<[SKLWriteResGroup90], (instregex "PMINSDrm")>;
2182def: InstRW<[SKLWriteResGroup90], (instregex "PMINSWrm")>;
2183def: InstRW<[SKLWriteResGroup90], (instregex "PMINUBrm")>;
2184def: InstRW<[SKLWriteResGroup90], (instregex "PMINUDrm")>;
2185def: InstRW<[SKLWriteResGroup90], (instregex "PMINUWrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002186def: InstRW<[SKLWriteResGroup90], (instregex "PSIGNBrm")>;
2187def: InstRW<[SKLWriteResGroup90], (instregex "PSIGNDrm")>;
2188def: InstRW<[SKLWriteResGroup90], (instregex "PSIGNWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002189def: InstRW<[SKLWriteResGroup90], (instregex "PSLLDrm")>;
2190def: InstRW<[SKLWriteResGroup90], (instregex "PSLLQrm")>;
2191def: InstRW<[SKLWriteResGroup90], (instregex "PSLLWrm")>;
2192def: InstRW<[SKLWriteResGroup90], (instregex "PSRADrm")>;
2193def: InstRW<[SKLWriteResGroup90], (instregex "PSRAWrm")>;
2194def: InstRW<[SKLWriteResGroup90], (instregex "PSRLDrm")>;
2195def: InstRW<[SKLWriteResGroup90], (instregex "PSRLQrm")>;
2196def: InstRW<[SKLWriteResGroup90], (instregex "PSRLWrm")>;
2197def: InstRW<[SKLWriteResGroup90], (instregex "PSUBSBrm")>;
2198def: InstRW<[SKLWriteResGroup90], (instregex "PSUBSWrm")>;
2199def: InstRW<[SKLWriteResGroup90], (instregex "PSUBUSBrm")>;
2200def: InstRW<[SKLWriteResGroup90], (instregex "PSUBUSWrm")>;
2201def: InstRW<[SKLWriteResGroup90], (instregex "VPABSBrm")>;
2202def: InstRW<[SKLWriteResGroup90], (instregex "VPABSDrm")>;
2203def: InstRW<[SKLWriteResGroup90], (instregex "VPABSWrm")>;
2204def: InstRW<[SKLWriteResGroup90], (instregex "VPADDSBrm")>;
2205def: InstRW<[SKLWriteResGroup90], (instregex "VPADDSWrm")>;
2206def: InstRW<[SKLWriteResGroup90], (instregex "VPADDUSBrm")>;
2207def: InstRW<[SKLWriteResGroup90], (instregex "VPADDUSWrm")>;
2208def: InstRW<[SKLWriteResGroup90], (instregex "VPAVGBrm")>;
2209def: InstRW<[SKLWriteResGroup90], (instregex "VPAVGWrm")>;
2210def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPEQBrm")>;
2211def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPEQDrm")>;
2212def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPEQQrm")>;
2213def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPEQWrm")>;
2214def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPGTBrm")>;
2215def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPGTDrm")>;
2216def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPGTWrm")>;
2217def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXSBrm")>;
2218def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXSDrm")>;
2219def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXSWrm")>;
2220def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXUBrm")>;
2221def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXUDrm")>;
2222def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXUWrm")>;
2223def: InstRW<[SKLWriteResGroup90], (instregex "VPMINSBrm")>;
2224def: InstRW<[SKLWriteResGroup90], (instregex "VPMINSDrm")>;
2225def: InstRW<[SKLWriteResGroup90], (instregex "VPMINSWrm")>;
2226def: InstRW<[SKLWriteResGroup90], (instregex "VPMINUBrm")>;
2227def: InstRW<[SKLWriteResGroup90], (instregex "VPMINUDrm")>;
2228def: InstRW<[SKLWriteResGroup90], (instregex "VPMINUWrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002229def: InstRW<[SKLWriteResGroup90], (instregex "VPSIGNBrm")>;
2230def: InstRW<[SKLWriteResGroup90], (instregex "VPSIGNDrm")>;
2231def: InstRW<[SKLWriteResGroup90], (instregex "VPSIGNWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002232def: InstRW<[SKLWriteResGroup90], (instregex "VPSLLDrm")>;
2233def: InstRW<[SKLWriteResGroup90], (instregex "VPSLLQrm")>;
2234def: InstRW<[SKLWriteResGroup90], (instregex "VPSLLVDrm")>;
2235def: InstRW<[SKLWriteResGroup90], (instregex "VPSLLVQrm")>;
2236def: InstRW<[SKLWriteResGroup90], (instregex "VPSLLWrm")>;
2237def: InstRW<[SKLWriteResGroup90], (instregex "VPSRADrm")>;
2238def: InstRW<[SKLWriteResGroup90], (instregex "VPSRAVDrm")>;
2239def: InstRW<[SKLWriteResGroup90], (instregex "VPSRAWrm")>;
2240def: InstRW<[SKLWriteResGroup90], (instregex "VPSRLDrm")>;
2241def: InstRW<[SKLWriteResGroup90], (instregex "VPSRLQrm")>;
2242def: InstRW<[SKLWriteResGroup90], (instregex "VPSRLVDrm")>;
2243def: InstRW<[SKLWriteResGroup90], (instregex "VPSRLVQrm")>;
2244def: InstRW<[SKLWriteResGroup90], (instregex "VPSRLWrm")>;
2245def: InstRW<[SKLWriteResGroup90], (instregex "VPSUBSBrm")>;
2246def: InstRW<[SKLWriteResGroup90], (instregex "VPSUBSWrm")>;
2247def: InstRW<[SKLWriteResGroup90], (instregex "VPSUBUSBrm")>;
2248def: InstRW<[SKLWriteResGroup90], (instregex "VPSUBUSWrm")>;
2249
2250def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2251 let Latency = 7;
2252 let NumMicroOps = 2;
2253 let ResourceCycles = [1,1];
2254}
2255def: InstRW<[SKLWriteResGroup91], (instregex "ANDNPDrm")>;
2256def: InstRW<[SKLWriteResGroup91], (instregex "ANDNPSrm")>;
2257def: InstRW<[SKLWriteResGroup91], (instregex "ANDPDrm")>;
2258def: InstRW<[SKLWriteResGroup91], (instregex "ANDPSrm")>;
2259def: InstRW<[SKLWriteResGroup91], (instregex "BLENDPDrmi")>;
2260def: InstRW<[SKLWriteResGroup91], (instregex "BLENDPSrmi")>;
2261def: InstRW<[SKLWriteResGroup91], (instregex "ORPDrm")>;
2262def: InstRW<[SKLWriteResGroup91], (instregex "ORPSrm")>;
2263def: InstRW<[SKLWriteResGroup91], (instregex "PADDBrm")>;
2264def: InstRW<[SKLWriteResGroup91], (instregex "PADDDrm")>;
2265def: InstRW<[SKLWriteResGroup91], (instregex "PADDQrm")>;
2266def: InstRW<[SKLWriteResGroup91], (instregex "PADDWrm")>;
2267def: InstRW<[SKLWriteResGroup91], (instregex "PANDNrm")>;
2268def: InstRW<[SKLWriteResGroup91], (instregex "PANDrm")>;
2269def: InstRW<[SKLWriteResGroup91], (instregex "PORrm")>;
2270def: InstRW<[SKLWriteResGroup91], (instregex "PSUBBrm")>;
2271def: InstRW<[SKLWriteResGroup91], (instregex "PSUBDrm")>;
2272def: InstRW<[SKLWriteResGroup91], (instregex "PSUBQrm")>;
2273def: InstRW<[SKLWriteResGroup91], (instregex "PSUBWrm")>;
2274def: InstRW<[SKLWriteResGroup91], (instregex "PXORrm")>;
2275def: InstRW<[SKLWriteResGroup91], (instregex "VANDNPDrm")>;
2276def: InstRW<[SKLWriteResGroup91], (instregex "VANDNPSrm")>;
2277def: InstRW<[SKLWriteResGroup91], (instregex "VANDPDrm")>;
2278def: InstRW<[SKLWriteResGroup91], (instregex "VANDPSrm")>;
2279def: InstRW<[SKLWriteResGroup91], (instregex "VBLENDPDrmi")>;
2280def: InstRW<[SKLWriteResGroup91], (instregex "VBLENDPSrmi")>;
2281def: InstRW<[SKLWriteResGroup91], (instregex "VINSERTF128rm")>;
2282def: InstRW<[SKLWriteResGroup91], (instregex "VINSERTI128rm")>;
2283def: InstRW<[SKLWriteResGroup91], (instregex "VMASKMOVPDrm")>;
2284def: InstRW<[SKLWriteResGroup91], (instregex "VMASKMOVPSrm")>;
2285def: InstRW<[SKLWriteResGroup91], (instregex "VORPDrm")>;
2286def: InstRW<[SKLWriteResGroup91], (instregex "VORPSrm")>;
2287def: InstRW<[SKLWriteResGroup91], (instregex "VPADDBrm")>;
2288def: InstRW<[SKLWriteResGroup91], (instregex "VPADDDrm")>;
2289def: InstRW<[SKLWriteResGroup91], (instregex "VPADDQrm")>;
2290def: InstRW<[SKLWriteResGroup91], (instregex "VPADDWrm")>;
2291def: InstRW<[SKLWriteResGroup91], (instregex "VPANDNrm")>;
2292def: InstRW<[SKLWriteResGroup91], (instregex "VPANDrm")>;
2293def: InstRW<[SKLWriteResGroup91], (instregex "VPBLENDDrmi")>;
2294def: InstRW<[SKLWriteResGroup91], (instregex "VPMASKMOVDrm")>;
2295def: InstRW<[SKLWriteResGroup91], (instregex "VPMASKMOVQrm")>;
2296def: InstRW<[SKLWriteResGroup91], (instregex "VPORrm")>;
2297def: InstRW<[SKLWriteResGroup91], (instregex "VPSUBBrm")>;
2298def: InstRW<[SKLWriteResGroup91], (instregex "VPSUBDrm")>;
2299def: InstRW<[SKLWriteResGroup91], (instregex "VPSUBQrm")>;
2300def: InstRW<[SKLWriteResGroup91], (instregex "VPSUBWrm")>;
2301def: InstRW<[SKLWriteResGroup91], (instregex "VPXORrm")>;
2302def: InstRW<[SKLWriteResGroup91], (instregex "VXORPDrm")>;
2303def: InstRW<[SKLWriteResGroup91], (instregex "VXORPSrm")>;
2304def: InstRW<[SKLWriteResGroup91], (instregex "XORPDrm")>;
2305def: InstRW<[SKLWriteResGroup91], (instregex "XORPSrm")>;
2306
2307def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2308 let Latency = 7;
2309 let NumMicroOps = 3;
2310 let ResourceCycles = [2,1];
2311}
2312def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm")>;
2313def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSWBirm")>;
2314def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKUSWBirm")>;
2315
2316def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
2317 let Latency = 7;
2318 let NumMicroOps = 3;
2319 let ResourceCycles = [1,2];
2320}
Craig Topperf4cd9082018-01-19 05:47:32 +00002321def: InstRW<[SKLWriteResGroup93], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002322
2323def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
2324 let Latency = 7;
2325 let NumMicroOps = 3;
2326 let ResourceCycles = [1,2];
2327}
2328def: InstRW<[SKLWriteResGroup94], (instregex "LEAVE64")>;
2329def: InstRW<[SKLWriteResGroup94], (instregex "SCASB")>;
2330def: InstRW<[SKLWriteResGroup94], (instregex "SCASL")>;
2331def: InstRW<[SKLWriteResGroup94], (instregex "SCASQ")>;
2332def: InstRW<[SKLWriteResGroup94], (instregex "SCASW")>;
2333
2334def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002335 let Latency = 7;
2336 let NumMicroOps = 3;
2337 let ResourceCycles = [1,1,1];
2338}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002339def: InstRW<[SKLWriteResGroup95], (instregex "CVTTSS2SI64rr")>;
2340def: InstRW<[SKLWriteResGroup95], (instregex "CVTTSS2SIrr")>;
2341def: InstRW<[SKLWriteResGroup95], (instregex "VCVTTSS2SI64rr")>;
2342def: InstRW<[SKLWriteResGroup95], (instregex "VCVTTSS2SIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002343
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002344def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002345 let Latency = 7;
2346 let NumMicroOps = 3;
2347 let ResourceCycles = [1,1,1];
2348}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002349def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002350
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002351def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002352 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002353 let NumMicroOps = 3;
2354 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002355}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002356def: InstRW<[SKLWriteResGroup97], (instregex "LDMXCSR")>;
2357def: InstRW<[SKLWriteResGroup97], (instregex "VLDMXCSR")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002358
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002359def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002360 let Latency = 7;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002361 let NumMicroOps = 3;
2362 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002363}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002364def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ")>;
2365def: InstRW<[SKLWriteResGroup98], (instregex "RETQ")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002366
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002367def SKLWriteResGroup99 : SchedWriteRes<[SKLPort23,SKLPort06,SKLPort15]> {
2368 let Latency = 7;
2369 let NumMicroOps = 3;
2370 let ResourceCycles = [1,1,1];
2371}
Craig Toppera42a2ba2017-12-16 18:35:31 +00002372def: InstRW<[SKLWriteResGroup99], (instregex "BEXTR(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002373
2374def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2375 let Latency = 7;
2376 let NumMicroOps = 5;
2377 let ResourceCycles = [1,1,1,2];
2378}
Craig Topper13a16502018-03-19 00:56:09 +00002379def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)m1")>;
2380def: InstRW<[SKLWriteResGroup100], (instregex "ROL(8|16|32|64)mi")>;
2381def: InstRW<[SKLWriteResGroup100], (instregex "ROR(8|16|32|64)m1")>;
2382def: InstRW<[SKLWriteResGroup100], (instregex "ROR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002383
2384def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
2385 let Latency = 7;
2386 let NumMicroOps = 5;
2387 let ResourceCycles = [1,1,1,2];
2388}
Craig Topper13a16502018-03-19 00:56:09 +00002389def: InstRW<[SKLWriteResGroup101], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002390
2391def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2392 let Latency = 7;
2393 let NumMicroOps = 5;
2394 let ResourceCycles = [1,1,1,1,1];
2395}
2396def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m")>;
2397def: InstRW<[SKLWriteResGroup102], (instregex "FARCALL64")>;
2398
2399def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002400 let Latency = 7;
2401 let NumMicroOps = 7;
2402 let ResourceCycles = [1,3,1,2];
2403}
Craig Topper2d451e72018-03-18 08:38:06 +00002404def: InstRW<[SKLWriteResGroup103], (instrs LOOP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002405
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002406def SKLWriteResGroup104 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002407 let Latency = 8;
2408 let NumMicroOps = 2;
2409 let ResourceCycles = [2];
2410}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002411def: InstRW<[SKLWriteResGroup104], (instregex "AESIMCrr")>;
2412def: InstRW<[SKLWriteResGroup104], (instregex "VAESIMCrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002413
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002414def SKLWriteResGroup105 : SchedWriteRes<[SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002415 let Latency = 8;
2416 let NumMicroOps = 2;
2417 let ResourceCycles = [2];
2418}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002419def: InstRW<[SKLWriteResGroup105], (instregex "PMULLDrr")>;
2420def: InstRW<[SKLWriteResGroup105], (instregex "ROUNDPDr")>;
2421def: InstRW<[SKLWriteResGroup105], (instregex "ROUNDPSr")>;
2422def: InstRW<[SKLWriteResGroup105], (instregex "ROUNDSDr")>;
2423def: InstRW<[SKLWriteResGroup105], (instregex "ROUNDSSr")>;
2424def: InstRW<[SKLWriteResGroup105], (instregex "VPMULLDYrr")>;
2425def: InstRW<[SKLWriteResGroup105], (instregex "VPMULLDrr")>;
2426def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDPDr")>;
2427def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDPSr")>;
2428def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDSDr")>;
2429def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDSSr")>;
2430def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDYPDr")>;
2431def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDYPSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002432
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002433def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002434 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002435 let NumMicroOps = 2;
2436 let ResourceCycles = [1,1];
2437}
2438def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm")>;
2439def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPSrm")>;
2440
2441def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
2442 let Latency = 8;
2443 let NumMicroOps = 2;
2444 let ResourceCycles = [1,1];
2445}
2446def: InstRW<[SKLWriteResGroup107], (instregex "BSF(16|32|64)rm")>;
2447def: InstRW<[SKLWriteResGroup107], (instregex "BSR(16|32|64)rm")>;
Craig Topperb369cdb2018-01-25 06:57:42 +00002448def: InstRW<[SKLWriteResGroup107], (instrs IMUL64m)>;
2449def: InstRW<[SKLWriteResGroup107], (instrs IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
2450def: InstRW<[SKLWriteResGroup107], (instrs IMUL8m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002451def: InstRW<[SKLWriteResGroup107], (instregex "LZCNT(16|32|64)rm")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002452def: InstRW<[SKLWriteResGroup107], (instrs MUL64m)>;
Craig Topper13a16502018-03-19 00:56:09 +00002453def: InstRW<[SKLWriteResGroup107], (instrs MUL8m)>;
Craig Toppera42a2ba2017-12-16 18:35:31 +00002454def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm")>;
2455def: InstRW<[SKLWriteResGroup107], (instregex "PEXT(32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002456def: InstRW<[SKLWriteResGroup107], (instregex "POPCNT(16|32|64)rm")>;
2457def: InstRW<[SKLWriteResGroup107], (instregex "TZCNT(16|32|64)rm")>;
2458
2459def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00002460 let Latency = 8;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002461 let NumMicroOps = 3;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002462 let ResourceCycles = [1,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002463}
Craig Topperb369cdb2018-01-25 06:57:42 +00002464def: InstRW<[SKLWriteResGroup107_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002465
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002466def SKLWriteResGroup107_16_2 : 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 = 5;
2469}
Craig Topperb369cdb2018-01-25 06:57:42 +00002470def: InstRW<[SKLWriteResGroup107_16_2], (instrs IMUL16m)>;
2471def: InstRW<[SKLWriteResGroup107_16_2], (instrs MUL16m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002472
2473def SKLWriteResGroup107_32 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
Craig Topperb369cdb2018-01-25 06:57:42 +00002474 let Latency = 8;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002475 let NumMicroOps = 3;
2476 let ResourceCycles = [1,1,1];
2477}
Craig Topperb369cdb2018-01-25 06:57:42 +00002478def: InstRW<[SKLWriteResGroup107_32], (instrs IMUL32m)>;
2479def: InstRW<[SKLWriteResGroup107_32], (instrs MUL32m)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002480
2481def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2482 let Latency = 8;
2483 let NumMicroOps = 2;
2484 let ResourceCycles = [1,1];
2485}
2486def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m")>;
2487def: InstRW<[SKLWriteResGroup108], (instregex "FCOM64m")>;
2488def: InstRW<[SKLWriteResGroup108], (instregex "FCOMP32m")>;
2489def: InstRW<[SKLWriteResGroup108], (instregex "FCOMP64m")>;
2490def: InstRW<[SKLWriteResGroup108], (instregex "MMX_PSADBWirm")>;
2491def: InstRW<[SKLWriteResGroup108], (instregex "VPACKSSDWYrm")>;
2492def: InstRW<[SKLWriteResGroup108], (instregex "VPACKSSWBYrm")>;
2493def: InstRW<[SKLWriteResGroup108], (instregex "VPACKUSDWYrm")>;
2494def: InstRW<[SKLWriteResGroup108], (instregex "VPACKUSWBYrm")>;
2495def: InstRW<[SKLWriteResGroup108], (instregex "VPALIGNRYrmi")>;
2496def: InstRW<[SKLWriteResGroup108], (instregex "VPBLENDWYrmi")>;
2497def: InstRW<[SKLWriteResGroup108], (instregex "VPBROADCASTBYrm")>;
2498def: InstRW<[SKLWriteResGroup108], (instregex "VPBROADCASTWYrm")>;
2499def: InstRW<[SKLWriteResGroup108], (instregex "VPERMILPDYmi")>;
2500def: InstRW<[SKLWriteResGroup108], (instregex "VPERMILPDYrm")>;
2501def: InstRW<[SKLWriteResGroup108], (instregex "VPERMILPSYmi")>;
2502def: InstRW<[SKLWriteResGroup108], (instregex "VPERMILPSYrm")>;
2503def: InstRW<[SKLWriteResGroup108], (instregex "VPMOVSXBDYrm")>;
2504def: InstRW<[SKLWriteResGroup108], (instregex "VPMOVSXBQYrm")>;
2505def: InstRW<[SKLWriteResGroup108], (instregex "VPMOVSXWQYrm")>;
2506def: InstRW<[SKLWriteResGroup108], (instregex "VPSHUFBYrm")>;
2507def: InstRW<[SKLWriteResGroup108], (instregex "VPSHUFDYmi")>;
2508def: InstRW<[SKLWriteResGroup108], (instregex "VPSHUFHWYmi")>;
2509def: InstRW<[SKLWriteResGroup108], (instregex "VPSHUFLWYmi")>;
2510def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKHBWYrm")>;
2511def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKHDQYrm")>;
2512def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKHQDQYrm")>;
2513def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKHWDYrm")>;
2514def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKLBWYrm")>;
2515def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKLDQYrm")>;
2516def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKLQDQYrm")>;
2517def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKLWDYrm")>;
2518def: InstRW<[SKLWriteResGroup108], (instregex "VSHUFPDYrmi")>;
2519def: InstRW<[SKLWriteResGroup108], (instregex "VSHUFPSYrmi")>;
2520def: InstRW<[SKLWriteResGroup108], (instregex "VUNPCKHPDYrm")>;
2521def: InstRW<[SKLWriteResGroup108], (instregex "VUNPCKHPSYrm")>;
2522def: InstRW<[SKLWriteResGroup108], (instregex "VUNPCKLPDYrm")>;
2523def: InstRW<[SKLWriteResGroup108], (instregex "VUNPCKLPSYrm")>;
2524
2525def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2526 let Latency = 8;
2527 let NumMicroOps = 2;
2528 let ResourceCycles = [1,1];
2529}
2530def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm")>;
2531def: InstRW<[SKLWriteResGroup109], (instregex "VPABSDYrm")>;
2532def: InstRW<[SKLWriteResGroup109], (instregex "VPABSWYrm")>;
2533def: InstRW<[SKLWriteResGroup109], (instregex "VPADDSBYrm")>;
2534def: InstRW<[SKLWriteResGroup109], (instregex "VPADDSWYrm")>;
2535def: InstRW<[SKLWriteResGroup109], (instregex "VPADDUSBYrm")>;
2536def: InstRW<[SKLWriteResGroup109], (instregex "VPADDUSWYrm")>;
2537def: InstRW<[SKLWriteResGroup109], (instregex "VPAVGBYrm")>;
2538def: InstRW<[SKLWriteResGroup109], (instregex "VPAVGWYrm")>;
2539def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPEQBYrm")>;
2540def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPEQDYrm")>;
2541def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPEQQYrm")>;
2542def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPEQWYrm")>;
2543def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPGTBYrm")>;
2544def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPGTDYrm")>;
2545def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPGTWYrm")>;
2546def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXSBYrm")>;
2547def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXSDYrm")>;
2548def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXSWYrm")>;
2549def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXUBYrm")>;
2550def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXUDYrm")>;
2551def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXUWYrm")>;
2552def: InstRW<[SKLWriteResGroup109], (instregex "VPMINSBYrm")>;
2553def: InstRW<[SKLWriteResGroup109], (instregex "VPMINSDYrm")>;
2554def: InstRW<[SKLWriteResGroup109], (instregex "VPMINSWYrm")>;
2555def: InstRW<[SKLWriteResGroup109], (instregex "VPMINUBYrm")>;
2556def: InstRW<[SKLWriteResGroup109], (instregex "VPMINUDYrm")>;
2557def: InstRW<[SKLWriteResGroup109], (instregex "VPMINUWYrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002558def: InstRW<[SKLWriteResGroup109], (instregex "VPSIGNBYrm")>;
2559def: InstRW<[SKLWriteResGroup109], (instregex "VPSIGNDYrm")>;
2560def: InstRW<[SKLWriteResGroup109], (instregex "VPSIGNWYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002561def: InstRW<[SKLWriteResGroup109], (instregex "VPSLLDYrm")>;
2562def: InstRW<[SKLWriteResGroup109], (instregex "VPSLLQYrm")>;
2563def: InstRW<[SKLWriteResGroup109], (instregex "VPSLLVDYrm")>;
2564def: InstRW<[SKLWriteResGroup109], (instregex "VPSLLVQYrm")>;
2565def: InstRW<[SKLWriteResGroup109], (instregex "VPSLLWYrm")>;
2566def: InstRW<[SKLWriteResGroup109], (instregex "VPSRADYrm")>;
2567def: InstRW<[SKLWriteResGroup109], (instregex "VPSRAVDYrm")>;
2568def: InstRW<[SKLWriteResGroup109], (instregex "VPSRAWYrm")>;
2569def: InstRW<[SKLWriteResGroup109], (instregex "VPSRLDYrm")>;
2570def: InstRW<[SKLWriteResGroup109], (instregex "VPSRLQYrm")>;
2571def: InstRW<[SKLWriteResGroup109], (instregex "VPSRLVDYrm")>;
2572def: InstRW<[SKLWriteResGroup109], (instregex "VPSRLVQYrm")>;
2573def: InstRW<[SKLWriteResGroup109], (instregex "VPSRLWYrm")>;
2574def: InstRW<[SKLWriteResGroup109], (instregex "VPSUBSBYrm")>;
2575def: InstRW<[SKLWriteResGroup109], (instregex "VPSUBSWYrm")>;
2576def: InstRW<[SKLWriteResGroup109], (instregex "VPSUBUSBYrm")>;
2577def: InstRW<[SKLWriteResGroup109], (instregex "VPSUBUSWYrm")>;
2578
2579def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2580 let Latency = 8;
2581 let NumMicroOps = 2;
2582 let ResourceCycles = [1,1];
2583}
2584def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm")>;
2585def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPSYrm")>;
2586def: InstRW<[SKLWriteResGroup110], (instregex "VANDPDYrm")>;
2587def: InstRW<[SKLWriteResGroup110], (instregex "VANDPSYrm")>;
2588def: InstRW<[SKLWriteResGroup110], (instregex "VBLENDPDYrmi")>;
2589def: InstRW<[SKLWriteResGroup110], (instregex "VBLENDPSYrmi")>;
2590def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm")>;
2591def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPSYrm")>;
2592def: InstRW<[SKLWriteResGroup110], (instregex "VORPDYrm")>;
2593def: InstRW<[SKLWriteResGroup110], (instregex "VORPSYrm")>;
2594def: InstRW<[SKLWriteResGroup110], (instregex "VPADDBYrm")>;
2595def: InstRW<[SKLWriteResGroup110], (instregex "VPADDDYrm")>;
2596def: InstRW<[SKLWriteResGroup110], (instregex "VPADDQYrm")>;
2597def: InstRW<[SKLWriteResGroup110], (instregex "VPADDWYrm")>;
2598def: InstRW<[SKLWriteResGroup110], (instregex "VPANDNYrm")>;
2599def: InstRW<[SKLWriteResGroup110], (instregex "VPANDYrm")>;
2600def: InstRW<[SKLWriteResGroup110], (instregex "VPBLENDDYrmi")>;
2601def: InstRW<[SKLWriteResGroup110], (instregex "VPMASKMOVDYrm")>;
2602def: InstRW<[SKLWriteResGroup110], (instregex "VPMASKMOVQYrm")>;
2603def: InstRW<[SKLWriteResGroup110], (instregex "VPORYrm")>;
2604def: InstRW<[SKLWriteResGroup110], (instregex "VPSUBBYrm")>;
2605def: InstRW<[SKLWriteResGroup110], (instregex "VPSUBDYrm")>;
2606def: InstRW<[SKLWriteResGroup110], (instregex "VPSUBQYrm")>;
2607def: InstRW<[SKLWriteResGroup110], (instregex "VPSUBWYrm")>;
2608def: InstRW<[SKLWriteResGroup110], (instregex "VPXORYrm")>;
2609def: InstRW<[SKLWriteResGroup110], (instregex "VXORPDYrm")>;
2610def: InstRW<[SKLWriteResGroup110], (instregex "VXORPSYrm")>;
2611
2612def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002613 let Latency = 8;
2614 let NumMicroOps = 3;
2615 let ResourceCycles = [1,2];
2616}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002617def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0")>;
2618def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPSrm0")>;
2619def: InstRW<[SKLWriteResGroup111], (instregex "PBLENDVBrm0")>;
2620def: InstRW<[SKLWriteResGroup111], (instregex "VBLENDVPDrm")>;
2621def: InstRW<[SKLWriteResGroup111], (instregex "VBLENDVPSrm")>;
2622def: InstRW<[SKLWriteResGroup111], (instregex "VPBLENDVBYrm")>;
2623def: InstRW<[SKLWriteResGroup111], (instregex "VPBLENDVBrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002624
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002625def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2626 let Latency = 8;
2627 let NumMicroOps = 4;
2628 let ResourceCycles = [1,2,1];
2629}
Craig Topperdbddac02018-01-25 04:45:30 +00002630def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PHADDSWrm")>;
2631def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PHSUBSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002632
2633def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
2634 let Latency = 8;
2635 let NumMicroOps = 4;
2636 let ResourceCycles = [2,1,1];
2637}
Craig Topper066e7372018-01-25 04:45:32 +00002638def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHADDDrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002639def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHADDWrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002640def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHSUBDrm")>;
2641def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHSUBWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002642
2643def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort015]> {
2644 let Latency = 8;
2645 let NumMicroOps = 4;
2646 let ResourceCycles = [1,1,1,1];
2647}
2648def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
2649
2650def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
2651 let Latency = 8;
2652 let NumMicroOps = 5;
2653 let ResourceCycles = [1,1,3];
2654}
Craig Topper13a16502018-03-19 00:56:09 +00002655def: InstRW<[SKLWriteResGroup115], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002656
2657def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2658 let Latency = 8;
2659 let NumMicroOps = 5;
2660 let ResourceCycles = [1,1,1,2];
2661}
Craig Topper13a16502018-03-19 00:56:09 +00002662def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)m1")>;
2663def: InstRW<[SKLWriteResGroup116], (instregex "RCL(8|16|32|64)mi")>;
2664def: InstRW<[SKLWriteResGroup116], (instregex "RCR(8|16|32|64)m1")>;
2665def: InstRW<[SKLWriteResGroup116], (instregex "RCR(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002666
2667def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2668 let Latency = 8;
2669 let NumMicroOps = 6;
2670 let ResourceCycles = [1,1,1,3];
2671}
Craig Topper13a16502018-03-19 00:56:09 +00002672def: InstRW<[SKLWriteResGroup117], (instregex "ROL(8|16|32|64)mCL")>;
2673def: InstRW<[SKLWriteResGroup117], (instregex "SAR(8|16|32|64)mCL")>;
2674def: InstRW<[SKLWriteResGroup117], (instregex "SHL(8|16|32|64)mCL")>;
2675def: InstRW<[SKLWriteResGroup117], (instregex "SHR(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002676
2677def SKLWriteResGroup118 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
2678 let Latency = 8;
2679 let NumMicroOps = 6;
2680 let ResourceCycles = [1,1,1,3];
2681}
Craig Topper13a16502018-03-19 00:56:09 +00002682def: InstRW<[SKLWriteResGroup118], (instregex "ADC(8|16|32|64)mi")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002683
2684def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2685 let Latency = 8;
2686 let NumMicroOps = 6;
2687 let ResourceCycles = [1,1,1,2,1];
2688}
Craig Topper13a16502018-03-19 00:56:09 +00002689def: InstRW<[SKLWriteResGroup119], (instregex "ADC(8|16|32|64)mr")>;
2690def: InstRW<[SKLWriteResGroup119], (instregex "CMPXCHG(8|16|32|64)rm")>;
2691def: InstRW<[SKLWriteResGroup119], (instregex "SBB(8|16|32|64)mi")>;
2692def: InstRW<[SKLWriteResGroup119], (instregex "SBB(8|16|32|64)mr")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002693
2694def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2695 let Latency = 9;
2696 let NumMicroOps = 2;
2697 let ResourceCycles = [1,1];
2698}
2699def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002700def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMADDUBSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002701def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMADDWDirm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002702def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMULHRSWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002703def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMULHUWirm")>;
2704def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMULHWirm")>;
2705def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMULLWirm")>;
2706def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMULUDQirm")>;
2707def: InstRW<[SKLWriteResGroup120], (instregex "RCPSSm")>;
2708def: InstRW<[SKLWriteResGroup120], (instregex "RSQRTSSm")>;
2709def: InstRW<[SKLWriteResGroup120], (instregex "VRCPSSm")>;
2710def: InstRW<[SKLWriteResGroup120], (instregex "VRSQRTSSm")>;
2711def: InstRW<[SKLWriteResGroup120], (instregex "VTESTPDYrm")>;
2712def: InstRW<[SKLWriteResGroup120], (instregex "VTESTPSYrm")>;
2713
2714def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2715 let Latency = 9;
2716 let NumMicroOps = 2;
2717 let ResourceCycles = [1,1];
2718}
2719def: InstRW<[SKLWriteResGroup121], (instregex "PCMPGTQrm")>;
2720def: InstRW<[SKLWriteResGroup121], (instregex "PSADBWrm")>;
2721def: InstRW<[SKLWriteResGroup121], (instregex "VPCMPGTQrm")>;
2722def: InstRW<[SKLWriteResGroup121], (instregex "VPMOVSXBWYrm")>;
2723def: InstRW<[SKLWriteResGroup121], (instregex "VPMOVSXDQYrm")>;
2724def: InstRW<[SKLWriteResGroup121], (instregex "VPMOVSXWDYrm")>;
2725def: InstRW<[SKLWriteResGroup121], (instregex "VPMOVZXWDYrm")>;
2726def: InstRW<[SKLWriteResGroup121], (instregex "VPSADBWrm")>;
2727
2728def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2729 let Latency = 9;
2730 let NumMicroOps = 2;
2731 let ResourceCycles = [1,1];
2732}
2733def: InstRW<[SKLWriteResGroup122], (instregex "ADDSDrm")>;
2734def: InstRW<[SKLWriteResGroup122], (instregex "ADDSSrm")>;
2735def: InstRW<[SKLWriteResGroup122], (instregex "MULSDrm")>;
2736def: InstRW<[SKLWriteResGroup122], (instregex "MULSSrm")>;
2737def: InstRW<[SKLWriteResGroup122], (instregex "SUBSDrm")>;
2738def: InstRW<[SKLWriteResGroup122], (instregex "SUBSSrm")>;
2739def: InstRW<[SKLWriteResGroup122], (instregex "VADDSDrm")>;
2740def: InstRW<[SKLWriteResGroup122], (instregex "VADDSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00002741def: InstRW<[SKLWriteResGroup122],
2742 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002743def: InstRW<[SKLWriteResGroup122], (instregex "VMULSDrm")>;
2744def: InstRW<[SKLWriteResGroup122], (instregex "VMULSSrm")>;
2745def: InstRW<[SKLWriteResGroup122], (instregex "VSUBSDrm")>;
2746def: InstRW<[SKLWriteResGroup122], (instregex "VSUBSSrm")>;
2747
2748def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2749 let Latency = 9;
2750 let NumMicroOps = 2;
2751 let ResourceCycles = [1,1];
2752}
Craig Topper6c659102017-12-10 09:14:37 +00002753def: InstRW<[SKLWriteResGroup123], (instregex "CMPSDrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002754def: InstRW<[SKLWriteResGroup123], (instregex "CMPSSrm")>;
2755def: InstRW<[SKLWriteResGroup123], (instregex "CVTPS2PDrm")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00002756def: InstRW<[SKLWriteResGroup123], (instregex "MAX(C?)SDrm")>;
2757def: InstRW<[SKLWriteResGroup123], (instregex "MAX(C?)SSrm")>;
2758def: InstRW<[SKLWriteResGroup123], (instregex "MIN(C?)SDrm")>;
2759def: InstRW<[SKLWriteResGroup123], (instregex "MIN(C?)SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002760def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm")>;
2761def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTTPS2PIirm")>;
2762def: InstRW<[SKLWriteResGroup123], (instregex "VCMPSDrm")>;
2763def: InstRW<[SKLWriteResGroup123], (instregex "VCMPSSrm")>;
2764def: InstRW<[SKLWriteResGroup123], (instregex "VCVTPH2PSrm")>;
2765def: InstRW<[SKLWriteResGroup123], (instregex "VCVTPS2PDrm")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00002766def: InstRW<[SKLWriteResGroup123], (instregex "VMAX(C?)SDrm")>;
2767def: InstRW<[SKLWriteResGroup123], (instregex "VMAX(C?)SSrm")>;
2768def: InstRW<[SKLWriteResGroup123], (instregex "VMIN(C?)SDrm")>;
2769def: InstRW<[SKLWriteResGroup123], (instregex "VMIN(C?)SSrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002770
2771def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002772 let Latency = 9;
2773 let NumMicroOps = 3;
2774 let ResourceCycles = [1,2];
2775}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002776def: InstRW<[SKLWriteResGroup124], (instregex "DPPDrri")>;
2777def: InstRW<[SKLWriteResGroup124], (instregex "VDPPDrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002778
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002779def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2780 let Latency = 9;
2781 let NumMicroOps = 3;
2782 let ResourceCycles = [1,2];
2783}
2784def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm")>;
2785def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPSYrm")>;
2786
2787def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2788 let Latency = 9;
2789 let NumMicroOps = 3;
2790 let ResourceCycles = [1,1,1];
2791}
2792def: InstRW<[SKLWriteResGroup126], (instregex "PTESTrm")>;
2793def: InstRW<[SKLWriteResGroup126], (instregex "VPTESTrm")>;
2794
2795def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
2796 let Latency = 9;
2797 let NumMicroOps = 3;
2798 let ResourceCycles = [1,1,1];
2799}
Craig Topperb369cdb2018-01-25 06:57:42 +00002800def: InstRW<[SKLWriteResGroup127], (instrs MULX64rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002801
2802def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002803 let Latency = 9;
2804 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002805 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002806}
Craig Topperdbddac02018-01-25 04:45:30 +00002807def: InstRW<[SKLWriteResGroup128], (instregex "PHADDSWrm")>;
2808def: InstRW<[SKLWriteResGroup128], (instregex "PHSUBSWrm")>;
2809def: InstRW<[SKLWriteResGroup128], (instregex "VPHADDSWrm")>;
2810def: InstRW<[SKLWriteResGroup128], (instregex "VPHSUBSWrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002811
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002812def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2813 let Latency = 9;
2814 let NumMicroOps = 4;
2815 let ResourceCycles = [2,1,1];
2816}
2817def: InstRW<[SKLWriteResGroup129], (instregex "PHADDDrm")>;
2818def: InstRW<[SKLWriteResGroup129], (instregex "PHADDWrm")>;
2819def: InstRW<[SKLWriteResGroup129], (instregex "PHSUBDrm")>;
2820def: InstRW<[SKLWriteResGroup129], (instregex "PHSUBWrm")>;
2821def: InstRW<[SKLWriteResGroup129], (instregex "VPHADDDrm")>;
2822def: InstRW<[SKLWriteResGroup129], (instregex "VPHADDWrm")>;
2823def: InstRW<[SKLWriteResGroup129], (instregex "VPHSUBDrm")>;
2824def: InstRW<[SKLWriteResGroup129], (instregex "VPHSUBWrm")>;
2825
2826def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
2827 let Latency = 9;
2828 let NumMicroOps = 4;
2829 let ResourceCycles = [1,1,1,1];
2830}
2831def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8")>;
2832def: InstRW<[SKLWriteResGroup130], (instregex "SHRD(16|32|64)mri8")>;
2833
2834def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
2835 let Latency = 9;
2836 let NumMicroOps = 5;
2837 let ResourceCycles = [1,2,1,1];
2838}
2839def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm")>;
2840def: InstRW<[SKLWriteResGroup131], (instregex "LSL(16|32|64)rm")>;
2841
2842def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2843 let Latency = 10;
2844 let NumMicroOps = 2;
2845 let ResourceCycles = [1,1];
2846}
2847def: InstRW<[SKLWriteResGroup132], (instregex "AESDECLASTrm")>;
2848def: InstRW<[SKLWriteResGroup132], (instregex "AESDECrm")>;
2849def: InstRW<[SKLWriteResGroup132], (instregex "AESENCLASTrm")>;
2850def: InstRW<[SKLWriteResGroup132], (instregex "AESENCrm")>;
2851def: InstRW<[SKLWriteResGroup132], (instregex "RCPPSm")>;
2852def: InstRW<[SKLWriteResGroup132], (instregex "RSQRTPSm")>;
2853def: InstRW<[SKLWriteResGroup132], (instregex "VAESDECLASTrm")>;
2854def: InstRW<[SKLWriteResGroup132], (instregex "VAESDECrm")>;
2855def: InstRW<[SKLWriteResGroup132], (instregex "VAESENCLASTrm")>;
2856def: InstRW<[SKLWriteResGroup132], (instregex "VAESENCrm")>;
2857def: InstRW<[SKLWriteResGroup132], (instregex "VRCPPSm")>;
2858def: InstRW<[SKLWriteResGroup132], (instregex "VRSQRTPSm")>;
2859
2860def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2861 let Latency = 10;
2862 let NumMicroOps = 2;
2863 let ResourceCycles = [1,1];
2864}
2865def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m")>;
2866def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F64m")>;
2867def: InstRW<[SKLWriteResGroup133], (instregex "ILD_F16m")>;
2868def: InstRW<[SKLWriteResGroup133], (instregex "ILD_F32m")>;
2869def: InstRW<[SKLWriteResGroup133], (instregex "ILD_F64m")>;
2870def: InstRW<[SKLWriteResGroup133], (instregex "SUBR_F32m")>;
2871def: InstRW<[SKLWriteResGroup133], (instregex "SUBR_F64m")>;
2872def: InstRW<[SKLWriteResGroup133], (instregex "SUB_F32m")>;
2873def: InstRW<[SKLWriteResGroup133], (instregex "SUB_F64m")>;
2874def: InstRW<[SKLWriteResGroup133], (instregex "VPCMPGTQYrm")>;
2875def: InstRW<[SKLWriteResGroup133], (instregex "VPERM2F128rm")>;
2876def: InstRW<[SKLWriteResGroup133], (instregex "VPERM2I128rm")>;
2877def: InstRW<[SKLWriteResGroup133], (instregex "VPERMDYrm")>;
2878def: InstRW<[SKLWriteResGroup133], (instregex "VPERMPDYmi")>;
2879def: InstRW<[SKLWriteResGroup133], (instregex "VPERMPSYrm")>;
2880def: InstRW<[SKLWriteResGroup133], (instregex "VPERMQYmi")>;
2881def: InstRW<[SKLWriteResGroup133], (instregex "VPMOVZXBDYrm")>;
2882def: InstRW<[SKLWriteResGroup133], (instregex "VPMOVZXBQYrm")>;
2883def: InstRW<[SKLWriteResGroup133], (instregex "VPMOVZXBWYrm")>;
2884def: InstRW<[SKLWriteResGroup133], (instregex "VPMOVZXDQYrm")>;
2885def: InstRW<[SKLWriteResGroup133], (instregex "VPMOVZXWQYrm")>;
2886def: InstRW<[SKLWriteResGroup133], (instregex "VPSADBWYrm")>;
2887
2888def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2889 let Latency = 10;
2890 let NumMicroOps = 2;
2891 let ResourceCycles = [1,1];
2892}
2893def: InstRW<[SKLWriteResGroup134], (instregex "ADDPDrm")>;
2894def: InstRW<[SKLWriteResGroup134], (instregex "ADDPSrm")>;
2895def: InstRW<[SKLWriteResGroup134], (instregex "ADDSUBPDrm")>;
2896def: InstRW<[SKLWriteResGroup134], (instregex "ADDSUBPSrm")>;
2897def: InstRW<[SKLWriteResGroup134], (instregex "MULPDrm")>;
2898def: InstRW<[SKLWriteResGroup134], (instregex "MULPSrm")>;
2899def: InstRW<[SKLWriteResGroup134], (instregex "SUBPDrm")>;
2900def: InstRW<[SKLWriteResGroup134], (instregex "SUBPSrm")>;
2901def: InstRW<[SKLWriteResGroup134], (instregex "VADDPDrm")>;
2902def: InstRW<[SKLWriteResGroup134], (instregex "VADDPSrm")>;
2903def: InstRW<[SKLWriteResGroup134], (instregex "VADDSUBPDrm")>;
2904def: InstRW<[SKLWriteResGroup134], (instregex "VADDSUBPSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00002905def: InstRW<[SKLWriteResGroup134],
2906 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002907def: InstRW<[SKLWriteResGroup134], (instregex "VMULPDrm")>;
2908def: InstRW<[SKLWriteResGroup134], (instregex "VMULPSrm")>;
2909def: InstRW<[SKLWriteResGroup134], (instregex "VSUBPDrm")>;
2910def: InstRW<[SKLWriteResGroup134], (instregex "VSUBPSrm")>;
2911
2912def SKLWriteResGroup135 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2913 let Latency = 10;
2914 let NumMicroOps = 2;
2915 let ResourceCycles = [1,1];
2916}
2917def: InstRW<[SKLWriteResGroup135], (instregex "CMPPDrmi")>;
2918def: InstRW<[SKLWriteResGroup135], (instregex "CMPPSrmi")>;
2919def: InstRW<[SKLWriteResGroup135], (instregex "CVTDQ2PSrm")>;
2920def: InstRW<[SKLWriteResGroup135], (instregex "CVTPS2DQrm")>;
2921def: InstRW<[SKLWriteResGroup135], (instregex "CVTSS2SDrm")>;
2922def: InstRW<[SKLWriteResGroup135], (instregex "CVTTPS2DQrm")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00002923def: InstRW<[SKLWriteResGroup135], (instregex "MAX(C?)PDrm")>;
2924def: InstRW<[SKLWriteResGroup135], (instregex "MAX(C?)PSrm")>;
2925def: InstRW<[SKLWriteResGroup135], (instregex "MIN(C?)PDrm")>;
2926def: InstRW<[SKLWriteResGroup135], (instregex "MIN(C?)PSrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002927def: InstRW<[SKLWriteResGroup135], (instregex "PHMINPOSUWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002928def: InstRW<[SKLWriteResGroup135], (instregex "PMADDUBSWrm")>;
2929def: InstRW<[SKLWriteResGroup135], (instregex "PMADDWDrm")>;
2930def: InstRW<[SKLWriteResGroup135], (instregex "PMULDQrm")>;
2931def: InstRW<[SKLWriteResGroup135], (instregex "PMULHRSWrm")>;
2932def: InstRW<[SKLWriteResGroup135], (instregex "PMULHUWrm")>;
2933def: InstRW<[SKLWriteResGroup135], (instregex "PMULHWrm")>;
2934def: InstRW<[SKLWriteResGroup135], (instregex "PMULLWrm")>;
2935def: InstRW<[SKLWriteResGroup135], (instregex "PMULUDQrm")>;
2936def: InstRW<[SKLWriteResGroup135], (instregex "VCMPPDrmi")>;
2937def: InstRW<[SKLWriteResGroup135], (instregex "VCMPPSrmi")>;
2938def: InstRW<[SKLWriteResGroup135], (instregex "VCVTDQ2PSrm")>;
2939def: InstRW<[SKLWriteResGroup135], (instregex "VCVTPH2PSYrm")>;
2940def: InstRW<[SKLWriteResGroup135], (instregex "VCVTPS2DQrm")>;
2941def: InstRW<[SKLWriteResGroup135], (instregex "VCVTSS2SDrm")>;
2942def: InstRW<[SKLWriteResGroup135], (instregex "VCVTTPS2DQrm")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00002943def: InstRW<[SKLWriteResGroup135], (instregex "VMAX(C?)PDrm")>;
2944def: InstRW<[SKLWriteResGroup135], (instregex "VMAX(C?)PSrm")>;
2945def: InstRW<[SKLWriteResGroup135], (instregex "VMIN(C?)PDrm")>;
2946def: InstRW<[SKLWriteResGroup135], (instregex "VMIN(C?)PSrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002947def: InstRW<[SKLWriteResGroup135], (instregex "VPHMINPOSUWrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002948def: InstRW<[SKLWriteResGroup135], (instregex "VPMADDUBSWrm")>;
2949def: InstRW<[SKLWriteResGroup135], (instregex "VPMADDWDrm")>;
2950def: InstRW<[SKLWriteResGroup135], (instregex "VPMULDQrm")>;
2951def: InstRW<[SKLWriteResGroup135], (instregex "VPMULHRSWrm")>;
2952def: InstRW<[SKLWriteResGroup135], (instregex "VPMULHUWrm")>;
2953def: InstRW<[SKLWriteResGroup135], (instregex "VPMULHWrm")>;
2954def: InstRW<[SKLWriteResGroup135], (instregex "VPMULLWrm")>;
2955def: InstRW<[SKLWriteResGroup135], (instregex "VPMULUDQrm")>;
2956
2957def SKLWriteResGroup136 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002958 let Latency = 10;
2959 let NumMicroOps = 3;
2960 let ResourceCycles = [3];
2961}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002962def: InstRW<[SKLWriteResGroup136], (instregex "PCMPISTRIrr")>;
2963def: InstRW<[SKLWriteResGroup136], (instregex "PCMPISTRM128rr")>;
2964def: InstRW<[SKLWriteResGroup136], (instregex "VPCMPISTRIrr")>;
2965def: InstRW<[SKLWriteResGroup136], (instregex "VPCMPISTRM128rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002966
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002967def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2968 let Latency = 10;
2969 let NumMicroOps = 3;
2970 let ResourceCycles = [2,1];
2971}
2972def: InstRW<[SKLWriteResGroup137], (instregex "MPSADBWrmi")>;
2973def: InstRW<[SKLWriteResGroup137], (instregex "VMPSADBWrmi")>;
2974
2975def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2976 let Latency = 10;
2977 let NumMicroOps = 3;
2978 let ResourceCycles = [1,1,1];
2979}
2980def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm")>;
2981def: InstRW<[SKLWriteResGroup138], (instregex "VPTESTYrm")>;
2982
2983def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
2984 let Latency = 10;
2985 let NumMicroOps = 3;
2986 let ResourceCycles = [1,1,1];
2987}
2988def: InstRW<[SKLWriteResGroup139], (instregex "CVTSD2SSrm")>;
2989def: InstRW<[SKLWriteResGroup139], (instregex "VCVTSD2SSrm")>;
2990
2991def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002992 let Latency = 10;
2993 let NumMicroOps = 4;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002994 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002995}
Craig Topperdbddac02018-01-25 04:45:30 +00002996def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWYrm")>;
2997def: InstRW<[SKLWriteResGroup140], (instregex "VPHSUBSWYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002998
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002999def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3000 let Latency = 10;
3001 let NumMicroOps = 4;
3002 let ResourceCycles = [2,1,1];
3003}
3004def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm")>;
3005def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDWYrm")>;
3006def: InstRW<[SKLWriteResGroup141], (instregex "VPHSUBDYrm")>;
3007def: InstRW<[SKLWriteResGroup141], (instregex "VPHSUBWYrm")>;
3008
3009def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
3010 let Latency = 10;
3011 let NumMicroOps = 4;
3012 let ResourceCycles = [1,1,1,1];
3013}
Craig Topperb369cdb2018-01-25 06:57:42 +00003014def: InstRW<[SKLWriteResGroup142], (instrs MULX32rm)>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003015
3016def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3017 let Latency = 10;
3018 let NumMicroOps = 8;
3019 let ResourceCycles = [1,1,1,1,1,3];
3020}
Craig Topper13a16502018-03-19 00:56:09 +00003021def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(8|16|32|64)rm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003022
3023def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003024 let Latency = 10;
3025 let NumMicroOps = 10;
3026 let ResourceCycles = [9,1];
3027}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003028def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003029
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003030def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003031 let Latency = 11;
3032 let NumMicroOps = 1;
3033 let ResourceCycles = [1];
3034}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003035def: InstRW<[SKLWriteResGroup145], (instregex "DIVPSrr")>;
3036def: InstRW<[SKLWriteResGroup145], (instregex "DIVSSrr")>;
3037def: InstRW<[SKLWriteResGroup145], (instregex "VDIVPSYrr")>;
3038def: InstRW<[SKLWriteResGroup145], (instregex "VDIVPSrr")>;
3039def: InstRW<[SKLWriteResGroup145], (instregex "VDIVSSrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003040
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003041def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003042 let Latency = 11;
3043 let NumMicroOps = 2;
3044 let ResourceCycles = [1,1];
3045}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003046def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m")>;
3047def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F64m")>;
3048def: InstRW<[SKLWriteResGroup146], (instregex "VRCPPSYm")>;
3049def: InstRW<[SKLWriteResGroup146], (instregex "VRSQRTPSYm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003050
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003051def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
3052 let Latency = 11;
3053 let NumMicroOps = 2;
3054 let ResourceCycles = [1,1];
3055}
3056def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm")>;
3057def: InstRW<[SKLWriteResGroup147], (instregex "VADDPSYrm")>;
3058def: InstRW<[SKLWriteResGroup147], (instregex "VADDSUBPDYrm")>;
3059def: InstRW<[SKLWriteResGroup147], (instregex "VADDSUBPSYrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00003060def: InstRW<[SKLWriteResGroup147],
3061 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003062def: InstRW<[SKLWriteResGroup147], (instregex "VMULPDYrm")>;
3063def: InstRW<[SKLWriteResGroup147], (instregex "VMULPSYrm")>;
3064def: InstRW<[SKLWriteResGroup147], (instregex "VSUBPDYrm")>;
3065def: InstRW<[SKLWriteResGroup147], (instregex "VSUBPSYrm")>;
3066
3067def SKLWriteResGroup148 : SchedWriteRes<[SKLPort23,SKLPort015]> {
3068 let Latency = 11;
3069 let NumMicroOps = 2;
3070 let ResourceCycles = [1,1];
3071}
3072def: InstRW<[SKLWriteResGroup148], (instregex "VCMPPDYrmi")>;
3073def: InstRW<[SKLWriteResGroup148], (instregex "VCMPPSYrmi")>;
3074def: InstRW<[SKLWriteResGroup148], (instregex "VCVTDQ2PSYrm")>;
3075def: InstRW<[SKLWriteResGroup148], (instregex "VCVTPS2DQYrm")>;
3076def: InstRW<[SKLWriteResGroup148], (instregex "VCVTPS2PDYrm")>;
3077def: InstRW<[SKLWriteResGroup148], (instregex "VCVTTPS2DQYrm")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00003078def: InstRW<[SKLWriteResGroup148], (instregex "VMAX(C?)PDYrm")>;
3079def: InstRW<[SKLWriteResGroup148], (instregex "VMAX(C?)PSYrm")>;
3080def: InstRW<[SKLWriteResGroup148], (instregex "VMIN(C?)PDYrm")>;
3081def: InstRW<[SKLWriteResGroup148], (instregex "VMIN(C?)PSYrm")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003082def: InstRW<[SKLWriteResGroup148], (instregex "VPMADDUBSWYrm")>;
3083def: InstRW<[SKLWriteResGroup148], (instregex "VPMADDWDYrm")>;
3084def: InstRW<[SKLWriteResGroup148], (instregex "VPMULDQYrm")>;
3085def: InstRW<[SKLWriteResGroup148], (instregex "VPMULHRSWYrm")>;
3086def: InstRW<[SKLWriteResGroup148], (instregex "VPMULHUWYrm")>;
3087def: InstRW<[SKLWriteResGroup148], (instregex "VPMULHWYrm")>;
3088def: InstRW<[SKLWriteResGroup148], (instregex "VPMULLWYrm")>;
3089def: InstRW<[SKLWriteResGroup148], (instregex "VPMULUDQYrm")>;
3090
3091def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
3092 let Latency = 11;
3093 let NumMicroOps = 3;
3094 let ResourceCycles = [2,1];
3095}
3096def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m")>;
3097def: InstRW<[SKLWriteResGroup149], (instregex "FICOM32m")>;
3098def: InstRW<[SKLWriteResGroup149], (instregex "FICOMP16m")>;
3099def: InstRW<[SKLWriteResGroup149], (instregex "FICOMP32m")>;
3100def: InstRW<[SKLWriteResGroup149], (instregex "VMPSADBWYrmi")>;
3101
3102def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3103 let Latency = 11;
3104 let NumMicroOps = 3;
3105 let ResourceCycles = [1,1,1];
3106}
3107def: InstRW<[SKLWriteResGroup150], (instregex "CVTDQ2PDrm")>;
3108def: InstRW<[SKLWriteResGroup150], (instregex "VCVTDQ2PDrm")>;
3109
3110def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort015]> {
3111 let Latency = 11;
3112 let NumMicroOps = 3;
3113 let ResourceCycles = [1,1,1];
3114}
3115def: InstRW<[SKLWriteResGroup151], (instregex "CVTSD2SI64rm")>;
3116def: InstRW<[SKLWriteResGroup151], (instregex "CVTSD2SIrm")>;
3117def: InstRW<[SKLWriteResGroup151], (instregex "CVTSS2SI64rm")>;
3118def: InstRW<[SKLWriteResGroup151], (instregex "CVTSS2SIrm")>;
3119def: InstRW<[SKLWriteResGroup151], (instregex "CVTTSD2SI64rm")>;
3120def: InstRW<[SKLWriteResGroup151], (instregex "CVTTSD2SIrm")>;
3121def: InstRW<[SKLWriteResGroup151], (instregex "CVTTSS2SIrm")>;
3122def: InstRW<[SKLWriteResGroup151], (instregex "VCVTSD2SI64rm")>;
3123def: InstRW<[SKLWriteResGroup151], (instregex "VCVTSD2SIrm")>;
3124def: InstRW<[SKLWriteResGroup151], (instregex "VCVTSS2SI64rm")>;
3125def: InstRW<[SKLWriteResGroup151], (instregex "VCVTSS2SIrm")>;
3126def: InstRW<[SKLWriteResGroup151], (instregex "VCVTTSD2SI64rm")>;
3127def: InstRW<[SKLWriteResGroup151], (instregex "VCVTTSD2SIrm")>;
3128def: InstRW<[SKLWriteResGroup151], (instregex "VCVTTSS2SI64rm")>;
3129def: InstRW<[SKLWriteResGroup151], (instregex "VCVTTSS2SIrm")>;
3130
3131def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3132 let Latency = 11;
3133 let NumMicroOps = 3;
3134 let ResourceCycles = [1,1,1];
3135}
3136def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm")>;
3137def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2PSrm")>;
3138def: InstRW<[SKLWriteResGroup152], (instregex "CVTTPD2DQrm")>;
3139def: InstRW<[SKLWriteResGroup152], (instregex "MMX_CVTPD2PIirm")>;
3140def: InstRW<[SKLWriteResGroup152], (instregex "MMX_CVTTPD2PIirm")>;
3141
3142def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3143 let Latency = 11;
3144 let NumMicroOps = 6;
3145 let ResourceCycles = [1,1,1,2,1];
3146}
3147def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL")>;
3148def: InstRW<[SKLWriteResGroup153], (instregex "SHRD(16|32|64)mrCL")>;
3149
3150def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003151 let Latency = 11;
3152 let NumMicroOps = 7;
3153 let ResourceCycles = [2,3,2];
3154}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003155def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL")>;
3156def: InstRW<[SKLWriteResGroup154], (instregex "RCR(16|32|64)rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003157
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003158def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003159 let Latency = 11;
3160 let NumMicroOps = 9;
3161 let ResourceCycles = [1,5,1,2];
3162}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003163def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003164
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003165def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003166 let Latency = 11;
3167 let NumMicroOps = 11;
3168 let ResourceCycles = [2,9];
3169}
Craig Topper2d451e72018-03-18 08:38:06 +00003170def: InstRW<[SKLWriteResGroup156], (instrs LOOPE)>;
3171def: InstRW<[SKLWriteResGroup156], (instrs LOOPNE)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003172
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003173def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003174 let Latency = 12;
3175 let NumMicroOps = 1;
3176 let ResourceCycles = [1];
3177}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003178def: InstRW<[SKLWriteResGroup157], (instregex "VSQRTPSYr")>;
3179def: InstRW<[SKLWriteResGroup157], (instregex "VSQRTPSr")>;
3180def: InstRW<[SKLWriteResGroup157], (instregex "VSQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003181
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003182def SKLWriteResGroup158 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003183 let Latency = 12;
3184 let NumMicroOps = 2;
3185 let ResourceCycles = [1,1];
3186}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003187def: InstRW<[SKLWriteResGroup158], (instregex "PCLMULQDQrm")>;
3188def: InstRW<[SKLWriteResGroup158], (instregex "VPCLMULQDQrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003189
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003190def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
3191 let Latency = 12;
3192 let NumMicroOps = 4;
3193 let ResourceCycles = [2,1,1];
3194}
3195def: InstRW<[SKLWriteResGroup159], (instregex "HADDPDrm")>;
3196def: InstRW<[SKLWriteResGroup159], (instregex "HADDPSrm")>;
3197def: InstRW<[SKLWriteResGroup159], (instregex "HSUBPDrm")>;
3198def: InstRW<[SKLWriteResGroup159], (instregex "HSUBPSrm")>;
3199def: InstRW<[SKLWriteResGroup159], (instregex "VHADDPDrm")>;
3200def: InstRW<[SKLWriteResGroup159], (instregex "VHADDPSrm")>;
3201def: InstRW<[SKLWriteResGroup159], (instregex "VHSUBPDrm")>;
3202def: InstRW<[SKLWriteResGroup159], (instregex "VHSUBPSrm")>;
3203
3204def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort015]> {
3205 let Latency = 12;
3206 let NumMicroOps = 4;
3207 let ResourceCycles = [1,1,1,1];
3208}
3209def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
3210
3211def SKLWriteResGroup161 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003212 let Latency = 13;
3213 let NumMicroOps = 1;
3214 let ResourceCycles = [1];
3215}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003216def: InstRW<[SKLWriteResGroup161], (instregex "SQRTPSr")>;
3217def: InstRW<[SKLWriteResGroup161], (instregex "SQRTSSr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003218
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003219def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003220 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003221 let NumMicroOps = 3;
3222 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003223}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003224def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m")>;
3225def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI32m")>;
3226def: InstRW<[SKLWriteResGroup162], (instregex "SUBR_FI16m")>;
3227def: InstRW<[SKLWriteResGroup162], (instregex "SUBR_FI32m")>;
3228def: InstRW<[SKLWriteResGroup162], (instregex "SUB_FI16m")>;
3229def: InstRW<[SKLWriteResGroup162], (instregex "SUB_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003230
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003231def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3232 let Latency = 13;
3233 let NumMicroOps = 3;
3234 let ResourceCycles = [1,1,1];
3235}
3236def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
3237
3238def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003239 let Latency = 13;
3240 let NumMicroOps = 4;
3241 let ResourceCycles = [1,3];
3242}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003243def: InstRW<[SKLWriteResGroup164], (instregex "DPPSrri")>;
3244def: InstRW<[SKLWriteResGroup164], (instregex "VDPPSYrri")>;
3245def: InstRW<[SKLWriteResGroup164], (instregex "VDPPSrri")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003246
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003247def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003248 let Latency = 13;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003249 let NumMicroOps = 4;
3250 let ResourceCycles = [2,1,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003251}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003252def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm")>;
3253def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPSYrm")>;
3254def: InstRW<[SKLWriteResGroup165], (instregex "VHSUBPDYrm")>;
3255def: InstRW<[SKLWriteResGroup165], (instregex "VHSUBPSYrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003256
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003257def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003258 let Latency = 14;
3259 let NumMicroOps = 1;
3260 let ResourceCycles = [1];
3261}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003262def: InstRW<[SKLWriteResGroup166], (instregex "DIVPDrr")>;
3263def: InstRW<[SKLWriteResGroup166], (instregex "DIVSDrr")>;
3264def: InstRW<[SKLWriteResGroup166], (instregex "VDIVPDYrr")>;
3265def: InstRW<[SKLWriteResGroup166], (instregex "VDIVPDrr")>;
3266def: InstRW<[SKLWriteResGroup166], (instregex "VDIVSDrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003267
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003268def SKLWriteResGroup167 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003269 let Latency = 14;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003270 let NumMicroOps = 3;
3271 let ResourceCycles = [2,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003272}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003273def: InstRW<[SKLWriteResGroup167], (instregex "AESIMCrm")>;
3274def: InstRW<[SKLWriteResGroup167], (instregex "VAESIMCrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003275
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003276def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort015]> {
3277 let Latency = 14;
3278 let NumMicroOps = 3;
3279 let ResourceCycles = [1,2];
3280}
3281def: InstRW<[SKLWriteResGroup168], (instregex "PMULLDrm")>;
3282def: InstRW<[SKLWriteResGroup168], (instregex "ROUNDPDm")>;
3283def: InstRW<[SKLWriteResGroup168], (instregex "ROUNDPSm")>;
3284def: InstRW<[SKLWriteResGroup168], (instregex "ROUNDSDm")>;
3285def: InstRW<[SKLWriteResGroup168], (instregex "ROUNDSSm")>;
3286def: InstRW<[SKLWriteResGroup168], (instregex "VPMULLDrm")>;
3287def: InstRW<[SKLWriteResGroup168], (instregex "VROUNDPDm")>;
3288def: InstRW<[SKLWriteResGroup168], (instregex "VROUNDPSm")>;
3289def: InstRW<[SKLWriteResGroup168], (instregex "VROUNDSDm")>;
3290def: InstRW<[SKLWriteResGroup168], (instregex "VROUNDSSm")>;
3291
3292def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3293 let Latency = 14;
3294 let NumMicroOps = 3;
3295 let ResourceCycles = [1,1,1];
3296}
3297def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m")>;
3298def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI32m")>;
3299
3300def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003301 let Latency = 14;
3302 let NumMicroOps = 10;
3303 let ResourceCycles = [2,4,1,3];
3304}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003305def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003306
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003307def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003308 let Latency = 15;
3309 let NumMicroOps = 1;
3310 let ResourceCycles = [1];
3311}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003312def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0")>;
3313def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FST0r")>;
3314def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FrST0")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003315
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003316def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003317 let Latency = 15;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003318 let NumMicroOps = 3;
3319 let ResourceCycles = [1,2];
3320}
3321def: InstRW<[SKLWriteResGroup172], (instregex "VPMULLDYrm")>;
3322def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDYPDm")>;
3323def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDYPSm")>;
3324
3325def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3326 let Latency = 15;
3327 let NumMicroOps = 4;
3328 let ResourceCycles = [1,1,2];
3329}
3330def: InstRW<[SKLWriteResGroup173], (instregex "DPPDrmi")>;
3331def: InstRW<[SKLWriteResGroup173], (instregex "VDPPDrmi")>;
3332
3333def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
3334 let Latency = 15;
3335 let NumMicroOps = 10;
3336 let ResourceCycles = [1,1,1,5,1,1];
3337}
Craig Topper13a16502018-03-19 00:56:09 +00003338def: InstRW<[SKLWriteResGroup174], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003339
3340def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3341 let Latency = 16;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003342 let NumMicroOps = 2;
3343 let ResourceCycles = [1,1];
3344}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003345def: InstRW<[SKLWriteResGroup175], (instregex "DIVSSrm")>;
3346def: InstRW<[SKLWriteResGroup175], (instregex "VDIVSSrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003347
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003348def SKLWriteResGroup176 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3349 let Latency = 16;
3350 let NumMicroOps = 4;
3351 let ResourceCycles = [3,1];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003352}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003353def: InstRW<[SKLWriteResGroup176], (instregex "PCMPISTRIrm")>;
3354def: InstRW<[SKLWriteResGroup176], (instregex "PCMPISTRM128rm")>;
3355def: InstRW<[SKLWriteResGroup176], (instregex "VPCMPISTRIrm")>;
3356def: InstRW<[SKLWriteResGroup176], (instregex "VPCMPISTRM128rm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003357
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003358def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
3359 let Latency = 16;
3360 let NumMicroOps = 14;
3361 let ResourceCycles = [1,1,1,4,2,5];
3362}
3363def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
3364
3365def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003366 let Latency = 16;
3367 let NumMicroOps = 16;
3368 let ResourceCycles = [16];
3369}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003370def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003371
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003372def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3373 let Latency = 17;
3374 let NumMicroOps = 2;
3375 let ResourceCycles = [1,1];
3376}
3377def: InstRW<[SKLWriteResGroup179], (instregex "DIVPSrm")>;
3378def: InstRW<[SKLWriteResGroup179], (instregex "VDIVPSrm")>;
3379def: InstRW<[SKLWriteResGroup179], (instregex "VSQRTSSm")>;
3380
3381def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003382 let Latency = 17;
3383 let NumMicroOps = 15;
3384 let ResourceCycles = [2,1,2,4,2,4];
3385}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003386def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003387
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003388def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003389 let Latency = 18;
3390 let NumMicroOps = 1;
3391 let ResourceCycles = [1];
3392}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003393def: InstRW<[SKLWriteResGroup181], (instregex "VSQRTPDYr")>;
3394def: InstRW<[SKLWriteResGroup181], (instregex "VSQRTPDr")>;
3395def: InstRW<[SKLWriteResGroup181], (instregex "VSQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003396
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003397def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003398 let Latency = 18;
3399 let NumMicroOps = 2;
3400 let ResourceCycles = [1,1];
3401}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003402def: InstRW<[SKLWriteResGroup182], (instregex "SQRTSSm")>;
3403def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
3404def: InstRW<[SKLWriteResGroup182], (instregex "VSQRTPSm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003405
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003406def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003407 let Latency = 18;
3408 let NumMicroOps = 8;
3409 let ResourceCycles = [4,3,1];
3410}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003411def: InstRW<[SKLWriteResGroup183], (instregex "PCMPESTRIrr")>;
3412def: InstRW<[SKLWriteResGroup183], (instregex "VPCMPESTRIrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003413
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003414def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003415 let Latency = 18;
3416 let NumMicroOps = 8;
3417 let ResourceCycles = [1,1,1,5];
3418}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003419def: InstRW<[SKLWriteResGroup184], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00003420def: InstRW<[SKLWriteResGroup184], (instrs RDTSC)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003421
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003422def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003423 let Latency = 18;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003424 let NumMicroOps = 11;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003425 let ResourceCycles = [2,1,1,4,1,2];
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003426}
Craig Topper13a16502018-03-19 00:56:09 +00003427def: InstRW<[SKLWriteResGroup185], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003428
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003429def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3430 let Latency = 19;
3431 let NumMicroOps = 2;
3432 let ResourceCycles = [1,1];
3433}
3434def: InstRW<[SKLWriteResGroup186], (instregex "DIVSDrm")>;
3435def: InstRW<[SKLWriteResGroup186], (instregex "SQRTPSm")>;
3436def: InstRW<[SKLWriteResGroup186], (instregex "VDIVSDrm")>;
3437def: InstRW<[SKLWriteResGroup186], (instregex "VSQRTPSYm")>;
3438
3439def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3440 let Latency = 19;
3441 let NumMicroOps = 5;
3442 let ResourceCycles = [1,1,3];
3443}
3444def: InstRW<[SKLWriteResGroup187], (instregex "DPPSrmi")>;
3445def: InstRW<[SKLWriteResGroup187], (instregex "VDPPSrmi")>;
3446
3447def SKLWriteResGroup188 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort015,SKLPort0156]> {
3448 let Latency = 19;
3449 let NumMicroOps = 9;
3450 let ResourceCycles = [4,3,1,1];
3451}
3452def: InstRW<[SKLWriteResGroup188], (instregex "PCMPESTRM128rr")>;
3453def: InstRW<[SKLWriteResGroup188], (instregex "VPCMPESTRM128rr")>;
3454
3455def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003456 let Latency = 20;
3457 let NumMicroOps = 1;
3458 let ResourceCycles = [1];
3459}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003460def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0")>;
3461def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FST0r")>;
3462def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FrST0")>;
3463def: InstRW<[SKLWriteResGroup189], (instregex "SQRTPDr")>;
3464def: InstRW<[SKLWriteResGroup189], (instregex "SQRTSDr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003465
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003466def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003467 let Latency = 20;
3468 let NumMicroOps = 2;
3469 let ResourceCycles = [1,1];
3470}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003471def: InstRW<[SKLWriteResGroup190], (instregex "DIVPDrm")>;
3472def: InstRW<[SKLWriteResGroup190], (instregex "VDIVPDrm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003473
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003474def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3475 let Latency = 20;
3476 let NumMicroOps = 5;
3477 let ResourceCycles = [1,1,3];
3478}
3479def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
3480
3481def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3482 let Latency = 20;
3483 let NumMicroOps = 8;
3484 let ResourceCycles = [1,1,1,1,1,1,2];
3485}
3486def: InstRW<[SKLWriteResGroup192], (instregex "INSB")>;
3487def: InstRW<[SKLWriteResGroup192], (instregex "INSL")>;
3488def: InstRW<[SKLWriteResGroup192], (instregex "INSW")>;
3489
3490def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003491 let Latency = 20;
3492 let NumMicroOps = 10;
3493 let ResourceCycles = [1,2,7];
3494}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003495def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003496
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003497def SKLWriteResGroup194 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort015]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003498 let Latency = 20;
3499 let NumMicroOps = 11;
3500 let ResourceCycles = [3,6,2];
3501}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003502def: InstRW<[SKLWriteResGroup194], (instregex "AESKEYGENASSIST128rr")>;
3503def: InstRW<[SKLWriteResGroup194], (instregex "VAESKEYGENASSIST128rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003504
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003505def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3506 let Latency = 21;
3507 let NumMicroOps = 2;
3508 let ResourceCycles = [1,1];
3509}
3510def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
3511
3512def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3513 let Latency = 22;
3514 let NumMicroOps = 2;
3515 let ResourceCycles = [1,1];
3516}
3517def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m")>;
3518def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F64m")>;
3519
3520def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
3521 let Latency = 22;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003522 let NumMicroOps = 5;
3523 let ResourceCycles = [1,2,1,1];
3524}
Craig Topper17a31182017-12-16 18:35:29 +00003525def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
3526 VGATHERDPDrm,
3527 VGATHERQPDrm,
3528 VGATHERQPSrm,
3529 VPGATHERDDrm,
3530 VPGATHERDQrm,
3531 VPGATHERQDrm,
3532 VPGATHERQQrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003533
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003534def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
3535 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003536 let NumMicroOps = 5;
3537 let ResourceCycles = [1,2,1,1];
3538}
Craig Topper17a31182017-12-16 18:35:29 +00003539def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
3540 VGATHERQPDYrm,
3541 VGATHERQPSYrm,
3542 VPGATHERDDYrm,
3543 VPGATHERDQYrm,
3544 VPGATHERQDYrm,
3545 VPGATHERQQYrm,
3546 VGATHERDPDYrm)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003547
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003548def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003549 let Latency = 23;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003550 let NumMicroOps = 2;
3551 let ResourceCycles = [1,1];
3552}
3553def: InstRW<[SKLWriteResGroup197], (instregex "VSQRTSDm")>;
3554
3555def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3556 let Latency = 23;
3557 let NumMicroOps = 19;
3558 let ResourceCycles = [2,1,4,1,1,4,6];
3559}
3560def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
3561
3562def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3563 let Latency = 24;
3564 let NumMicroOps = 2;
3565 let ResourceCycles = [1,1];
3566}
3567def: InstRW<[SKLWriteResGroup199], (instregex "VSQRTPDm")>;
3568
3569def SKLWriteResGroup200 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
3570 let Latency = 24;
3571 let NumMicroOps = 9;
3572 let ResourceCycles = [4,3,1,1];
3573}
3574def: InstRW<[SKLWriteResGroup200], (instregex "PCMPESTRIrm")>;
3575def: InstRW<[SKLWriteResGroup200], (instregex "VPCMPESTRIrm")>;
3576
3577def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3578 let Latency = 25;
3579 let NumMicroOps = 2;
3580 let ResourceCycles = [1,1];
3581}
3582def: InstRW<[SKLWriteResGroup201], (instregex "SQRTSDm")>;
3583def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
3584
3585def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3586 let Latency = 25;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003587 let NumMicroOps = 3;
3588 let ResourceCycles = [1,1,1];
3589}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003590def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m")>;
3591def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI32m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003592
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003593def SKLWriteResGroup203 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort015,SKLPort0156]> {
3594 let Latency = 25;
3595 let NumMicroOps = 10;
3596 let ResourceCycles = [4,3,1,1,1];
3597}
3598def: InstRW<[SKLWriteResGroup203], (instregex "PCMPESTRM128rm")>;
3599def: InstRW<[SKLWriteResGroup203], (instregex "VPCMPESTRM128rm")>;
3600
3601def SKLWriteResGroup204 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort015]> {
3602 let Latency = 25;
3603 let NumMicroOps = 11;
3604 let ResourceCycles = [3,6,1,1];
3605}
3606def: InstRW<[SKLWriteResGroup204], (instregex "AESKEYGENASSIST128rm")>;
3607def: InstRW<[SKLWriteResGroup204], (instregex "VAESKEYGENASSIST128rm")>;
3608
3609def SKLWriteResGroup205 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3610 let Latency = 26;
3611 let NumMicroOps = 2;
3612 let ResourceCycles = [1,1];
3613}
3614def: InstRW<[SKLWriteResGroup205], (instregex "SQRTPDm")>;
3615
3616def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3617 let Latency = 27;
3618 let NumMicroOps = 2;
3619 let ResourceCycles = [1,1];
3620}
3621def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m")>;
3622def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F64m")>;
3623
3624def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
3625 let Latency = 28;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003626 let NumMicroOps = 8;
3627 let ResourceCycles = [2,4,1,1];
3628}
Craig Topper13a16502018-03-19 00:56:09 +00003629def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(8|16|32|64)m")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003630
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003631def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003632 let Latency = 30;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003633 let NumMicroOps = 3;
3634 let ResourceCycles = [1,1,1];
3635}
3636def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m")>;
3637def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI32m")>;
3638
3639def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
3640 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003641 let NumMicroOps = 23;
3642 let ResourceCycles = [1,5,3,4,10];
3643}
Craig Topper13a16502018-03-19 00:56:09 +00003644def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)ri")>;
3645def: InstRW<[SKLWriteResGroup209], (instregex "IN(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003646
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003647def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3648 let Latency = 35;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003649 let NumMicroOps = 23;
3650 let ResourceCycles = [1,5,2,1,4,10];
3651}
Craig Topper13a16502018-03-19 00:56:09 +00003652def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)ir")>;
3653def: InstRW<[SKLWriteResGroup210], (instregex "OUT(8|16|32)rr")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003654
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003655def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
3656 let Latency = 37;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003657 let NumMicroOps = 31;
3658 let ResourceCycles = [1,8,1,21];
3659}
Craig Topper391c6f92017-12-10 01:24:08 +00003660def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003661
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003662def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
3663 let Latency = 40;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003664 let NumMicroOps = 18;
3665 let ResourceCycles = [1,1,2,3,1,1,1,8];
3666}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003667def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003668
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003669def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
3670 let Latency = 41;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003671 let NumMicroOps = 39;
3672 let ResourceCycles = [1,10,1,1,26];
3673}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003674def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003675
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003676def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003677 let Latency = 42;
3678 let NumMicroOps = 22;
3679 let ResourceCycles = [2,20];
3680}
Craig Topper2d451e72018-03-18 08:38:06 +00003681def: InstRW<[SKLWriteResGroup214], (instrs RDTSCP)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003682
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003683def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
3684 let Latency = 42;
3685 let NumMicroOps = 40;
3686 let ResourceCycles = [1,11,1,1,26];
3687}
Craig Topper391c6f92017-12-10 01:24:08 +00003688def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003689
3690def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
3691 let Latency = 46;
3692 let NumMicroOps = 44;
3693 let ResourceCycles = [1,11,1,1,30];
3694}
3695def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
3696
3697def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
3698 let Latency = 62;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003699 let NumMicroOps = 64;
3700 let ResourceCycles = [2,8,5,10,39];
3701}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003702def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003703
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003704def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
3705 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003706 let NumMicroOps = 88;
3707 let ResourceCycles = [4,4,31,1,2,1,45];
3708}
Craig Topper2d451e72018-03-18 08:38:06 +00003709def: InstRW<[SKLWriteResGroup218], (instrs FXRSTOR64)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003710
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003711def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
3712 let Latency = 63;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003713 let NumMicroOps = 90;
3714 let ResourceCycles = [4,2,33,1,2,1,47];
3715}
Craig Topper2d451e72018-03-18 08:38:06 +00003716def: InstRW<[SKLWriteResGroup219], (instrs FXRSTOR)>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003717
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003718def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003719 let Latency = 75;
3720 let NumMicroOps = 15;
3721 let ResourceCycles = [6,3,6];
3722}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003723def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003724
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003725def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003726 let Latency = 76;
3727 let NumMicroOps = 32;
3728 let ResourceCycles = [7,2,8,3,1,11];
3729}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003730def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003731
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003732def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003733 let Latency = 102;
3734 let NumMicroOps = 66;
3735 let ResourceCycles = [4,2,4,8,14,34];
3736}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003737def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003738
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003739def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
3740 let Latency = 106;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003741 let NumMicroOps = 100;
3742 let ResourceCycles = [9,1,11,16,1,11,21,30];
3743}
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003744def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003745
3746} // SchedModel