]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/X86/X86SchedSkylakeClient.td
MFV r316901:
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / X86 / X86SchedSkylakeClient.td
1 //=- 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
15 def 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
31 let 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.
41 def SKLPort0 : ProcResource<1>;
42 def SKLPort1 : ProcResource<1>;
43 def SKLPort2 : ProcResource<1>;
44 def SKLPort3 : ProcResource<1>;
45 def SKLPort4 : ProcResource<1>;
46 def SKLPort5 : ProcResource<1>;
47 def SKLPort6 : ProcResource<1>;
48 def SKLPort7 : ProcResource<1>;
49
50 // Many micro-ops are capable of issuing on multiple ports.
51 def SKLPort01  : ProcResGroup<[SKLPort0, SKLPort1]>;
52 def SKLPort23  : ProcResGroup<[SKLPort2, SKLPort3]>;
53 def SKLPort237 : ProcResGroup<[SKLPort2, SKLPort3, SKLPort7]>;
54 def SKLPort04  : ProcResGroup<[SKLPort0, SKLPort4]>;
55 def SKLPort05  : ProcResGroup<[SKLPort0, SKLPort5]>;
56 def SKLPort06  : ProcResGroup<[SKLPort0, SKLPort6]>;
57 def SKLPort15  : ProcResGroup<[SKLPort1, SKLPort5]>;
58 def SKLPort16  : ProcResGroup<[SKLPort1, SKLPort6]>;
59 def SKLPort56  : ProcResGroup<[SKLPort5, SKLPort6]>;
60 def SKLPort015 : ProcResGroup<[SKLPort0, SKLPort1, SKLPort5]>;
61 def SKLPort056 : ProcResGroup<[SKLPort0, SKLPort5, SKLPort6]>;
62 def SKLPort0156: ProcResGroup<[SKLPort0, SKLPort1, SKLPort5, SKLPort6]>;
63
64 // 60 Entry Unified Scheduler
65 def 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.
72 def : 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.
79 multiclass SKLWriteResPair<X86FoldableSchedWrite SchedRW,
80                           ProcResourceKind ExePort,
81                           int Lat> {
82   // Register variant is using a single cycle on ExePort.
83   def : WriteRes<SchedRW, [ExePort]> { let Latency = Lat; }
84
85   // Memory variant also uses a cycle on port 2/3 and adds 5 cycles to the
86   // latency.
87   def : WriteRes<SchedRW.Folded, [SKLPort23, ExePort]> {
88      let Latency = !add(Lat, 5);
89   }
90 }
91
92 // A folded store needs a cycle on port 4 for the store data, but it does not
93 // need an extra port 2/3 cycle to recompute the address.
94 def : WriteRes<WriteRMW, [SKLPort4]>;
95
96 // Arithmetic.
97 defm : SKLWriteResPair<WriteALU,   SKLPort0156, 1>; // Simple integer ALU op.
98 defm : SKLWriteResPair<WriteIMul,  SKLPort1,   3>; // Integer multiplication.
99 def : WriteRes<WriteIMulH, []> { let Latency = 3; } // Integer multiplication, high part.
100 def SKLDivider : ProcResource<1>; // Integer division issued on port 0.     
101 def : WriteRes<WriteIDiv, [SKLPort0, SKLDivider]> { // Integer division.
102   let Latency = 25;
103   let ResourceCycles = [1, 10];
104 }
105 def : WriteRes<WriteIDivLd, [SKLPort23, SKLPort0, SKLDivider]> {
106   let Latency = 29;
107   let ResourceCycles = [1, 1, 10];
108 }
109
110 def : WriteRes<WriteLEA, [SKLPort15]>; // LEA instructions can't fold loads.
111
112 // Integer shifts and rotates.
113 defm : SKLWriteResPair<WriteShift, SKLPort06,  1>;
114
115 // Loads, stores, and moves, not folded with other operations.
116 def : WriteRes<WriteLoad,  [SKLPort23]> { let Latency = 5; }
117 def : WriteRes<WriteStore, [SKLPort237, SKLPort4]>;
118 def : WriteRes<WriteMove,  [SKLPort0156]>;
119
120 // Idioms that clear a register, like xorps %xmm0, %xmm0.
121 // These can often bypass execution ports completely.
122 def : WriteRes<WriteZero,  []>;
123
124 // Branches don't produce values, so they have no latency, but they still
125 // consume resources. Indirect branches can fold loads.
126 defm : SKLWriteResPair<WriteJump,  SKLPort06,   1>;
127
128 // Floating point. This covers both scalar and vector operations.
129 defm : SKLWriteResPair<WriteFAdd,   SKLPort1, 3>; // Floating point add/sub/compare.
130 defm : SKLWriteResPair<WriteFMul,   SKLPort0, 5>; // Floating point multiplication.
131 defm : SKLWriteResPair<WriteFDiv,   SKLPort0, 12>; // 10-14 cycles. // Floating point division.
132 defm : SKLWriteResPair<WriteFSqrt,  SKLPort0, 15>; // Floating point square root.
133 defm : SKLWriteResPair<WriteFRcp,   SKLPort0, 5>; // Floating point reciprocal estimate.
134 defm : SKLWriteResPair<WriteFRsqrt, SKLPort0, 5>; // Floating point reciprocal square root estimate.
135 defm : SKLWriteResPair<WriteFMA,    SKLPort01, 4>; // Fused Multiply Add.
136 defm : SKLWriteResPair<WriteFShuffle,  SKLPort5,  1>; // Floating point vector shuffles.
137 defm : SKLWriteResPair<WriteFBlend,  SKLPort015,  1>; // Floating point vector blends.
138 def : WriteRes<WriteFVarBlend, [SKLPort5]> { // Fp vector variable blends.             
139   let Latency = 2;
140   let ResourceCycles = [2];
141
142 def : WriteRes<WriteFVarBlendLd, [SKLPort5, SKLPort23]> {
143   let Latency = 6;
144   let ResourceCycles = [2, 1];
145 }
146
147 // FMA Scheduling helper class.
148 // class FMASC { X86FoldableSchedWrite Sched = WriteFAdd; }
149
150 // Vector integer operations.
151 defm : SKLWriteResPair<WriteVecALU,   SKLPort15,  1>; // Vector integer ALU op, no logicals.
152 defm : SKLWriteResPair<WriteVecShift, SKLPort0,  1>; // Vector integer shifts.
153 defm : SKLWriteResPair<WriteVecIMul,  SKLPort0,   5>; // Vector integer multiply.
154 defm : SKLWriteResPair<WriteShuffle,  SKLPort5,  1>; // Vector shuffles.
155 defm : SKLWriteResPair<WriteBlend,  SKLPort15,  1>; // Vector blends.
156
157 def : WriteRes<WriteVarBlend, [SKLPort5]> { // Vector variable blends.
158   let Latency = 2;
159   let ResourceCycles = [2];
160 }
161 def : WriteRes<WriteVarBlendLd, [SKLPort5, SKLPort23]> {
162   let Latency = 6;
163   let ResourceCycles = [2, 1];
164 }
165
166 def : WriteRes<WriteMPSAD, [SKLPort0, SKLPort5]> { // Vector MPSAD.     
167   let Latency = 6;
168   let ResourceCycles = [1, 2];
169 }
170 def : WriteRes<WriteMPSADLd, [SKLPort23, SKLPort0, SKLPort5]> {
171   let Latency = 6;
172   let ResourceCycles = [1, 1, 2];
173 }
174
175 // Vector bitwise operations.
176 // These are often used on both floating point and integer vectors.
177 defm : SKLWriteResPair<WriteVecLogic, SKLPort015, 1>; // Vector and/or/xor.
178
179 // Conversion between integer and float.
180 defm : SKLWriteResPair<WriteCvtF2I, SKLPort1, 3>; // Float -> Integer.
181 defm : SKLWriteResPair<WriteCvtI2F, SKLPort1, 4>; // Integer -> Float.
182 defm : SKLWriteResPair<WriteCvtF2F, SKLPort1, 3>; // Float -> Float size conversion.
183
184 // Strings instructions.
185 // Packed Compare Implicit Length Strings, Return Mask
186 // String instructions.
187 def : WriteRes<WritePCmpIStrM, [SKLPort0]> {
188   let Latency = 10;
189   let ResourceCycles = [3];
190 }
191 def : WriteRes<WritePCmpIStrMLd, [SKLPort0, SKLPort23]> {
192   let Latency = 10;
193   let ResourceCycles = [3, 1];
194
195 // Packed Compare Explicit Length Strings, Return Mask
196 def : WriteRes<WritePCmpEStrM, [SKLPort0, SKLPort16, SKLPort5]> {
197   let Latency = 10;
198   let ResourceCycles = [3, 2, 4];
199 }
200 def : WriteRes<WritePCmpEStrMLd, [SKLPort05, SKLPort16, SKLPort23]> {
201   let Latency = 10;
202   let ResourceCycles = [6, 2, 1];
203
204   // Packed Compare Implicit Length Strings, Return Index
205 def : WriteRes<WritePCmpIStrI, [SKLPort0]> {
206   let Latency = 11;
207   let ResourceCycles = [3];
208 }
209 def : WriteRes<WritePCmpIStrILd, [SKLPort0, SKLPort23]> {
210   let Latency = 11;
211   let ResourceCycles = [3, 1];
212 }     
213 // Packed Compare Explicit Length Strings, Return Index
214 def : WriteRes<WritePCmpEStrI, [SKLPort05, SKLPort16]> {
215   let Latency = 11;
216   let ResourceCycles = [6, 2];
217 }
218 def : WriteRes<WritePCmpEStrILd, [SKLPort0, SKLPort16, SKLPort5, SKLPort23]> {
219   let Latency = 11;
220   let ResourceCycles = [3, 2, 2, 1];
221 }
222
223 // AES instructions.
224 def : WriteRes<WriteAESDecEnc, [SKLPort5]> { // Decryption, encryption.
225   let Latency = 7;
226   let ResourceCycles = [1];
227 }
228 def : WriteRes<WriteAESDecEncLd, [SKLPort5, SKLPort23]> {
229   let Latency = 7;
230   let ResourceCycles = [1, 1];
231 }
232 def : WriteRes<WriteAESIMC, [SKLPort5]> { // InvMixColumn.
233   let Latency = 14;
234   let ResourceCycles = [2];
235 }
236 def : WriteRes<WriteAESIMCLd, [SKLPort5, SKLPort23]> {
237   let Latency = 14;
238   let ResourceCycles = [2, 1];
239 }
240 def : WriteRes<WriteAESKeyGen, [SKLPort0, SKLPort5]> { // Key Generation.
241   let Latency = 10;
242   let ResourceCycles = [2, 8];
243 }
244 def : WriteRes<WriteAESKeyGenLd, [SKLPort0, SKLPort5, SKLPort23]> {
245   let Latency = 10;
246   let ResourceCycles = [2, 7, 1];
247 }
248
249 // Carry-less multiplication instructions.
250 def : WriteRes<WriteCLMul, [SKLPort0, SKLPort5]> {
251   let Latency = 7;
252   let ResourceCycles = [2, 1];
253 }
254 def : WriteRes<WriteCLMulLd, [SKLPort0, SKLPort5, SKLPort23]> {
255   let Latency = 7;
256   let ResourceCycles = [2, 1, 1];
257 }
258
259 // Catch-all for expensive system instructions.
260 def : WriteRes<WriteSystem,     [SKLPort0156]> { let Latency = 100; } // def WriteSystem : SchedWrite;
261
262 // AVX2.
263 defm : SKLWriteResPair<WriteFShuffle256,  SKLPort5,  3>; // Fp 256-bit width vector shuffles.
264 defm : SKLWriteResPair<WriteShuffle256,  SKLPort5,  3>;  // 256-bit width vector shuffles.
265 def : WriteRes<WriteVarVecShift, [SKLPort0, SKLPort5]> { // Variable vector shifts.
266   let Latency = 2;
267   let ResourceCycles = [2, 1];
268 }
269 def : WriteRes<WriteVarVecShiftLd, [SKLPort0, SKLPort5, SKLPort23]> {
270   let Latency = 6;
271   let ResourceCycles = [2, 1, 1];
272 }
273
274 // Old microcoded instructions that nobody use.
275 def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
276
277 // Fence instructions.
278 def : WriteRes<WriteFence,  [SKLPort23, SKLPort4]>;
279
280 // Nop, not very useful expect it provides a model for nops!
281 def : WriteRes<WriteNop, []>;
282
283 ////////////////////////////////////////////////////////////////////////////////
284 // Horizontal add/sub  instructions.
285 ////////////////////////////////////////////////////////////////////////////////
286 // HADD, HSUB PS/PD
287 // x,x / v,v,v.
288 def : WriteRes<WriteFHAdd, [SKLPort1]> {
289   let Latency = 3;
290 }
291
292 // x,m / v,v,m.
293 def : WriteRes<WriteFHAddLd, [SKLPort1, SKLPort23]> {
294   let Latency = 7;
295   let ResourceCycles = [1, 1];
296 }
297
298 // PHADD|PHSUB (S) W/D.
299 // v <- v,v.
300 def : WriteRes<WritePHAdd, [SKLPort15]>;
301
302 // v <- v,m.
303 def : WriteRes<WritePHAddLd, [SKLPort15, SKLPort23]> {
304   let Latency = 5;
305   let ResourceCycles = [1, 1];
306 }
307
308 // Remaining instrs.
309
310 def SKLWriteResGroup1 : SchedWriteRes<[SKLPort0]> {
311   let Latency = 1;
312   let NumMicroOps = 1;
313   let ResourceCycles = [1];
314 }
315 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSBirr")>;
316 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDSWirr")>;
317 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDUSBirr")>;
318 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PADDUSWirr")>;
319 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PAVGBirr")>;
320 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PAVGWirr")>;
321 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPEQBirr")>;
322 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPEQDirr")>;
323 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPEQWirr")>;
324 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPGTBirr")>;
325 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPGTDirr")>;
326 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PCMPGTWirr")>;
327 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PMAXSWirr")>;
328 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PMAXUBirr")>;
329 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PMINSWirr")>;
330 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PMINUBirr")>;
331 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLDri")>;
332 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLDrr")>;
333 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLQri")>;
334 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLQrr")>;
335 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLWri")>;
336 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSLLWrr")>;
337 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRADri")>;
338 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRADrr")>;
339 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRAWri")>;
340 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRAWrr")>;
341 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLDri")>;
342 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLDrr")>;
343 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLQri")>;
344 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLQrr")>;
345 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLWri")>;
346 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSRLWrr")>;
347 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSUBSBirr")>;
348 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSUBSWirr")>;
349 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSUBUSBirr")>;
350 def: InstRW<[SKLWriteResGroup1], (instregex "MMX_PSUBUSWirr")>;
351
352 def SKLWriteResGroup2 : SchedWriteRes<[SKLPort1]> {
353   let Latency = 1;
354   let NumMicroOps = 1;
355   let ResourceCycles = [1];
356 }
357 def: InstRW<[SKLWriteResGroup2], (instregex "MMX_MASKMOVQ64")>;
358
359 def SKLWriteResGroup3 : SchedWriteRes<[SKLPort5]> {
360   let Latency = 1;
361   let NumMicroOps = 1;
362   let ResourceCycles = [1];
363 }
364 def: InstRW<[SKLWriteResGroup3], (instregex "COMP_FST0r")>;
365 def: InstRW<[SKLWriteResGroup3], (instregex "COM_FST0r")>;
366 def: InstRW<[SKLWriteResGroup3], (instregex "INSERTPSrr")>;
367 def: InstRW<[SKLWriteResGroup3], (instregex "MMX_MOVD64rr")>;
368 def: InstRW<[SKLWriteResGroup3], (instregex "MMX_MOVD64to64rr")>;
369 def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PALIGNR64irr")>;
370 def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PSHUFBrr64")>;
371 def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PSHUFWri")>;
372 def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKHBWirr")>;
373 def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKHDQirr")>;
374 def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKHWDirr")>;
375 def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKLBWirr")>;
376 def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKLDQirr")>;
377 def: InstRW<[SKLWriteResGroup3], (instregex "MMX_PUNPCKLWDirr")>;
378 def: InstRW<[SKLWriteResGroup3], (instregex "MOV64toPQIrr")>;
379 def: InstRW<[SKLWriteResGroup3], (instregex "MOVDDUPrr")>;
380 def: InstRW<[SKLWriteResGroup3], (instregex "MOVDI2PDIrr")>;
381 def: InstRW<[SKLWriteResGroup3], (instregex "MOVHLPSrr")>;
382 def: InstRW<[SKLWriteResGroup3], (instregex "MOVLHPSrr")>;
383 def: InstRW<[SKLWriteResGroup3], (instregex "MOVSDrr(_REV)?")>;
384 def: InstRW<[SKLWriteResGroup3], (instregex "MOVSHDUPrr")>;
385 def: InstRW<[SKLWriteResGroup3], (instregex "MOVSLDUPrr")>;
386 def: InstRW<[SKLWriteResGroup3], (instregex "MOVUPDrr(_REV)?")>;
387 def: InstRW<[SKLWriteResGroup3], (instregex "MOVUPSrr(_REV)?")>;
388 def: InstRW<[SKLWriteResGroup3], (instregex "PACKSSDWrr")>;
389 def: InstRW<[SKLWriteResGroup3], (instregex "PACKSSWBrr")>;
390 def: InstRW<[SKLWriteResGroup3], (instregex "PACKUSDWrr")>;
391 def: InstRW<[SKLWriteResGroup3], (instregex "PACKUSWBrr")>;
392 def: InstRW<[SKLWriteResGroup3], (instregex "PALIGNRrri")>;
393 def: InstRW<[SKLWriteResGroup3], (instregex "PBLENDWrri")>;
394 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXBDrr")>;
395 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXBQrr")>;
396 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXBWrr")>;
397 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXDQrr")>;
398 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXWDrr")>;
399 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVSXWQrr")>;
400 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXBDrr")>;
401 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXBQrr")>;
402 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXBWrr")>;
403 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXDQrr")>;
404 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXWDrr")>;
405 def: InstRW<[SKLWriteResGroup3], (instregex "PMOVZXWQrr")>;
406 def: InstRW<[SKLWriteResGroup3], (instregex "PSHUFBrr")>;
407 def: InstRW<[SKLWriteResGroup3], (instregex "PSHUFDri")>;
408 def: InstRW<[SKLWriteResGroup3], (instregex "PSHUFHWri")>;
409 def: InstRW<[SKLWriteResGroup3], (instregex "PSHUFLWri")>;
410 def: InstRW<[SKLWriteResGroup3], (instregex "PSLLDQri")>;
411 def: InstRW<[SKLWriteResGroup3], (instregex "PSRLDQri")>;
412 def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKHBWrr")>;
413 def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKHDQrr")>;
414 def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKHQDQrr")>;
415 def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKHWDrr")>;
416 def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKLBWrr")>;
417 def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKLDQrr")>;
418 def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKLQDQrr")>;
419 def: InstRW<[SKLWriteResGroup3], (instregex "PUNPCKLWDrr")>;
420 def: InstRW<[SKLWriteResGroup3], (instregex "SHUFPDrri")>;
421 def: InstRW<[SKLWriteResGroup3], (instregex "SHUFPSrri")>;
422 def: InstRW<[SKLWriteResGroup3], (instregex "UCOM_FPr")>;
423 def: InstRW<[SKLWriteResGroup3], (instregex "UCOM_Fr")>;
424 def: InstRW<[SKLWriteResGroup3], (instregex "UNPCKHPDrr")>;
425 def: InstRW<[SKLWriteResGroup3], (instregex "UNPCKHPSrr")>;
426 def: InstRW<[SKLWriteResGroup3], (instregex "UNPCKLPDrr")>;
427 def: InstRW<[SKLWriteResGroup3], (instregex "UNPCKLPSrr")>;
428 def: InstRW<[SKLWriteResGroup3], (instregex "VBROADCASTSSrr")>;
429 def: InstRW<[SKLWriteResGroup3], (instregex "VINSERTPSrr")>;
430 def: InstRW<[SKLWriteResGroup3], (instregex "VMOV64toPQIrr")>;
431 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVDDUPYrr")>;
432 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVDDUPrr")>;
433 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVDI2PDIrr")>;
434 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVHLPSrr")>;
435 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVLHPSrr")>;
436 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVSDrr(_REV)?")>;
437 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVSHDUPYrr")>;
438 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVSHDUPrr")>;
439 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVSLDUPYrr")>;
440 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVSLDUPrr")>;
441 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVUPDYrr(_REV)?")>;
442 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVUPDrr(_REV)?")>;
443 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVUPSYrr(_REV)?")>;
444 def: InstRW<[SKLWriteResGroup3], (instregex "VMOVUPSrr(_REV)?")>;
445 def: InstRW<[SKLWriteResGroup3], (instregex "VPACKSSDWYrr")>;
446 def: InstRW<[SKLWriteResGroup3], (instregex "VPACKSSDWrr")>;
447 def: InstRW<[SKLWriteResGroup3], (instregex "VPACKSSWBYrr")>;
448 def: InstRW<[SKLWriteResGroup3], (instregex "VPACKSSWBrr")>;
449 def: InstRW<[SKLWriteResGroup3], (instregex "VPACKUSDWYrr")>;
450 def: InstRW<[SKLWriteResGroup3], (instregex "VPACKUSDWrr")>;
451 def: InstRW<[SKLWriteResGroup3], (instregex "VPACKUSWBYrr")>;
452 def: InstRW<[SKLWriteResGroup3], (instregex "VPACKUSWBrr")>;
453 def: InstRW<[SKLWriteResGroup3], (instregex "VPALIGNRYrri")>;
454 def: InstRW<[SKLWriteResGroup3], (instregex "VPALIGNRrri")>;
455 def: InstRW<[SKLWriteResGroup3], (instregex "VPBLENDWYrri")>;
456 def: InstRW<[SKLWriteResGroup3], (instregex "VPBLENDWrri")>;
457 def: InstRW<[SKLWriteResGroup3], (instregex "VPBROADCASTDrr")>;
458 def: InstRW<[SKLWriteResGroup3], (instregex "VPBROADCASTQrr")>;
459 def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPDYri")>;
460 def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPDYrr")>;
461 def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPDri")>;
462 def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPDrr")>;
463 def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPSYri")>;
464 def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPSYrr")>;
465 def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPSri")>;
466 def: InstRW<[SKLWriteResGroup3], (instregex "VPERMILPSrr")>;
467 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXBDrr")>;
468 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXBQrr")>;
469 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXBWrr")>;
470 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXDQrr")>;
471 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXWDrr")>;
472 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVSXWQrr")>;
473 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXBDrr")>;
474 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXBQrr")>;
475 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXBWrr")>;
476 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXDQrr")>;
477 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXWDrr")>;
478 def: InstRW<[SKLWriteResGroup3], (instregex "VPMOVZXWQrr")>;
479 def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFBYrr")>;
480 def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFBrr")>;
481 def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFDYri")>;
482 def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFDri")>;
483 def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFHWYri")>;
484 def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFHWri")>;
485 def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFLWYri")>;
486 def: InstRW<[SKLWriteResGroup3], (instregex "VPSHUFLWri")>;
487 def: InstRW<[SKLWriteResGroup3], (instregex "VPSLLDQYri")>;
488 def: InstRW<[SKLWriteResGroup3], (instregex "VPSLLDQri")>;
489 def: InstRW<[SKLWriteResGroup3], (instregex "VPSRLDQYri")>;
490 def: InstRW<[SKLWriteResGroup3], (instregex "VPSRLDQri")>;
491 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHBWYrr")>;
492 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHBWrr")>;
493 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHDQYrr")>;
494 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHDQrr")>;
495 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHQDQYrr")>;
496 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHQDQrr")>;
497 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHWDYrr")>;
498 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKHWDrr")>;
499 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLBWYrr")>;
500 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLBWrr")>;
501 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLDQYrr")>;
502 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLDQrr")>;
503 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLQDQYrr")>;
504 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLQDQrr")>;
505 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLWDYrr")>;
506 def: InstRW<[SKLWriteResGroup3], (instregex "VPUNPCKLWDrr")>;
507 def: InstRW<[SKLWriteResGroup3], (instregex "VSHUFPDYrri")>;
508 def: InstRW<[SKLWriteResGroup3], (instregex "VSHUFPDrri")>;
509 def: InstRW<[SKLWriteResGroup3], (instregex "VSHUFPSYrri")>;
510 def: InstRW<[SKLWriteResGroup3], (instregex "VSHUFPSrri")>;
511 def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKHPDYrr")>;
512 def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKHPDrr")>;
513 def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKHPSYrr")>;
514 def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKHPSrr")>;
515 def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKLPDYrr")>;
516 def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKLPDrr")>;
517 def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKLPSYrr")>;
518 def: InstRW<[SKLWriteResGroup3], (instregex "VUNPCKLPSrr")>;
519
520 def SKLWriteResGroup4 : SchedWriteRes<[SKLPort6]> {
521   let Latency = 1;
522   let NumMicroOps = 1;
523   let ResourceCycles = [1];
524 }
525 def: InstRW<[SKLWriteResGroup4], (instregex "JMP(16|32|64)r")>;
526
527 def SKLWriteResGroup5 : SchedWriteRes<[SKLPort01]> {
528   let Latency = 1;
529   let NumMicroOps = 1;
530   let ResourceCycles = [1];
531 }
532 def: InstRW<[SKLWriteResGroup5], (instregex "PABSBrr")>;
533 def: InstRW<[SKLWriteResGroup5], (instregex "PABSDrr")>;
534 def: InstRW<[SKLWriteResGroup5], (instregex "PABSWrr")>;
535 def: InstRW<[SKLWriteResGroup5], (instregex "PADDSBrr")>;
536 def: InstRW<[SKLWriteResGroup5], (instregex "PADDSWrr")>;
537 def: InstRW<[SKLWriteResGroup5], (instregex "PADDUSBrr")>;
538 def: InstRW<[SKLWriteResGroup5], (instregex "PADDUSWrr")>;
539 def: InstRW<[SKLWriteResGroup5], (instregex "PAVGBrr")>;
540 def: InstRW<[SKLWriteResGroup5], (instregex "PAVGWrr")>;
541 def: InstRW<[SKLWriteResGroup5], (instregex "PCMPEQBrr")>;
542 def: InstRW<[SKLWriteResGroup5], (instregex "PCMPEQDrr")>;
543 def: InstRW<[SKLWriteResGroup5], (instregex "PCMPEQQrr")>;
544 def: InstRW<[SKLWriteResGroup5], (instregex "PCMPEQWrr")>;
545 def: InstRW<[SKLWriteResGroup5], (instregex "PCMPGTBrr")>;
546 def: InstRW<[SKLWriteResGroup5], (instregex "PCMPGTDrr")>;
547 def: InstRW<[SKLWriteResGroup5], (instregex "PCMPGTWrr")>;
548 def: InstRW<[SKLWriteResGroup5], (instregex "PMAXSBrr")>;
549 def: InstRW<[SKLWriteResGroup5], (instregex "PMAXSDrr")>;
550 def: InstRW<[SKLWriteResGroup5], (instregex "PMAXSWrr")>;
551 def: InstRW<[SKLWriteResGroup5], (instregex "PMAXUBrr")>;
552 def: InstRW<[SKLWriteResGroup5], (instregex "PMAXUDrr")>;
553 def: InstRW<[SKLWriteResGroup5], (instregex "PMAXUWrr")>;
554 def: InstRW<[SKLWriteResGroup5], (instregex "PMINSBrr")>;
555 def: InstRW<[SKLWriteResGroup5], (instregex "PMINSDrr")>;
556 def: InstRW<[SKLWriteResGroup5], (instregex "PMINSWrr")>;
557 def: InstRW<[SKLWriteResGroup5], (instregex "PMINUBrr")>;
558 def: InstRW<[SKLWriteResGroup5], (instregex "PMINUDrr")>;
559 def: InstRW<[SKLWriteResGroup5], (instregex "PMINUWrr")>;
560 def: InstRW<[SKLWriteResGroup5], (instregex "PSIGNBrr128")>;
561 def: InstRW<[SKLWriteResGroup5], (instregex "PSIGNDrr128")>;
562 def: InstRW<[SKLWriteResGroup5], (instregex "PSIGNWrr128")>;
563 def: InstRW<[SKLWriteResGroup5], (instregex "PSLLDri")>;
564 def: InstRW<[SKLWriteResGroup5], (instregex "PSLLQri")>;
565 def: InstRW<[SKLWriteResGroup5], (instregex "PSLLWri")>;
566 def: InstRW<[SKLWriteResGroup5], (instregex "PSRADri")>;
567 def: InstRW<[SKLWriteResGroup5], (instregex "PSRAWri")>;
568 def: InstRW<[SKLWriteResGroup5], (instregex "PSRLDri")>;
569 def: InstRW<[SKLWriteResGroup5], (instregex "PSRLQri")>;
570 def: InstRW<[SKLWriteResGroup5], (instregex "PSRLWri")>;
571 def: InstRW<[SKLWriteResGroup5], (instregex "PSUBSBrr")>;
572 def: InstRW<[SKLWriteResGroup5], (instregex "PSUBSWrr")>;
573 def: InstRW<[SKLWriteResGroup5], (instregex "PSUBUSBrr")>;
574 def: InstRW<[SKLWriteResGroup5], (instregex "PSUBUSWrr")>;
575 def: InstRW<[SKLWriteResGroup5], (instregex "VPABSBYrr")>;
576 def: InstRW<[SKLWriteResGroup5], (instregex "VPABSBrr")>;
577 def: InstRW<[SKLWriteResGroup5], (instregex "VPABSDYrr")>;
578 def: InstRW<[SKLWriteResGroup5], (instregex "VPABSDrr")>;
579 def: InstRW<[SKLWriteResGroup5], (instregex "VPABSWYrr")>;
580 def: InstRW<[SKLWriteResGroup5], (instregex "VPABSWrr")>;
581 def: InstRW<[SKLWriteResGroup5], (instregex "VPADDSBYrr")>;
582 def: InstRW<[SKLWriteResGroup5], (instregex "VPADDSBrr")>;
583 def: InstRW<[SKLWriteResGroup5], (instregex "VPADDSWYrr")>;
584 def: InstRW<[SKLWriteResGroup5], (instregex "VPADDSWrr")>;
585 def: InstRW<[SKLWriteResGroup5], (instregex "VPADDUSBYrr")>;
586 def: InstRW<[SKLWriteResGroup5], (instregex "VPADDUSBrr")>;
587 def: InstRW<[SKLWriteResGroup5], (instregex "VPADDUSWYrr")>;
588 def: InstRW<[SKLWriteResGroup5], (instregex "VPADDUSWrr")>;
589 def: InstRW<[SKLWriteResGroup5], (instregex "VPAVGBYrr")>;
590 def: InstRW<[SKLWriteResGroup5], (instregex "VPAVGBrr")>;
591 def: InstRW<[SKLWriteResGroup5], (instregex "VPAVGWYrr")>;
592 def: InstRW<[SKLWriteResGroup5], (instregex "VPAVGWrr")>;
593 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQBYrr")>;
594 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQBrr")>;
595 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQDYrr")>;
596 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQDrr")>;
597 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQQYrr")>;
598 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQQrr")>;
599 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQWYrr")>;
600 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPEQWrr")>;
601 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTBYrr")>;
602 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTBrr")>;
603 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTDYrr")>;
604 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTDrr")>;
605 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTWYrr")>;
606 def: InstRW<[SKLWriteResGroup5], (instregex "VPCMPGTWrr")>;
607 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSBYrr")>;
608 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSBrr")>;
609 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSDYrr")>;
610 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSDrr")>;
611 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSWYrr")>;
612 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXSWrr")>;
613 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUBYrr")>;
614 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUBrr")>;
615 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUDYrr")>;
616 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUDrr")>;
617 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUWYrr")>;
618 def: InstRW<[SKLWriteResGroup5], (instregex "VPMAXUWrr")>;
619 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSBYrr")>;
620 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSBrr")>;
621 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSDYrr")>;
622 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSDrr")>;
623 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSWYrr")>;
624 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINSWrr")>;
625 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUBYrr")>;
626 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUBrr")>;
627 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUDYrr")>;
628 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUDrr")>;
629 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUWYrr")>;
630 def: InstRW<[SKLWriteResGroup5], (instregex "VPMINUWrr")>;
631 def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNBYrr256")>;
632 def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNBrr128")>;
633 def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNDYrr256")>;
634 def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNDrr128")>;
635 def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNWYrr256")>;
636 def: InstRW<[SKLWriteResGroup5], (instregex "VPSIGNWrr128")>;
637 def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLDYri")>;
638 def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLDri")>;
639 def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLQYri")>;
640 def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLQri")>;
641 def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLVDYrr")>;
642 def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLVDrr")>;
643 def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLVQYrr")>;
644 def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLVQrr")>;
645 def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLWYri")>;
646 def: InstRW<[SKLWriteResGroup5], (instregex "VPSLLWri")>;
647 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRADYri")>;
648 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRADri")>;
649 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRAVDYrr")>;
650 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRAVDrr")>;
651 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRAWYri")>;
652 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRAWri")>;
653 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLDYri")>;
654 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLDri")>;
655 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLQYri")>;
656 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLQri")>;
657 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLVDYrr")>;
658 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLVDrr")>;
659 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLVQYrr")>;
660 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLVQrr")>;
661 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLWYri")>;
662 def: InstRW<[SKLWriteResGroup5], (instregex "VPSRLWri")>;
663 def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBSBYrr")>;
664 def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBSBrr")>;
665 def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBSWYrr")>;
666 def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBSWrr")>;
667 def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBUSBYrr")>;
668 def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBUSBrr")>;
669 def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBUSWYrr")>;
670 def: InstRW<[SKLWriteResGroup5], (instregex "VPSUBUSWrr")>;
671
672 def SKLWriteResGroup6 : SchedWriteRes<[SKLPort05]> {
673   let Latency = 1;
674   let NumMicroOps = 1;
675   let ResourceCycles = [1];
676 }
677 def: InstRW<[SKLWriteResGroup6], (instregex "FINCSTP")>;
678 def: InstRW<[SKLWriteResGroup6], (instregex "FNOP")>;
679 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_MOVQ64rr(_REV)?")>;
680 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PABSBrr64")>;
681 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PABSDrr64")>;
682 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PABSWrr64")>;
683 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PADDBirr")>;
684 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PADDDirr")>;
685 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PADDQirr")>;
686 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PADDWirr")>;
687 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PANDNirr")>;
688 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PANDirr")>;
689 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PORirr")>;
690 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSIGNBrr64")>;
691 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSIGNDrr64")>;
692 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSIGNWrr64")>;
693 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSUBBirr")>;
694 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSUBDirr")>;
695 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSUBQirr")>;
696 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PSUBWirr")>;
697 def: InstRW<[SKLWriteResGroup6], (instregex "MMX_PXORirr")>;
698
699 def SKLWriteResGroup7 : SchedWriteRes<[SKLPort06]> {
700   let Latency = 1;
701   let NumMicroOps = 1;
702   let ResourceCycles = [1];
703 }
704 def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)ri")>;
705 def: InstRW<[SKLWriteResGroup7], (instregex "ADC(16|32|64)rr(_REV)?")>;
706 def: InstRW<[SKLWriteResGroup7], (instregex "ADC8rr(_REV)?")>;
707 def: InstRW<[SKLWriteResGroup7], (instregex "ADCX(32|64)rr")>;
708 def: InstRW<[SKLWriteResGroup7], (instregex "ADOX(32|64)rr")>;
709 def: InstRW<[SKLWriteResGroup7], (instregex "BT(16|32|64)ri8")>;
710 def: InstRW<[SKLWriteResGroup7], (instregex "BT(16|32|64)rr")>;
711 def: InstRW<[SKLWriteResGroup7], (instregex "BTC(16|32|64)ri8")>;
712 def: InstRW<[SKLWriteResGroup7], (instregex "BTC(16|32|64)rr")>;
713 def: InstRW<[SKLWriteResGroup7], (instregex "BTR(16|32|64)ri8")>;
714 def: InstRW<[SKLWriteResGroup7], (instregex "BTR(16|32|64)rr")>;
715 def: InstRW<[SKLWriteResGroup7], (instregex "BTS(16|32|64)ri8")>;
716 def: InstRW<[SKLWriteResGroup7], (instregex "BTS(16|32|64)rr")>;
717 def: InstRW<[SKLWriteResGroup7], (instregex "CDQ")>;
718 def: InstRW<[SKLWriteResGroup7], (instregex "CLAC")>;
719 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVAE(16|32|64)rr")>;
720 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVB(16|32|64)rr")>;
721 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVE(16|32|64)rr")>;
722 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVG(16|32|64)rr")>;
723 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVGE(16|32|64)rr")>;
724 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVL(16|32|64)rr")>;
725 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVLE(16|32|64)rr")>;
726 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVNE(16|32|64)rr")>;
727 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVNO(16|32|64)rr")>;
728 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVNP(16|32|64)rr")>;
729 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVNS(16|32|64)rr")>;
730 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVO(16|32|64)rr")>;
731 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVP(16|32|64)rr")>;
732 def: InstRW<[SKLWriteResGroup7], (instregex "CMOVS(16|32|64)rr")>;
733 def: InstRW<[SKLWriteResGroup7], (instregex "CQO")>;
734 def: InstRW<[SKLWriteResGroup7], (instregex "JAE_1")>;
735 def: InstRW<[SKLWriteResGroup7], (instregex "JAE_4")>;
736 def: InstRW<[SKLWriteResGroup7], (instregex "JA_1")>;
737 def: InstRW<[SKLWriteResGroup7], (instregex "JA_4")>;
738 def: InstRW<[SKLWriteResGroup7], (instregex "JBE_1")>;
739 def: InstRW<[SKLWriteResGroup7], (instregex "JBE_4")>;
740 def: InstRW<[SKLWriteResGroup7], (instregex "JB_1")>;
741 def: InstRW<[SKLWriteResGroup7], (instregex "JB_4")>;
742 def: InstRW<[SKLWriteResGroup7], (instregex "JE_1")>;
743 def: InstRW<[SKLWriteResGroup7], (instregex "JE_4")>;
744 def: InstRW<[SKLWriteResGroup7], (instregex "JGE_1")>;
745 def: InstRW<[SKLWriteResGroup7], (instregex "JGE_4")>;
746 def: InstRW<[SKLWriteResGroup7], (instregex "JG_1")>;
747 def: InstRW<[SKLWriteResGroup7], (instregex "JG_4")>;
748 def: InstRW<[SKLWriteResGroup7], (instregex "JLE_1")>;
749 def: InstRW<[SKLWriteResGroup7], (instregex "JLE_4")>;
750 def: InstRW<[SKLWriteResGroup7], (instregex "JL_1")>;
751 def: InstRW<[SKLWriteResGroup7], (instregex "JL_4")>;
752 def: InstRW<[SKLWriteResGroup7], (instregex "JMP_1")>;
753 def: InstRW<[SKLWriteResGroup7], (instregex "JMP_4")>;
754 def: InstRW<[SKLWriteResGroup7], (instregex "JNE_1")>;
755 def: InstRW<[SKLWriteResGroup7], (instregex "JNE_4")>;
756 def: InstRW<[SKLWriteResGroup7], (instregex "JNO_1")>;
757 def: InstRW<[SKLWriteResGroup7], (instregex "JNO_4")>;
758 def: InstRW<[SKLWriteResGroup7], (instregex "JNP_1")>;
759 def: InstRW<[SKLWriteResGroup7], (instregex "JNP_4")>;
760 def: InstRW<[SKLWriteResGroup7], (instregex "JNS_1")>;
761 def: InstRW<[SKLWriteResGroup7], (instregex "JNS_4")>;
762 def: InstRW<[SKLWriteResGroup7], (instregex "JO_1")>;
763 def: InstRW<[SKLWriteResGroup7], (instregex "JO_4")>;
764 def: InstRW<[SKLWriteResGroup7], (instregex "JP_1")>;
765 def: InstRW<[SKLWriteResGroup7], (instregex "JP_4")>;
766 def: InstRW<[SKLWriteResGroup7], (instregex "JS_1")>;
767 def: InstRW<[SKLWriteResGroup7], (instregex "JS_4")>;
768 def: InstRW<[SKLWriteResGroup7], (instregex "RORX(32|64)ri")>;
769 def: InstRW<[SKLWriteResGroup7], (instregex "SAR(16|32|64)r1")>;
770 def: InstRW<[SKLWriteResGroup7], (instregex "SAR(16|32|64)ri")>;
771 def: InstRW<[SKLWriteResGroup7], (instregex "SAR8r1")>;
772 def: InstRW<[SKLWriteResGroup7], (instregex "SAR8ri")>;
773 def: InstRW<[SKLWriteResGroup7], (instregex "SARX(32|64)rr")>;
774 def: InstRW<[SKLWriteResGroup7], (instregex "SBB(16|32|64)ri")>;
775 def: InstRW<[SKLWriteResGroup7], (instregex "SBB(16|32|64)rr(_REV)?")>;
776 def: InstRW<[SKLWriteResGroup7], (instregex "SBB8rr(_REV)?")>;
777 def: InstRW<[SKLWriteResGroup7], (instregex "SETAEr")>;
778 def: InstRW<[SKLWriteResGroup7], (instregex "SETBr")>;
779 def: InstRW<[SKLWriteResGroup7], (instregex "SETEr")>;
780 def: InstRW<[SKLWriteResGroup7], (instregex "SETGEr")>;
781 def: InstRW<[SKLWriteResGroup7], (instregex "SETGr")>;
782 def: InstRW<[SKLWriteResGroup7], (instregex "SETLEr")>;
783 def: InstRW<[SKLWriteResGroup7], (instregex "SETLr")>;
784 def: InstRW<[SKLWriteResGroup7], (instregex "SETNEr")>;
785 def: InstRW<[SKLWriteResGroup7], (instregex "SETNOr")>;
786 def: InstRW<[SKLWriteResGroup7], (instregex "SETNPr")>;
787 def: InstRW<[SKLWriteResGroup7], (instregex "SETNSr")>;
788 def: InstRW<[SKLWriteResGroup7], (instregex "SETOr")>;
789 def: InstRW<[SKLWriteResGroup7], (instregex "SETPr")>;
790 def: InstRW<[SKLWriteResGroup7], (instregex "SETSr")>;
791 def: InstRW<[SKLWriteResGroup7], (instregex "SHL(16|32|64)r1")>;
792 def: InstRW<[SKLWriteResGroup7], (instregex "SHL(16|32|64)ri")>;
793 def: InstRW<[SKLWriteResGroup7], (instregex "SHL8r1")>;
794 def: InstRW<[SKLWriteResGroup7], (instregex "SHL8ri")>;
795 def: InstRW<[SKLWriteResGroup7], (instregex "SHLX(32|64)rr")>;
796 def: InstRW<[SKLWriteResGroup7], (instregex "SHR(16|32|64)r1")>;
797 def: InstRW<[SKLWriteResGroup7], (instregex "SHR(16|32|64)ri")>;
798 def: InstRW<[SKLWriteResGroup7], (instregex "SHR8r1")>;
799 def: InstRW<[SKLWriteResGroup7], (instregex "SHR8ri")>;
800 def: InstRW<[SKLWriteResGroup7], (instregex "SHRX(32|64)rr")>;
801 def: InstRW<[SKLWriteResGroup7], (instregex "STAC")>;
802
803 def SKLWriteResGroup8 : SchedWriteRes<[SKLPort15]> {
804   let Latency = 1;
805   let NumMicroOps = 1;
806   let ResourceCycles = [1];
807 }
808 def: InstRW<[SKLWriteResGroup8], (instregex "ANDN(32|64)rr")>;
809 def: InstRW<[SKLWriteResGroup8], (instregex "BLSI(32|64)rr")>;
810 def: InstRW<[SKLWriteResGroup8], (instregex "BLSMSK(32|64)rr")>;
811 def: InstRW<[SKLWriteResGroup8], (instregex "BLSR(32|64)rr")>;
812 def: InstRW<[SKLWriteResGroup8], (instregex "BZHI(32|64)rr")>;
813 def: InstRW<[SKLWriteResGroup8], (instregex "LEA(16|32|64)(_32)?r")>;
814
815 def SKLWriteResGroup9 : SchedWriteRes<[SKLPort015]> {
816   let Latency = 1;
817   let NumMicroOps = 1;
818   let ResourceCycles = [1];
819 }
820 def: InstRW<[SKLWriteResGroup9], (instregex "ANDNPDrr")>;
821 def: InstRW<[SKLWriteResGroup9], (instregex "ANDNPSrr")>;
822 def: InstRW<[SKLWriteResGroup9], (instregex "ANDPDrr")>;
823 def: InstRW<[SKLWriteResGroup9], (instregex "ANDPSrr")>;
824 def: InstRW<[SKLWriteResGroup9], (instregex "BLENDPDrri")>;
825 def: InstRW<[SKLWriteResGroup9], (instregex "BLENDPSrri")>;
826 def: InstRW<[SKLWriteResGroup9], (instregex "MMX_MOVD64from64rr")>;
827 def: InstRW<[SKLWriteResGroup9], (instregex "MOVAPDrr(_REV)?")>;
828 def: InstRW<[SKLWriteResGroup9], (instregex "MOVAPSrr(_REV)?")>;
829 def: InstRW<[SKLWriteResGroup9], (instregex "MOVDQArr(_REV)?")>;
830 def: InstRW<[SKLWriteResGroup9], (instregex "MOVDQUrr(_REV)?")>;
831 def: InstRW<[SKLWriteResGroup9], (instregex "MOVPQI2QIrr")>;
832 def: InstRW<[SKLWriteResGroup9], (instregex "MOVSSrr(_REV)?")>;
833 def: InstRW<[SKLWriteResGroup9], (instregex "ORPDrr")>;
834 def: InstRW<[SKLWriteResGroup9], (instregex "ORPSrr")>;
835 def: InstRW<[SKLWriteResGroup9], (instregex "PADDBrr")>;
836 def: InstRW<[SKLWriteResGroup9], (instregex "PADDDrr")>;
837 def: InstRW<[SKLWriteResGroup9], (instregex "PADDQrr")>;
838 def: InstRW<[SKLWriteResGroup9], (instregex "PADDWrr")>;
839 def: InstRW<[SKLWriteResGroup9], (instregex "PANDNrr")>;
840 def: InstRW<[SKLWriteResGroup9], (instregex "PANDrr")>;
841 def: InstRW<[SKLWriteResGroup9], (instregex "PORrr")>;
842 def: InstRW<[SKLWriteResGroup9], (instregex "PSUBBrr")>;
843 def: InstRW<[SKLWriteResGroup9], (instregex "PSUBDrr")>;
844 def: InstRW<[SKLWriteResGroup9], (instregex "PSUBQrr")>;
845 def: InstRW<[SKLWriteResGroup9], (instregex "PSUBWrr")>;
846 def: InstRW<[SKLWriteResGroup9], (instregex "PXORrr")>;
847 def: InstRW<[SKLWriteResGroup9], (instregex "VANDNPDYrr")>;
848 def: InstRW<[SKLWriteResGroup9], (instregex "VANDNPDrr")>;
849 def: InstRW<[SKLWriteResGroup9], (instregex "VANDNPSYrr")>;
850 def: InstRW<[SKLWriteResGroup9], (instregex "VANDNPSrr")>;
851 def: InstRW<[SKLWriteResGroup9], (instregex "VANDPDYrr")>;
852 def: InstRW<[SKLWriteResGroup9], (instregex "VANDPDrr")>;
853 def: InstRW<[SKLWriteResGroup9], (instregex "VANDPSYrr")>;
854 def: InstRW<[SKLWriteResGroup9], (instregex "VANDPSrr")>;
855 def: InstRW<[SKLWriteResGroup9], (instregex "VBLENDPDYrri")>;
856 def: InstRW<[SKLWriteResGroup9], (instregex "VBLENDPDrri")>;
857 def: InstRW<[SKLWriteResGroup9], (instregex "VBLENDPSYrri")>;
858 def: InstRW<[SKLWriteResGroup9], (instregex "VBLENDPSrri")>;
859 def: InstRW<[SKLWriteResGroup9], (instregex "VMOVAPDYrr(_REV)?")>;
860 def: InstRW<[SKLWriteResGroup9], (instregex "VMOVAPDrr(_REV)?")>;
861 def: InstRW<[SKLWriteResGroup9], (instregex "VMOVAPSYrr(_REV)?")>;
862 def: InstRW<[SKLWriteResGroup9], (instregex "VMOVAPSrr(_REV)?")>;
863 def: InstRW<[SKLWriteResGroup9], (instregex "VMOVDQAYrr(_REV)?")>;
864 def: InstRW<[SKLWriteResGroup9], (instregex "VMOVDQArr(_REV)?")>;
865 def: InstRW<[SKLWriteResGroup9], (instregex "VMOVDQUYrr(_REV)?")>;
866 def: InstRW<[SKLWriteResGroup9], (instregex "VMOVDQUrr(_REV)?")>;
867 def: InstRW<[SKLWriteResGroup9], (instregex "VMOVPQI2QIrr")>;
868 def: InstRW<[SKLWriteResGroup9], (instregex "VMOVSSrr(_REV)?")>;
869 def: InstRW<[SKLWriteResGroup9], (instregex "VMOVZPQILo2PQIrr")>;
870 def: InstRW<[SKLWriteResGroup9], (instregex "VORPDYrr")>;
871 def: InstRW<[SKLWriteResGroup9], (instregex "VORPDrr")>;
872 def: InstRW<[SKLWriteResGroup9], (instregex "VORPSYrr")>;
873 def: InstRW<[SKLWriteResGroup9], (instregex "VORPSrr")>;
874 def: InstRW<[SKLWriteResGroup9], (instregex "VPADDBYrr")>;
875 def: InstRW<[SKLWriteResGroup9], (instregex "VPADDBrr")>;
876 def: InstRW<[SKLWriteResGroup9], (instregex "VPADDDYrr")>;
877 def: InstRW<[SKLWriteResGroup9], (instregex "VPADDDrr")>;
878 def: InstRW<[SKLWriteResGroup9], (instregex "VPADDQYrr")>;
879 def: InstRW<[SKLWriteResGroup9], (instregex "VPADDQrr")>;
880 def: InstRW<[SKLWriteResGroup9], (instregex "VPADDWYrr")>;
881 def: InstRW<[SKLWriteResGroup9], (instregex "VPADDWrr")>;
882 def: InstRW<[SKLWriteResGroup9], (instregex "VPANDNYrr")>;
883 def: InstRW<[SKLWriteResGroup9], (instregex "VPANDNrr")>;
884 def: InstRW<[SKLWriteResGroup9], (instregex "VPANDYrr")>;
885 def: InstRW<[SKLWriteResGroup9], (instregex "VPANDrr")>;
886 def: InstRW<[SKLWriteResGroup9], (instregex "VPBLENDDYrri")>;
887 def: InstRW<[SKLWriteResGroup9], (instregex "VPBLENDDrri")>;
888 def: InstRW<[SKLWriteResGroup9], (instregex "VPORYrr")>;
889 def: InstRW<[SKLWriteResGroup9], (instregex "VPORrr")>;
890 def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBBYrr")>;
891 def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBBrr")>;
892 def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBDYrr")>;
893 def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBDrr")>;
894 def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBQYrr")>;
895 def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBQrr")>;
896 def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBWYrr")>;
897 def: InstRW<[SKLWriteResGroup9], (instregex "VPSUBWrr")>;
898 def: InstRW<[SKLWriteResGroup9], (instregex "VPXORYrr")>;
899 def: InstRW<[SKLWriteResGroup9], (instregex "VPXORrr")>;
900 def: InstRW<[SKLWriteResGroup9], (instregex "VXORPDYrr")>;
901 def: InstRW<[SKLWriteResGroup9], (instregex "VXORPDrr")>;
902 def: InstRW<[SKLWriteResGroup9], (instregex "VXORPSYrr")>;
903 def: InstRW<[SKLWriteResGroup9], (instregex "VXORPSrr")>;
904 def: InstRW<[SKLWriteResGroup9], (instregex "XORPDrr")>;
905 def: InstRW<[SKLWriteResGroup9], (instregex "XORPSrr")>;
906
907 def SKLWriteResGroup10 : SchedWriteRes<[SKLPort0156]> {
908   let Latency = 1;
909   let NumMicroOps = 1;
910   let ResourceCycles = [1];
911 }
912 def: InstRW<[SKLWriteResGroup10], (instregex "ADD(16|32|64)ri")>;
913 def: InstRW<[SKLWriteResGroup10], (instregex "ADD(16|32|64)rr(_REV)?")>;
914 def: InstRW<[SKLWriteResGroup10], (instregex "ADD8i8")>;
915 def: InstRW<[SKLWriteResGroup10], (instregex "ADD8ri")>;
916 def: InstRW<[SKLWriteResGroup10], (instregex "ADD8rr(_REV)?")>;
917 def: InstRW<[SKLWriteResGroup10], (instregex "AND(16|32|64)ri")>;
918 def: InstRW<[SKLWriteResGroup10], (instregex "AND(16|32|64)rr(_REV)?")>;
919 def: InstRW<[SKLWriteResGroup10], (instregex "AND8i8")>;
920 def: InstRW<[SKLWriteResGroup10], (instregex "AND8ri")>;
921 def: InstRW<[SKLWriteResGroup10], (instregex "AND8rr(_REV)?")>;
922 def: InstRW<[SKLWriteResGroup10], (instregex "CBW")>;
923 def: InstRW<[SKLWriteResGroup10], (instregex "CLC")>;
924 def: InstRW<[SKLWriteResGroup10], (instregex "CMC")>;
925 def: InstRW<[SKLWriteResGroup10], (instregex "CMP(16|32|64)ri")>;
926 def: InstRW<[SKLWriteResGroup10], (instregex "CMP(16|32|64)rr(_REV)?")>;
927 def: InstRW<[SKLWriteResGroup10], (instregex "CMP8i8")>;
928 def: InstRW<[SKLWriteResGroup10], (instregex "CMP8ri")>;
929 def: InstRW<[SKLWriteResGroup10], (instregex "CMP8rr(_REV)?")>;
930 def: InstRW<[SKLWriteResGroup10], (instregex "CWDE")>;
931 def: InstRW<[SKLWriteResGroup10], (instregex "DEC(16|32|64)r")>;
932 def: InstRW<[SKLWriteResGroup10], (instregex "DEC8r")>;
933 def: InstRW<[SKLWriteResGroup10], (instregex "INC(16|32|64)r")>;
934 def: InstRW<[SKLWriteResGroup10], (instregex "INC8r")>;
935 def: InstRW<[SKLWriteResGroup10], (instregex "LAHF")>;
936 def: InstRW<[SKLWriteResGroup10], (instregex "MOV(16|32|64)rr(_REV)?")>;
937 def: InstRW<[SKLWriteResGroup10], (instregex "MOV8ri(_alt)?")>;
938 def: InstRW<[SKLWriteResGroup10], (instregex "MOV8rr(_REV)?")>;
939 def: InstRW<[SKLWriteResGroup10], (instregex "MOVSX(16|32|64)rr16")>;
940 def: InstRW<[SKLWriteResGroup10], (instregex "MOVSX(16|32|64)rr32")>;
941 def: InstRW<[SKLWriteResGroup10], (instregex "MOVSX(16|32|64)rr8")>;
942 def: InstRW<[SKLWriteResGroup10], (instregex "MOVZX(16|32|64)rr16")>;
943 def: InstRW<[SKLWriteResGroup10], (instregex "MOVZX(16|32|64)rr8")>;
944 def: InstRW<[SKLWriteResGroup10], (instregex "NEG(16|32|64)r")>;
945 def: InstRW<[SKLWriteResGroup10], (instregex "NEG8r")>;
946 def: InstRW<[SKLWriteResGroup10], (instregex "NOOP")>;
947 def: InstRW<[SKLWriteResGroup10], (instregex "NOT(16|32|64)r")>;
948 def: InstRW<[SKLWriteResGroup10], (instregex "NOT8r")>;
949 def: InstRW<[SKLWriteResGroup10], (instregex "OR(16|32|64)ri")>;
950 def: InstRW<[SKLWriteResGroup10], (instregex "OR(16|32|64)rr(_REV)?")>;
951 def: InstRW<[SKLWriteResGroup10], (instregex "OR8i8")>;
952 def: InstRW<[SKLWriteResGroup10], (instregex "OR8ri")>;
953 def: InstRW<[SKLWriteResGroup10], (instregex "OR8rr(_REV)?")>;
954 def: InstRW<[SKLWriteResGroup10], (instregex "SAHF")>;
955 def: InstRW<[SKLWriteResGroup10], (instregex "SGDT64m")>;
956 def: InstRW<[SKLWriteResGroup10], (instregex "SIDT64m")>;
957 def: InstRW<[SKLWriteResGroup10], (instregex "SLDT64m")>;
958 def: InstRW<[SKLWriteResGroup10], (instregex "SMSW16m")>;
959 def: InstRW<[SKLWriteResGroup10], (instregex "STC")>;
960 def: InstRW<[SKLWriteResGroup10], (instregex "STRm")>;
961 def: InstRW<[SKLWriteResGroup10], (instregex "SUB(16|32|64)ri")>;
962 def: InstRW<[SKLWriteResGroup10], (instregex "SUB(16|32|64)rr(_REV)?")>;
963 def: InstRW<[SKLWriteResGroup10], (instregex "SUB8i8")>;
964 def: InstRW<[SKLWriteResGroup10], (instregex "SUB8ri")>;
965 def: InstRW<[SKLWriteResGroup10], (instregex "SUB8rr(_REV)?")>;
966 def: InstRW<[SKLWriteResGroup10], (instregex "SYSCALL")>;
967 def: InstRW<[SKLWriteResGroup10], (instregex "TEST(16|32|64)rr")>;
968 def: InstRW<[SKLWriteResGroup10], (instregex "TEST8i8")>;
969 def: InstRW<[SKLWriteResGroup10], (instregex "TEST8ri")>;
970 def: InstRW<[SKLWriteResGroup10], (instregex "TEST8rr")>;
971 def: InstRW<[SKLWriteResGroup10], (instregex "XCHG(16|32|64)rr")>;
972 def: InstRW<[SKLWriteResGroup10], (instregex "XOR(16|32|64)ri")>;
973 def: InstRW<[SKLWriteResGroup10], (instregex "XOR(16|32|64)rr(_REV)?")>;
974 def: InstRW<[SKLWriteResGroup10], (instregex "XOR8i8")>;
975 def: InstRW<[SKLWriteResGroup10], (instregex "XOR8ri")>;
976 def: InstRW<[SKLWriteResGroup10], (instregex "XOR8rr(_REV)?")>;
977
978 def SKLWriteResGroup11 : SchedWriteRes<[SKLPort4,SKLPort237]> {
979   let Latency = 1;
980   let NumMicroOps = 2;
981   let ResourceCycles = [1,1];
982 }
983 def: InstRW<[SKLWriteResGroup11], (instregex "FBSTPm")>;
984 def: InstRW<[SKLWriteResGroup11], (instregex "MMX_MOVD64from64rm")>;
985 def: InstRW<[SKLWriteResGroup11], (instregex "MMX_MOVD64mr")>;
986 def: InstRW<[SKLWriteResGroup11], (instregex "MMX_MOVNTQmr")>;
987 def: InstRW<[SKLWriteResGroup11], (instregex "MMX_MOVQ64mr")>;
988 def: InstRW<[SKLWriteResGroup11], (instregex "MOV(16|32|64)mr")>;
989 def: InstRW<[SKLWriteResGroup11], (instregex "MOV8mi")>;
990 def: InstRW<[SKLWriteResGroup11], (instregex "MOV8mr")>;
991 def: InstRW<[SKLWriteResGroup11], (instregex "MOVAPDmr")>;
992 def: InstRW<[SKLWriteResGroup11], (instregex "MOVAPSmr")>;
993 def: InstRW<[SKLWriteResGroup11], (instregex "MOVDQAmr")>;
994 def: InstRW<[SKLWriteResGroup11], (instregex "MOVDQUmr")>;
995 def: InstRW<[SKLWriteResGroup11], (instregex "MOVHPDmr")>;
996 def: InstRW<[SKLWriteResGroup11], (instregex "MOVHPSmr")>;
997 def: InstRW<[SKLWriteResGroup11], (instregex "MOVLPDmr")>;
998 def: InstRW<[SKLWriteResGroup11], (instregex "MOVLPSmr")>;
999 def: InstRW<[SKLWriteResGroup11], (instregex "MOVNTDQmr")>;
1000 def: InstRW<[SKLWriteResGroup11], (instregex "MOVNTI_64mr")>;
1001 def: InstRW<[SKLWriteResGroup11], (instregex "MOVNTImr")>;
1002 def: InstRW<[SKLWriteResGroup11], (instregex "MOVNTPDmr")>;
1003 def: InstRW<[SKLWriteResGroup11], (instregex "MOVNTPSmr")>;
1004 def: InstRW<[SKLWriteResGroup11], (instregex "MOVPDI2DImr")>;
1005 def: InstRW<[SKLWriteResGroup11], (instregex "MOVPQI2QImr")>;
1006 def: InstRW<[SKLWriteResGroup11], (instregex "MOVPQIto64mr")>;
1007 def: InstRW<[SKLWriteResGroup11], (instregex "MOVSDmr")>;
1008 def: InstRW<[SKLWriteResGroup11], (instregex "MOVSSmr")>;
1009 def: InstRW<[SKLWriteResGroup11], (instregex "MOVUPDmr")>;
1010 def: InstRW<[SKLWriteResGroup11], (instregex "MOVUPSmr")>;
1011 def: InstRW<[SKLWriteResGroup11], (instregex "ST_FP32m")>;
1012 def: InstRW<[SKLWriteResGroup11], (instregex "ST_FP64m")>;
1013 def: InstRW<[SKLWriteResGroup11], (instregex "ST_FP80m")>;
1014 def: InstRW<[SKLWriteResGroup11], (instregex "VEXTRACTF128mr")>;
1015 def: InstRW<[SKLWriteResGroup11], (instregex "VEXTRACTI128mr")>;
1016 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVAPDYmr")>;
1017 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVAPDmr")>;
1018 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVAPSYmr")>;
1019 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVAPSmr")>;
1020 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVDQAYmr")>;
1021 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVDQAmr")>;
1022 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVDQUYmr")>;
1023 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVDQUmr")>;
1024 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVHPDmr")>;
1025 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVHPSmr")>;
1026 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVLPDmr")>;
1027 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVLPSmr")>;
1028 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTDQYmr")>;
1029 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTDQmr")>;
1030 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTPDYmr")>;
1031 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTPDmr")>;
1032 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTPSYmr")>;
1033 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVNTPSmr")>;
1034 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVPDI2DImr")>;
1035 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVPQI2QImr")>;
1036 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVPQIto64mr")>;
1037 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVSDmr")>;
1038 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVSSmr")>;
1039 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVUPDYmr")>;
1040 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVUPDmr")>;
1041 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVUPSYmr")>;
1042 def: InstRW<[SKLWriteResGroup11], (instregex "VMOVUPSmr")>;
1043 def: InstRW<[SKLWriteResGroup11], (instregex "VMPTRSTm")>;
1044
1045 def SKLWriteResGroup12 : SchedWriteRes<[SKLPort0]> {
1046   let Latency = 2;
1047   let NumMicroOps = 1;
1048   let ResourceCycles = [1];
1049 }
1050 def: InstRW<[SKLWriteResGroup12], (instregex "COMISDrr")>;
1051 def: InstRW<[SKLWriteResGroup12], (instregex "COMISSrr")>;
1052 def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64from64rr")>;
1053 def: InstRW<[SKLWriteResGroup12], (instregex "MMX_MOVD64grr")>;
1054 def: InstRW<[SKLWriteResGroup12], (instregex "MMX_PMOVMSKBrr")>;
1055 def: InstRW<[SKLWriteResGroup12], (instregex "MOVMSKPDrr")>;
1056 def: InstRW<[SKLWriteResGroup12], (instregex "MOVMSKPSrr")>;
1057 def: InstRW<[SKLWriteResGroup12], (instregex "MOVPDI2DIrr")>;
1058 def: InstRW<[SKLWriteResGroup12], (instregex "MOVPQIto64rr")>;
1059 def: InstRW<[SKLWriteResGroup12], (instregex "PMOVMSKBrr")>;
1060 def: InstRW<[SKLWriteResGroup12], (instregex "UCOMISDrr")>;
1061 def: InstRW<[SKLWriteResGroup12], (instregex "UCOMISSrr")>;
1062 def: InstRW<[SKLWriteResGroup12], (instregex "VCOMISDrr")>;
1063 def: InstRW<[SKLWriteResGroup12], (instregex "VCOMISSrr")>;
1064 def: InstRW<[SKLWriteResGroup12], (instregex "VMOVMSKPDYrr")>;
1065 def: InstRW<[SKLWriteResGroup12], (instregex "VMOVMSKPDrr")>;
1066 def: InstRW<[SKLWriteResGroup12], (instregex "VMOVMSKPSYrr")>;
1067 def: InstRW<[SKLWriteResGroup12], (instregex "VMOVMSKPSrr")>;
1068 def: InstRW<[SKLWriteResGroup12], (instregex "VMOVPDI2DIrr")>;
1069 def: InstRW<[SKLWriteResGroup12], (instregex "VMOVPQIto64rr")>;
1070 def: InstRW<[SKLWriteResGroup12], (instregex "VPMOVMSKBYrr")>;
1071 def: InstRW<[SKLWriteResGroup12], (instregex "VPMOVMSKBrr")>;
1072 def: InstRW<[SKLWriteResGroup12], (instregex "VTESTPDYrr")>;
1073 def: InstRW<[SKLWriteResGroup12], (instregex "VTESTPDrr")>;
1074 def: InstRW<[SKLWriteResGroup12], (instregex "VTESTPSYrr")>;
1075 def: InstRW<[SKLWriteResGroup12], (instregex "VTESTPSrr")>;
1076 def: InstRW<[SKLWriteResGroup12], (instregex "VUCOMISDrr")>;
1077 def: InstRW<[SKLWriteResGroup12], (instregex "VUCOMISSrr")>;
1078
1079 def SKLWriteResGroup13 : SchedWriteRes<[SKLPort5]> {
1080   let Latency = 2;
1081   let NumMicroOps = 2;
1082   let ResourceCycles = [2];
1083 }
1084 def: InstRW<[SKLWriteResGroup13], (instregex "MMX_MOVQ2DQrr")>;
1085 def: InstRW<[SKLWriteResGroup13], (instregex "MMX_PINSRWirri")>;
1086 def: InstRW<[SKLWriteResGroup13], (instregex "PINSRBrr")>;
1087 def: InstRW<[SKLWriteResGroup13], (instregex "PINSRDrr")>;
1088 def: InstRW<[SKLWriteResGroup13], (instregex "PINSRQrr")>;
1089 def: InstRW<[SKLWriteResGroup13], (instregex "PINSRWrri")>;
1090 def: InstRW<[SKLWriteResGroup13], (instregex "VPINSRBrr")>;
1091 def: InstRW<[SKLWriteResGroup13], (instregex "VPINSRDrr")>;
1092 def: InstRW<[SKLWriteResGroup13], (instregex "VPINSRQrr")>;
1093 def: InstRW<[SKLWriteResGroup13], (instregex "VPINSRWrri")>;
1094
1095 def SKLWriteResGroup14 : SchedWriteRes<[SKLPort05]> {
1096   let Latency = 2;
1097   let NumMicroOps = 2;
1098   let ResourceCycles = [2];
1099 }
1100 def: InstRW<[SKLWriteResGroup14], (instregex "FDECSTP")>;
1101 def: InstRW<[SKLWriteResGroup14], (instregex "MMX_MOVDQ2Qrr")>;
1102
1103 def SKLWriteResGroup15 : SchedWriteRes<[SKLPort06]> {
1104   let Latency = 2;
1105   let NumMicroOps = 2;
1106   let ResourceCycles = [2];
1107 }
1108 def: InstRW<[SKLWriteResGroup15], (instregex "CMOVA(16|32|64)rr")>;
1109 def: InstRW<[SKLWriteResGroup15], (instregex "CMOVBE(16|32|64)rr")>;
1110 def: InstRW<[SKLWriteResGroup15], (instregex "ROL(16|32|64)r1")>;
1111 def: InstRW<[SKLWriteResGroup15], (instregex "ROL(16|32|64)ri")>;
1112 def: InstRW<[SKLWriteResGroup15], (instregex "ROL8r1")>;
1113 def: InstRW<[SKLWriteResGroup15], (instregex "ROL8ri")>;
1114 def: InstRW<[SKLWriteResGroup15], (instregex "ROR(16|32|64)r1")>;
1115 def: InstRW<[SKLWriteResGroup15], (instregex "ROR(16|32|64)ri")>;
1116 def: InstRW<[SKLWriteResGroup15], (instregex "ROR8r1")>;
1117 def: InstRW<[SKLWriteResGroup15], (instregex "ROR8ri")>;
1118 def: InstRW<[SKLWriteResGroup15], (instregex "SETAr")>;
1119 def: InstRW<[SKLWriteResGroup15], (instregex "SETBEr")>;
1120
1121 def SKLWriteResGroup16 : SchedWriteRes<[SKLPort015]> {
1122   let Latency = 2;
1123   let NumMicroOps = 2;
1124   let ResourceCycles = [2];
1125 }
1126 def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPDrr0")>;
1127 def: InstRW<[SKLWriteResGroup16], (instregex "BLENDVPSrr0")>;
1128 def: InstRW<[SKLWriteResGroup16], (instregex "PBLENDVBrr0")>;
1129 def: InstRW<[SKLWriteResGroup16], (instregex "VBLENDVPDYrr")>;
1130 def: InstRW<[SKLWriteResGroup16], (instregex "VBLENDVPDrr")>;
1131 def: InstRW<[SKLWriteResGroup16], (instregex "VBLENDVPSYrr")>;
1132 def: InstRW<[SKLWriteResGroup16], (instregex "VBLENDVPSrr")>;
1133 def: InstRW<[SKLWriteResGroup16], (instregex "VPBLENDVBYrr")>;
1134 def: InstRW<[SKLWriteResGroup16], (instregex "VPBLENDVBrr")>;
1135
1136 def SKLWriteResGroup17 : SchedWriteRes<[SKLPort0156]> {
1137   let Latency = 2;
1138   let NumMicroOps = 2;
1139   let ResourceCycles = [2];
1140 }
1141 def: InstRW<[SKLWriteResGroup17], (instregex "LFENCE")>;
1142 def: InstRW<[SKLWriteResGroup17], (instregex "WAIT")>;
1143 def: InstRW<[SKLWriteResGroup17], (instregex "XGETBV")>;
1144
1145 def SKLWriteResGroup18 : SchedWriteRes<[SKLPort0,SKLPort237]> {
1146   let Latency = 2;
1147   let NumMicroOps = 2;
1148   let ResourceCycles = [1,1];
1149 }
1150 def: InstRW<[SKLWriteResGroup18], (instregex "MMX_MASKMOVQ64")>;
1151 def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVDQU")>;
1152 def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPDYmr")>;
1153 def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPDmr")>;
1154 def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPSYmr")>;
1155 def: InstRW<[SKLWriteResGroup18], (instregex "VMASKMOVPSmr")>;
1156 def: InstRW<[SKLWriteResGroup18], (instregex "VPMASKMOVDYmr")>;
1157 def: InstRW<[SKLWriteResGroup18], (instregex "VPMASKMOVDmr")>;
1158 def: InstRW<[SKLWriteResGroup18], (instregex "VPMASKMOVQYmr")>;
1159 def: InstRW<[SKLWriteResGroup18], (instregex "VPMASKMOVQmr")>;
1160
1161 def SKLWriteResGroup19 : SchedWriteRes<[SKLPort5,SKLPort01]> {
1162   let Latency = 2;
1163   let NumMicroOps = 2;
1164   let ResourceCycles = [1,1];
1165 }
1166 def: InstRW<[SKLWriteResGroup19], (instregex "PSLLDrr")>;
1167 def: InstRW<[SKLWriteResGroup19], (instregex "PSLLQrr")>;
1168 def: InstRW<[SKLWriteResGroup19], (instregex "PSLLWrr")>;
1169 def: InstRW<[SKLWriteResGroup19], (instregex "PSRADrr")>;
1170 def: InstRW<[SKLWriteResGroup19], (instregex "PSRAWrr")>;
1171 def: InstRW<[SKLWriteResGroup19], (instregex "PSRLDrr")>;
1172 def: InstRW<[SKLWriteResGroup19], (instregex "PSRLQrr")>;
1173 def: InstRW<[SKLWriteResGroup19], (instregex "PSRLWrr")>;
1174 def: InstRW<[SKLWriteResGroup19], (instregex "VPSLLDrr")>;
1175 def: InstRW<[SKLWriteResGroup19], (instregex "VPSLLQrr")>;
1176 def: InstRW<[SKLWriteResGroup19], (instregex "VPSLLWrr")>;
1177 def: InstRW<[SKLWriteResGroup19], (instregex "VPSRADrr")>;
1178 def: InstRW<[SKLWriteResGroup19], (instregex "VPSRAWrr")>;
1179 def: InstRW<[SKLWriteResGroup19], (instregex "VPSRLDrr")>;
1180 def: InstRW<[SKLWriteResGroup19], (instregex "VPSRLQrr")>;
1181 def: InstRW<[SKLWriteResGroup19], (instregex "VPSRLWrr")>;
1182
1183 def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
1184   let Latency = 2;
1185   let NumMicroOps = 2;
1186   let ResourceCycles = [1,1];
1187 }
1188 def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
1189
1190 def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
1191   let Latency = 2;
1192   let NumMicroOps = 2;
1193   let ResourceCycles = [1,1];
1194 }
1195 def: InstRW<[SKLWriteResGroup21], (instregex "SFENCE")>;
1196
1197 def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> {
1198   let Latency = 2;
1199   let NumMicroOps = 2;
1200   let ResourceCycles = [1,1];
1201 }
1202 def: InstRW<[SKLWriteResGroup22], (instregex "BEXTR(32|64)rr")>;
1203 def: InstRW<[SKLWriteResGroup22], (instregex "BSWAP(16|32|64)r")>;
1204
1205 def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
1206   let Latency = 2;
1207   let NumMicroOps = 2;
1208   let ResourceCycles = [1,1];
1209 }
1210 def: InstRW<[SKLWriteResGroup23], (instregex "ADC8i8")>;
1211 def: InstRW<[SKLWriteResGroup23], (instregex "ADC8ri")>;
1212 def: InstRW<[SKLWriteResGroup23], (instregex "CWD")>;
1213 def: InstRW<[SKLWriteResGroup23], (instregex "JRCXZ")>;
1214 def: InstRW<[SKLWriteResGroup23], (instregex "SBB8i8")>;
1215 def: InstRW<[SKLWriteResGroup23], (instregex "SBB8ri")>;
1216
1217 def SKLWriteResGroup24 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
1218   let Latency = 2;
1219   let NumMicroOps = 3;
1220   let ResourceCycles = [1,1,1];
1221 }
1222 def: InstRW<[SKLWriteResGroup24], (instregex "EXTRACTPSmr")>;
1223 def: InstRW<[SKLWriteResGroup24], (instregex "PEXTRBmr")>;
1224 def: InstRW<[SKLWriteResGroup24], (instregex "PEXTRDmr")>;
1225 def: InstRW<[SKLWriteResGroup24], (instregex "PEXTRQmr")>;
1226 def: InstRW<[SKLWriteResGroup24], (instregex "PEXTRWmr")>;
1227 def: InstRW<[SKLWriteResGroup24], (instregex "STMXCSR")>;
1228 def: InstRW<[SKLWriteResGroup24], (instregex "VEXTRACTPSmr")>;
1229 def: InstRW<[SKLWriteResGroup24], (instregex "VPEXTRBmr")>;
1230 def: InstRW<[SKLWriteResGroup24], (instregex "VPEXTRDmr")>;
1231 def: InstRW<[SKLWriteResGroup24], (instregex "VPEXTRQmr")>;
1232 def: InstRW<[SKLWriteResGroup24], (instregex "VPEXTRWmr")>;
1233 def: InstRW<[SKLWriteResGroup24], (instregex "VSTMXCSR")>;
1234
1235 def SKLWriteResGroup25 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237]> {
1236   let Latency = 2;
1237   let NumMicroOps = 3;
1238   let ResourceCycles = [1,1,1];
1239 }
1240 def: InstRW<[SKLWriteResGroup25], (instregex "FNSTCW16m")>;
1241
1242 def SKLWriteResGroup26 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
1243   let Latency = 2;
1244   let NumMicroOps = 3;
1245   let ResourceCycles = [1,1,1];
1246 }
1247 def: InstRW<[SKLWriteResGroup26], (instregex "SETAEm")>;
1248 def: InstRW<[SKLWriteResGroup26], (instregex "SETBm")>;
1249 def: InstRW<[SKLWriteResGroup26], (instregex "SETEm")>;
1250 def: InstRW<[SKLWriteResGroup26], (instregex "SETGEm")>;
1251 def: InstRW<[SKLWriteResGroup26], (instregex "SETGm")>;
1252 def: InstRW<[SKLWriteResGroup26], (instregex "SETLEm")>;
1253 def: InstRW<[SKLWriteResGroup26], (instregex "SETLm")>;
1254 def: InstRW<[SKLWriteResGroup26], (instregex "SETNEm")>;
1255 def: InstRW<[SKLWriteResGroup26], (instregex "SETNOm")>;
1256 def: InstRW<[SKLWriteResGroup26], (instregex "SETNPm")>;
1257 def: InstRW<[SKLWriteResGroup26], (instregex "SETNSm")>;
1258 def: InstRW<[SKLWriteResGroup26], (instregex "SETOm")>;
1259 def: InstRW<[SKLWriteResGroup26], (instregex "SETPm")>;
1260 def: InstRW<[SKLWriteResGroup26], (instregex "SETSm")>;
1261
1262 def SKLWriteResGroup27 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort15]> {
1263   let Latency = 2;
1264   let NumMicroOps = 3;
1265   let ResourceCycles = [1,1,1];
1266 }
1267 def: InstRW<[SKLWriteResGroup27], (instregex "MOVBE(16|32|64)mr")>;
1268
1269 def SKLWriteResGroup28 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
1270   let Latency = 2;
1271   let NumMicroOps = 3;
1272   let ResourceCycles = [1,1,1];
1273 }
1274 def: InstRW<[SKLWriteResGroup28], (instregex "PUSH(16|32|64)r(mr)?")>;
1275 def: InstRW<[SKLWriteResGroup28], (instregex "PUSH64i8")>;
1276 def: InstRW<[SKLWriteResGroup28], (instregex "STOSB")>;
1277 def: InstRW<[SKLWriteResGroup28], (instregex "STOSL")>;
1278 def: InstRW<[SKLWriteResGroup28], (instregex "STOSQ")>;
1279 def: InstRW<[SKLWriteResGroup28], (instregex "STOSW")>;
1280
1281 def SKLWriteResGroup29 : SchedWriteRes<[SKLPort1]> {
1282   let Latency = 3;
1283   let NumMicroOps = 1;
1284   let ResourceCycles = [1];
1285 }
1286 def: InstRW<[SKLWriteResGroup29], (instregex "BSF(16|32|64)rr")>;
1287 def: InstRW<[SKLWriteResGroup29], (instregex "BSR(16|32|64)rr")>;
1288 def: InstRW<[SKLWriteResGroup29], (instregex "IMUL64rr(i8)?")>;
1289 def: InstRW<[SKLWriteResGroup29], (instregex "IMUL8r")>;
1290 def: InstRW<[SKLWriteResGroup29], (instregex "LZCNT(16|32|64)rr")>;
1291 def: InstRW<[SKLWriteResGroup29], (instregex "MUL8r")>;
1292 def: InstRW<[SKLWriteResGroup29], (instregex "PDEP(32|64)rr")>;
1293 def: InstRW<[SKLWriteResGroup29], (instregex "PEXT(32|64)rr")>;
1294 def: InstRW<[SKLWriteResGroup29], (instregex "POPCNT(16|32|64)rr")>;
1295 def: InstRW<[SKLWriteResGroup29], (instregex "SHLD(16|32|64)rri8")>;
1296 def: InstRW<[SKLWriteResGroup29], (instregex "SHRD(16|32|64)rri8")>;
1297 def: InstRW<[SKLWriteResGroup29], (instregex "TZCNT(16|32|64)rr")>;
1298
1299 def SKLWriteResGroup29_16 : SchedWriteRes<[SKLPort1, SKLPort0156]> {
1300   let Latency = 3;
1301   let NumMicroOps = 2;
1302   let ResourceCycles = [1,1];
1303 }
1304 def: InstRW<[SKLWriteResGroup29_16], (instregex "IMUL16rr(i8)?")>;
1305
1306 def SKLWriteResGroup29_32 : SchedWriteRes<[SKLPort1]> {
1307   let Latency = 3;
1308   let NumMicroOps = 1;
1309 }
1310 def: InstRW<[SKLWriteResGroup29_32], (instregex "IMUL32rr(i8)?")>;
1311
1312 def SKLWriteResGroup30 : SchedWriteRes<[SKLPort5]> {
1313   let Latency = 3;
1314   let NumMicroOps = 1;
1315   let ResourceCycles = [1];
1316 }
1317 def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FPrST0")>;
1318 def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FST0r")>;
1319 def: InstRW<[SKLWriteResGroup30], (instregex "ADD_FrST0")>;
1320 def: InstRW<[SKLWriteResGroup30], (instregex "MMX_PSADBWirr")>;
1321 def: InstRW<[SKLWriteResGroup30], (instregex "PCMPGTQrr")>;
1322 def: InstRW<[SKLWriteResGroup30], (instregex "PSADBWrr")>;
1323 def: InstRW<[SKLWriteResGroup30], (instregex "SUBR_FPrST0")>;
1324 def: InstRW<[SKLWriteResGroup30], (instregex "SUBR_FST0r")>;
1325 def: InstRW<[SKLWriteResGroup30], (instregex "SUBR_FrST0")>;
1326 def: InstRW<[SKLWriteResGroup30], (instregex "SUB_FPrST0")>;
1327 def: InstRW<[SKLWriteResGroup30], (instregex "SUB_FST0r")>;
1328 def: InstRW<[SKLWriteResGroup30], (instregex "SUB_FrST0")>;
1329 def: InstRW<[SKLWriteResGroup30], (instregex "VBROADCASTSDYrr")>;
1330 def: InstRW<[SKLWriteResGroup30], (instregex "VBROADCASTSSYrr")>;
1331 def: InstRW<[SKLWriteResGroup30], (instregex "VEXTRACTF128rr")>;
1332 def: InstRW<[SKLWriteResGroup30], (instregex "VEXTRACTI128rr")>;
1333 def: InstRW<[SKLWriteResGroup30], (instregex "VINSERTF128rr")>;
1334 def: InstRW<[SKLWriteResGroup30], (instregex "VINSERTI128rr")>;
1335 def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTBYrr")>;
1336 def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTBrr")>;
1337 def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTDYrr")>;
1338 def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTQYrr")>;
1339 def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTWYrr")>;
1340 def: InstRW<[SKLWriteResGroup30], (instregex "VPBROADCASTWrr")>;
1341 def: InstRW<[SKLWriteResGroup30], (instregex "VPCMPGTQYrr")>;
1342 def: InstRW<[SKLWriteResGroup30], (instregex "VPCMPGTQrr")>;
1343 def: InstRW<[SKLWriteResGroup30], (instregex "VPERM2F128rr")>;
1344 def: InstRW<[SKLWriteResGroup30], (instregex "VPERM2I128rr")>;
1345 def: InstRW<[SKLWriteResGroup30], (instregex "VPERMDYrr")>;
1346 def: InstRW<[SKLWriteResGroup30], (instregex "VPERMPDYri")>;
1347 def: InstRW<[SKLWriteResGroup30], (instregex "VPERMPSYrr")>;
1348 def: InstRW<[SKLWriteResGroup30], (instregex "VPERMQYri")>;
1349 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXBDYrr")>;
1350 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXBQYrr")>;
1351 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXBWYrr")>;
1352 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXDQYrr")>;
1353 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXWDYrr")>;
1354 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVSXWQYrr")>;
1355 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXBDYrr")>;
1356 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXBQYrr")>;
1357 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXBWYrr")>;
1358 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXDQYrr")>;
1359 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXWDYrr")>;
1360 def: InstRW<[SKLWriteResGroup30], (instregex "VPMOVZXWQYrr")>;
1361 def: InstRW<[SKLWriteResGroup30], (instregex "VPSADBWYrr")>;
1362 def: InstRW<[SKLWriteResGroup30], (instregex "VPSADBWrr")>;
1363
1364 def SKLWriteResGroup31 : SchedWriteRes<[SKLPort0,SKLPort5]> {
1365   let Latency = 3;
1366   let NumMicroOps = 2;
1367   let ResourceCycles = [1,1];
1368 }
1369 def: InstRW<[SKLWriteResGroup31], (instregex "EXTRACTPSrr")>;
1370 def: InstRW<[SKLWriteResGroup31], (instregex "MMX_PEXTRWirri")>;
1371 def: InstRW<[SKLWriteResGroup31], (instregex "PEXTRBrr")>;
1372 def: InstRW<[SKLWriteResGroup31], (instregex "PEXTRDrr")>;
1373 def: InstRW<[SKLWriteResGroup31], (instregex "PEXTRQrr")>;
1374 def: InstRW<[SKLWriteResGroup31], (instregex "PEXTRWri")>;
1375 def: InstRW<[SKLWriteResGroup31], (instregex "PEXTRWrr_REV")>;
1376 def: InstRW<[SKLWriteResGroup31], (instregex "PTESTrr")>;
1377 def: InstRW<[SKLWriteResGroup31], (instregex "VEXTRACTPSrr")>;
1378 def: InstRW<[SKLWriteResGroup31], (instregex "VPEXTRBrr")>;
1379 def: InstRW<[SKLWriteResGroup31], (instregex "VPEXTRDrr")>;
1380 def: InstRW<[SKLWriteResGroup31], (instregex "VPEXTRQrr")>;
1381 def: InstRW<[SKLWriteResGroup31], (instregex "VPEXTRWri")>;
1382 def: InstRW<[SKLWriteResGroup31], (instregex "VPEXTRWrr_REV")>;
1383 def: InstRW<[SKLWriteResGroup31], (instregex "VPTESTYrr")>;
1384 def: InstRW<[SKLWriteResGroup31], (instregex "VPTESTrr")>;
1385
1386 def SKLWriteResGroup32 : SchedWriteRes<[SKLPort0,SKLPort0156]> {
1387   let Latency = 3;
1388   let NumMicroOps = 2;
1389   let ResourceCycles = [1,1];
1390 }
1391 def: InstRW<[SKLWriteResGroup32], (instregex "FNSTSW16r")>;
1392
1393 def SKLWriteResGroup33 : SchedWriteRes<[SKLPort06]> {
1394   let Latency = 3;
1395   let NumMicroOps = 3;
1396   let ResourceCycles = [3];
1397 }
1398 def: InstRW<[SKLWriteResGroup33], (instregex "ROL(16|32|64)rCL")>;
1399 def: InstRW<[SKLWriteResGroup33], (instregex "ROL8rCL")>;
1400 def: InstRW<[SKLWriteResGroup33], (instregex "ROR(16|32|64)rCL")>;
1401 def: InstRW<[SKLWriteResGroup33], (instregex "ROR8rCL")>;
1402 def: InstRW<[SKLWriteResGroup33], (instregex "SAR(16|32|64)rCL")>;
1403 def: InstRW<[SKLWriteResGroup33], (instregex "SAR8rCL")>;
1404 def: InstRW<[SKLWriteResGroup33], (instregex "SHL(16|32|64)rCL")>;
1405 def: InstRW<[SKLWriteResGroup33], (instregex "SHL8rCL")>;
1406 def: InstRW<[SKLWriteResGroup33], (instregex "SHR(16|32|64)rCL")>;
1407 def: InstRW<[SKLWriteResGroup33], (instregex "SHR8rCL")>;
1408
1409 def SKLWriteResGroup34 : SchedWriteRes<[SKLPort0156]> {
1410   let Latency = 3;
1411   let NumMicroOps = 3;
1412   let ResourceCycles = [3];
1413 }
1414 def: InstRW<[SKLWriteResGroup34], (instregex "XADD(16|32|64)rr")>;
1415 def: InstRW<[SKLWriteResGroup34], (instregex "XADD8rr")>;
1416 def: InstRW<[SKLWriteResGroup34], (instregex "XCHG8rr")>;
1417
1418 def SKLWriteResGroup35 : SchedWriteRes<[SKLPort0,SKLPort5]> {
1419   let Latency = 3;
1420   let NumMicroOps = 3;
1421   let ResourceCycles = [1,2];
1422 }
1423 def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PHADDSWrr64")>;
1424 def: InstRW<[SKLWriteResGroup35], (instregex "MMX_PHSUBSWrr64")>;
1425
1426 def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
1427   let Latency = 3;
1428   let NumMicroOps = 3;
1429   let ResourceCycles = [2,1];
1430 }
1431 def: InstRW<[SKLWriteResGroup36], (instregex "PHADDSWrr128")>;
1432 def: InstRW<[SKLWriteResGroup36], (instregex "PHSUBSWrr128")>;
1433 def: InstRW<[SKLWriteResGroup36], (instregex "VPHADDSWrr128")>;
1434 def: InstRW<[SKLWriteResGroup36], (instregex "VPHADDSWrr256")>;
1435 def: InstRW<[SKLWriteResGroup36], (instregex "VPHSUBSWrr128")>;
1436 def: InstRW<[SKLWriteResGroup36], (instregex "VPHSUBSWrr256")>;
1437
1438 def SKLWriteResGroup37 : SchedWriteRes<[SKLPort5,SKLPort05]> {
1439   let Latency = 3;
1440   let NumMicroOps = 3;
1441   let ResourceCycles = [2,1];
1442 }
1443 def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHADDWrr64")>;
1444 def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHADDrr64")>;
1445 def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHSUBDrr64")>;
1446 def: InstRW<[SKLWriteResGroup37], (instregex "MMX_PHSUBWrr64")>;
1447
1448 def SKLWriteResGroup38 : SchedWriteRes<[SKLPort5,SKLPort015]> {
1449   let Latency = 3;
1450   let NumMicroOps = 3;
1451   let ResourceCycles = [2,1];
1452 }
1453 def: InstRW<[SKLWriteResGroup38], (instregex "PHADDDrr")>;
1454 def: InstRW<[SKLWriteResGroup38], (instregex "PHADDWrr")>;
1455 def: InstRW<[SKLWriteResGroup38], (instregex "PHSUBDrr")>;
1456 def: InstRW<[SKLWriteResGroup38], (instregex "PHSUBWrr")>;
1457 def: InstRW<[SKLWriteResGroup38], (instregex "VPHADDDYrr")>;
1458 def: InstRW<[SKLWriteResGroup38], (instregex "VPHADDDrr")>;
1459 def: InstRW<[SKLWriteResGroup38], (instregex "VPHADDWYrr")>;
1460 def: InstRW<[SKLWriteResGroup38], (instregex "VPHADDWrr")>;
1461 def: InstRW<[SKLWriteResGroup38], (instregex "VPHSUBDYrr")>;
1462 def: InstRW<[SKLWriteResGroup38], (instregex "VPHSUBDrr")>;
1463 def: InstRW<[SKLWriteResGroup38], (instregex "VPHSUBWYrr")>;
1464 def: InstRW<[SKLWriteResGroup38], (instregex "VPHSUBWrr")>;
1465
1466 def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
1467   let Latency = 3;
1468   let NumMicroOps = 3;
1469   let ResourceCycles = [2,1];
1470 }
1471 def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSDWirr")>;
1472 def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKSSWBirr")>;
1473 def: InstRW<[SKLWriteResGroup39], (instregex "MMX_PACKUSWBirr")>;
1474
1475 def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
1476   let Latency = 3;
1477   let NumMicroOps = 3;
1478   let ResourceCycles = [1,2];
1479 }
1480 def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
1481
1482 def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
1483   let Latency = 3;
1484   let NumMicroOps = 3;
1485   let ResourceCycles = [1,2];
1486 }
1487 def: InstRW<[SKLWriteResGroup41], (instregex "MFENCE")>;
1488
1489 def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
1490   let Latency = 3;
1491   let NumMicroOps = 3;
1492   let ResourceCycles = [1,2];
1493 }
1494 def: InstRW<[SKLWriteResGroup42], (instregex "RCL(16|32|64)r1")>;
1495 def: InstRW<[SKLWriteResGroup42], (instregex "RCL(16|32|64)ri")>;
1496 def: InstRW<[SKLWriteResGroup42], (instregex "RCL8r1")>;
1497 def: InstRW<[SKLWriteResGroup42], (instregex "RCL8ri")>;
1498 def: InstRW<[SKLWriteResGroup42], (instregex "RCR(16|32|64)r1")>;
1499 def: InstRW<[SKLWriteResGroup42], (instregex "RCR(16|32|64)ri")>;
1500 def: InstRW<[SKLWriteResGroup42], (instregex "RCR8r1")>;
1501 def: InstRW<[SKLWriteResGroup42], (instregex "RCR8ri")>;
1502
1503 def SKLWriteResGroup43 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort237]> {
1504   let Latency = 3;
1505   let NumMicroOps = 3;
1506   let ResourceCycles = [1,1,1];
1507 }
1508 def: InstRW<[SKLWriteResGroup43], (instregex "FNSTSWm")>;
1509
1510 def SKLWriteResGroup44 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06]> {
1511   let Latency = 3;
1512   let NumMicroOps = 4;
1513   let ResourceCycles = [1,1,2];
1514 }
1515 def: InstRW<[SKLWriteResGroup44], (instregex "SETAm")>;
1516 def: InstRW<[SKLWriteResGroup44], (instregex "SETBEm")>;
1517
1518 def SKLWriteResGroup45 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort237,SKLPort0156]> {
1519   let Latency = 3;
1520   let NumMicroOps = 4;
1521   let ResourceCycles = [1,1,1,1];
1522 }
1523 def: InstRW<[SKLWriteResGroup45], (instregex "CALL(16|32|64)r")>;
1524
1525 def SKLWriteResGroup46 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort06,SKLPort0156]> {
1526   let Latency = 3;
1527   let NumMicroOps = 4;
1528   let ResourceCycles = [1,1,1,1];
1529 }
1530 def: InstRW<[SKLWriteResGroup46], (instregex "CALL64pcrel32")>;
1531
1532 def SKLWriteResGroup47 : SchedWriteRes<[SKLPort0]> {
1533   let Latency = 4;
1534   let NumMicroOps = 1;
1535   let ResourceCycles = [1];
1536 }
1537 def: InstRW<[SKLWriteResGroup47], (instregex "AESDECLASTrr")>;
1538 def: InstRW<[SKLWriteResGroup47], (instregex "AESDECrr")>;
1539 def: InstRW<[SKLWriteResGroup47], (instregex "AESENCLASTrr")>;
1540 def: InstRW<[SKLWriteResGroup47], (instregex "AESENCrr")>;
1541 def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDUBSWrr64")>;
1542 def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMADDWDirr")>;
1543 def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMULHRSWrr64")>;
1544 def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMULHUWirr")>;
1545 def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMULHWirr")>;
1546 def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMULLWirr")>;
1547 def: InstRW<[SKLWriteResGroup47], (instregex "MMX_PMULUDQirr")>;
1548 def: InstRW<[SKLWriteResGroup47], (instregex "MUL_FPrST0")>;
1549 def: InstRW<[SKLWriteResGroup47], (instregex "MUL_FST0r")>;
1550 def: InstRW<[SKLWriteResGroup47], (instregex "MUL_FrST0")>;
1551 def: InstRW<[SKLWriteResGroup47], (instregex "RCPPSr")>;
1552 def: InstRW<[SKLWriteResGroup47], (instregex "RCPSSr")>;
1553 def: InstRW<[SKLWriteResGroup47], (instregex "RSQRTPSr")>;
1554 def: InstRW<[SKLWriteResGroup47], (instregex "RSQRTSSr")>;
1555 def: InstRW<[SKLWriteResGroup47], (instregex "VAESDECLASTrr")>;
1556 def: InstRW<[SKLWriteResGroup47], (instregex "VAESDECrr")>;
1557 def: InstRW<[SKLWriteResGroup47], (instregex "VAESENCLASTrr")>;
1558 def: InstRW<[SKLWriteResGroup47], (instregex "VAESENCrr")>;
1559 def: InstRW<[SKLWriteResGroup47], (instregex "VRCPPSYr")>;
1560 def: InstRW<[SKLWriteResGroup47], (instregex "VRCPPSr")>;
1561 def: InstRW<[SKLWriteResGroup47], (instregex "VRCPSSr")>;
1562 def: InstRW<[SKLWriteResGroup47], (instregex "VRSQRTPSYr")>;
1563 def: InstRW<[SKLWriteResGroup47], (instregex "VRSQRTPSr")>;
1564 def: InstRW<[SKLWriteResGroup47], (instregex "VRSQRTSSr")>;
1565
1566 def SKLWriteResGroup48 : SchedWriteRes<[SKLPort01]> {
1567   let Latency = 4;
1568   let NumMicroOps = 1;
1569   let ResourceCycles = [1];
1570 }
1571 def: InstRW<[SKLWriteResGroup48], (instregex "ADDPDrr")>;
1572 def: InstRW<[SKLWriteResGroup48], (instregex "ADDPSrr")>;
1573 def: InstRW<[SKLWriteResGroup48], (instregex "ADDSDrr")>;
1574 def: InstRW<[SKLWriteResGroup48], (instregex "ADDSSrr")>;
1575 def: InstRW<[SKLWriteResGroup48], (instregex "ADDSUBPDrr")>;
1576 def: InstRW<[SKLWriteResGroup48], (instregex "ADDSUBPSrr")>;
1577 def: InstRW<[SKLWriteResGroup48], (instregex "MULPDrr")>;
1578 def: InstRW<[SKLWriteResGroup48], (instregex "MULPSrr")>;
1579 def: InstRW<[SKLWriteResGroup48], (instregex "MULSDrr")>;
1580 def: InstRW<[SKLWriteResGroup48], (instregex "MULSSrr")>;
1581 def: InstRW<[SKLWriteResGroup48], (instregex "SUBPDrr")>;
1582 def: InstRW<[SKLWriteResGroup48], (instregex "SUBPSrr")>;
1583 def: InstRW<[SKLWriteResGroup48], (instregex "SUBSDrr")>;
1584 def: InstRW<[SKLWriteResGroup48], (instregex "SUBSSrr")>;
1585 def: InstRW<[SKLWriteResGroup48], (instregex "VADDPDYrr")>;
1586 def: InstRW<[SKLWriteResGroup48], (instregex "VADDPDrr")>;
1587 def: InstRW<[SKLWriteResGroup48], (instregex "VADDPSYrr")>;
1588 def: InstRW<[SKLWriteResGroup48], (instregex "VADDPSrr")>;
1589 def: InstRW<[SKLWriteResGroup48], (instregex "VADDSDrr")>;
1590 def: InstRW<[SKLWriteResGroup48], (instregex "VADDSSrr")>;
1591 def: InstRW<[SKLWriteResGroup48], (instregex "VADDSUBPDYrr")>;
1592 def: InstRW<[SKLWriteResGroup48], (instregex "VADDSUBPDrr")>;
1593 def: InstRW<[SKLWriteResGroup48], (instregex "VADDSUBPSYrr")>;
1594 def: InstRW<[SKLWriteResGroup48], (instregex "VADDSUBPSrr")>;
1595 def: InstRW<[SKLWriteResGroup48], (instregex "VMULPDYrr")>;
1596 def: InstRW<[SKLWriteResGroup48], (instregex "VMULPDrr")>;
1597 def: InstRW<[SKLWriteResGroup48], (instregex "VMULPSYrr")>;
1598 def: InstRW<[SKLWriteResGroup48], (instregex "VMULPSrr")>;
1599 def: InstRW<[SKLWriteResGroup48], (instregex "VMULSDrr")>;
1600 def: InstRW<[SKLWriteResGroup48], (instregex "VMULSSrr")>;
1601 def: InstRW<[SKLWriteResGroup48], (instregex "VSUBPDYrr")>;
1602 def: InstRW<[SKLWriteResGroup48], (instregex "VSUBPDrr")>;
1603 def: InstRW<[SKLWriteResGroup48], (instregex "VSUBPSYrr")>;
1604 def: InstRW<[SKLWriteResGroup48], (instregex "VSUBPSrr")>;
1605 def: InstRW<[SKLWriteResGroup48], (instregex "VSUBSDrr")>;
1606 def: InstRW<[SKLWriteResGroup48], (instregex "VSUBSSrr")>;
1607 def: InstRW<[SKLWriteResGroup48],
1608             (instregex
1609              "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
1610              "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
1611
1612 def SKLWriteResGroup49 : SchedWriteRes<[SKLPort015]> {
1613   let Latency = 4;
1614   let NumMicroOps = 1;
1615   let ResourceCycles = [1];
1616 }
1617 def: InstRW<[SKLWriteResGroup49], (instregex "CMPPDrri")>;
1618 def: InstRW<[SKLWriteResGroup49], (instregex "CMPPSrri")>;
1619 def: InstRW<[SKLWriteResGroup49], (instregex "CMPSDrr")>;
1620 def: InstRW<[SKLWriteResGroup49], (instregex "CMPSSrr")>;
1621 def: InstRW<[SKLWriteResGroup49], (instregex "CVTDQ2PSrr")>;
1622 def: InstRW<[SKLWriteResGroup49], (instregex "CVTPS2DQrr")>;
1623 def: InstRW<[SKLWriteResGroup49], (instregex "CVTTPS2DQrr")>;
1624 def: InstRW<[SKLWriteResGroup49], (instregex "MAX(C?)PDrr")>;
1625 def: InstRW<[SKLWriteResGroup49], (instregex "MAX(C?)PSrr")>;
1626 def: InstRW<[SKLWriteResGroup49], (instregex "MAX(C?)SDrr")>;
1627 def: InstRW<[SKLWriteResGroup49], (instregex "MAX(C?)SSrr")>;
1628 def: InstRW<[SKLWriteResGroup49], (instregex "MIN(C?)PDrr")>;
1629 def: InstRW<[SKLWriteResGroup49], (instregex "MIN(C?)PSrr")>;
1630 def: InstRW<[SKLWriteResGroup49], (instregex "MIN(C?)SDrr")>;
1631 def: InstRW<[SKLWriteResGroup49], (instregex "MIN(C?)SSrr")>;
1632 def: InstRW<[SKLWriteResGroup49], (instregex "PHMINPOSUWrr128")>;
1633 def: InstRW<[SKLWriteResGroup49], (instregex "PMADDUBSWrr")>;
1634 def: InstRW<[SKLWriteResGroup49], (instregex "PMADDWDrr")>;
1635 def: InstRW<[SKLWriteResGroup49], (instregex "PMULDQrr")>;
1636 def: InstRW<[SKLWriteResGroup49], (instregex "PMULHRSWrr")>;
1637 def: InstRW<[SKLWriteResGroup49], (instregex "PMULHUWrr")>;
1638 def: InstRW<[SKLWriteResGroup49], (instregex "PMULHWrr")>;
1639 def: InstRW<[SKLWriteResGroup49], (instregex "PMULLWrr")>;
1640 def: InstRW<[SKLWriteResGroup49], (instregex "PMULUDQrr")>;
1641 def: InstRW<[SKLWriteResGroup49], (instregex "VCMPPDYrri")>;
1642 def: InstRW<[SKLWriteResGroup49], (instregex "VCMPPDrri")>;
1643 def: InstRW<[SKLWriteResGroup49], (instregex "VCMPPSYrri")>;
1644 def: InstRW<[SKLWriteResGroup49], (instregex "VCMPPSrri")>;
1645 def: InstRW<[SKLWriteResGroup49], (instregex "VCMPSDrr")>;
1646 def: InstRW<[SKLWriteResGroup49], (instregex "VCMPSSrr")>;
1647 def: InstRW<[SKLWriteResGroup49], (instregex "VCVTDQ2PSYrr")>;
1648 def: InstRW<[SKLWriteResGroup49], (instregex "VCVTDQ2PSrr")>;
1649 def: InstRW<[SKLWriteResGroup49], (instregex "VCVTPS2DQYrr")>;
1650 def: InstRW<[SKLWriteResGroup49], (instregex "VCVTPS2DQrr")>;
1651 def: InstRW<[SKLWriteResGroup49], (instregex "VCVTTPS2DQYrr")>;
1652 def: InstRW<[SKLWriteResGroup49], (instregex "VCVTTPS2DQrr")>;
1653 def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)PDYrr")>;
1654 def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)PDrr")>;
1655 def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)PSYrr")>;
1656 def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)PSrr")>;
1657 def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)SDrr")>;
1658 def: InstRW<[SKLWriteResGroup49], (instregex "VMAX(C?)SSrr")>;
1659 def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)PDYrr")>;
1660 def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)PDrr")>;
1661 def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)PSYrr")>;
1662 def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)PSrr")>;
1663 def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)SDrr")>;
1664 def: InstRW<[SKLWriteResGroup49], (instregex "VMIN(C?)SSrr")>;
1665 def: InstRW<[SKLWriteResGroup49], (instregex "VPHMINPOSUWrr128")>;
1666 def: InstRW<[SKLWriteResGroup49], (instregex "VPMADDUBSWYrr")>;
1667 def: InstRW<[SKLWriteResGroup49], (instregex "VPMADDUBSWrr")>;
1668 def: InstRW<[SKLWriteResGroup49], (instregex "VPMADDWDYrr")>;
1669 def: InstRW<[SKLWriteResGroup49], (instregex "VPMADDWDrr")>;
1670 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULDQYrr")>;
1671 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULDQrr")>;
1672 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHRSWYrr")>;
1673 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHRSWrr")>;
1674 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHUWYrr")>;
1675 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHUWrr")>;
1676 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHWYrr")>;
1677 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULHWrr")>;
1678 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULLWYrr")>;
1679 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULLWrr")>;
1680 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULUDQYrr")>;
1681 def: InstRW<[SKLWriteResGroup49], (instregex "VPMULUDQrr")>;
1682
1683 def SKLWriteResGroup50 : SchedWriteRes<[SKLPort5]> {
1684   let Latency = 4;
1685   let NumMicroOps = 2;
1686   let ResourceCycles = [2];
1687 }
1688 def: InstRW<[SKLWriteResGroup50], (instregex "MPSADBWrri")>;
1689 def: InstRW<[SKLWriteResGroup50], (instregex "VMPSADBWYrri")>;
1690 def: InstRW<[SKLWriteResGroup50], (instregex "VMPSADBWrri")>;
1691
1692 def SKLWriteResGroup51 : SchedWriteRes<[SKLPort1,SKLPort5]> {
1693   let Latency = 4;
1694   let NumMicroOps = 2;
1695   let ResourceCycles = [1,1];
1696 }
1697 def: InstRW<[SKLWriteResGroup51], (instregex "IMUL64r")>;
1698 def: InstRW<[SKLWriteResGroup51], (instregex "MUL64r")>;
1699 def: InstRW<[SKLWriteResGroup51], (instregex "MULX64rr")>;
1700
1701 def SKLWriteResGroup51_16 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1702   let Latency = 4;
1703   let NumMicroOps = 4;
1704 }
1705 def: InstRW<[SKLWriteResGroup51_16], (instregex "IMUL16r")>;
1706 def: InstRW<[SKLWriteResGroup51_16], (instregex "MUL16r")>;
1707
1708 def SKLWriteResGroup52 : SchedWriteRes<[SKLPort5,SKLPort01]> {
1709   let Latency = 4;
1710   let NumMicroOps = 2;
1711   let ResourceCycles = [1,1];
1712 }
1713 def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLDYrr")>;
1714 def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLQYrr")>;
1715 def: InstRW<[SKLWriteResGroup52], (instregex "VPSLLWYrr")>;
1716 def: InstRW<[SKLWriteResGroup52], (instregex "VPSRADYrr")>;
1717 def: InstRW<[SKLWriteResGroup52], (instregex "VPSRAWYrr")>;
1718 def: InstRW<[SKLWriteResGroup52], (instregex "VPSRLDYrr")>;
1719 def: InstRW<[SKLWriteResGroup52], (instregex "VPSRLQYrr")>;
1720 def: InstRW<[SKLWriteResGroup52], (instregex "VPSRLWYrr")>;
1721
1722 def SKLWriteResGroup53 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237]> {
1723   let Latency = 4;
1724   let NumMicroOps = 3;
1725   let ResourceCycles = [1,1,1];
1726 }
1727 def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP16m")>;
1728 def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP32m")>;
1729 def: InstRW<[SKLWriteResGroup53], (instregex "ISTT_FP64m")>;
1730 def: InstRW<[SKLWriteResGroup53], (instregex "IST_F16m")>;
1731 def: InstRW<[SKLWriteResGroup53], (instregex "IST_F32m")>;
1732 def: InstRW<[SKLWriteResGroup53], (instregex "IST_FP16m")>;
1733 def: InstRW<[SKLWriteResGroup53], (instregex "IST_FP32m")>;
1734 def: InstRW<[SKLWriteResGroup53], (instregex "IST_FP64m")>;
1735
1736 def SKLWriteResGroup54 : SchedWriteRes<[SKLPort0156]> {
1737   let Latency = 4;
1738   let NumMicroOps = 4;
1739   let ResourceCycles = [4];
1740 }
1741 def: InstRW<[SKLWriteResGroup54], (instregex "FNCLEX")>;
1742
1743 def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
1744   let Latency = 4;
1745   let NumMicroOps = 4;
1746   let ResourceCycles = [1,3];
1747 }
1748 def: InstRW<[SKLWriteResGroup55], (instregex "PAUSE")>;
1749
1750 def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
1751   let Latency = 4;
1752   let NumMicroOps = 4;
1753   let ResourceCycles = [1,3];
1754 }
1755 def: InstRW<[SKLWriteResGroup56], (instregex "VZEROUPPER")>;
1756
1757 def SKLWriteResGroup57 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort0156]> {
1758   let Latency = 4;
1759   let NumMicroOps = 4;
1760   let ResourceCycles = [1,1,2];
1761 }
1762 def: InstRW<[SKLWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
1763
1764 def SKLWriteResGroup58 : SchedWriteRes<[SKLPort23]> {
1765   let Latency = 5;
1766   let NumMicroOps = 1;
1767   let ResourceCycles = [1];
1768 }
1769 def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64from64rm")>;
1770 def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64rm")>;
1771 def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVD64to64rm")>;
1772 def: InstRW<[SKLWriteResGroup58], (instregex "MMX_MOVQ64rm")>;
1773 def: InstRW<[SKLWriteResGroup58], (instregex "MOV(16|32|64)rm")>;
1774 def: InstRW<[SKLWriteResGroup58], (instregex "MOV64toPQIrm")>;
1775 def: InstRW<[SKLWriteResGroup58], (instregex "MOV8rm")>;
1776 def: InstRW<[SKLWriteResGroup58], (instregex "MOVDDUPrm")>;
1777 def: InstRW<[SKLWriteResGroup58], (instregex "MOVDI2PDIrm")>;
1778 def: InstRW<[SKLWriteResGroup58], (instregex "MOVQI2PQIrm")>;
1779 def: InstRW<[SKLWriteResGroup58], (instregex "MOVSDrm")>;
1780 def: InstRW<[SKLWriteResGroup58], (instregex "MOVSSrm")>;
1781 def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm16")>;
1782 def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm32")>;
1783 def: InstRW<[SKLWriteResGroup58], (instregex "MOVSX(16|32|64)rm8")>;
1784 def: InstRW<[SKLWriteResGroup58], (instregex "MOVZX(16|32|64)rm16")>;
1785 def: InstRW<[SKLWriteResGroup58], (instregex "MOVZX(16|32|64)rm8")>;
1786 def: InstRW<[SKLWriteResGroup58], (instregex "PREFETCHNTA")>;
1787 def: InstRW<[SKLWriteResGroup58], (instregex "PREFETCHT0")>;
1788 def: InstRW<[SKLWriteResGroup58], (instregex "PREFETCHT1")>;
1789 def: InstRW<[SKLWriteResGroup58], (instregex "PREFETCHT2")>;
1790 def: InstRW<[SKLWriteResGroup58], (instregex "VMOV64toPQIrm")>;
1791 def: InstRW<[SKLWriteResGroup58], (instregex "VMOVDDUPrm")>;
1792 def: InstRW<[SKLWriteResGroup58], (instregex "VMOVDI2PDIrm")>;
1793 def: InstRW<[SKLWriteResGroup58], (instregex "VMOVQI2PQIrm")>;
1794 def: InstRW<[SKLWriteResGroup58], (instregex "VMOVSDrm")>;
1795 def: InstRW<[SKLWriteResGroup58], (instregex "VMOVSSrm")>;
1796
1797 def SKLWriteResGroup59 : SchedWriteRes<[SKLPort0,SKLPort5]> {
1798   let Latency = 5;
1799   let NumMicroOps = 2;
1800   let ResourceCycles = [1,1];
1801 }
1802 def: InstRW<[SKLWriteResGroup59], (instregex "CVTDQ2PDrr")>;
1803 def: InstRW<[SKLWriteResGroup59], (instregex "MMX_CVTPI2PDirr")>;
1804 def: InstRW<[SKLWriteResGroup59], (instregex "VCVTDQ2PDrr")>;
1805
1806 def SKLWriteResGroup60 : SchedWriteRes<[SKLPort5,SKLPort015]> {
1807   let Latency = 5;
1808   let NumMicroOps = 2;
1809   let ResourceCycles = [1,1];
1810 }
1811 def: InstRW<[SKLWriteResGroup60], (instregex "CVTPD2DQrr")>;
1812 def: InstRW<[SKLWriteResGroup60], (instregex "CVTPD2PSrr")>;
1813 def: InstRW<[SKLWriteResGroup60], (instregex "CVTPS2PDrr")>;
1814 def: InstRW<[SKLWriteResGroup60], (instregex "CVTSD2SSrr")>;
1815 def: InstRW<[SKLWriteResGroup60], (instregex "CVTSI642SDrr")>;
1816 def: InstRW<[SKLWriteResGroup60], (instregex "CVTSI2SDrr")>;
1817 def: InstRW<[SKLWriteResGroup60], (instregex "CVTSI2SSrr")>;
1818 def: InstRW<[SKLWriteResGroup60], (instregex "CVTSS2SDrr")>;
1819 def: InstRW<[SKLWriteResGroup60], (instregex "CVTTPD2DQrr")>;
1820 def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPD2PIirr")>;
1821 def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTPS2PIirr")>;
1822 def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTTPD2PIirr")>;
1823 def: InstRW<[SKLWriteResGroup60], (instregex "MMX_CVTTPS2PIirr")>;
1824 def: InstRW<[SKLWriteResGroup60], (instregex "VCVTPD2DQrr")>;
1825 def: InstRW<[SKLWriteResGroup60], (instregex "VCVTPD2PSrr")>;
1826 def: InstRW<[SKLWriteResGroup60], (instregex "VCVTPH2PSrr")>;
1827 def: InstRW<[SKLWriteResGroup60], (instregex "VCVTPS2PDrr")>;
1828 def: InstRW<[SKLWriteResGroup60], (instregex "VCVTPS2PHrr")>;
1829 def: InstRW<[SKLWriteResGroup60], (instregex "VCVTSD2SSrr")>;
1830 def: InstRW<[SKLWriteResGroup60], (instregex "VCVTSI642SDrr")>;
1831 def: InstRW<[SKLWriteResGroup60], (instregex "VCVTSI2SDrr")>;
1832 def: InstRW<[SKLWriteResGroup60], (instregex "VCVTSI2SSrr")>;
1833 def: InstRW<[SKLWriteResGroup60], (instregex "VCVTSS2SDrr")>;
1834 def: InstRW<[SKLWriteResGroup60], (instregex "VCVTTPD2DQrr")>;
1835
1836 def SKLWriteResGroup61 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06]> {
1837   let Latency = 5;
1838   let NumMicroOps = 3;
1839   let ResourceCycles = [1,1,1];
1840 }
1841 def: InstRW<[SKLWriteResGroup61], (instregex "STR(16|32|64)r")>;
1842
1843 def SKLWriteResGroup62 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
1844   let Latency = 5;
1845   let NumMicroOps = 3;
1846   let ResourceCycles = [1,1,1];
1847 }
1848 def: InstRW<[SKLWriteResGroup62], (instregex "IMUL32r")>;
1849 def: InstRW<[SKLWriteResGroup62], (instregex "MUL32r")>;
1850 def: InstRW<[SKLWriteResGroup62], (instregex "MULX32rr")>;
1851
1852 def SKLWriteResGroup63 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
1853   let Latency = 5;
1854   let NumMicroOps = 5;
1855   let ResourceCycles = [1,4];
1856 }
1857 def: InstRW<[SKLWriteResGroup63], (instregex "XSETBV")>;
1858
1859 def SKLWriteResGroup64 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
1860   let Latency = 5;
1861   let NumMicroOps = 5;
1862   let ResourceCycles = [2,3];
1863 }
1864 def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG(16|32|64)rr")>;
1865 def: InstRW<[SKLWriteResGroup64], (instregex "CMPXCHG8rr")>;
1866
1867 def SKLWriteResGroup65 : SchedWriteRes<[SKLPort4,SKLPort237,SKLPort0156]> {
1868   let Latency = 5;
1869   let NumMicroOps = 6;
1870   let ResourceCycles = [1,1,4];
1871 }
1872 def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF16")>;
1873 def: InstRW<[SKLWriteResGroup65], (instregex "PUSHF64")>;
1874
1875 def SKLWriteResGroup66 : SchedWriteRes<[SKLPort5]> {
1876   let Latency = 6;
1877   let NumMicroOps = 1;
1878   let ResourceCycles = [1];
1879 }
1880 def: InstRW<[SKLWriteResGroup66], (instregex "PCLMULQDQrr")>;
1881 def: InstRW<[SKLWriteResGroup66], (instregex "VPCLMULQDQrr")>;
1882
1883 def SKLWriteResGroup67 : SchedWriteRes<[SKLPort23]> {
1884   let Latency = 6;
1885   let NumMicroOps = 1;
1886   let ResourceCycles = [1];
1887 }
1888 def: InstRW<[SKLWriteResGroup67], (instregex "LDDQUrm")>;
1889 def: InstRW<[SKLWriteResGroup67], (instregex "MOVAPDrm")>;
1890 def: InstRW<[SKLWriteResGroup67], (instregex "MOVAPSrm")>;
1891 def: InstRW<[SKLWriteResGroup67], (instregex "MOVDQArm")>;
1892 def: InstRW<[SKLWriteResGroup67], (instregex "MOVDQUrm")>;
1893 def: InstRW<[SKLWriteResGroup67], (instregex "MOVNTDQArm")>;
1894 def: InstRW<[SKLWriteResGroup67], (instregex "MOVSHDUPrm")>;
1895 def: InstRW<[SKLWriteResGroup67], (instregex "MOVSLDUPrm")>;
1896 def: InstRW<[SKLWriteResGroup67], (instregex "MOVUPDrm")>;
1897 def: InstRW<[SKLWriteResGroup67], (instregex "MOVUPSrm")>;
1898 def: InstRW<[SKLWriteResGroup67], (instregex "VBROADCASTSSrm")>;
1899 def: InstRW<[SKLWriteResGroup67], (instregex "VLDDQUrm")>;
1900 def: InstRW<[SKLWriteResGroup67], (instregex "VMOVAPDrm")>;
1901 def: InstRW<[SKLWriteResGroup67], (instregex "VMOVAPSrm")>;
1902 def: InstRW<[SKLWriteResGroup67], (instregex "VMOVDQArm")>;
1903 def: InstRW<[SKLWriteResGroup67], (instregex "VMOVDQUrm")>;
1904 def: InstRW<[SKLWriteResGroup67], (instregex "VMOVNTDQArm")>;
1905 def: InstRW<[SKLWriteResGroup67], (instregex "VMOVSHDUPrm")>;
1906 def: InstRW<[SKLWriteResGroup67], (instregex "VMOVSLDUPrm")>;
1907 def: InstRW<[SKLWriteResGroup67], (instregex "VMOVUPDrm")>;
1908 def: InstRW<[SKLWriteResGroup67], (instregex "VMOVUPSrm")>;
1909 def: InstRW<[SKLWriteResGroup67], (instregex "VPBROADCASTDrm")>;
1910 def: InstRW<[SKLWriteResGroup67], (instregex "VPBROADCASTQrm")>;
1911
1912 def SKLWriteResGroup68 : SchedWriteRes<[SKLPort0]> {
1913   let Latency = 6;
1914   let NumMicroOps = 2;
1915   let ResourceCycles = [2];
1916 }
1917 def: InstRW<[SKLWriteResGroup68], (instregex "MMX_CVTPI2PSirr")>;
1918
1919 def SKLWriteResGroup69 : SchedWriteRes<[SKLPort0,SKLPort23]> {
1920   let Latency = 6;
1921   let NumMicroOps = 2;
1922   let ResourceCycles = [1,1];
1923 }
1924 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSBirm")>;
1925 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDSWirm")>;
1926 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDUSBirm")>;
1927 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PADDUSWirm")>;
1928 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PAVGBirm")>;
1929 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PAVGWirm")>;
1930 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPEQBirm")>;
1931 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPEQDirm")>;
1932 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPEQWirm")>;
1933 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPGTBirm")>;
1934 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPGTDirm")>;
1935 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PCMPGTWirm")>;
1936 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PMAXSWirm")>;
1937 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PMAXUBirm")>;
1938 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PMINSWirm")>;
1939 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PMINUBirm")>;
1940 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSLLDrm")>;
1941 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSLLQrm")>;
1942 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSLLWrm")>;
1943 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSRADrm")>;
1944 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSRAWrm")>;
1945 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSRLDrm")>;
1946 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSRLQrm")>;
1947 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSRLWrm")>;
1948 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSUBSBirm")>;
1949 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSUBSWirm")>;
1950 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSUBUSBirm")>;
1951 def: InstRW<[SKLWriteResGroup69], (instregex "MMX_PSUBUSWirm")>;
1952
1953 def SKLWriteResGroup70 : SchedWriteRes<[SKLPort0,SKLPort015]> {
1954   let Latency = 6;
1955   let NumMicroOps = 2;
1956   let ResourceCycles = [1,1];
1957 }
1958 def: InstRW<[SKLWriteResGroup70], (instregex "CVTSD2SI64rr")>;
1959 def: InstRW<[SKLWriteResGroup70], (instregex "CVTSD2SIrr")>;
1960 def: InstRW<[SKLWriteResGroup70], (instregex "CVTSS2SI64rr")>;
1961 def: InstRW<[SKLWriteResGroup70], (instregex "CVTSS2SIrr")>;
1962 def: InstRW<[SKLWriteResGroup70], (instregex "CVTTSD2SI64rr")>;
1963 def: InstRW<[SKLWriteResGroup70], (instregex "CVTTSD2SIrr")>;
1964 def: InstRW<[SKLWriteResGroup70], (instregex "VCVTSD2SI64rr")>;
1965 def: InstRW<[SKLWriteResGroup70], (instregex "VCVTSD2SIrr")>;
1966 def: InstRW<[SKLWriteResGroup70], (instregex "VCVTSS2SI64rr")>;
1967 def: InstRW<[SKLWriteResGroup70], (instregex "VCVTSS2SIrr")>;
1968 def: InstRW<[SKLWriteResGroup70], (instregex "VCVTTSD2SI64rr")>;
1969 def: InstRW<[SKLWriteResGroup70], (instregex "VCVTTSD2SIrr")>;
1970
1971 def SKLWriteResGroup71 : SchedWriteRes<[SKLPort5,SKLPort23]> {
1972   let Latency = 6;
1973   let NumMicroOps = 2;
1974   let ResourceCycles = [1,1];
1975 }
1976 def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PALIGNR64irm")>;
1977 def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PINSRWirmi")>;
1978 def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PSHUFBrm64")>;
1979 def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PSHUFWmi")>;
1980 def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKHBWirm")>;
1981 def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKHDQirm")>;
1982 def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKHWDirm")>;
1983 def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKLBWirm")>;
1984 def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKLDQirm")>;
1985 def: InstRW<[SKLWriteResGroup71], (instregex "MMX_PUNPCKLWDirm")>;
1986 def: InstRW<[SKLWriteResGroup71], (instregex "MOVHPDrm")>;
1987 def: InstRW<[SKLWriteResGroup71], (instregex "MOVHPSrm")>;
1988 def: InstRW<[SKLWriteResGroup71], (instregex "MOVLPDrm")>;
1989 def: InstRW<[SKLWriteResGroup71], (instregex "MOVLPSrm")>;
1990 def: InstRW<[SKLWriteResGroup71], (instregex "PINSRBrm")>;
1991 def: InstRW<[SKLWriteResGroup71], (instregex "PINSRDrm")>;
1992 def: InstRW<[SKLWriteResGroup71], (instregex "PINSRQrm")>;
1993 def: InstRW<[SKLWriteResGroup71], (instregex "PINSRWrmi")>;
1994 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXBDrm")>;
1995 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXBQrm")>;
1996 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXBWrm")>;
1997 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXDQrm")>;
1998 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXWDrm")>;
1999 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVSXWQrm")>;
2000 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXBDrm")>;
2001 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXBQrm")>;
2002 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXBWrm")>;
2003 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXDQrm")>;
2004 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXWDrm")>;
2005 def: InstRW<[SKLWriteResGroup71], (instregex "PMOVZXWQrm")>;
2006 def: InstRW<[SKLWriteResGroup71], (instregex "VMOVHPDrm")>;
2007 def: InstRW<[SKLWriteResGroup71], (instregex "VMOVHPSrm")>;
2008 def: InstRW<[SKLWriteResGroup71], (instregex "VMOVLPDrm")>;
2009 def: InstRW<[SKLWriteResGroup71], (instregex "VMOVLPSrm")>;
2010 def: InstRW<[SKLWriteResGroup71], (instregex "VPINSRBrm")>;
2011 def: InstRW<[SKLWriteResGroup71], (instregex "VPINSRDrm")>;
2012 def: InstRW<[SKLWriteResGroup71], (instregex "VPINSRQrm")>;
2013 def: InstRW<[SKLWriteResGroup71], (instregex "VPINSRWrmi")>;
2014 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXBDrm")>;
2015 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXBQrm")>;
2016 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXBWrm")>;
2017 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXDQrm")>;
2018 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXWDrm")>;
2019 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVSXWQrm")>;
2020 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXBDrm")>;
2021 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXBQrm")>;
2022 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXBWrm")>;
2023 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXDQrm")>;
2024 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXWDrm")>;
2025 def: InstRW<[SKLWriteResGroup71], (instregex "VPMOVZXWQrm")>;
2026
2027 def SKLWriteResGroup72 : SchedWriteRes<[SKLPort6,SKLPort23]> {
2028   let Latency = 6;
2029   let NumMicroOps = 2;
2030   let ResourceCycles = [1,1];
2031 }
2032 def: InstRW<[SKLWriteResGroup72], (instregex "FARJMP64")>;
2033 def: InstRW<[SKLWriteResGroup72], (instregex "JMP(16|32|64)m")>;
2034
2035 def SKLWriteResGroup73 : SchedWriteRes<[SKLPort23,SKLPort05]> {
2036   let Latency = 6;
2037   let NumMicroOps = 2;
2038   let ResourceCycles = [1,1];
2039 }
2040 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSBrm64")>;
2041 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSDrm64")>;
2042 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PABSWrm64")>;
2043 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PADDBirm")>;
2044 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PADDDirm")>;
2045 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PADDQirm")>;
2046 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PADDWirm")>;
2047 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PANDNirm")>;
2048 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PANDirm")>;
2049 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PORirm")>;
2050 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSIGNBrm64")>;
2051 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSIGNDrm64")>;
2052 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSIGNWrm64")>;
2053 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSUBBirm")>;
2054 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSUBDirm")>;
2055 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSUBQirm")>;
2056 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PSUBWirm")>;
2057 def: InstRW<[SKLWriteResGroup73], (instregex "MMX_PXORirm")>;
2058
2059 def SKLWriteResGroup74 : SchedWriteRes<[SKLPort23,SKLPort06]> {
2060   let Latency = 6;
2061   let NumMicroOps = 2;
2062   let ResourceCycles = [1,1];
2063 }
2064 def: InstRW<[SKLWriteResGroup74], (instregex "ADC(16|32|64)rm")>;
2065 def: InstRW<[SKLWriteResGroup74], (instregex "ADC8rm")>;
2066 def: InstRW<[SKLWriteResGroup74], (instregex "ADCX(32|64)rm")>;
2067 def: InstRW<[SKLWriteResGroup74], (instregex "ADOX(32|64)rm")>;
2068 def: InstRW<[SKLWriteResGroup74], (instregex "BT(16|32|64)mi8")>;
2069 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVAE(16|32|64)rm")>;
2070 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVB(16|32|64)rm")>;
2071 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVE(16|32|64)rm")>;
2072 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVG(16|32|64)rm")>;
2073 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVGE(16|32|64)rm")>;
2074 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVL(16|32|64)rm")>;
2075 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVLE(16|32|64)rm")>;
2076 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVNE(16|32|64)rm")>;
2077 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVNO(16|32|64)rm")>;
2078 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVNP(16|32|64)rm")>;
2079 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVNS(16|32|64)rm")>;
2080 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVO(16|32|64)rm")>;
2081 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVP(16|32|64)rm")>;
2082 def: InstRW<[SKLWriteResGroup74], (instregex "CMOVS(16|32|64)rm")>;
2083 def: InstRW<[SKLWriteResGroup74], (instregex "RORX32mi")>;
2084 def: InstRW<[SKLWriteResGroup74], (instregex "RORX64mi")>;
2085 def: InstRW<[SKLWriteResGroup74], (instregex "SARX32rm")>;
2086 def: InstRW<[SKLWriteResGroup74], (instregex "SARX64rm")>;
2087 def: InstRW<[SKLWriteResGroup74], (instregex "SBB(16|32|64)rm")>;
2088 def: InstRW<[SKLWriteResGroup74], (instregex "SBB8rm")>;
2089 def: InstRW<[SKLWriteResGroup74], (instregex "SHLX32rm")>;
2090 def: InstRW<[SKLWriteResGroup74], (instregex "SHLX64rm")>;
2091 def: InstRW<[SKLWriteResGroup74], (instregex "SHRX32rm")>;
2092 def: InstRW<[SKLWriteResGroup74], (instregex "SHRX64rm")>;
2093
2094 def SKLWriteResGroup75 : SchedWriteRes<[SKLPort23,SKLPort15]> {
2095   let Latency = 6;
2096   let NumMicroOps = 2;
2097   let ResourceCycles = [1,1];
2098 }
2099 def: InstRW<[SKLWriteResGroup75], (instregex "ANDN(32|64)rm")>;
2100 def: InstRW<[SKLWriteResGroup75], (instregex "BLSI(32|64)rm")>;
2101 def: InstRW<[SKLWriteResGroup75], (instregex "BLSMSK(32|64)rm")>;
2102 def: InstRW<[SKLWriteResGroup75], (instregex "BLSR(32|64)rm")>;
2103 def: InstRW<[SKLWriteResGroup75], (instregex "BZHI(32|64)rm")>;
2104 def: InstRW<[SKLWriteResGroup75], (instregex "MOVBE(16|32|64)rm")>;
2105
2106 def SKLWriteResGroup76 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
2107   let Latency = 6;
2108   let NumMicroOps = 2;
2109   let ResourceCycles = [1,1];
2110 }
2111 def: InstRW<[SKLWriteResGroup76], (instregex "ADD(16|32|64)rm")>;
2112 def: InstRW<[SKLWriteResGroup76], (instregex "ADD8rm")>;
2113 def: InstRW<[SKLWriteResGroup76], (instregex "AND(16|32|64)rm")>;
2114 def: InstRW<[SKLWriteResGroup76], (instregex "AND8rm")>;
2115 def: InstRW<[SKLWriteResGroup76], (instregex "CMP(16|32|64)mi")>;
2116 def: InstRW<[SKLWriteResGroup76], (instregex "CMP(16|32|64)mr")>;
2117 def: InstRW<[SKLWriteResGroup76], (instregex "CMP(16|32|64)rm")>;
2118 def: InstRW<[SKLWriteResGroup76], (instregex "CMP8mi")>;
2119 def: InstRW<[SKLWriteResGroup76], (instregex "CMP8mr")>;
2120 def: InstRW<[SKLWriteResGroup76], (instregex "CMP8rm")>;
2121 def: InstRW<[SKLWriteResGroup76], (instregex "OR(16|32|64)rm")>;
2122 def: InstRW<[SKLWriteResGroup76], (instregex "OR8rm")>;
2123 def: InstRW<[SKLWriteResGroup76], (instregex "POP(16|32|64)r(mr)?")>;
2124 def: InstRW<[SKLWriteResGroup76], (instregex "SUB(16|32|64)rm")>;
2125 def: InstRW<[SKLWriteResGroup76], (instregex "SUB8rm")>;
2126 def: InstRW<[SKLWriteResGroup76], (instregex "TEST(16|32|64)mr")>;
2127 def: InstRW<[SKLWriteResGroup76], (instregex "TEST8mi")>;
2128 def: InstRW<[SKLWriteResGroup76], (instregex "TEST8mr")>;
2129 def: InstRW<[SKLWriteResGroup76], (instregex "XOR(16|32|64)rm")>;
2130 def: InstRW<[SKLWriteResGroup76], (instregex "XOR8rm")>;
2131
2132 def SKLWriteResGroup77 : SchedWriteRes<[SKLPort5,SKLPort01]> {
2133   let Latency = 6;
2134   let NumMicroOps = 3;
2135   let ResourceCycles = [2,1];
2136 }
2137 def: InstRW<[SKLWriteResGroup77], (instregex "HADDPDrr")>;
2138 def: InstRW<[SKLWriteResGroup77], (instregex "HADDPSrr")>;
2139 def: InstRW<[SKLWriteResGroup77], (instregex "HSUBPDrr")>;
2140 def: InstRW<[SKLWriteResGroup77], (instregex "HSUBPSrr")>;
2141 def: InstRW<[SKLWriteResGroup77], (instregex "VHADDPDYrr")>;
2142 def: InstRW<[SKLWriteResGroup77], (instregex "VHADDPDrr")>;
2143 def: InstRW<[SKLWriteResGroup77], (instregex "VHADDPSYrr")>;
2144 def: InstRW<[SKLWriteResGroup77], (instregex "VHADDPSrr")>;
2145 def: InstRW<[SKLWriteResGroup77], (instregex "VHSUBPDYrr")>;
2146 def: InstRW<[SKLWriteResGroup77], (instregex "VHSUBPDrr")>;
2147 def: InstRW<[SKLWriteResGroup77], (instregex "VHSUBPSYrr")>;
2148 def: InstRW<[SKLWriteResGroup77], (instregex "VHSUBPSrr")>;
2149
2150 def SKLWriteResGroup78 : SchedWriteRes<[SKLPort5,SKLPort015]> {
2151   let Latency = 6;
2152   let NumMicroOps = 3;
2153   let ResourceCycles = [2,1];
2154 }
2155 def: InstRW<[SKLWriteResGroup78], (instregex "CVTSI642SSrr")>;
2156 def: InstRW<[SKLWriteResGroup78], (instregex "VCVTSI642SSrr")>;
2157
2158 def SKLWriteResGroup79 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
2159   let Latency = 6;
2160   let NumMicroOps = 4;
2161   let ResourceCycles = [1,2,1];
2162 }
2163 def: InstRW<[SKLWriteResGroup79], (instregex "SHLD(16|32|64)rrCL")>;
2164 def: InstRW<[SKLWriteResGroup79], (instregex "SHRD(16|32|64)rrCL")>;
2165
2166 def SKLWriteResGroup80 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort06,SKLPort0156]> {
2167   let Latency = 6;
2168   let NumMicroOps = 4;
2169   let ResourceCycles = [1,1,1,1];
2170 }
2171 def: InstRW<[SKLWriteResGroup80], (instregex "SLDT(16|32|64)r")>;
2172
2173 def SKLWriteResGroup81 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort015]> {
2174   let Latency = 6;
2175   let NumMicroOps = 4;
2176   let ResourceCycles = [1,1,1,1];
2177 }
2178 def: InstRW<[SKLWriteResGroup81], (instregex "VCVTPS2PHmr")>;
2179
2180 def SKLWriteResGroup82 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2181   let Latency = 6;
2182   let NumMicroOps = 4;
2183   let ResourceCycles = [1,1,1,1];
2184 }
2185 def: InstRW<[SKLWriteResGroup82], (instregex "BTC(16|32|64)mi8")>;
2186 def: InstRW<[SKLWriteResGroup82], (instregex "BTR(16|32|64)mi8")>;
2187 def: InstRW<[SKLWriteResGroup82], (instregex "BTS(16|32|64)mi8")>;
2188 def: InstRW<[SKLWriteResGroup82], (instregex "SAR(16|32|64)m1")>;
2189 def: InstRW<[SKLWriteResGroup82], (instregex "SAR(16|32|64)mi")>;
2190 def: InstRW<[SKLWriteResGroup82], (instregex "SAR8m1")>;
2191 def: InstRW<[SKLWriteResGroup82], (instregex "SAR8mi")>;
2192 def: InstRW<[SKLWriteResGroup82], (instregex "SHL(16|32|64)m1")>;
2193 def: InstRW<[SKLWriteResGroup82], (instregex "SHL(16|32|64)mi")>;
2194 def: InstRW<[SKLWriteResGroup82], (instregex "SHL8m1")>;
2195 def: InstRW<[SKLWriteResGroup82], (instregex "SHL8mi")>;
2196 def: InstRW<[SKLWriteResGroup82], (instregex "SHR(16|32|64)m1")>;
2197 def: InstRW<[SKLWriteResGroup82], (instregex "SHR(16|32|64)mi")>;
2198 def: InstRW<[SKLWriteResGroup82], (instregex "SHR8m1")>;
2199 def: InstRW<[SKLWriteResGroup82], (instregex "SHR8mi")>;
2200
2201 def SKLWriteResGroup83 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
2202   let Latency = 6;
2203   let NumMicroOps = 4;
2204   let ResourceCycles = [1,1,1,1];
2205 }
2206 def: InstRW<[SKLWriteResGroup83], (instregex "ADD(16|32|64)mi")>;
2207 def: InstRW<[SKLWriteResGroup83], (instregex "ADD(16|32|64)mr")>;
2208 def: InstRW<[SKLWriteResGroup83], (instregex "ADD8mi")>;
2209 def: InstRW<[SKLWriteResGroup83], (instregex "ADD8mr")>;
2210 def: InstRW<[SKLWriteResGroup83], (instregex "AND(16|32|64)mi")>;
2211 def: InstRW<[SKLWriteResGroup83], (instregex "AND(16|32|64)mr")>;
2212 def: InstRW<[SKLWriteResGroup83], (instregex "AND8mi")>;
2213 def: InstRW<[SKLWriteResGroup83], (instregex "AND8mr")>;
2214 def: InstRW<[SKLWriteResGroup83], (instregex "DEC(16|32|64)m")>;
2215 def: InstRW<[SKLWriteResGroup83], (instregex "DEC8m")>;
2216 def: InstRW<[SKLWriteResGroup83], (instregex "INC(16|32|64)m")>;
2217 def: InstRW<[SKLWriteResGroup83], (instregex "INC8m")>;
2218 def: InstRW<[SKLWriteResGroup83], (instregex "NEG(16|32|64)m")>;
2219 def: InstRW<[SKLWriteResGroup83], (instregex "NEG8m")>;
2220 def: InstRW<[SKLWriteResGroup83], (instregex "NOT(16|32|64)m")>;
2221 def: InstRW<[SKLWriteResGroup83], (instregex "NOT8m")>;
2222 def: InstRW<[SKLWriteResGroup83], (instregex "OR(16|32|64)mi")>;
2223 def: InstRW<[SKLWriteResGroup83], (instregex "OR(16|32|64)mr")>;
2224 def: InstRW<[SKLWriteResGroup83], (instregex "OR8mi")>;
2225 def: InstRW<[SKLWriteResGroup83], (instregex "OR8mr")>;
2226 def: InstRW<[SKLWriteResGroup83], (instregex "POP(16|32|64)rmm")>;
2227 def: InstRW<[SKLWriteResGroup83], (instregex "PUSH(16|32|64)rmm")>;
2228 def: InstRW<[SKLWriteResGroup83], (instregex "SUB(16|32|64)mi")>;
2229 def: InstRW<[SKLWriteResGroup83], (instregex "SUB(16|32|64)mr")>;
2230 def: InstRW<[SKLWriteResGroup83], (instregex "SUB8mi")>;
2231 def: InstRW<[SKLWriteResGroup83], (instregex "SUB8mr")>;
2232 def: InstRW<[SKLWriteResGroup83], (instregex "XOR(16|32|64)mi")>;
2233 def: InstRW<[SKLWriteResGroup83], (instregex "XOR(16|32|64)mr")>;
2234 def: InstRW<[SKLWriteResGroup83], (instregex "XOR8mi")>;
2235 def: InstRW<[SKLWriteResGroup83], (instregex "XOR8mr")>;
2236
2237 def SKLWriteResGroup84 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
2238   let Latency = 6;
2239   let NumMicroOps = 6;
2240   let ResourceCycles = [1,5];
2241 }
2242 def: InstRW<[SKLWriteResGroup84], (instregex "STD")>;
2243
2244 def SKLWriteResGroup85 : SchedWriteRes<[SKLPort23]> {
2245   let Latency = 7;
2246   let NumMicroOps = 1;
2247   let ResourceCycles = [1];
2248 }
2249 def: InstRW<[SKLWriteResGroup85], (instregex "LD_F32m")>;
2250 def: InstRW<[SKLWriteResGroup85], (instregex "LD_F64m")>;
2251 def: InstRW<[SKLWriteResGroup85], (instregex "LD_F80m")>;
2252 def: InstRW<[SKLWriteResGroup85], (instregex "VBROADCASTF128")>;
2253 def: InstRW<[SKLWriteResGroup85], (instregex "VBROADCASTI128")>;
2254 def: InstRW<[SKLWriteResGroup85], (instregex "VBROADCASTSDYrm")>;
2255 def: InstRW<[SKLWriteResGroup85], (instregex "VBROADCASTSSYrm")>;
2256 def: InstRW<[SKLWriteResGroup85], (instregex "VLDDQUYrm")>;
2257 def: InstRW<[SKLWriteResGroup85], (instregex "VMOVAPDYrm")>;
2258 def: InstRW<[SKLWriteResGroup85], (instregex "VMOVAPSYrm")>;
2259 def: InstRW<[SKLWriteResGroup85], (instregex "VMOVDDUPYrm")>;
2260 def: InstRW<[SKLWriteResGroup85], (instregex "VMOVDQAYrm")>;
2261 def: InstRW<[SKLWriteResGroup85], (instregex "VMOVDQUYrm")>;
2262 def: InstRW<[SKLWriteResGroup85], (instregex "VMOVNTDQAYrm")>;
2263 def: InstRW<[SKLWriteResGroup85], (instregex "VMOVSHDUPYrm")>;
2264 def: InstRW<[SKLWriteResGroup85], (instregex "VMOVSLDUPYrm")>;
2265 def: InstRW<[SKLWriteResGroup85], (instregex "VMOVUPDYrm")>;
2266 def: InstRW<[SKLWriteResGroup85], (instregex "VMOVUPSYrm")>;
2267 def: InstRW<[SKLWriteResGroup85], (instregex "VPBROADCASTDYrm")>;
2268 def: InstRW<[SKLWriteResGroup85], (instregex "VPBROADCASTQYrm")>;
2269
2270 def SKLWriteResGroup86 : SchedWriteRes<[SKLPort0,SKLPort5]> {
2271   let Latency = 7;
2272   let NumMicroOps = 2;
2273   let ResourceCycles = [1,1];
2274 }
2275 def: InstRW<[SKLWriteResGroup86], (instregex "VCVTDQ2PDYrr")>;
2276
2277 def SKLWriteResGroup87 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2278   let Latency = 7;
2279   let NumMicroOps = 2;
2280   let ResourceCycles = [1,1];
2281 }
2282 def: InstRW<[SKLWriteResGroup87], (instregex "COMISDrm")>;
2283 def: InstRW<[SKLWriteResGroup87], (instregex "COMISSrm")>;
2284 def: InstRW<[SKLWriteResGroup87], (instregex "UCOMISDrm")>;
2285 def: InstRW<[SKLWriteResGroup87], (instregex "UCOMISSrm")>;
2286 def: InstRW<[SKLWriteResGroup87], (instregex "VCOMISDrm")>;
2287 def: InstRW<[SKLWriteResGroup87], (instregex "VCOMISSrm")>;
2288 def: InstRW<[SKLWriteResGroup87], (instregex "VUCOMISDrm")>;
2289 def: InstRW<[SKLWriteResGroup87], (instregex "VUCOMISSrm")>;
2290
2291 def SKLWriteResGroup88 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2292   let Latency = 7;
2293   let NumMicroOps = 2;
2294   let ResourceCycles = [1,1];
2295 }
2296 def: InstRW<[SKLWriteResGroup88], (instregex "INSERTPSrm")>;
2297 def: InstRW<[SKLWriteResGroup88], (instregex "PACKSSDWrm")>;
2298 def: InstRW<[SKLWriteResGroup88], (instregex "PACKSSWBrm")>;
2299 def: InstRW<[SKLWriteResGroup88], (instregex "PACKUSDWrm")>;
2300 def: InstRW<[SKLWriteResGroup88], (instregex "PACKUSWBrm")>;
2301 def: InstRW<[SKLWriteResGroup88], (instregex "PALIGNRrmi")>;
2302 def: InstRW<[SKLWriteResGroup88], (instregex "PBLENDWrmi")>;
2303 def: InstRW<[SKLWriteResGroup88], (instregex "PSHUFBrm")>;
2304 def: InstRW<[SKLWriteResGroup88], (instregex "PSHUFDmi")>;
2305 def: InstRW<[SKLWriteResGroup88], (instregex "PSHUFHWmi")>;
2306 def: InstRW<[SKLWriteResGroup88], (instregex "PSHUFLWmi")>;
2307 def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKHBWrm")>;
2308 def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKHDQrm")>;
2309 def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKHQDQrm")>;
2310 def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKHWDrm")>;
2311 def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKLBWrm")>;
2312 def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKLDQrm")>;
2313 def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKLQDQrm")>;
2314 def: InstRW<[SKLWriteResGroup88], (instregex "PUNPCKLWDrm")>;
2315 def: InstRW<[SKLWriteResGroup88], (instregex "SHUFPDrmi")>;
2316 def: InstRW<[SKLWriteResGroup88], (instregex "SHUFPSrmi")>;
2317 def: InstRW<[SKLWriteResGroup88], (instregex "UNPCKHPDrm")>;
2318 def: InstRW<[SKLWriteResGroup88], (instregex "UNPCKHPSrm")>;
2319 def: InstRW<[SKLWriteResGroup88], (instregex "UNPCKLPDrm")>;
2320 def: InstRW<[SKLWriteResGroup88], (instregex "UNPCKLPSrm")>;
2321 def: InstRW<[SKLWriteResGroup88], (instregex "VINSERTPSrm")>;
2322 def: InstRW<[SKLWriteResGroup88], (instregex "VPACKSSDWrm")>;
2323 def: InstRW<[SKLWriteResGroup88], (instregex "VPACKSSWBrm")>;
2324 def: InstRW<[SKLWriteResGroup88], (instregex "VPACKUSDWrm")>;
2325 def: InstRW<[SKLWriteResGroup88], (instregex "VPACKUSWBrm")>;
2326 def: InstRW<[SKLWriteResGroup88], (instregex "VPALIGNRrmi")>;
2327 def: InstRW<[SKLWriteResGroup88], (instregex "VPBLENDWrmi")>;
2328 def: InstRW<[SKLWriteResGroup88], (instregex "VPBROADCASTBrm")>;
2329 def: InstRW<[SKLWriteResGroup88], (instregex "VPBROADCASTWrm")>;
2330 def: InstRW<[SKLWriteResGroup88], (instregex "VPERMILPDmi")>;
2331 def: InstRW<[SKLWriteResGroup88], (instregex "VPERMILPDrm")>;
2332 def: InstRW<[SKLWriteResGroup88], (instregex "VPERMILPSmi")>;
2333 def: InstRW<[SKLWriteResGroup88], (instregex "VPERMILPSrm")>;
2334 def: InstRW<[SKLWriteResGroup88], (instregex "VPSHUFBrm")>;
2335 def: InstRW<[SKLWriteResGroup88], (instregex "VPSHUFDmi")>;
2336 def: InstRW<[SKLWriteResGroup88], (instregex "VPSHUFHWmi")>;
2337 def: InstRW<[SKLWriteResGroup88], (instregex "VPSHUFLWmi")>;
2338 def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKHBWrm")>;
2339 def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKHDQrm")>;
2340 def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKHQDQrm")>;
2341 def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKHWDrm")>;
2342 def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKLBWrm")>;
2343 def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKLDQrm")>;
2344 def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKLQDQrm")>;
2345 def: InstRW<[SKLWriteResGroup88], (instregex "VPUNPCKLWDrm")>;
2346 def: InstRW<[SKLWriteResGroup88], (instregex "VSHUFPDrmi")>;
2347 def: InstRW<[SKLWriteResGroup88], (instregex "VSHUFPSrmi")>;
2348 def: InstRW<[SKLWriteResGroup88], (instregex "VUNPCKHPDrm")>;
2349 def: InstRW<[SKLWriteResGroup88], (instregex "VUNPCKHPSrm")>;
2350 def: InstRW<[SKLWriteResGroup88], (instregex "VUNPCKLPDrm")>;
2351 def: InstRW<[SKLWriteResGroup88], (instregex "VUNPCKLPSrm")>;
2352
2353 def SKLWriteResGroup89 : SchedWriteRes<[SKLPort5,SKLPort015]> {
2354   let Latency = 7;
2355   let NumMicroOps = 2;
2356   let ResourceCycles = [1,1];
2357 }
2358 def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2DQYrr")>;
2359 def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPD2PSYrr")>;
2360 def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPH2PSYrr")>;
2361 def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPS2PDYrr")>;
2362 def: InstRW<[SKLWriteResGroup89], (instregex "VCVTPS2PHYrr")>;
2363 def: InstRW<[SKLWriteResGroup89], (instregex "VCVTTPD2DQYrr")>;
2364
2365 def SKLWriteResGroup90 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2366   let Latency = 7;
2367   let NumMicroOps = 2;
2368   let ResourceCycles = [1,1];
2369 }
2370 def: InstRW<[SKLWriteResGroup90], (instregex "PABSBrm")>;
2371 def: InstRW<[SKLWriteResGroup90], (instregex "PABSDrm")>;
2372 def: InstRW<[SKLWriteResGroup90], (instregex "PABSWrm")>;
2373 def: InstRW<[SKLWriteResGroup90], (instregex "PADDSBrm")>;
2374 def: InstRW<[SKLWriteResGroup90], (instregex "PADDSWrm")>;
2375 def: InstRW<[SKLWriteResGroup90], (instregex "PADDUSBrm")>;
2376 def: InstRW<[SKLWriteResGroup90], (instregex "PADDUSWrm")>;
2377 def: InstRW<[SKLWriteResGroup90], (instregex "PAVGBrm")>;
2378 def: InstRW<[SKLWriteResGroup90], (instregex "PAVGWrm")>;
2379 def: InstRW<[SKLWriteResGroup90], (instregex "PCMPEQBrm")>;
2380 def: InstRW<[SKLWriteResGroup90], (instregex "PCMPEQDrm")>;
2381 def: InstRW<[SKLWriteResGroup90], (instregex "PCMPEQQrm")>;
2382 def: InstRW<[SKLWriteResGroup90], (instregex "PCMPEQWrm")>;
2383 def: InstRW<[SKLWriteResGroup90], (instregex "PCMPGTBrm")>;
2384 def: InstRW<[SKLWriteResGroup90], (instregex "PCMPGTDrm")>;
2385 def: InstRW<[SKLWriteResGroup90], (instregex "PCMPGTWrm")>;
2386 def: InstRW<[SKLWriteResGroup90], (instregex "PMAXSBrm")>;
2387 def: InstRW<[SKLWriteResGroup90], (instregex "PMAXSDrm")>;
2388 def: InstRW<[SKLWriteResGroup90], (instregex "PMAXSWrm")>;
2389 def: InstRW<[SKLWriteResGroup90], (instregex "PMAXUBrm")>;
2390 def: InstRW<[SKLWriteResGroup90], (instregex "PMAXUDrm")>;
2391 def: InstRW<[SKLWriteResGroup90], (instregex "PMAXUWrm")>;
2392 def: InstRW<[SKLWriteResGroup90], (instregex "PMINSBrm")>;
2393 def: InstRW<[SKLWriteResGroup90], (instregex "PMINSDrm")>;
2394 def: InstRW<[SKLWriteResGroup90], (instregex "PMINSWrm")>;
2395 def: InstRW<[SKLWriteResGroup90], (instregex "PMINUBrm")>;
2396 def: InstRW<[SKLWriteResGroup90], (instregex "PMINUDrm")>;
2397 def: InstRW<[SKLWriteResGroup90], (instregex "PMINUWrm")>;
2398 def: InstRW<[SKLWriteResGroup90], (instregex "PSIGNBrm128")>;
2399 def: InstRW<[SKLWriteResGroup90], (instregex "PSIGNDrm128")>;
2400 def: InstRW<[SKLWriteResGroup90], (instregex "PSIGNWrm128")>;
2401 def: InstRW<[SKLWriteResGroup90], (instregex "PSLLDrm")>;
2402 def: InstRW<[SKLWriteResGroup90], (instregex "PSLLQrm")>;
2403 def: InstRW<[SKLWriteResGroup90], (instregex "PSLLWrm")>;
2404 def: InstRW<[SKLWriteResGroup90], (instregex "PSRADrm")>;
2405 def: InstRW<[SKLWriteResGroup90], (instregex "PSRAWrm")>;
2406 def: InstRW<[SKLWriteResGroup90], (instregex "PSRLDrm")>;
2407 def: InstRW<[SKLWriteResGroup90], (instregex "PSRLQrm")>;
2408 def: InstRW<[SKLWriteResGroup90], (instregex "PSRLWrm")>;
2409 def: InstRW<[SKLWriteResGroup90], (instregex "PSUBSBrm")>;
2410 def: InstRW<[SKLWriteResGroup90], (instregex "PSUBSWrm")>;
2411 def: InstRW<[SKLWriteResGroup90], (instregex "PSUBUSBrm")>;
2412 def: InstRW<[SKLWriteResGroup90], (instregex "PSUBUSWrm")>;
2413 def: InstRW<[SKLWriteResGroup90], (instregex "VPABSBrm")>;
2414 def: InstRW<[SKLWriteResGroup90], (instregex "VPABSDrm")>;
2415 def: InstRW<[SKLWriteResGroup90], (instregex "VPABSWrm")>;
2416 def: InstRW<[SKLWriteResGroup90], (instregex "VPADDSBrm")>;
2417 def: InstRW<[SKLWriteResGroup90], (instregex "VPADDSWrm")>;
2418 def: InstRW<[SKLWriteResGroup90], (instregex "VPADDUSBrm")>;
2419 def: InstRW<[SKLWriteResGroup90], (instregex "VPADDUSWrm")>;
2420 def: InstRW<[SKLWriteResGroup90], (instregex "VPAVGBrm")>;
2421 def: InstRW<[SKLWriteResGroup90], (instregex "VPAVGWrm")>;
2422 def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPEQBrm")>;
2423 def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPEQDrm")>;
2424 def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPEQQrm")>;
2425 def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPEQWrm")>;
2426 def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPGTBrm")>;
2427 def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPGTDrm")>;
2428 def: InstRW<[SKLWriteResGroup90], (instregex "VPCMPGTWrm")>;
2429 def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXSBrm")>;
2430 def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXSDrm")>;
2431 def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXSWrm")>;
2432 def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXUBrm")>;
2433 def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXUDrm")>;
2434 def: InstRW<[SKLWriteResGroup90], (instregex "VPMAXUWrm")>;
2435 def: InstRW<[SKLWriteResGroup90], (instregex "VPMINSBrm")>;
2436 def: InstRW<[SKLWriteResGroup90], (instregex "VPMINSDrm")>;
2437 def: InstRW<[SKLWriteResGroup90], (instregex "VPMINSWrm")>;
2438 def: InstRW<[SKLWriteResGroup90], (instregex "VPMINUBrm")>;
2439 def: InstRW<[SKLWriteResGroup90], (instregex "VPMINUDrm")>;
2440 def: InstRW<[SKLWriteResGroup90], (instregex "VPMINUWrm")>;
2441 def: InstRW<[SKLWriteResGroup90], (instregex "VPSIGNBrm128")>;
2442 def: InstRW<[SKLWriteResGroup90], (instregex "VPSIGNDrm128")>;
2443 def: InstRW<[SKLWriteResGroup90], (instregex "VPSIGNWrm128")>;
2444 def: InstRW<[SKLWriteResGroup90], (instregex "VPSLLDrm")>;
2445 def: InstRW<[SKLWriteResGroup90], (instregex "VPSLLQrm")>;
2446 def: InstRW<[SKLWriteResGroup90], (instregex "VPSLLVDrm")>;
2447 def: InstRW<[SKLWriteResGroup90], (instregex "VPSLLVQrm")>;
2448 def: InstRW<[SKLWriteResGroup90], (instregex "VPSLLWrm")>;
2449 def: InstRW<[SKLWriteResGroup90], (instregex "VPSRADrm")>;
2450 def: InstRW<[SKLWriteResGroup90], (instregex "VPSRAVDrm")>;
2451 def: InstRW<[SKLWriteResGroup90], (instregex "VPSRAWrm")>;
2452 def: InstRW<[SKLWriteResGroup90], (instregex "VPSRLDrm")>;
2453 def: InstRW<[SKLWriteResGroup90], (instregex "VPSRLQrm")>;
2454 def: InstRW<[SKLWriteResGroup90], (instregex "VPSRLVDrm")>;
2455 def: InstRW<[SKLWriteResGroup90], (instregex "VPSRLVQrm")>;
2456 def: InstRW<[SKLWriteResGroup90], (instregex "VPSRLWrm")>;
2457 def: InstRW<[SKLWriteResGroup90], (instregex "VPSUBSBrm")>;
2458 def: InstRW<[SKLWriteResGroup90], (instregex "VPSUBSWrm")>;
2459 def: InstRW<[SKLWriteResGroup90], (instregex "VPSUBUSBrm")>;
2460 def: InstRW<[SKLWriteResGroup90], (instregex "VPSUBUSWrm")>;
2461
2462 def SKLWriteResGroup91 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2463   let Latency = 7;
2464   let NumMicroOps = 2;
2465   let ResourceCycles = [1,1];
2466 }
2467 def: InstRW<[SKLWriteResGroup91], (instregex "ANDNPDrm")>;
2468 def: InstRW<[SKLWriteResGroup91], (instregex "ANDNPSrm")>;
2469 def: InstRW<[SKLWriteResGroup91], (instregex "ANDPDrm")>;
2470 def: InstRW<[SKLWriteResGroup91], (instregex "ANDPSrm")>;
2471 def: InstRW<[SKLWriteResGroup91], (instregex "BLENDPDrmi")>;
2472 def: InstRW<[SKLWriteResGroup91], (instregex "BLENDPSrmi")>;
2473 def: InstRW<[SKLWriteResGroup91], (instregex "ORPDrm")>;
2474 def: InstRW<[SKLWriteResGroup91], (instregex "ORPSrm")>;
2475 def: InstRW<[SKLWriteResGroup91], (instregex "PADDBrm")>;
2476 def: InstRW<[SKLWriteResGroup91], (instregex "PADDDrm")>;
2477 def: InstRW<[SKLWriteResGroup91], (instregex "PADDQrm")>;
2478 def: InstRW<[SKLWriteResGroup91], (instregex "PADDWrm")>;
2479 def: InstRW<[SKLWriteResGroup91], (instregex "PANDNrm")>;
2480 def: InstRW<[SKLWriteResGroup91], (instregex "PANDrm")>;
2481 def: InstRW<[SKLWriteResGroup91], (instregex "PORrm")>;
2482 def: InstRW<[SKLWriteResGroup91], (instregex "PSUBBrm")>;
2483 def: InstRW<[SKLWriteResGroup91], (instregex "PSUBDrm")>;
2484 def: InstRW<[SKLWriteResGroup91], (instregex "PSUBQrm")>;
2485 def: InstRW<[SKLWriteResGroup91], (instregex "PSUBWrm")>;
2486 def: InstRW<[SKLWriteResGroup91], (instregex "PXORrm")>;
2487 def: InstRW<[SKLWriteResGroup91], (instregex "VANDNPDrm")>;
2488 def: InstRW<[SKLWriteResGroup91], (instregex "VANDNPSrm")>;
2489 def: InstRW<[SKLWriteResGroup91], (instregex "VANDPDrm")>;
2490 def: InstRW<[SKLWriteResGroup91], (instregex "VANDPSrm")>;
2491 def: InstRW<[SKLWriteResGroup91], (instregex "VBLENDPDrmi")>;
2492 def: InstRW<[SKLWriteResGroup91], (instregex "VBLENDPSrmi")>;
2493 def: InstRW<[SKLWriteResGroup91], (instregex "VINSERTF128rm")>;
2494 def: InstRW<[SKLWriteResGroup91], (instregex "VINSERTI128rm")>;
2495 def: InstRW<[SKLWriteResGroup91], (instregex "VMASKMOVPDrm")>;
2496 def: InstRW<[SKLWriteResGroup91], (instregex "VMASKMOVPSrm")>;
2497 def: InstRW<[SKLWriteResGroup91], (instregex "VORPDrm")>;
2498 def: InstRW<[SKLWriteResGroup91], (instregex "VORPSrm")>;
2499 def: InstRW<[SKLWriteResGroup91], (instregex "VPADDBrm")>;
2500 def: InstRW<[SKLWriteResGroup91], (instregex "VPADDDrm")>;
2501 def: InstRW<[SKLWriteResGroup91], (instregex "VPADDQrm")>;
2502 def: InstRW<[SKLWriteResGroup91], (instregex "VPADDWrm")>;
2503 def: InstRW<[SKLWriteResGroup91], (instregex "VPANDNrm")>;
2504 def: InstRW<[SKLWriteResGroup91], (instregex "VPANDrm")>;
2505 def: InstRW<[SKLWriteResGroup91], (instregex "VPBLENDDrmi")>;
2506 def: InstRW<[SKLWriteResGroup91], (instregex "VPMASKMOVDrm")>;
2507 def: InstRW<[SKLWriteResGroup91], (instregex "VPMASKMOVQrm")>;
2508 def: InstRW<[SKLWriteResGroup91], (instregex "VPORrm")>;
2509 def: InstRW<[SKLWriteResGroup91], (instregex "VPSUBBrm")>;
2510 def: InstRW<[SKLWriteResGroup91], (instregex "VPSUBDrm")>;
2511 def: InstRW<[SKLWriteResGroup91], (instregex "VPSUBQrm")>;
2512 def: InstRW<[SKLWriteResGroup91], (instregex "VPSUBWrm")>;
2513 def: InstRW<[SKLWriteResGroup91], (instregex "VPXORrm")>;
2514 def: InstRW<[SKLWriteResGroup91], (instregex "VXORPDrm")>;
2515 def: InstRW<[SKLWriteResGroup91], (instregex "VXORPSrm")>;
2516 def: InstRW<[SKLWriteResGroup91], (instregex "XORPDrm")>;
2517 def: InstRW<[SKLWriteResGroup91], (instregex "XORPSrm")>;
2518
2519 def SKLWriteResGroup92 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2520   let Latency = 7;
2521   let NumMicroOps = 3;
2522   let ResourceCycles = [2,1];
2523 }
2524 def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSDWirm")>;
2525 def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKSSWBirm")>;
2526 def: InstRW<[SKLWriteResGroup92], (instregex "MMX_PACKUSWBirm")>;
2527
2528 def SKLWriteResGroup93 : SchedWriteRes<[SKLPort23,SKLPort06]> {
2529   let Latency = 7;
2530   let NumMicroOps = 3;
2531   let ResourceCycles = [1,2];
2532 }
2533 def: InstRW<[SKLWriteResGroup93], (instregex "CMOVA(16|32|64)rm")>;
2534 def: InstRW<[SKLWriteResGroup93], (instregex "CMOVBE(16|32|64)rm")>;
2535
2536 def SKLWriteResGroup94 : SchedWriteRes<[SKLPort23,SKLPort0156]> {
2537   let Latency = 7;
2538   let NumMicroOps = 3;
2539   let ResourceCycles = [1,2];
2540 }
2541 def: InstRW<[SKLWriteResGroup94], (instregex "LEAVE64")>;
2542 def: InstRW<[SKLWriteResGroup94], (instregex "SCASB")>;
2543 def: InstRW<[SKLWriteResGroup94], (instregex "SCASL")>;
2544 def: InstRW<[SKLWriteResGroup94], (instregex "SCASQ")>;
2545 def: InstRW<[SKLWriteResGroup94], (instregex "SCASW")>;
2546
2547 def SKLWriteResGroup95 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort015]> {
2548   let Latency = 7;
2549   let NumMicroOps = 3;
2550   let ResourceCycles = [1,1,1];
2551 }
2552 def: InstRW<[SKLWriteResGroup95], (instregex "CVTTSS2SI64rr")>;
2553 def: InstRW<[SKLWriteResGroup95], (instregex "CVTTSS2SIrr")>;
2554 def: InstRW<[SKLWriteResGroup95], (instregex "VCVTTSS2SI64rr")>;
2555 def: InstRW<[SKLWriteResGroup95], (instregex "VCVTTSS2SIrr")>;
2556
2557 def SKLWriteResGroup96 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05]> {
2558   let Latency = 7;
2559   let NumMicroOps = 3;
2560   let ResourceCycles = [1,1,1];
2561 }
2562 def: InstRW<[SKLWriteResGroup96], (instregex "FLDCW16m")>;
2563
2564 def SKLWriteResGroup97 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort0156]> {
2565   let Latency = 7;
2566   let NumMicroOps = 3;
2567   let ResourceCycles = [1,1,1];
2568 }
2569 def: InstRW<[SKLWriteResGroup97], (instregex "LDMXCSR")>;
2570 def: InstRW<[SKLWriteResGroup97], (instregex "VLDMXCSR")>;
2571
2572 def SKLWriteResGroup98 : SchedWriteRes<[SKLPort6,SKLPort23,SKLPort0156]> {
2573   let Latency = 7;
2574   let NumMicroOps = 3;
2575   let ResourceCycles = [1,1,1];
2576 }
2577 def: InstRW<[SKLWriteResGroup98], (instregex "LRETQ")>;
2578 def: InstRW<[SKLWriteResGroup98], (instregex "RETQ")>;
2579
2580 def SKLWriteResGroup99 : SchedWriteRes<[SKLPort23,SKLPort06,SKLPort15]> {
2581   let Latency = 7;
2582   let NumMicroOps = 3;
2583   let ResourceCycles = [1,1,1];
2584 }
2585 def: InstRW<[SKLWriteResGroup99], (instregex "BEXTR(32|64)rm")>;
2586
2587 def SKLWriteResGroup100 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2588   let Latency = 7;
2589   let NumMicroOps = 5;
2590   let ResourceCycles = [1,1,1,2];
2591 }
2592 def: InstRW<[SKLWriteResGroup100], (instregex "ROL(16|32|64)m1")>;
2593 def: InstRW<[SKLWriteResGroup100], (instregex "ROL(16|32|64)mi")>;
2594 def: InstRW<[SKLWriteResGroup100], (instregex "ROL8m1")>;
2595 def: InstRW<[SKLWriteResGroup100], (instregex "ROL8mi")>;
2596 def: InstRW<[SKLWriteResGroup100], (instregex "ROR(16|32|64)m1")>;
2597 def: InstRW<[SKLWriteResGroup100], (instregex "ROR(16|32|64)mi")>;
2598 def: InstRW<[SKLWriteResGroup100], (instregex "ROR8m1")>;
2599 def: InstRW<[SKLWriteResGroup100], (instregex "ROR8mi")>;
2600
2601 def SKLWriteResGroup101 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
2602   let Latency = 7;
2603   let NumMicroOps = 5;
2604   let ResourceCycles = [1,1,1,2];
2605 }
2606 def: InstRW<[SKLWriteResGroup101], (instregex "XADD(16|32|64)rm")>;
2607 def: InstRW<[SKLWriteResGroup101], (instregex "XADD8rm")>;
2608
2609 def SKLWriteResGroup102 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
2610   let Latency = 7;
2611   let NumMicroOps = 5;
2612   let ResourceCycles = [1,1,1,1,1];
2613 }
2614 def: InstRW<[SKLWriteResGroup102], (instregex "CALL(16|32|64)m")>;
2615 def: InstRW<[SKLWriteResGroup102], (instregex "FARCALL64")>;
2616
2617 def SKLWriteResGroup103 : SchedWriteRes<[SKLPort6,SKLPort06,SKLPort15,SKLPort0156]> {
2618   let Latency = 7;
2619   let NumMicroOps = 7;
2620   let ResourceCycles = [1,3,1,2];
2621 }
2622 def: InstRW<[SKLWriteResGroup103], (instregex "LOOP")>;
2623
2624 def SKLWriteResGroup104 : SchedWriteRes<[SKLPort0]> {
2625   let Latency = 8;
2626   let NumMicroOps = 2;
2627   let ResourceCycles = [2];
2628 }
2629 def: InstRW<[SKLWriteResGroup104], (instregex "AESIMCrr")>;
2630 def: InstRW<[SKLWriteResGroup104], (instregex "VAESIMCrr")>;
2631
2632 def SKLWriteResGroup105 : SchedWriteRes<[SKLPort015]> {
2633   let Latency = 8;
2634   let NumMicroOps = 2;
2635   let ResourceCycles = [2];
2636 }
2637 def: InstRW<[SKLWriteResGroup105], (instregex "PMULLDrr")>;
2638 def: InstRW<[SKLWriteResGroup105], (instregex "ROUNDPDr")>;
2639 def: InstRW<[SKLWriteResGroup105], (instregex "ROUNDPSr")>;
2640 def: InstRW<[SKLWriteResGroup105], (instregex "ROUNDSDr")>;
2641 def: InstRW<[SKLWriteResGroup105], (instregex "ROUNDSSr")>;
2642 def: InstRW<[SKLWriteResGroup105], (instregex "VPMULLDYrr")>;
2643 def: InstRW<[SKLWriteResGroup105], (instregex "VPMULLDrr")>;
2644 def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDPDr")>;
2645 def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDPSr")>;
2646 def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDSDr")>;
2647 def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDSSr")>;
2648 def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDYPDr")>;
2649 def: InstRW<[SKLWriteResGroup105], (instregex "VROUNDYPSr")>;
2650
2651 def SKLWriteResGroup106 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2652   let Latency = 8;
2653   let NumMicroOps = 2;
2654   let ResourceCycles = [1,1];
2655 }
2656 def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPDrm")>;
2657 def: InstRW<[SKLWriteResGroup106], (instregex "VTESTPSrm")>;
2658
2659 def SKLWriteResGroup107 : SchedWriteRes<[SKLPort1,SKLPort23]> {
2660   let Latency = 8;
2661   let NumMicroOps = 2;
2662   let ResourceCycles = [1,1];
2663 }
2664 def: InstRW<[SKLWriteResGroup107], (instregex "BSF(16|32|64)rm")>;
2665 def: InstRW<[SKLWriteResGroup107], (instregex "BSR(16|32|64)rm")>;
2666 def: InstRW<[SKLWriteResGroup107], (instregex "IMUL64m")>;
2667 def: InstRW<[SKLWriteResGroup107], (instregex "IMUL(32|64)rm(i8)?")>;
2668 def: InstRW<[SKLWriteResGroup107], (instregex "IMUL8m")>;
2669 def: InstRW<[SKLWriteResGroup107], (instregex "LZCNT(16|32|64)rm")>;
2670 def: InstRW<[SKLWriteResGroup107], (instregex "MUL(16|32|64)m")>;
2671 def: InstRW<[SKLWriteResGroup107], (instregex "MUL8m")>;
2672 def: InstRW<[SKLWriteResGroup107], (instregex "PDEP(32|64)rm")>;
2673 def: InstRW<[SKLWriteResGroup107], (instregex "PEXT(32|64)rm")>;
2674 def: InstRW<[SKLWriteResGroup107], (instregex "POPCNT(16|32|64)rm")>;
2675 def: InstRW<[SKLWriteResGroup107], (instregex "TZCNT(16|32|64)rm")>;
2676
2677 def SKLWriteResGroup107_16 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
2678   let Latency = 3;
2679   let NumMicroOps = 3;
2680   let ResourceCycles = [1,1,1]; 
2681 }
2682 def: InstRW<[SKLWriteResGroup107_16], (instregex "IMUL16rm(i8)?")>;
2683
2684 def SKLWriteResGroup107_16_2 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
2685   let Latency = 3;
2686   let NumMicroOps = 5;
2687 }
2688 def: InstRW<[SKLWriteResGroup107_16_2], (instregex "IMUL16m")>;
2689 def: InstRW<[SKLWriteResGroup107_16_2], (instregex "MUL16m")>;
2690
2691 def SKLWriteResGroup107_32 : SchedWriteRes<[SKLPort1, SKLPort0156, SKLPort23]> {
2692   let Latency = 3;
2693   let NumMicroOps = 3;
2694   let ResourceCycles = [1,1,1];
2695 }
2696 def: InstRW<[SKLWriteResGroup107_32], (instregex "IMUL32m")>;
2697 def: InstRW<[SKLWriteResGroup107_32], (instregex "MUL32m")>;
2698
2699 def SKLWriteResGroup108 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2700   let Latency = 8;
2701   let NumMicroOps = 2;
2702   let ResourceCycles = [1,1];
2703 }
2704 def: InstRW<[SKLWriteResGroup108], (instregex "FCOM32m")>;
2705 def: InstRW<[SKLWriteResGroup108], (instregex "FCOM64m")>;
2706 def: InstRW<[SKLWriteResGroup108], (instregex "FCOMP32m")>;
2707 def: InstRW<[SKLWriteResGroup108], (instregex "FCOMP64m")>;
2708 def: InstRW<[SKLWriteResGroup108], (instregex "MMX_PSADBWirm")>;
2709 def: InstRW<[SKLWriteResGroup108], (instregex "VPACKSSDWYrm")>;
2710 def: InstRW<[SKLWriteResGroup108], (instregex "VPACKSSWBYrm")>;
2711 def: InstRW<[SKLWriteResGroup108], (instregex "VPACKUSDWYrm")>;
2712 def: InstRW<[SKLWriteResGroup108], (instregex "VPACKUSWBYrm")>;
2713 def: InstRW<[SKLWriteResGroup108], (instregex "VPALIGNRYrmi")>;
2714 def: InstRW<[SKLWriteResGroup108], (instregex "VPBLENDWYrmi")>;
2715 def: InstRW<[SKLWriteResGroup108], (instregex "VPBROADCASTBYrm")>;
2716 def: InstRW<[SKLWriteResGroup108], (instregex "VPBROADCASTWYrm")>;
2717 def: InstRW<[SKLWriteResGroup108], (instregex "VPERMILPDYmi")>;
2718 def: InstRW<[SKLWriteResGroup108], (instregex "VPERMILPDYrm")>;
2719 def: InstRW<[SKLWriteResGroup108], (instregex "VPERMILPSYmi")>;
2720 def: InstRW<[SKLWriteResGroup108], (instregex "VPERMILPSYrm")>;
2721 def: InstRW<[SKLWriteResGroup108], (instregex "VPMOVSXBDYrm")>;
2722 def: InstRW<[SKLWriteResGroup108], (instregex "VPMOVSXBQYrm")>;
2723 def: InstRW<[SKLWriteResGroup108], (instregex "VPMOVSXWQYrm")>;
2724 def: InstRW<[SKLWriteResGroup108], (instregex "VPSHUFBYrm")>;
2725 def: InstRW<[SKLWriteResGroup108], (instregex "VPSHUFDYmi")>;
2726 def: InstRW<[SKLWriteResGroup108], (instregex "VPSHUFHWYmi")>;
2727 def: InstRW<[SKLWriteResGroup108], (instregex "VPSHUFLWYmi")>;
2728 def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKHBWYrm")>;
2729 def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKHDQYrm")>;
2730 def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKHQDQYrm")>;
2731 def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKHWDYrm")>;
2732 def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKLBWYrm")>;
2733 def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKLDQYrm")>;
2734 def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKLQDQYrm")>;
2735 def: InstRW<[SKLWriteResGroup108], (instregex "VPUNPCKLWDYrm")>;
2736 def: InstRW<[SKLWriteResGroup108], (instregex "VSHUFPDYrmi")>;
2737 def: InstRW<[SKLWriteResGroup108], (instregex "VSHUFPSYrmi")>;
2738 def: InstRW<[SKLWriteResGroup108], (instregex "VUNPCKHPDYrm")>;
2739 def: InstRW<[SKLWriteResGroup108], (instregex "VUNPCKHPSYrm")>;
2740 def: InstRW<[SKLWriteResGroup108], (instregex "VUNPCKLPDYrm")>;
2741 def: InstRW<[SKLWriteResGroup108], (instregex "VUNPCKLPSYrm")>;
2742
2743 def SKLWriteResGroup109 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2744   let Latency = 8;
2745   let NumMicroOps = 2;
2746   let ResourceCycles = [1,1];
2747 }
2748 def: InstRW<[SKLWriteResGroup109], (instregex "VPABSBYrm")>;
2749 def: InstRW<[SKLWriteResGroup109], (instregex "VPABSDYrm")>;
2750 def: InstRW<[SKLWriteResGroup109], (instregex "VPABSWYrm")>;
2751 def: InstRW<[SKLWriteResGroup109], (instregex "VPADDSBYrm")>;
2752 def: InstRW<[SKLWriteResGroup109], (instregex "VPADDSWYrm")>;
2753 def: InstRW<[SKLWriteResGroup109], (instregex "VPADDUSBYrm")>;
2754 def: InstRW<[SKLWriteResGroup109], (instregex "VPADDUSWYrm")>;
2755 def: InstRW<[SKLWriteResGroup109], (instregex "VPAVGBYrm")>;
2756 def: InstRW<[SKLWriteResGroup109], (instregex "VPAVGWYrm")>;
2757 def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPEQBYrm")>;
2758 def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPEQDYrm")>;
2759 def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPEQQYrm")>;
2760 def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPEQWYrm")>;
2761 def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPGTBYrm")>;
2762 def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPGTDYrm")>;
2763 def: InstRW<[SKLWriteResGroup109], (instregex "VPCMPGTWYrm")>;
2764 def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXSBYrm")>;
2765 def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXSDYrm")>;
2766 def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXSWYrm")>;
2767 def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXUBYrm")>;
2768 def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXUDYrm")>;
2769 def: InstRW<[SKLWriteResGroup109], (instregex "VPMAXUWYrm")>;
2770 def: InstRW<[SKLWriteResGroup109], (instregex "VPMINSBYrm")>;
2771 def: InstRW<[SKLWriteResGroup109], (instregex "VPMINSDYrm")>;
2772 def: InstRW<[SKLWriteResGroup109], (instregex "VPMINSWYrm")>;
2773 def: InstRW<[SKLWriteResGroup109], (instregex "VPMINUBYrm")>;
2774 def: InstRW<[SKLWriteResGroup109], (instregex "VPMINUDYrm")>;
2775 def: InstRW<[SKLWriteResGroup109], (instregex "VPMINUWYrm")>;
2776 def: InstRW<[SKLWriteResGroup109], (instregex "VPSIGNBYrm256")>;
2777 def: InstRW<[SKLWriteResGroup109], (instregex "VPSIGNDYrm256")>;
2778 def: InstRW<[SKLWriteResGroup109], (instregex "VPSIGNWYrm256")>;
2779 def: InstRW<[SKLWriteResGroup109], (instregex "VPSLLDYrm")>;
2780 def: InstRW<[SKLWriteResGroup109], (instregex "VPSLLQYrm")>;
2781 def: InstRW<[SKLWriteResGroup109], (instregex "VPSLLVDYrm")>;
2782 def: InstRW<[SKLWriteResGroup109], (instregex "VPSLLVQYrm")>;
2783 def: InstRW<[SKLWriteResGroup109], (instregex "VPSLLWYrm")>;
2784 def: InstRW<[SKLWriteResGroup109], (instregex "VPSRADYrm")>;
2785 def: InstRW<[SKLWriteResGroup109], (instregex "VPSRAVDYrm")>;
2786 def: InstRW<[SKLWriteResGroup109], (instregex "VPSRAWYrm")>;
2787 def: InstRW<[SKLWriteResGroup109], (instregex "VPSRLDYrm")>;
2788 def: InstRW<[SKLWriteResGroup109], (instregex "VPSRLQYrm")>;
2789 def: InstRW<[SKLWriteResGroup109], (instregex "VPSRLVDYrm")>;
2790 def: InstRW<[SKLWriteResGroup109], (instregex "VPSRLVQYrm")>;
2791 def: InstRW<[SKLWriteResGroup109], (instregex "VPSRLWYrm")>;
2792 def: InstRW<[SKLWriteResGroup109], (instregex "VPSUBSBYrm")>;
2793 def: InstRW<[SKLWriteResGroup109], (instregex "VPSUBSWYrm")>;
2794 def: InstRW<[SKLWriteResGroup109], (instregex "VPSUBUSBYrm")>;
2795 def: InstRW<[SKLWriteResGroup109], (instregex "VPSUBUSWYrm")>;
2796
2797 def SKLWriteResGroup110 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2798   let Latency = 8;
2799   let NumMicroOps = 2;
2800   let ResourceCycles = [1,1];
2801 }
2802 def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPDYrm")>;
2803 def: InstRW<[SKLWriteResGroup110], (instregex "VANDNPSYrm")>;
2804 def: InstRW<[SKLWriteResGroup110], (instregex "VANDPDYrm")>;
2805 def: InstRW<[SKLWriteResGroup110], (instregex "VANDPSYrm")>;
2806 def: InstRW<[SKLWriteResGroup110], (instregex "VBLENDPDYrmi")>;
2807 def: InstRW<[SKLWriteResGroup110], (instregex "VBLENDPSYrmi")>;
2808 def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPDYrm")>;
2809 def: InstRW<[SKLWriteResGroup110], (instregex "VMASKMOVPSYrm")>;
2810 def: InstRW<[SKLWriteResGroup110], (instregex "VORPDYrm")>;
2811 def: InstRW<[SKLWriteResGroup110], (instregex "VORPSYrm")>;
2812 def: InstRW<[SKLWriteResGroup110], (instregex "VPADDBYrm")>;
2813 def: InstRW<[SKLWriteResGroup110], (instregex "VPADDDYrm")>;
2814 def: InstRW<[SKLWriteResGroup110], (instregex "VPADDQYrm")>;
2815 def: InstRW<[SKLWriteResGroup110], (instregex "VPADDWYrm")>;
2816 def: InstRW<[SKLWriteResGroup110], (instregex "VPANDNYrm")>;
2817 def: InstRW<[SKLWriteResGroup110], (instregex "VPANDYrm")>;
2818 def: InstRW<[SKLWriteResGroup110], (instregex "VPBLENDDYrmi")>;
2819 def: InstRW<[SKLWriteResGroup110], (instregex "VPMASKMOVDYrm")>;
2820 def: InstRW<[SKLWriteResGroup110], (instregex "VPMASKMOVQYrm")>;
2821 def: InstRW<[SKLWriteResGroup110], (instregex "VPORYrm")>;
2822 def: InstRW<[SKLWriteResGroup110], (instregex "VPSUBBYrm")>;
2823 def: InstRW<[SKLWriteResGroup110], (instregex "VPSUBDYrm")>;
2824 def: InstRW<[SKLWriteResGroup110], (instregex "VPSUBQYrm")>;
2825 def: InstRW<[SKLWriteResGroup110], (instregex "VPSUBWYrm")>;
2826 def: InstRW<[SKLWriteResGroup110], (instregex "VPXORYrm")>;
2827 def: InstRW<[SKLWriteResGroup110], (instregex "VXORPDYrm")>;
2828 def: InstRW<[SKLWriteResGroup110], (instregex "VXORPSYrm")>;
2829
2830 def SKLWriteResGroup111 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2831   let Latency = 8;
2832   let NumMicroOps = 3;
2833   let ResourceCycles = [1,2];
2834 }
2835 def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPDrm0")>;
2836 def: InstRW<[SKLWriteResGroup111], (instregex "BLENDVPSrm0")>;
2837 def: InstRW<[SKLWriteResGroup111], (instregex "PBLENDVBrm0")>;
2838 def: InstRW<[SKLWriteResGroup111], (instregex "VBLENDVPDrm")>;
2839 def: InstRW<[SKLWriteResGroup111], (instregex "VBLENDVPSrm")>;
2840 def: InstRW<[SKLWriteResGroup111], (instregex "VPBLENDVBYrm")>;
2841 def: InstRW<[SKLWriteResGroup111], (instregex "VPBLENDVBrm")>;
2842
2843 def SKLWriteResGroup112 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
2844   let Latency = 8;
2845   let NumMicroOps = 4;
2846   let ResourceCycles = [1,2,1];
2847 }
2848 def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PHADDSWrm64")>;
2849 def: InstRW<[SKLWriteResGroup112], (instregex "MMX_PHSUBSWrm64")>;
2850
2851 def SKLWriteResGroup113 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort05]> {
2852   let Latency = 8;
2853   let NumMicroOps = 4;
2854   let ResourceCycles = [2,1,1];
2855 }
2856 def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHADDWrm64")>;
2857 def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHADDrm64")>;
2858 def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHSUBDrm64")>;
2859 def: InstRW<[SKLWriteResGroup113], (instregex "MMX_PHSUBWrm64")>;
2860
2861 def SKLWriteResGroup114 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort237,SKLPort015]> {
2862   let Latency = 8;
2863   let NumMicroOps = 4;
2864   let ResourceCycles = [1,1,1,1];
2865 }
2866 def: InstRW<[SKLWriteResGroup114], (instregex "VCVTPS2PHYmr")>;
2867
2868 def SKLWriteResGroup115 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06]> {
2869   let Latency = 8;
2870   let NumMicroOps = 5;
2871   let ResourceCycles = [1,1,3];
2872 }
2873 def: InstRW<[SKLWriteResGroup115], (instregex "ROR(16|32|64)mCL")>;
2874 def: InstRW<[SKLWriteResGroup115], (instregex "ROR8mCL")>;
2875
2876 def SKLWriteResGroup116 : SchedWriteRes<[SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2877   let Latency = 8;
2878   let NumMicroOps = 5;
2879   let ResourceCycles = [1,1,1,2];
2880 }
2881 def: InstRW<[SKLWriteResGroup116], (instregex "RCL(16|32|64)m1")>;
2882 def: InstRW<[SKLWriteResGroup116], (instregex "RCL(16|32|64)mi")>;
2883 def: InstRW<[SKLWriteResGroup116], (instregex "RCL8m1")>;
2884 def: InstRW<[SKLWriteResGroup116], (instregex "RCL8mi")>;
2885 def: InstRW<[SKLWriteResGroup116], (instregex "RCR(16|32|64)m1")>;
2886 def: InstRW<[SKLWriteResGroup116], (instregex "RCR(16|32|64)mi")>;
2887 def: InstRW<[SKLWriteResGroup116], (instregex "RCR8m1")>;
2888 def: InstRW<[SKLWriteResGroup116], (instregex "RCR8mi")>;
2889
2890 def SKLWriteResGroup117 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06]> {
2891   let Latency = 8;
2892   let NumMicroOps = 6;
2893   let ResourceCycles = [1,1,1,3];
2894 }
2895 def: InstRW<[SKLWriteResGroup117], (instregex "ROL(16|32|64)mCL")>;
2896 def: InstRW<[SKLWriteResGroup117], (instregex "ROL8mCL")>;
2897 def: InstRW<[SKLWriteResGroup117], (instregex "SAR(16|32|64)mCL")>;
2898 def: InstRW<[SKLWriteResGroup117], (instregex "SAR8mCL")>;
2899 def: InstRW<[SKLWriteResGroup117], (instregex "SHL(16|32|64)mCL")>;
2900 def: InstRW<[SKLWriteResGroup117], (instregex "SHL8mCL")>;
2901 def: InstRW<[SKLWriteResGroup117], (instregex "SHR(16|32|64)mCL")>;
2902 def: InstRW<[SKLWriteResGroup117], (instregex "SHR8mCL")>;
2903
2904 def SKLWriteResGroup118 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort0156]> {
2905   let Latency = 8;
2906   let NumMicroOps = 6;
2907   let ResourceCycles = [1,1,1,3];
2908 }
2909 def: InstRW<[SKLWriteResGroup118], (instregex "ADC(16|32|64)mi")>;
2910 def: InstRW<[SKLWriteResGroup118], (instregex "ADC8mi")>;
2911
2912 def SKLWriteResGroup119 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
2913   let Latency = 8;
2914   let NumMicroOps = 6;
2915   let ResourceCycles = [1,1,1,2,1];
2916 }
2917 def: InstRW<[SKLWriteResGroup119], (instregex "ADC(16|32|64)mr")>;
2918 def: InstRW<[SKLWriteResGroup119], (instregex "ADC8mr")>;
2919 def: InstRW<[SKLWriteResGroup119], (instregex "CMPXCHG(16|32|64)rm")>;
2920 def: InstRW<[SKLWriteResGroup119], (instregex "CMPXCHG8rm")>;
2921 def: InstRW<[SKLWriteResGroup119], (instregex "SBB(16|32|64)mi")>;
2922 def: InstRW<[SKLWriteResGroup119], (instregex "SBB(16|32|64)mr")>;
2923 def: InstRW<[SKLWriteResGroup119], (instregex "SBB8mi")>;
2924 def: InstRW<[SKLWriteResGroup119], (instregex "SBB8mr")>;
2925
2926 def SKLWriteResGroup120 : SchedWriteRes<[SKLPort0,SKLPort23]> {
2927   let Latency = 9;
2928   let NumMicroOps = 2;
2929   let ResourceCycles = [1,1];
2930 }
2931 def: InstRW<[SKLWriteResGroup120], (instregex "MMX_CVTPI2PSirm")>;
2932 def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMADDUBSWrm64")>;
2933 def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMADDWDirm")>;
2934 def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMULHRSWrm64")>;
2935 def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMULHUWirm")>;
2936 def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMULHWirm")>;
2937 def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMULLWirm")>;
2938 def: InstRW<[SKLWriteResGroup120], (instregex "MMX_PMULUDQirm")>;
2939 def: InstRW<[SKLWriteResGroup120], (instregex "RCPSSm")>;
2940 def: InstRW<[SKLWriteResGroup120], (instregex "RSQRTSSm")>;
2941 def: InstRW<[SKLWriteResGroup120], (instregex "VRCPSSm")>;
2942 def: InstRW<[SKLWriteResGroup120], (instregex "VRSQRTSSm")>;
2943 def: InstRW<[SKLWriteResGroup120], (instregex "VTESTPDYrm")>;
2944 def: InstRW<[SKLWriteResGroup120], (instregex "VTESTPSYrm")>;
2945
2946 def SKLWriteResGroup121 : SchedWriteRes<[SKLPort5,SKLPort23]> {
2947   let Latency = 9;
2948   let NumMicroOps = 2;
2949   let ResourceCycles = [1,1];
2950 }
2951 def: InstRW<[SKLWriteResGroup121], (instregex "PCMPGTQrm")>;
2952 def: InstRW<[SKLWriteResGroup121], (instregex "PSADBWrm")>;
2953 def: InstRW<[SKLWriteResGroup121], (instregex "VPCMPGTQrm")>;
2954 def: InstRW<[SKLWriteResGroup121], (instregex "VPMOVSXBWYrm")>;
2955 def: InstRW<[SKLWriteResGroup121], (instregex "VPMOVSXDQYrm")>;
2956 def: InstRW<[SKLWriteResGroup121], (instregex "VPMOVSXWDYrm")>;
2957 def: InstRW<[SKLWriteResGroup121], (instregex "VPMOVZXWDYrm")>;
2958 def: InstRW<[SKLWriteResGroup121], (instregex "VPSADBWrm")>;
2959
2960 def SKLWriteResGroup122 : SchedWriteRes<[SKLPort01,SKLPort23]> {
2961   let Latency = 9;
2962   let NumMicroOps = 2;
2963   let ResourceCycles = [1,1];
2964 }
2965 def: InstRW<[SKLWriteResGroup122], (instregex "ADDSDrm")>;
2966 def: InstRW<[SKLWriteResGroup122], (instregex "ADDSSrm")>;
2967 def: InstRW<[SKLWriteResGroup122], (instregex "MULSDrm")>;
2968 def: InstRW<[SKLWriteResGroup122], (instregex "MULSSrm")>;
2969 def: InstRW<[SKLWriteResGroup122], (instregex "SUBSDrm")>;
2970 def: InstRW<[SKLWriteResGroup122], (instregex "SUBSSrm")>;
2971 def: InstRW<[SKLWriteResGroup122], (instregex "VADDSDrm")>;
2972 def: InstRW<[SKLWriteResGroup122], (instregex "VADDSSrm")>;
2973 def: InstRW<[SKLWriteResGroup122],
2974             (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
2975 def: InstRW<[SKLWriteResGroup122], (instregex "VMULSDrm")>;
2976 def: InstRW<[SKLWriteResGroup122], (instregex "VMULSSrm")>;
2977 def: InstRW<[SKLWriteResGroup122], (instregex "VSUBSDrm")>;
2978 def: InstRW<[SKLWriteResGroup122], (instregex "VSUBSSrm")>;
2979
2980 def SKLWriteResGroup123 : SchedWriteRes<[SKLPort23,SKLPort015]> {
2981   let Latency = 9;
2982   let NumMicroOps = 2;
2983   let ResourceCycles = [1,1];
2984 }
2985 def: InstRW<[SKLWriteResGroup123], (instregex "CMPSDrm")>;
2986 def: InstRW<[SKLWriteResGroup123], (instregex "CMPSSrm")>;
2987 def: InstRW<[SKLWriteResGroup123], (instregex "CVTPS2PDrm")>;
2988 def: InstRW<[SKLWriteResGroup123], (instregex "MAX(C?)SDrm")>;
2989 def: InstRW<[SKLWriteResGroup123], (instregex "MAX(C?)SSrm")>;
2990 def: InstRW<[SKLWriteResGroup123], (instregex "MIN(C?)SDrm")>;
2991 def: InstRW<[SKLWriteResGroup123], (instregex "MIN(C?)SSrm")>;
2992 def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTPS2PIirm")>;
2993 def: InstRW<[SKLWriteResGroup123], (instregex "MMX_CVTTPS2PIirm")>;
2994 def: InstRW<[SKLWriteResGroup123], (instregex "VCMPSDrm")>;
2995 def: InstRW<[SKLWriteResGroup123], (instregex "VCMPSSrm")>;
2996 def: InstRW<[SKLWriteResGroup123], (instregex "VCVTPH2PSrm")>;
2997 def: InstRW<[SKLWriteResGroup123], (instregex "VCVTPS2PDrm")>;
2998 def: InstRW<[SKLWriteResGroup123], (instregex "VMAX(C?)SDrm")>;
2999 def: InstRW<[SKLWriteResGroup123], (instregex "VMAX(C?)SSrm")>;
3000 def: InstRW<[SKLWriteResGroup123], (instregex "VMIN(C?)SDrm")>;
3001 def: InstRW<[SKLWriteResGroup123], (instregex "VMIN(C?)SSrm")>;
3002
3003 def SKLWriteResGroup124 : SchedWriteRes<[SKLPort5,SKLPort015]> {
3004   let Latency = 9;
3005   let NumMicroOps = 3;
3006   let ResourceCycles = [1,2];
3007 }
3008 def: InstRW<[SKLWriteResGroup124], (instregex "DPPDrri")>;
3009 def: InstRW<[SKLWriteResGroup124], (instregex "VDPPDrri")>;
3010
3011 def SKLWriteResGroup125 : SchedWriteRes<[SKLPort23,SKLPort015]> {
3012   let Latency = 9;
3013   let NumMicroOps = 3;
3014   let ResourceCycles = [1,2];
3015 }
3016 def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPDYrm")>;
3017 def: InstRW<[SKLWriteResGroup125], (instregex "VBLENDVPSYrm")>;
3018
3019 def SKLWriteResGroup126 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3020   let Latency = 9;
3021   let NumMicroOps = 3;
3022   let ResourceCycles = [1,1,1];
3023 }
3024 def: InstRW<[SKLWriteResGroup126], (instregex "PTESTrm")>;
3025 def: InstRW<[SKLWriteResGroup126], (instregex "VPTESTrm")>;
3026
3027 def SKLWriteResGroup127 : SchedWriteRes<[SKLPort1,SKLPort5,SKLPort23]> {
3028   let Latency = 9;
3029   let NumMicroOps = 3;
3030   let ResourceCycles = [1,1,1];
3031 }
3032 def: InstRW<[SKLWriteResGroup127], (instregex "MULX64rm")>;
3033
3034 def SKLWriteResGroup128 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
3035   let Latency = 9;
3036   let NumMicroOps = 4;
3037   let ResourceCycles = [2,1,1];
3038 }
3039 def: InstRW<[SKLWriteResGroup128], (instregex "PHADDSWrm128")>;
3040 def: InstRW<[SKLWriteResGroup128], (instregex "PHSUBSWrm128")>;
3041 def: InstRW<[SKLWriteResGroup128], (instregex "VPHADDSWrm128")>;
3042 def: InstRW<[SKLWriteResGroup128], (instregex "VPHSUBSWrm128")>;
3043
3044 def SKLWriteResGroup129 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3045   let Latency = 9;
3046   let NumMicroOps = 4;
3047   let ResourceCycles = [2,1,1];
3048 }
3049 def: InstRW<[SKLWriteResGroup129], (instregex "PHADDDrm")>;
3050 def: InstRW<[SKLWriteResGroup129], (instregex "PHADDWrm")>;
3051 def: InstRW<[SKLWriteResGroup129], (instregex "PHSUBDrm")>;
3052 def: InstRW<[SKLWriteResGroup129], (instregex "PHSUBWrm")>;
3053 def: InstRW<[SKLWriteResGroup129], (instregex "VPHADDDrm")>;
3054 def: InstRW<[SKLWriteResGroup129], (instregex "VPHADDWrm")>;
3055 def: InstRW<[SKLWriteResGroup129], (instregex "VPHSUBDrm")>;
3056 def: InstRW<[SKLWriteResGroup129], (instregex "VPHSUBWrm")>;
3057
3058 def SKLWriteResGroup130 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort0156]> {
3059   let Latency = 9;
3060   let NumMicroOps = 4;
3061   let ResourceCycles = [1,1,1,1];
3062 }
3063 def: InstRW<[SKLWriteResGroup130], (instregex "SHLD(16|32|64)mri8")>;
3064 def: InstRW<[SKLWriteResGroup130], (instregex "SHRD(16|32|64)mri8")>;
3065
3066 def SKLWriteResGroup131 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
3067   let Latency = 9;
3068   let NumMicroOps = 5;
3069   let ResourceCycles = [1,2,1,1];
3070 }
3071 def: InstRW<[SKLWriteResGroup131], (instregex "LAR(16|32|64)rm")>;
3072 def: InstRW<[SKLWriteResGroup131], (instregex "LSL(16|32|64)rm")>;
3073
3074 def SKLWriteResGroup132 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3075   let Latency = 10;
3076   let NumMicroOps = 2;
3077   let ResourceCycles = [1,1];
3078 }
3079 def: InstRW<[SKLWriteResGroup132], (instregex "AESDECLASTrm")>;
3080 def: InstRW<[SKLWriteResGroup132], (instregex "AESDECrm")>;
3081 def: InstRW<[SKLWriteResGroup132], (instregex "AESENCLASTrm")>;
3082 def: InstRW<[SKLWriteResGroup132], (instregex "AESENCrm")>;
3083 def: InstRW<[SKLWriteResGroup132], (instregex "RCPPSm")>;
3084 def: InstRW<[SKLWriteResGroup132], (instregex "RSQRTPSm")>;
3085 def: InstRW<[SKLWriteResGroup132], (instregex "VAESDECLASTrm")>;
3086 def: InstRW<[SKLWriteResGroup132], (instregex "VAESDECrm")>;
3087 def: InstRW<[SKLWriteResGroup132], (instregex "VAESENCLASTrm")>;
3088 def: InstRW<[SKLWriteResGroup132], (instregex "VAESENCrm")>;
3089 def: InstRW<[SKLWriteResGroup132], (instregex "VRCPPSm")>;
3090 def: InstRW<[SKLWriteResGroup132], (instregex "VRSQRTPSm")>;
3091
3092 def SKLWriteResGroup133 : SchedWriteRes<[SKLPort5,SKLPort23]> {
3093   let Latency = 10;
3094   let NumMicroOps = 2;
3095   let ResourceCycles = [1,1];
3096 }
3097 def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F32m")>;
3098 def: InstRW<[SKLWriteResGroup133], (instregex "ADD_F64m")>;
3099 def: InstRW<[SKLWriteResGroup133], (instregex "ILD_F16m")>;
3100 def: InstRW<[SKLWriteResGroup133], (instregex "ILD_F32m")>;
3101 def: InstRW<[SKLWriteResGroup133], (instregex "ILD_F64m")>;
3102 def: InstRW<[SKLWriteResGroup133], (instregex "SUBR_F32m")>;
3103 def: InstRW<[SKLWriteResGroup133], (instregex "SUBR_F64m")>;
3104 def: InstRW<[SKLWriteResGroup133], (instregex "SUB_F32m")>;
3105 def: InstRW<[SKLWriteResGroup133], (instregex "SUB_F64m")>;
3106 def: InstRW<[SKLWriteResGroup133], (instregex "VPCMPGTQYrm")>;
3107 def: InstRW<[SKLWriteResGroup133], (instregex "VPERM2F128rm")>;
3108 def: InstRW<[SKLWriteResGroup133], (instregex "VPERM2I128rm")>;
3109 def: InstRW<[SKLWriteResGroup133], (instregex "VPERMDYrm")>;
3110 def: InstRW<[SKLWriteResGroup133], (instregex "VPERMPDYmi")>;
3111 def: InstRW<[SKLWriteResGroup133], (instregex "VPERMPSYrm")>;
3112 def: InstRW<[SKLWriteResGroup133], (instregex "VPERMQYmi")>;
3113 def: InstRW<[SKLWriteResGroup133], (instregex "VPMOVZXBDYrm")>;
3114 def: InstRW<[SKLWriteResGroup133], (instregex "VPMOVZXBQYrm")>;
3115 def: InstRW<[SKLWriteResGroup133], (instregex "VPMOVZXBWYrm")>;
3116 def: InstRW<[SKLWriteResGroup133], (instregex "VPMOVZXDQYrm")>;
3117 def: InstRW<[SKLWriteResGroup133], (instregex "VPMOVZXWQYrm")>;
3118 def: InstRW<[SKLWriteResGroup133], (instregex "VPSADBWYrm")>;
3119
3120 def SKLWriteResGroup134 : SchedWriteRes<[SKLPort01,SKLPort23]> {
3121   let Latency = 10;
3122   let NumMicroOps = 2;
3123   let ResourceCycles = [1,1];
3124 }
3125 def: InstRW<[SKLWriteResGroup134], (instregex "ADDPDrm")>;
3126 def: InstRW<[SKLWriteResGroup134], (instregex "ADDPSrm")>;
3127 def: InstRW<[SKLWriteResGroup134], (instregex "ADDSUBPDrm")>;
3128 def: InstRW<[SKLWriteResGroup134], (instregex "ADDSUBPSrm")>;
3129 def: InstRW<[SKLWriteResGroup134], (instregex "MULPDrm")>;
3130 def: InstRW<[SKLWriteResGroup134], (instregex "MULPSrm")>;
3131 def: InstRW<[SKLWriteResGroup134], (instregex "SUBPDrm")>;
3132 def: InstRW<[SKLWriteResGroup134], (instregex "SUBPSrm")>;
3133 def: InstRW<[SKLWriteResGroup134], (instregex "VADDPDrm")>;
3134 def: InstRW<[SKLWriteResGroup134], (instregex "VADDPSrm")>;
3135 def: InstRW<[SKLWriteResGroup134], (instregex "VADDSUBPDrm")>;
3136 def: InstRW<[SKLWriteResGroup134], (instregex "VADDSUBPSrm")>;
3137 def: InstRW<[SKLWriteResGroup134],
3138             (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
3139 def: InstRW<[SKLWriteResGroup134], (instregex "VMULPDrm")>;
3140 def: InstRW<[SKLWriteResGroup134], (instregex "VMULPSrm")>;
3141 def: InstRW<[SKLWriteResGroup134], (instregex "VSUBPDrm")>;
3142 def: InstRW<[SKLWriteResGroup134], (instregex "VSUBPSrm")>;
3143
3144 def SKLWriteResGroup135 : SchedWriteRes<[SKLPort23,SKLPort015]> {
3145   let Latency = 10;
3146   let NumMicroOps = 2;
3147   let ResourceCycles = [1,1];
3148 }
3149 def: InstRW<[SKLWriteResGroup135], (instregex "CMPPDrmi")>;
3150 def: InstRW<[SKLWriteResGroup135], (instregex "CMPPSrmi")>;
3151 def: InstRW<[SKLWriteResGroup135], (instregex "CVTDQ2PSrm")>;
3152 def: InstRW<[SKLWriteResGroup135], (instregex "CVTPS2DQrm")>;
3153 def: InstRW<[SKLWriteResGroup135], (instregex "CVTSS2SDrm")>;
3154 def: InstRW<[SKLWriteResGroup135], (instregex "CVTTPS2DQrm")>;
3155 def: InstRW<[SKLWriteResGroup135], (instregex "MAX(C?)PDrm")>;
3156 def: InstRW<[SKLWriteResGroup135], (instregex "MAX(C?)PSrm")>;
3157 def: InstRW<[SKLWriteResGroup135], (instregex "MIN(C?)PDrm")>;
3158 def: InstRW<[SKLWriteResGroup135], (instregex "MIN(C?)PSrm")>;
3159 def: InstRW<[SKLWriteResGroup135], (instregex "PHMINPOSUWrm128")>;
3160 def: InstRW<[SKLWriteResGroup135], (instregex "PMADDUBSWrm")>;
3161 def: InstRW<[SKLWriteResGroup135], (instregex "PMADDWDrm")>;
3162 def: InstRW<[SKLWriteResGroup135], (instregex "PMULDQrm")>;
3163 def: InstRW<[SKLWriteResGroup135], (instregex "PMULHRSWrm")>;
3164 def: InstRW<[SKLWriteResGroup135], (instregex "PMULHUWrm")>;
3165 def: InstRW<[SKLWriteResGroup135], (instregex "PMULHWrm")>;
3166 def: InstRW<[SKLWriteResGroup135], (instregex "PMULLWrm")>;
3167 def: InstRW<[SKLWriteResGroup135], (instregex "PMULUDQrm")>;
3168 def: InstRW<[SKLWriteResGroup135], (instregex "VCMPPDrmi")>;
3169 def: InstRW<[SKLWriteResGroup135], (instregex "VCMPPSrmi")>;
3170 def: InstRW<[SKLWriteResGroup135], (instregex "VCVTDQ2PSrm")>;
3171 def: InstRW<[SKLWriteResGroup135], (instregex "VCVTPH2PSYrm")>;
3172 def: InstRW<[SKLWriteResGroup135], (instregex "VCVTPS2DQrm")>;
3173 def: InstRW<[SKLWriteResGroup135], (instregex "VCVTSS2SDrm")>;
3174 def: InstRW<[SKLWriteResGroup135], (instregex "VCVTTPS2DQrm")>;
3175 def: InstRW<[SKLWriteResGroup135], (instregex "VMAX(C?)PDrm")>;
3176 def: InstRW<[SKLWriteResGroup135], (instregex "VMAX(C?)PSrm")>;
3177 def: InstRW<[SKLWriteResGroup135], (instregex "VMIN(C?)PDrm")>;
3178 def: InstRW<[SKLWriteResGroup135], (instregex "VMIN(C?)PSrm")>;
3179 def: InstRW<[SKLWriteResGroup135], (instregex "VPHMINPOSUWrm128")>;
3180 def: InstRW<[SKLWriteResGroup135], (instregex "VPMADDUBSWrm")>;
3181 def: InstRW<[SKLWriteResGroup135], (instregex "VPMADDWDrm")>;
3182 def: InstRW<[SKLWriteResGroup135], (instregex "VPMULDQrm")>;
3183 def: InstRW<[SKLWriteResGroup135], (instregex "VPMULHRSWrm")>;
3184 def: InstRW<[SKLWriteResGroup135], (instregex "VPMULHUWrm")>;
3185 def: InstRW<[SKLWriteResGroup135], (instregex "VPMULHWrm")>;
3186 def: InstRW<[SKLWriteResGroup135], (instregex "VPMULLWrm")>;
3187 def: InstRW<[SKLWriteResGroup135], (instregex "VPMULUDQrm")>;
3188
3189 def SKLWriteResGroup136 : SchedWriteRes<[SKLPort0]> {
3190   let Latency = 10;
3191   let NumMicroOps = 3;
3192   let ResourceCycles = [3];
3193 }
3194 def: InstRW<[SKLWriteResGroup136], (instregex "PCMPISTRIrr")>;
3195 def: InstRW<[SKLWriteResGroup136], (instregex "PCMPISTRM128rr")>;
3196 def: InstRW<[SKLWriteResGroup136], (instregex "VPCMPISTRIrr")>;
3197 def: InstRW<[SKLWriteResGroup136], (instregex "VPCMPISTRM128rr")>;
3198
3199 def SKLWriteResGroup137 : SchedWriteRes<[SKLPort5,SKLPort23]> {
3200   let Latency = 10;
3201   let NumMicroOps = 3;
3202   let ResourceCycles = [2,1];
3203 }
3204 def: InstRW<[SKLWriteResGroup137], (instregex "MPSADBWrmi")>;
3205 def: InstRW<[SKLWriteResGroup137], (instregex "VMPSADBWrmi")>;
3206
3207 def SKLWriteResGroup138 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3208   let Latency = 10;
3209   let NumMicroOps = 3;
3210   let ResourceCycles = [1,1,1];
3211 }
3212 def: InstRW<[SKLWriteResGroup138], (instregex "MMX_CVTPI2PDirm")>;
3213 def: InstRW<[SKLWriteResGroup138], (instregex "VPTESTYrm")>;
3214
3215 def SKLWriteResGroup139 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3216   let Latency = 10;
3217   let NumMicroOps = 3;
3218   let ResourceCycles = [1,1,1];
3219 }
3220 def: InstRW<[SKLWriteResGroup139], (instregex "CVTSD2SSrm")>;
3221 def: InstRW<[SKLWriteResGroup139], (instregex "VCVTSD2SSrm")>;
3222
3223 def SKLWriteResGroup140 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
3224   let Latency = 10;
3225   let NumMicroOps = 4;
3226   let ResourceCycles = [2,1,1];
3227 }
3228 def: InstRW<[SKLWriteResGroup140], (instregex "VPHADDSWrm256")>;
3229 def: InstRW<[SKLWriteResGroup140], (instregex "VPHSUBSWrm256")>;
3230
3231 def SKLWriteResGroup141 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3232   let Latency = 10;
3233   let NumMicroOps = 4;
3234   let ResourceCycles = [2,1,1];
3235 }
3236 def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDDYrm")>;
3237 def: InstRW<[SKLWriteResGroup141], (instregex "VPHADDWYrm")>;
3238 def: InstRW<[SKLWriteResGroup141], (instregex "VPHSUBDYrm")>;
3239 def: InstRW<[SKLWriteResGroup141], (instregex "VPHSUBWYrm")>;
3240
3241 def SKLWriteResGroup142 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort06,SKLPort0156]> {
3242   let Latency = 10;
3243   let NumMicroOps = 4;
3244   let ResourceCycles = [1,1,1,1];
3245 }
3246 def: InstRW<[SKLWriteResGroup142], (instregex "MULX32rm")>;
3247
3248 def SKLWriteResGroup143 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3249   let Latency = 10;
3250   let NumMicroOps = 8;
3251   let ResourceCycles = [1,1,1,1,1,3];
3252 }
3253 def: InstRW<[SKLWriteResGroup143], (instregex "ADD8mi")>;
3254 def: InstRW<[SKLWriteResGroup143], (instregex "AND8mi")>;
3255 def: InstRW<[SKLWriteResGroup143], (instregex "OR8mi")>;
3256 def: InstRW<[SKLWriteResGroup143], (instregex "SUB8mi")>;
3257 def: InstRW<[SKLWriteResGroup143], (instregex "XCHG(16|32|64)rm")>;
3258 def: InstRW<[SKLWriteResGroup143], (instregex "XCHG8rm")>;
3259 def: InstRW<[SKLWriteResGroup143], (instregex "XOR8mi")>;
3260
3261 def SKLWriteResGroup144 : SchedWriteRes<[SKLPort05,SKLPort0156]> {
3262   let Latency = 10;
3263   let NumMicroOps = 10;
3264   let ResourceCycles = [9,1];
3265 }
3266 def: InstRW<[SKLWriteResGroup144], (instregex "MMX_EMMS")>;
3267
3268 def SKLWriteResGroup145 : SchedWriteRes<[SKLPort0]> {
3269   let Latency = 11;
3270   let NumMicroOps = 1;
3271   let ResourceCycles = [1];
3272 }
3273 def: InstRW<[SKLWriteResGroup145], (instregex "DIVPSrr")>;
3274 def: InstRW<[SKLWriteResGroup145], (instregex "DIVSSrr")>;
3275 def: InstRW<[SKLWriteResGroup145], (instregex "VDIVPSYrr")>;
3276 def: InstRW<[SKLWriteResGroup145], (instregex "VDIVPSrr")>;
3277 def: InstRW<[SKLWriteResGroup145], (instregex "VDIVSSrr")>;
3278
3279 def SKLWriteResGroup146 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3280   let Latency = 11;
3281   let NumMicroOps = 2;
3282   let ResourceCycles = [1,1];
3283 }
3284 def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F32m")>;
3285 def: InstRW<[SKLWriteResGroup146], (instregex "MUL_F64m")>;
3286 def: InstRW<[SKLWriteResGroup146], (instregex "VRCPPSYm")>;
3287 def: InstRW<[SKLWriteResGroup146], (instregex "VRSQRTPSYm")>;
3288
3289 def SKLWriteResGroup147 : SchedWriteRes<[SKLPort01,SKLPort23]> {
3290   let Latency = 11;
3291   let NumMicroOps = 2;
3292   let ResourceCycles = [1,1];
3293 }
3294 def: InstRW<[SKLWriteResGroup147], (instregex "VADDPDYrm")>;
3295 def: InstRW<[SKLWriteResGroup147], (instregex "VADDPSYrm")>;
3296 def: InstRW<[SKLWriteResGroup147], (instregex "VADDSUBPDYrm")>;
3297 def: InstRW<[SKLWriteResGroup147], (instregex "VADDSUBPSYrm")>;
3298 def: InstRW<[SKLWriteResGroup147],
3299             (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
3300 def: InstRW<[SKLWriteResGroup147], (instregex "VMULPDYrm")>;
3301 def: InstRW<[SKLWriteResGroup147], (instregex "VMULPSYrm")>;
3302 def: InstRW<[SKLWriteResGroup147], (instregex "VSUBPDYrm")>;
3303 def: InstRW<[SKLWriteResGroup147], (instregex "VSUBPSYrm")>;
3304
3305 def SKLWriteResGroup148 : SchedWriteRes<[SKLPort23,SKLPort015]> {
3306   let Latency = 11;
3307   let NumMicroOps = 2;
3308   let ResourceCycles = [1,1];
3309 }
3310 def: InstRW<[SKLWriteResGroup148], (instregex "VCMPPDYrmi")>;
3311 def: InstRW<[SKLWriteResGroup148], (instregex "VCMPPSYrmi")>;
3312 def: InstRW<[SKLWriteResGroup148], (instregex "VCVTDQ2PSYrm")>;
3313 def: InstRW<[SKLWriteResGroup148], (instregex "VCVTPS2DQYrm")>;
3314 def: InstRW<[SKLWriteResGroup148], (instregex "VCVTPS2PDYrm")>;
3315 def: InstRW<[SKLWriteResGroup148], (instregex "VCVTTPS2DQYrm")>;
3316 def: InstRW<[SKLWriteResGroup148], (instregex "VMAX(C?)PDYrm")>;
3317 def: InstRW<[SKLWriteResGroup148], (instregex "VMAX(C?)PSYrm")>;
3318 def: InstRW<[SKLWriteResGroup148], (instregex "VMIN(C?)PDYrm")>;
3319 def: InstRW<[SKLWriteResGroup148], (instregex "VMIN(C?)PSYrm")>;
3320 def: InstRW<[SKLWriteResGroup148], (instregex "VPMADDUBSWYrm")>;
3321 def: InstRW<[SKLWriteResGroup148], (instregex "VPMADDWDYrm")>;
3322 def: InstRW<[SKLWriteResGroup148], (instregex "VPMULDQYrm")>;
3323 def: InstRW<[SKLWriteResGroup148], (instregex "VPMULHRSWYrm")>;
3324 def: InstRW<[SKLWriteResGroup148], (instregex "VPMULHUWYrm")>;
3325 def: InstRW<[SKLWriteResGroup148], (instregex "VPMULHWYrm")>;
3326 def: InstRW<[SKLWriteResGroup148], (instregex "VPMULLWYrm")>;
3327 def: InstRW<[SKLWriteResGroup148], (instregex "VPMULUDQYrm")>;
3328
3329 def SKLWriteResGroup149 : SchedWriteRes<[SKLPort5,SKLPort23]> {
3330   let Latency = 11;
3331   let NumMicroOps = 3;
3332   let ResourceCycles = [2,1];
3333 }
3334 def: InstRW<[SKLWriteResGroup149], (instregex "FICOM16m")>;
3335 def: InstRW<[SKLWriteResGroup149], (instregex "FICOM32m")>;
3336 def: InstRW<[SKLWriteResGroup149], (instregex "FICOMP16m")>;
3337 def: InstRW<[SKLWriteResGroup149], (instregex "FICOMP32m")>;
3338 def: InstRW<[SKLWriteResGroup149], (instregex "VMPSADBWYrmi")>;
3339
3340 def SKLWriteResGroup150 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3341   let Latency = 11;
3342   let NumMicroOps = 3;
3343   let ResourceCycles = [1,1,1];
3344 }
3345 def: InstRW<[SKLWriteResGroup150], (instregex "CVTDQ2PDrm")>;
3346 def: InstRW<[SKLWriteResGroup150], (instregex "VCVTDQ2PDrm")>;
3347
3348 def SKLWriteResGroup151 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort015]> {
3349   let Latency = 11;
3350   let NumMicroOps = 3;
3351   let ResourceCycles = [1,1,1];
3352 }
3353 def: InstRW<[SKLWriteResGroup151], (instregex "CVTSD2SI64rm")>;
3354 def: InstRW<[SKLWriteResGroup151], (instregex "CVTSD2SIrm")>;
3355 def: InstRW<[SKLWriteResGroup151], (instregex "CVTSS2SI64rm")>;
3356 def: InstRW<[SKLWriteResGroup151], (instregex "CVTSS2SIrm")>;
3357 def: InstRW<[SKLWriteResGroup151], (instregex "CVTTSD2SI64rm")>;
3358 def: InstRW<[SKLWriteResGroup151], (instregex "CVTTSD2SIrm")>;
3359 def: InstRW<[SKLWriteResGroup151], (instregex "CVTTSS2SIrm")>;
3360 def: InstRW<[SKLWriteResGroup151], (instregex "VCVTSD2SI64rm")>;
3361 def: InstRW<[SKLWriteResGroup151], (instregex "VCVTSD2SIrm")>;
3362 def: InstRW<[SKLWriteResGroup151], (instregex "VCVTSS2SI64rm")>;
3363 def: InstRW<[SKLWriteResGroup151], (instregex "VCVTSS2SIrm")>;
3364 def: InstRW<[SKLWriteResGroup151], (instregex "VCVTTSD2SI64rm")>;
3365 def: InstRW<[SKLWriteResGroup151], (instregex "VCVTTSD2SIrm")>;
3366 def: InstRW<[SKLWriteResGroup151], (instregex "VCVTTSS2SI64rm")>;
3367 def: InstRW<[SKLWriteResGroup151], (instregex "VCVTTSS2SIrm")>;
3368
3369 def SKLWriteResGroup152 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3370   let Latency = 11;
3371   let NumMicroOps = 3;
3372   let ResourceCycles = [1,1,1];
3373 }
3374 def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2DQrm")>;
3375 def: InstRW<[SKLWriteResGroup152], (instregex "CVTPD2PSrm")>;
3376 def: InstRW<[SKLWriteResGroup152], (instregex "CVTTPD2DQrm")>;
3377 def: InstRW<[SKLWriteResGroup152], (instregex "MMX_CVTPD2PIirm")>;
3378 def: InstRW<[SKLWriteResGroup152], (instregex "MMX_CVTTPD2PIirm")>;
3379
3380 def SKLWriteResGroup153 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3381   let Latency = 11;
3382   let NumMicroOps = 6;
3383   let ResourceCycles = [1,1,1,2,1];
3384 }
3385 def: InstRW<[SKLWriteResGroup153], (instregex "SHLD(16|32|64)mrCL")>;
3386 def: InstRW<[SKLWriteResGroup153], (instregex "SHRD(16|32|64)mrCL")>;
3387
3388 def SKLWriteResGroup154 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort0156]> {
3389   let Latency = 11;
3390   let NumMicroOps = 7;
3391   let ResourceCycles = [2,3,2];
3392 }
3393 def: InstRW<[SKLWriteResGroup154], (instregex "RCL(16|32|64)rCL")>;
3394 def: InstRW<[SKLWriteResGroup154], (instregex "RCR(16|32|64)rCL")>;
3395
3396 def SKLWriteResGroup155 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
3397   let Latency = 11;
3398   let NumMicroOps = 9;
3399   let ResourceCycles = [1,5,1,2];
3400 }
3401 def: InstRW<[SKLWriteResGroup155], (instregex "RCL8rCL")>;
3402
3403 def SKLWriteResGroup156 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
3404   let Latency = 11;
3405   let NumMicroOps = 11;
3406   let ResourceCycles = [2,9];
3407 }
3408 def: InstRW<[SKLWriteResGroup156], (instregex "LOOPE")>;
3409 def: InstRW<[SKLWriteResGroup156], (instregex "LOOPNE")>;
3410
3411 def SKLWriteResGroup157 : SchedWriteRes<[SKLPort0]> {
3412   let Latency = 12;
3413   let NumMicroOps = 1;
3414   let ResourceCycles = [1];
3415 }
3416 def: InstRW<[SKLWriteResGroup157], (instregex "VSQRTPSYr")>;
3417 def: InstRW<[SKLWriteResGroup157], (instregex "VSQRTPSr")>;
3418 def: InstRW<[SKLWriteResGroup157], (instregex "VSQRTSSr")>;
3419
3420 def SKLWriteResGroup158 : SchedWriteRes<[SKLPort5,SKLPort23]> {
3421   let Latency = 12;
3422   let NumMicroOps = 2;
3423   let ResourceCycles = [1,1];
3424 }
3425 def: InstRW<[SKLWriteResGroup158], (instregex "PCLMULQDQrm")>;
3426 def: InstRW<[SKLWriteResGroup158], (instregex "VPCLMULQDQrm")>;
3427
3428 def SKLWriteResGroup159 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
3429   let Latency = 12;
3430   let NumMicroOps = 4;
3431   let ResourceCycles = [2,1,1];
3432 }
3433 def: InstRW<[SKLWriteResGroup159], (instregex "HADDPDrm")>;
3434 def: InstRW<[SKLWriteResGroup159], (instregex "HADDPSrm")>;
3435 def: InstRW<[SKLWriteResGroup159], (instregex "HSUBPDrm")>;
3436 def: InstRW<[SKLWriteResGroup159], (instregex "HSUBPSrm")>;
3437 def: InstRW<[SKLWriteResGroup159], (instregex "VHADDPDrm")>;
3438 def: InstRW<[SKLWriteResGroup159], (instregex "VHADDPSrm")>;
3439 def: InstRW<[SKLWriteResGroup159], (instregex "VHSUBPDrm")>;
3440 def: InstRW<[SKLWriteResGroup159], (instregex "VHSUBPSrm")>;
3441
3442 def SKLWriteResGroup160 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort015]> {
3443   let Latency = 12;
3444   let NumMicroOps = 4;
3445   let ResourceCycles = [1,1,1,1];
3446 }
3447 def: InstRW<[SKLWriteResGroup160], (instregex "CVTTSS2SI64rm")>;
3448
3449 def SKLWriteResGroup161 : SchedWriteRes<[SKLPort0]> {
3450   let Latency = 13;
3451   let NumMicroOps = 1;
3452   let ResourceCycles = [1];
3453 }
3454 def: InstRW<[SKLWriteResGroup161], (instregex "SQRTPSr")>;
3455 def: InstRW<[SKLWriteResGroup161], (instregex "SQRTSSr")>;
3456
3457 def SKLWriteResGroup162 : SchedWriteRes<[SKLPort5,SKLPort23]> {
3458   let Latency = 13;
3459   let NumMicroOps = 3;
3460   let ResourceCycles = [2,1];
3461 }
3462 def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI16m")>;
3463 def: InstRW<[SKLWriteResGroup162], (instregex "ADD_FI32m")>;
3464 def: InstRW<[SKLWriteResGroup162], (instregex "SUBR_FI16m")>;
3465 def: InstRW<[SKLWriteResGroup162], (instregex "SUBR_FI32m")>;
3466 def: InstRW<[SKLWriteResGroup162], (instregex "SUB_FI16m")>;
3467 def: InstRW<[SKLWriteResGroup162], (instregex "SUB_FI32m")>;
3468
3469 def SKLWriteResGroup163 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3470   let Latency = 13;
3471   let NumMicroOps = 3;
3472   let ResourceCycles = [1,1,1];
3473 }
3474 def: InstRW<[SKLWriteResGroup163], (instregex "VCVTDQ2PDYrm")>;
3475
3476 def SKLWriteResGroup164 : SchedWriteRes<[SKLPort5,SKLPort015]> {
3477   let Latency = 13;
3478   let NumMicroOps = 4;
3479   let ResourceCycles = [1,3];
3480 }
3481 def: InstRW<[SKLWriteResGroup164], (instregex "DPPSrri")>;
3482 def: InstRW<[SKLWriteResGroup164], (instregex "VDPPSYrri")>;
3483 def: InstRW<[SKLWriteResGroup164], (instregex "VDPPSrri")>;
3484
3485 def SKLWriteResGroup165 : SchedWriteRes<[SKLPort5,SKLPort01,SKLPort23]> {
3486   let Latency = 13;
3487   let NumMicroOps = 4;
3488   let ResourceCycles = [2,1,1];
3489 }
3490 def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPDYrm")>;
3491 def: InstRW<[SKLWriteResGroup165], (instregex "VHADDPSYrm")>;
3492 def: InstRW<[SKLWriteResGroup165], (instregex "VHSUBPDYrm")>;
3493 def: InstRW<[SKLWriteResGroup165], (instregex "VHSUBPSYrm")>;
3494
3495 def SKLWriteResGroup166 : SchedWriteRes<[SKLPort0]> {
3496   let Latency = 14;
3497   let NumMicroOps = 1;
3498   let ResourceCycles = [1];
3499 }
3500 def: InstRW<[SKLWriteResGroup166], (instregex "DIVPDrr")>;
3501 def: InstRW<[SKLWriteResGroup166], (instregex "DIVSDrr")>;
3502 def: InstRW<[SKLWriteResGroup166], (instregex "VDIVPDYrr")>;
3503 def: InstRW<[SKLWriteResGroup166], (instregex "VDIVPDrr")>;
3504 def: InstRW<[SKLWriteResGroup166], (instregex "VDIVSDrr")>;
3505
3506 def SKLWriteResGroup167 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3507   let Latency = 14;
3508   let NumMicroOps = 3;
3509   let ResourceCycles = [2,1];
3510 }
3511 def: InstRW<[SKLWriteResGroup167], (instregex "AESIMCrm")>;
3512 def: InstRW<[SKLWriteResGroup167], (instregex "VAESIMCrm")>;
3513
3514 def SKLWriteResGroup168 : SchedWriteRes<[SKLPort23,SKLPort015]> {
3515   let Latency = 14;
3516   let NumMicroOps = 3;
3517   let ResourceCycles = [1,2];
3518 }
3519 def: InstRW<[SKLWriteResGroup168], (instregex "PMULLDrm")>;
3520 def: InstRW<[SKLWriteResGroup168], (instregex "ROUNDPDm")>;
3521 def: InstRW<[SKLWriteResGroup168], (instregex "ROUNDPSm")>;
3522 def: InstRW<[SKLWriteResGroup168], (instregex "ROUNDSDm")>;
3523 def: InstRW<[SKLWriteResGroup168], (instregex "ROUNDSSm")>;
3524 def: InstRW<[SKLWriteResGroup168], (instregex "VPMULLDrm")>;
3525 def: InstRW<[SKLWriteResGroup168], (instregex "VROUNDPDm")>;
3526 def: InstRW<[SKLWriteResGroup168], (instregex "VROUNDPSm")>;
3527 def: InstRW<[SKLWriteResGroup168], (instregex "VROUNDSDm")>;
3528 def: InstRW<[SKLWriteResGroup168], (instregex "VROUNDSSm")>;
3529
3530 def SKLWriteResGroup169 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3531   let Latency = 14;
3532   let NumMicroOps = 3;
3533   let ResourceCycles = [1,1,1];
3534 }
3535 def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI16m")>;
3536 def: InstRW<[SKLWriteResGroup169], (instregex "MUL_FI32m")>;
3537
3538 def SKLWriteResGroup170 : SchedWriteRes<[SKLPort1,SKLPort06,SKLPort15,SKLPort0156]> {
3539   let Latency = 14;
3540   let NumMicroOps = 10;
3541   let ResourceCycles = [2,4,1,3];
3542 }
3543 def: InstRW<[SKLWriteResGroup170], (instregex "RCR8rCL")>;
3544
3545 def SKLWriteResGroup171 : SchedWriteRes<[SKLPort0]> {
3546   let Latency = 15;
3547   let NumMicroOps = 1;
3548   let ResourceCycles = [1];
3549 }
3550 def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FPrST0")>;
3551 def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FST0r")>;
3552 def: InstRW<[SKLWriteResGroup171], (instregex "DIVR_FrST0")>;
3553
3554 def SKLWriteResGroup172 : SchedWriteRes<[SKLPort23,SKLPort015]> {
3555   let Latency = 15;
3556   let NumMicroOps = 3;
3557   let ResourceCycles = [1,2];
3558 }
3559 def: InstRW<[SKLWriteResGroup172], (instregex "VPMULLDYrm")>;
3560 def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDYPDm")>;
3561 def: InstRW<[SKLWriteResGroup172], (instregex "VROUNDYPSm")>;
3562
3563 def SKLWriteResGroup173 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3564   let Latency = 15;
3565   let NumMicroOps = 4;
3566   let ResourceCycles = [1,1,2];
3567 }
3568 def: InstRW<[SKLWriteResGroup173], (instregex "DPPDrmi")>;
3569 def: InstRW<[SKLWriteResGroup173], (instregex "VDPPDrmi")>;
3570
3571 def SKLWriteResGroup174 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
3572   let Latency = 15;
3573   let NumMicroOps = 10;
3574   let ResourceCycles = [1,1,1,5,1,1];
3575 }
3576 def: InstRW<[SKLWriteResGroup174], (instregex "RCL(16|32|64)mCL")>;
3577 def: InstRW<[SKLWriteResGroup174], (instregex "RCL8mCL")>;
3578
3579 def SKLWriteResGroup175 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3580   let Latency = 16;
3581   let NumMicroOps = 2;
3582   let ResourceCycles = [1,1];
3583 }
3584 def: InstRW<[SKLWriteResGroup175], (instregex "DIVSSrm")>;
3585 def: InstRW<[SKLWriteResGroup175], (instregex "VDIVSSrm")>;
3586
3587 def SKLWriteResGroup176 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3588   let Latency = 16;
3589   let NumMicroOps = 4;
3590   let ResourceCycles = [3,1];
3591 }
3592 def: InstRW<[SKLWriteResGroup176], (instregex "PCMPISTRIrm")>;
3593 def: InstRW<[SKLWriteResGroup176], (instregex "PCMPISTRM128rm")>;
3594 def: InstRW<[SKLWriteResGroup176], (instregex "VPCMPISTRIrm")>;
3595 def: InstRW<[SKLWriteResGroup176], (instregex "VPCMPISTRM128rm")>;
3596
3597 def SKLWriteResGroup177 : SchedWriteRes<[SKLPort4,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
3598   let Latency = 16;
3599   let NumMicroOps = 14;
3600   let ResourceCycles = [1,1,1,4,2,5];
3601 }
3602 def: InstRW<[SKLWriteResGroup177], (instregex "CMPXCHG8B")>;
3603
3604 def SKLWriteResGroup178 : SchedWriteRes<[SKLPort0156]> {
3605   let Latency = 16;
3606   let NumMicroOps = 16;
3607   let ResourceCycles = [16];
3608 }
3609 def: InstRW<[SKLWriteResGroup178], (instregex "VZEROALL")>;
3610
3611 def SKLWriteResGroup179 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3612   let Latency = 17;
3613   let NumMicroOps = 2;
3614   let ResourceCycles = [1,1];
3615 }
3616 def: InstRW<[SKLWriteResGroup179], (instregex "DIVPSrm")>;
3617 def: InstRW<[SKLWriteResGroup179], (instregex "VDIVPSrm")>;
3618 def: InstRW<[SKLWriteResGroup179], (instregex "VSQRTSSm")>;
3619
3620 def SKLWriteResGroup180 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
3621   let Latency = 17;
3622   let NumMicroOps = 15;
3623   let ResourceCycles = [2,1,2,4,2,4];
3624 }
3625 def: InstRW<[SKLWriteResGroup180], (instregex "XCH_F")>;
3626
3627 def SKLWriteResGroup181 : SchedWriteRes<[SKLPort0]> {
3628   let Latency = 18;
3629   let NumMicroOps = 1;
3630   let ResourceCycles = [1];
3631 }
3632 def: InstRW<[SKLWriteResGroup181], (instregex "VSQRTPDYr")>;
3633 def: InstRW<[SKLWriteResGroup181], (instregex "VSQRTPDr")>;
3634 def: InstRW<[SKLWriteResGroup181], (instregex "VSQRTSDr")>;
3635
3636 def SKLWriteResGroup182 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3637   let Latency = 18;
3638   let NumMicroOps = 2;
3639   let ResourceCycles = [1,1];
3640 }
3641 def: InstRW<[SKLWriteResGroup182], (instregex "SQRTSSm")>;
3642 def: InstRW<[SKLWriteResGroup182], (instregex "VDIVPSYrm")>;
3643 def: InstRW<[SKLWriteResGroup182], (instregex "VSQRTPSm")>;
3644
3645 def SKLWriteResGroup183 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort0156]> {
3646   let Latency = 18;
3647   let NumMicroOps = 8;
3648   let ResourceCycles = [4,3,1];
3649 }
3650 def: InstRW<[SKLWriteResGroup183], (instregex "PCMPESTRIrr")>;
3651 def: InstRW<[SKLWriteResGroup183], (instregex "VPCMPESTRIrr")>;
3652
3653 def SKLWriteResGroup184 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
3654   let Latency = 18;
3655   let NumMicroOps = 8;
3656   let ResourceCycles = [1,1,1,5];
3657 }
3658 def: InstRW<[SKLWriteResGroup184], (instregex "CPUID")>;
3659 def: InstRW<[SKLWriteResGroup184], (instregex "RDTSC")>;
3660
3661 def SKLWriteResGroup185 : SchedWriteRes<[SKLPort1,SKLPort23,SKLPort237,SKLPort06,SKLPort15,SKLPort0156]> {
3662   let Latency = 18;
3663   let NumMicroOps = 11;
3664   let ResourceCycles = [2,1,1,4,1,2];
3665 }
3666 def: InstRW<[SKLWriteResGroup185], (instregex "RCR(16|32|64)mCL")>;
3667 def: InstRW<[SKLWriteResGroup185], (instregex "RCR8mCL")>;
3668
3669 def SKLWriteResGroup186 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3670   let Latency = 19;
3671   let NumMicroOps = 2;
3672   let ResourceCycles = [1,1];
3673 }
3674 def: InstRW<[SKLWriteResGroup186], (instregex "DIVSDrm")>;
3675 def: InstRW<[SKLWriteResGroup186], (instregex "SQRTPSm")>;
3676 def: InstRW<[SKLWriteResGroup186], (instregex "VDIVSDrm")>;
3677 def: InstRW<[SKLWriteResGroup186], (instregex "VSQRTPSYm")>;
3678
3679 def SKLWriteResGroup187 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3680   let Latency = 19;
3681   let NumMicroOps = 5;
3682   let ResourceCycles = [1,1,3];
3683 }
3684 def: InstRW<[SKLWriteResGroup187], (instregex "DPPSrmi")>;
3685 def: InstRW<[SKLWriteResGroup187], (instregex "VDPPSrmi")>;
3686
3687 def SKLWriteResGroup188 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort015,SKLPort0156]> {
3688   let Latency = 19;
3689   let NumMicroOps = 9;
3690   let ResourceCycles = [4,3,1,1];
3691 }
3692 def: InstRW<[SKLWriteResGroup188], (instregex "PCMPESTRM128rr")>;
3693 def: InstRW<[SKLWriteResGroup188], (instregex "VPCMPESTRM128rr")>;
3694
3695 def SKLWriteResGroup189 : SchedWriteRes<[SKLPort0]> {
3696   let Latency = 20;
3697   let NumMicroOps = 1;
3698   let ResourceCycles = [1];
3699 }
3700 def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FPrST0")>;
3701 def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FST0r")>;
3702 def: InstRW<[SKLWriteResGroup189], (instregex "DIV_FrST0")>;
3703 def: InstRW<[SKLWriteResGroup189], (instregex "SQRTPDr")>;
3704 def: InstRW<[SKLWriteResGroup189], (instregex "SQRTSDr")>;
3705
3706 def SKLWriteResGroup190 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3707   let Latency = 20;
3708   let NumMicroOps = 2;
3709   let ResourceCycles = [1,1];
3710 }
3711 def: InstRW<[SKLWriteResGroup190], (instregex "DIVPDrm")>;
3712 def: InstRW<[SKLWriteResGroup190], (instregex "VDIVPDrm")>;
3713
3714 def SKLWriteResGroup191 : SchedWriteRes<[SKLPort5,SKLPort23,SKLPort015]> {
3715   let Latency = 20;
3716   let NumMicroOps = 5;
3717   let ResourceCycles = [1,1,3];
3718 }
3719 def: InstRW<[SKLWriteResGroup191], (instregex "VDPPSYrmi")>;
3720
3721 def SKLWriteResGroup192 : SchedWriteRes<[SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3722   let Latency = 20;
3723   let NumMicroOps = 8;
3724   let ResourceCycles = [1,1,1,1,1,1,2];
3725 }
3726 def: InstRW<[SKLWriteResGroup192], (instregex "INSB")>;
3727 def: InstRW<[SKLWriteResGroup192], (instregex "INSL")>;
3728 def: InstRW<[SKLWriteResGroup192], (instregex "INSW")>;
3729
3730 def SKLWriteResGroup193 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort0156]> {
3731   let Latency = 20;
3732   let NumMicroOps = 10;
3733   let ResourceCycles = [1,2,7];
3734 }
3735 def: InstRW<[SKLWriteResGroup193], (instregex "MWAITrr")>;
3736
3737 def SKLWriteResGroup194 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort015]> {
3738   let Latency = 20;
3739   let NumMicroOps = 11;
3740   let ResourceCycles = [3,6,2];
3741 }
3742 def: InstRW<[SKLWriteResGroup194], (instregex "AESKEYGENASSIST128rr")>;
3743 def: InstRW<[SKLWriteResGroup194], (instregex "VAESKEYGENASSIST128rr")>;
3744
3745 def SKLWriteResGroup195 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3746   let Latency = 21;
3747   let NumMicroOps = 2;
3748   let ResourceCycles = [1,1];
3749 }
3750 def: InstRW<[SKLWriteResGroup195], (instregex "VDIVPDYrm")>;
3751
3752 def SKLWriteResGroup196 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3753   let Latency = 22;
3754   let NumMicroOps = 2;
3755   let ResourceCycles = [1,1];
3756 }
3757 def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F32m")>;
3758 def: InstRW<[SKLWriteResGroup196], (instregex "DIV_F64m")>;
3759
3760 def SKLWriteResGroup196_1 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
3761   let Latency = 22;
3762   let NumMicroOps = 5;
3763   let ResourceCycles = [1,2,1,1];
3764 }
3765 def: InstRW<[SKLWriteResGroup196_1], (instrs VGATHERDPSrm,
3766                                              VGATHERDPDrm,
3767                                              VGATHERQPDrm,
3768                                              VGATHERQPSrm,
3769                                              VPGATHERDDrm,
3770                                              VPGATHERDQrm,
3771                                              VPGATHERQDrm,
3772                                              VPGATHERQQrm)>;
3773
3774 def SKLWriteResGroup196_2 : SchedWriteRes<[SKLPort0, SKLPort23, SKLPort5, SKLPort015]> {
3775   let Latency = 25;
3776   let NumMicroOps = 5;
3777   let ResourceCycles = [1,2,1,1];
3778 }
3779 def: InstRW<[SKLWriteResGroup196_2], (instrs VGATHERDPSYrm,
3780                                              VGATHERQPDYrm,
3781                                              VGATHERQPSYrm,
3782                                              VPGATHERDDYrm,
3783                                              VPGATHERDQYrm,
3784                                              VPGATHERQDYrm,
3785                                              VPGATHERQQYrm,
3786                                              VGATHERDPDYrm)>;
3787
3788 def SKLWriteResGroup197 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3789   let Latency = 23;
3790   let NumMicroOps = 2;
3791   let ResourceCycles = [1,1];
3792 }
3793 def: InstRW<[SKLWriteResGroup197], (instregex "VSQRTSDm")>;
3794
3795 def SKLWriteResGroup198 : SchedWriteRes<[SKLPort0,SKLPort4,SKLPort5,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3796   let Latency = 23;
3797   let NumMicroOps = 19;
3798   let ResourceCycles = [2,1,4,1,1,4,6];
3799 }
3800 def: InstRW<[SKLWriteResGroup198], (instregex "CMPXCHG16B")>;
3801
3802 def SKLWriteResGroup199 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3803   let Latency = 24;
3804   let NumMicroOps = 2;
3805   let ResourceCycles = [1,1];
3806 }
3807 def: InstRW<[SKLWriteResGroup199], (instregex "VSQRTPDm")>;
3808
3809 def SKLWriteResGroup200 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
3810   let Latency = 24;
3811   let NumMicroOps = 9;
3812   let ResourceCycles = [4,3,1,1];
3813 }
3814 def: InstRW<[SKLWriteResGroup200], (instregex "PCMPESTRIrm")>;
3815 def: InstRW<[SKLWriteResGroup200], (instregex "VPCMPESTRIrm")>;
3816
3817 def SKLWriteResGroup201 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3818   let Latency = 25;
3819   let NumMicroOps = 2;
3820   let ResourceCycles = [1,1];
3821 }
3822 def: InstRW<[SKLWriteResGroup201], (instregex "SQRTSDm")>;
3823 def: InstRW<[SKLWriteResGroup201], (instregex "VSQRTPDYm")>;
3824
3825 def SKLWriteResGroup202 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3826   let Latency = 25;
3827   let NumMicroOps = 3;
3828   let ResourceCycles = [1,1,1];
3829 }
3830 def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI16m")>;
3831 def: InstRW<[SKLWriteResGroup202], (instregex "DIV_FI32m")>;
3832
3833 def SKLWriteResGroup203 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort015,SKLPort0156]> {
3834   let Latency = 25;
3835   let NumMicroOps = 10;
3836   let ResourceCycles = [4,3,1,1,1];
3837 }
3838 def: InstRW<[SKLWriteResGroup203], (instregex "PCMPESTRM128rm")>;
3839 def: InstRW<[SKLWriteResGroup203], (instregex "VPCMPESTRM128rm")>;
3840
3841 def SKLWriteResGroup204 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort015]> {
3842   let Latency = 25;
3843   let NumMicroOps = 11;
3844   let ResourceCycles = [3,6,1,1];
3845 }
3846 def: InstRW<[SKLWriteResGroup204], (instregex "AESKEYGENASSIST128rm")>;
3847 def: InstRW<[SKLWriteResGroup204], (instregex "VAESKEYGENASSIST128rm")>;
3848
3849 def SKLWriteResGroup205 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3850   let Latency = 26;
3851   let NumMicroOps = 2;
3852   let ResourceCycles = [1,1];
3853 }
3854 def: InstRW<[SKLWriteResGroup205], (instregex "SQRTPDm")>;
3855
3856 def SKLWriteResGroup206 : SchedWriteRes<[SKLPort0,SKLPort23]> {
3857   let Latency = 27;
3858   let NumMicroOps = 2;
3859   let ResourceCycles = [1,1];
3860 }
3861 def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F32m")>;
3862 def: InstRW<[SKLWriteResGroup206], (instregex "DIVR_F64m")>;
3863
3864 def SKLWriteResGroup207 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23,SKLPort0156]> {
3865   let Latency = 28;
3866   let NumMicroOps = 8;
3867   let ResourceCycles = [2,4,1,1];
3868 }
3869 def: InstRW<[SKLWriteResGroup207], (instregex "IDIV(16|32|64)m")>;
3870 def: InstRW<[SKLWriteResGroup207], (instregex "IDIV8m")>;
3871
3872 def SKLWriteResGroup208 : SchedWriteRes<[SKLPort0,SKLPort5,SKLPort23]> {
3873   let Latency = 30;
3874   let NumMicroOps = 3;
3875   let ResourceCycles = [1,1,1];
3876 }
3877 def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI16m")>;
3878 def: InstRW<[SKLWriteResGroup208], (instregex "DIVR_FI32m")>;
3879
3880 def SKLWriteResGroup209 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort06,SKLPort0156]> {
3881   let Latency = 35;
3882   let NumMicroOps = 23;
3883   let ResourceCycles = [1,5,3,4,10];
3884 }
3885 def: InstRW<[SKLWriteResGroup209], (instregex "IN(16|32)ri")>;
3886 def: InstRW<[SKLWriteResGroup209], (instregex "IN(16|32)rr")>;
3887 def: InstRW<[SKLWriteResGroup209], (instregex "IN8ri")>;
3888 def: InstRW<[SKLWriteResGroup209], (instregex "IN8rr")>;
3889
3890 def SKLWriteResGroup210 : SchedWriteRes<[SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort06,SKLPort0156]> {
3891   let Latency = 35;
3892   let NumMicroOps = 23;
3893   let ResourceCycles = [1,5,2,1,4,10];
3894 }
3895 def: InstRW<[SKLWriteResGroup210], (instregex "OUT(16|32)ir")>;
3896 def: InstRW<[SKLWriteResGroup210], (instregex "OUT(16|32)rr")>;
3897 def: InstRW<[SKLWriteResGroup210], (instregex "OUT8ir")>;
3898 def: InstRW<[SKLWriteResGroup210], (instregex "OUT8rr")>;
3899
3900 def SKLWriteResGroup211 : SchedWriteRes<[SKLPort1,SKLPort6,SKLPort23,SKLPort0156]> {
3901   let Latency = 37;
3902   let NumMicroOps = 31;
3903   let ResourceCycles = [1,8,1,21];
3904 }
3905 def: InstRW<[SKLWriteResGroup211], (instregex "XRSTOR(64)?")>;
3906
3907 def SKLWriteResGroup212 : SchedWriteRes<[SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort23,SKLPort237,SKLPort15,SKLPort0156]> {
3908   let Latency = 40;
3909   let NumMicroOps = 18;
3910   let ResourceCycles = [1,1,2,3,1,1,1,8];
3911 }
3912 def: InstRW<[SKLWriteResGroup212], (instregex "VMCLEARm")>;
3913
3914 def SKLWriteResGroup213 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
3915   let Latency = 41;
3916   let NumMicroOps = 39;
3917   let ResourceCycles = [1,10,1,1,26];
3918 }
3919 def: InstRW<[SKLWriteResGroup213], (instregex "XSAVE64")>;
3920
3921 def SKLWriteResGroup214 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
3922   let Latency = 42;
3923   let NumMicroOps = 22;
3924   let ResourceCycles = [2,20];
3925 }
3926 def: InstRW<[SKLWriteResGroup214], (instregex "RDTSCP")>;
3927
3928 def SKLWriteResGroup215 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
3929   let Latency = 42;
3930   let NumMicroOps = 40;
3931   let ResourceCycles = [1,11,1,1,26];
3932 }
3933 def: InstRW<[SKLWriteResGroup215], (instregex "^XSAVE$", "XSAVEC", "XSAVES")>;
3934
3935 def SKLWriteResGroup216 : SchedWriteRes<[SKLPort4,SKLPort6,SKLPort23,SKLPort237,SKLPort0156]> {
3936   let Latency = 46;
3937   let NumMicroOps = 44;
3938   let ResourceCycles = [1,11,1,1,30];
3939 }
3940 def: InstRW<[SKLWriteResGroup216], (instregex "XSAVEOPT")>;
3941
3942 def SKLWriteResGroup217 : SchedWriteRes<[SKLPort0,SKLPort23,SKLPort05,SKLPort06,SKLPort0156]> {
3943   let Latency = 62;
3944   let NumMicroOps = 64;
3945   let ResourceCycles = [2,8,5,10,39];
3946 }
3947 def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
3948 def: InstRW<[SKLWriteResGroup217], (instregex "FLDENVm")>;
3949
3950 def SKLWriteResGroup218 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
3951   let Latency = 63;
3952   let NumMicroOps = 88;
3953   let ResourceCycles = [4,4,31,1,2,1,45];
3954 }
3955 def: InstRW<[SKLWriteResGroup218], (instregex "FXRSTOR64")>;
3956
3957 def SKLWriteResGroup219 : SchedWriteRes<[SKLPort0,SKLPort6,SKLPort23,SKLPort05,SKLPort06,SKLPort15,SKLPort0156]> {
3958   let Latency = 63;
3959   let NumMicroOps = 90;
3960   let ResourceCycles = [4,2,33,1,2,1,47];
3961 }
3962 def: InstRW<[SKLWriteResGroup219], (instregex "FXRSTOR")>;
3963
3964 def SKLWriteResGroup220 : SchedWriteRes<[SKLPort5,SKLPort05,SKLPort0156]> {
3965   let Latency = 75;
3966   let NumMicroOps = 15;
3967   let ResourceCycles = [6,3,6];
3968 }
3969 def: InstRW<[SKLWriteResGroup220], (instregex "FNINIT")>;
3970
3971 def SKLWriteResGroup221 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort05,SKLPort0156]> {
3972   let Latency = 76;
3973   let NumMicroOps = 32;
3974   let ResourceCycles = [7,2,8,3,1,11];
3975 }
3976 def: InstRW<[SKLWriteResGroup221], (instregex "DIV(16|32|64)r")>;
3977
3978 def SKLWriteResGroup222 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort5,SKLPort6,SKLPort06,SKLPort0156]> {
3979   let Latency = 102;
3980   let NumMicroOps = 66;
3981   let ResourceCycles = [4,2,4,8,14,34];
3982 }
3983 def: InstRW<[SKLWriteResGroup222], (instregex "IDIV(16|32|64)r")>;
3984
3985 def SKLWriteResGroup223 : SchedWriteRes<[SKLPort0,SKLPort1,SKLPort4,SKLPort5,SKLPort6,SKLPort237,SKLPort06,SKLPort0156]> {
3986   let Latency = 106;
3987   let NumMicroOps = 100;
3988   let ResourceCycles = [9,1,11,16,1,11,21,30];
3989 }
3990 def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
3991 def: InstRW<[SKLWriteResGroup223], (instregex "FSTENVm")>;
3992
3993 } // SchedModel