blob: 9b224397ee4eab1683ae02a164fb7c52455c73f9 [file] [log] [blame]
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00001//=- X86SchedHaswell.td - X86 Haswell 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 Haswell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def HaswellModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
17 // instructions per cycle.
18 let IssueWidth = 4;
Andrew Trick18dc3da2013-06-15 04:50:02 +000019 let MicroOpBufferSize = 192; // Based on the reorder buffer.
Gadi Haber2cf601f2017-12-08 09:48:44 +000020 let LoadLatency = 5;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000021 let MispredictPenalty = 16;
Andrew Trickb6854d82013-09-25 18:14:12 +000022
Hal Finkel6532c202014-05-08 09:14:44 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
Gadi Haberd76f7b82017-08-28 10:04:16 +000026 // This flag is set to allow the scheduler to assign a default model to
27 // unrecognized opcodes.
Andrew Trickb6854d82013-09-25 18:14:12 +000028 let CompleteModel = 0;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000029}
30
31let SchedModel = HaswellModel in {
32
33// Haswell can issue micro-ops to 8 different ports in one cycle.
34
Quentin Colombet9e16c8a2014-01-29 18:26:59 +000035// Ports 0, 1, 5, and 6 handle all computation.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000036// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def HWPort0 : ProcResource<1>;
42def HWPort1 : ProcResource<1>;
43def HWPort2 : ProcResource<1>;
44def HWPort3 : ProcResource<1>;
45def HWPort4 : ProcResource<1>;
46def HWPort5 : ProcResource<1>;
47def HWPort6 : ProcResource<1>;
48def HWPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
Quentin Colombet0bc907e2014-08-18 17:55:26 +000051def HWPort01 : ProcResGroup<[HWPort0, HWPort1]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000052def HWPort23 : ProcResGroup<[HWPort2, HWPort3]>;
53def HWPort237 : ProcResGroup<[HWPort2, HWPort3, HWPort7]>;
Quentin Colombetf68e0942014-08-18 17:55:36 +000054def HWPort04 : ProcResGroup<[HWPort0, HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000055def HWPort05 : ProcResGroup<[HWPort0, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000056def HWPort06 : ProcResGroup<[HWPort0, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000057def HWPort15 : ProcResGroup<[HWPort1, HWPort5]>;
Quentin Colombetca498512014-02-24 19:33:51 +000058def HWPort16 : ProcResGroup<[HWPort1, HWPort6]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000059def HWPort56 : ProcResGroup<[HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000060def HWPort015 : ProcResGroup<[HWPort0, HWPort1, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000061def HWPort056 : ProcResGroup<[HWPort0, HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000062def HWPort0156: ProcResGroup<[HWPort0, HWPort1, HWPort5, HWPort6]>;
63
Andrew Trick40c4f382013-06-15 04:50:06 +000064// 60 Entry Unified Scheduler
65def HWPortAny : ProcResGroup<[HWPort0, HWPort1, HWPort2, HWPort3, HWPort4,
66 HWPort5, HWPort6, HWPort7]> {
67 let BufferSize=60;
68}
69
Andrew Tricke1d88cf2013-04-02 01:58:47 +000070// Integer division issued on port 0.
71def HWDivider : ProcResource<1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000072
Gadi Haber2cf601f2017-12-08 09:48:44 +000073// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000074// cycles after the memory operand.
Gadi Haber2cf601f2017-12-08 09:48:44 +000075def : ReadAdvance<ReadAfterLd, 5>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000076
77// Many SchedWrites are defined in pairs with and without a folded load.
78// Instructions with folded loads are usually micro-fused, so they only appear
79// as two micro-ops when queued in the reservation station.
80// This multiclass defines the resource usage for variants with and without
81// folded loads.
82multiclass HWWriteResPair<X86FoldableSchedWrite SchedRW,
83 ProcResourceKind ExePort,
84 int Lat> {
85 // Register variant is using a single cycle on ExePort.
86 def : WriteRes<SchedRW, [ExePort]> { let Latency = Lat; }
87
Gadi Haber2cf601f2017-12-08 09:48:44 +000088 // Memory variant also uses a cycle on port 2/3 and adds 5 cycles to the
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000089 // latency.
90 def : WriteRes<SchedRW.Folded, [HWPort23, ExePort]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +000091 let Latency = !add(Lat, 5);
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000092 }
93}
94
95// A folded store needs a cycle on port 4 for the store data, but it does not
96// need an extra port 2/3 cycle to recompute the address.
97def : WriteRes<WriteRMW, [HWPort4]>;
98
Quentin Colombet9e16c8a2014-01-29 18:26:59 +000099// Store_addr on 237.
100// Store_data on 4.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000101def : WriteRes<WriteStore, [HWPort237, HWPort4]>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000102def : WriteRes<WriteLoad, [HWPort23]> { let Latency = 5; }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000103def : WriteRes<WriteMove, [HWPort0156]>;
104def : WriteRes<WriteZero, []>;
105
106defm : HWWriteResPair<WriteALU, HWPort0156, 1>;
107defm : HWWriteResPair<WriteIMul, HWPort1, 3>;
Andrew Trick7201f4f2013-06-21 18:33:04 +0000108def : WriteRes<WriteIMulH, []> { let Latency = 3; }
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000109defm : HWWriteResPair<WriteShift, HWPort06, 1>;
110defm : HWWriteResPair<WriteJump, HWPort06, 1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000111
112// This is for simple LEAs with one or two input operands.
113// The complex ones can only execute on port 1, and they require two cycles on
114// the port to read all inputs. We don't model that.
115def : WriteRes<WriteLEA, [HWPort15]>;
116
117// This is quite rough, latency depends on the dividend.
118def : WriteRes<WriteIDiv, [HWPort0, HWDivider]> {
119 let Latency = 25;
120 let ResourceCycles = [1, 10];
121}
122def : WriteRes<WriteIDivLd, [HWPort23, HWPort0, HWDivider]> {
123 let Latency = 29;
124 let ResourceCycles = [1, 1, 10];
125}
126
127// Scalar and vector floating point.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000128def : WriteRes<WriteFStore, [HWPort237, HWPort4]>;
129def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; }
130def : WriteRes<WriteFMove, [HWPort5]>;
131
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000132defm : HWWriteResPair<WriteFAdd, HWPort1, 3>;
133defm : HWWriteResPair<WriteFMul, HWPort0, 5>;
134defm : HWWriteResPair<WriteFDiv, HWPort0, 12>; // 10-14 cycles.
135defm : HWWriteResPair<WriteFRcp, HWPort0, 5>;
Andrea Di Biagio196e873c2014-09-26 12:56:44 +0000136defm : HWWriteResPair<WriteFRsqrt, HWPort0, 5>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000137defm : HWWriteResPair<WriteFSqrt, HWPort0, 15>;
138defm : HWWriteResPair<WriteCvtF2I, HWPort1, 3>;
139defm : HWWriteResPair<WriteCvtI2F, HWPort1, 4>;
140defm : HWWriteResPair<WriteCvtF2F, HWPort1, 3>;
Simon Pilgrim97160be2017-11-27 10:41:32 +0000141defm : HWWriteResPair<WriteFMA, HWPort01, 5>;
Quentin Colombetca498512014-02-24 19:33:51 +0000142defm : HWWriteResPair<WriteFShuffle, HWPort5, 1>;
143defm : HWWriteResPair<WriteFBlend, HWPort015, 1>;
144defm : HWWriteResPair<WriteFShuffle256, HWPort5, 3>;
145
146def : WriteRes<WriteFVarBlend, [HWPort5]> {
147 let Latency = 2;
148 let ResourceCycles = [2];
149}
150def : WriteRes<WriteFVarBlendLd, [HWPort5, HWPort23]> {
151 let Latency = 6;
152 let ResourceCycles = [2, 1];
153}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000154
155// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000156def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
157def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
158def : WriteRes<WriteVecMove, [HWPort015]>;
159
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000160defm : HWWriteResPair<WriteVecShift, HWPort0, 1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000161defm : HWWriteResPair<WriteVecLogic, HWPort015, 1>;
162defm : HWWriteResPair<WriteVecALU, HWPort15, 1>;
163defm : HWWriteResPair<WriteVecIMul, HWPort0, 5>;
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000164defm : HWWriteResPair<WriteShuffle, HWPort5, 1>;
Quentin Colombetca498512014-02-24 19:33:51 +0000165defm : HWWriteResPair<WriteBlend, HWPort15, 1>;
166defm : HWWriteResPair<WriteShuffle256, HWPort5, 3>;
167
168def : WriteRes<WriteVarBlend, [HWPort5]> {
169 let Latency = 2;
170 let ResourceCycles = [2];
171}
172def : WriteRes<WriteVarBlendLd, [HWPort5, HWPort23]> {
173 let Latency = 6;
174 let ResourceCycles = [2, 1];
175}
176
177def : WriteRes<WriteVarVecShift, [HWPort0, HWPort5]> {
178 let Latency = 2;
179 let ResourceCycles = [2, 1];
180}
181def : WriteRes<WriteVarVecShiftLd, [HWPort0, HWPort5, HWPort23]> {
182 let Latency = 6;
183 let ResourceCycles = [2, 1, 1];
184}
185
186def : WriteRes<WriteMPSAD, [HWPort0, HWPort5]> {
187 let Latency = 6;
188 let ResourceCycles = [1, 2];
189}
190def : WriteRes<WriteMPSADLd, [HWPort23, HWPort0, HWPort5]> {
191 let Latency = 6;
192 let ResourceCycles = [1, 1, 2];
193}
194
195// String instructions.
196// Packed Compare Implicit Length Strings, Return Mask
197def : WriteRes<WritePCmpIStrM, [HWPort0]> {
198 let Latency = 10;
199 let ResourceCycles = [3];
200}
201def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
202 let Latency = 10;
203 let ResourceCycles = [3, 1];
204}
205
206// Packed Compare Explicit Length Strings, Return Mask
207def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort16, HWPort5]> {
208 let Latency = 10;
209 let ResourceCycles = [3, 2, 4];
210}
211def : WriteRes<WritePCmpEStrMLd, [HWPort05, HWPort16, HWPort23]> {
212 let Latency = 10;
213 let ResourceCycles = [6, 2, 1];
214}
215
216// Packed Compare Implicit Length Strings, Return Index
217def : WriteRes<WritePCmpIStrI, [HWPort0]> {
218 let Latency = 11;
219 let ResourceCycles = [3];
220}
221def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
222 let Latency = 11;
223 let ResourceCycles = [3, 1];
224}
225
226// Packed Compare Explicit Length Strings, Return Index
227def : WriteRes<WritePCmpEStrI, [HWPort05, HWPort16]> {
228 let Latency = 11;
229 let ResourceCycles = [6, 2];
230}
231def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort16, HWPort5, HWPort23]> {
232 let Latency = 11;
233 let ResourceCycles = [3, 2, 2, 1];
234}
235
236// AES Instructions.
237def : WriteRes<WriteAESDecEnc, [HWPort5]> {
238 let Latency = 7;
239 let ResourceCycles = [1];
240}
241def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
242 let Latency = 7;
243 let ResourceCycles = [1, 1];
244}
245
246def : WriteRes<WriteAESIMC, [HWPort5]> {
247 let Latency = 14;
248 let ResourceCycles = [2];
249}
250def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
251 let Latency = 14;
252 let ResourceCycles = [2, 1];
253}
254
255def : WriteRes<WriteAESKeyGen, [HWPort0, HWPort5]> {
256 let Latency = 10;
257 let ResourceCycles = [2, 8];
258}
259def : WriteRes<WriteAESKeyGenLd, [HWPort0, HWPort5, HWPort23]> {
260 let Latency = 10;
261 let ResourceCycles = [2, 7, 1];
262}
263
264// Carry-less multiplication instructions.
265def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
266 let Latency = 7;
267 let ResourceCycles = [2, 1];
268}
269def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
270 let Latency = 7;
271 let ResourceCycles = [2, 1, 1];
272}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000273
274def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
275def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000276def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
277def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000278
Michael Zuckermanf6684002017-06-28 11:23:31 +0000279//================ Exceptions ================//
280
281//-- Specific Scheduling Models --//
282
283// Starting with P0.
284def WriteP0 : SchedWriteRes<[HWPort0]>;
285
Michael Zuckermanf6684002017-06-28 11:23:31 +0000286def WriteP01 : SchedWriteRes<[HWPort01]>;
287
288def Write2P01 : SchedWriteRes<[HWPort01]> {
289 let NumMicroOps = 2;
290}
291def Write3P01 : SchedWriteRes<[HWPort01]> {
292 let NumMicroOps = 3;
293}
294
Michael Zuckermanf6684002017-06-28 11:23:31 +0000295def WriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
296 let NumMicroOps = 2;
297}
298
299def Write2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
300 let NumMicroOps = 3;
301 let ResourceCycles = [2, 1];
302}
303
Michael Zuckermanf6684002017-06-28 11:23:31 +0000304def Write5P0156 : SchedWriteRes<[HWPort0156]> {
305 let NumMicroOps = 5;
306 let ResourceCycles = [5];
307}
308
Michael Zuckermanf6684002017-06-28 11:23:31 +0000309// Starting with P1.
310def WriteP1 : SchedWriteRes<[HWPort1]>;
311
Michael Zuckermanf6684002017-06-28 11:23:31 +0000312
313def Write2P1 : SchedWriteRes<[HWPort1]> {
314 let NumMicroOps = 2;
315 let ResourceCycles = [2];
316}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000317
318// Notation:
319// - r: register.
320// - mm: 64 bit mmx register.
321// - x = 128 bit xmm register.
322// - (x)mm = mmx or xmm register.
323// - y = 256 bit ymm register.
324// - v = any vector register.
325// - m = memory.
326
327//=== Integer Instructions ===//
328//-- Move instructions --//
329
Michael Zuckermanf6684002017-06-28 11:23:31 +0000330// XLAT.
331def WriteXLAT : SchedWriteRes<[]> {
332 let Latency = 7;
333 let NumMicroOps = 3;
334}
335def : InstRW<[WriteXLAT], (instregex "XLAT")>;
336
Michael Zuckermanf6684002017-06-28 11:23:31 +0000337// PUSHA.
338def WritePushA : SchedWriteRes<[]> {
339 let NumMicroOps = 19;
340}
341def : InstRW<[WritePushA], (instregex "PUSHA(16|32)")>;
342
Michael Zuckermanf6684002017-06-28 11:23:31 +0000343// POPA.
344def WritePopA : SchedWriteRes<[]> {
345 let NumMicroOps = 18;
346}
347def : InstRW<[WritePopA], (instregex "POPA(16|32)")>;
348
Michael Zuckermanf6684002017-06-28 11:23:31 +0000349//-- Arithmetic instructions --//
350
Michael Zuckermanf6684002017-06-28 11:23:31 +0000351// DIV.
352// r8.
353def WriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
354 let Latency = 22;
355 let NumMicroOps = 9;
356}
357def : InstRW<[WriteDiv8], (instregex "DIV8r")>;
358
Michael Zuckermanf6684002017-06-28 11:23:31 +0000359// IDIV.
360// r8.
361def WriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
362 let Latency = 23;
363 let NumMicroOps = 9;
364}
365def : InstRW<[WriteIDiv8], (instregex "IDIV8r")>;
366
Michael Zuckermanf6684002017-06-28 11:23:31 +0000367// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000368// m,r.
369def WriteBTmr : SchedWriteRes<[]> {
370 let NumMicroOps = 10;
371}
372def : InstRW<[WriteBTmr], (instregex "BT(16|32|64)mr")>;
373
Michael Zuckermanf6684002017-06-28 11:23:31 +0000374// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000375// m,r.
376def WriteBTRSCmr : SchedWriteRes<[]> {
377 let NumMicroOps = 11;
378}
379def : InstRW<[WriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
380
Michael Zuckermanf6684002017-06-28 11:23:31 +0000381//-- Control transfer instructions --//
382
Michael Zuckermanf6684002017-06-28 11:23:31 +0000383// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000384// i.
385def WriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
386 let NumMicroOps = 4;
387 let ResourceCycles = [1, 2, 1];
388}
389def : InstRW<[WriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
390
391// BOUND.
392// r,m.
393def WriteBOUND : SchedWriteRes<[]> {
394 let NumMicroOps = 15;
395}
396def : InstRW<[WriteBOUND], (instregex "BOUNDS(16|32)rm")>;
397
398// INTO.
399def WriteINTO : SchedWriteRes<[]> {
400 let NumMicroOps = 4;
401}
402def : InstRW<[WriteINTO], (instregex "INTO")>;
403
404//-- String instructions --//
405
406// LODSB/W.
407def : InstRW<[Write2P0156_P23], (instregex "LODS(B|W)")>;
408
409// LODSD/Q.
410def : InstRW<[WriteP0156_P23], (instregex "LODS(L|Q)")>;
411
Michael Zuckermanf6684002017-06-28 11:23:31 +0000412// MOVS.
413def WriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
414 let Latency = 4;
415 let NumMicroOps = 5;
416 let ResourceCycles = [2, 1, 2];
417}
Craig Topper2d451e72018-03-18 08:38:06 +0000418def : InstRW<[WriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000419
Michael Zuckermanf6684002017-06-28 11:23:31 +0000420// CMPS.
421def WriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
422 let Latency = 4;
423 let NumMicroOps = 5;
424 let ResourceCycles = [2, 3];
425}
426def : InstRW<[WriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
427
Michael Zuckermanf6684002017-06-28 11:23:31 +0000428//-- Other --//
429
Gadi Haberd76f7b82017-08-28 10:04:16 +0000430// RDPMC.f
Michael Zuckermanf6684002017-06-28 11:23:31 +0000431def WriteRDPMC : SchedWriteRes<[]> {
432 let NumMicroOps = 34;
433}
434def : InstRW<[WriteRDPMC], (instregex "RDPMC")>;
435
436// RDRAND.
437def WriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
438 let NumMicroOps = 17;
439 let ResourceCycles = [1, 16];
440}
441def : InstRW<[WriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
442
443//=== Floating Point x87 Instructions ===//
444//-- Move instructions --//
445
446// FLD.
447// m80.
448def : InstRW<[WriteP01], (instregex "LD_Frr")>;
449
Michael Zuckermanf6684002017-06-28 11:23:31 +0000450// FBLD.
451// m80.
452def WriteFBLD : SchedWriteRes<[]> {
453 let Latency = 47;
454 let NumMicroOps = 43;
455}
456def : InstRW<[WriteFBLD], (instregex "FBLDm")>;
457
458// FST(P).
459// r.
460def : InstRW<[WriteP01], (instregex "ST_(F|FP)rr")>;
461
Michael Zuckermanf6684002017-06-28 11:23:31 +0000462// FLDZ.
463def : InstRW<[WriteP01], (instregex "LD_F0")>;
464
Michael Zuckermanf6684002017-06-28 11:23:31 +0000465// FLDPI FLDL2E etc.
466def : InstRW<[Write2P01], (instregex "FLDPI", "FLDL2(T|E)" "FLDL(G|N)2")>;
467
Michael Zuckermanf6684002017-06-28 11:23:31 +0000468// FFREE.
469def : InstRW<[WriteP01], (instregex "FFREE")>;
470
471// FNSAVE.
472def WriteFNSAVE : SchedWriteRes<[]> {
473 let NumMicroOps = 147;
474}
475def : InstRW<[WriteFNSAVE], (instregex "FSAVEm")>;
476
477// FRSTOR.
478def WriteFRSTOR : SchedWriteRes<[]> {
479 let NumMicroOps = 90;
480}
481def : InstRW<[WriteFRSTOR], (instregex "FRSTORm")>;
482
483//-- Arithmetic instructions --//
484
485// FABS.
486def : InstRW<[WriteP0], (instregex "ABS_F")>;
487
488// FCHS.
489def : InstRW<[WriteP0], (instregex "CHS_F")>;
490
Michael Zuckermanf6684002017-06-28 11:23:31 +0000491// FCOMPP FUCOMPP.
492// r.
493def : InstRW<[Write2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
494
495// FCOMI(P) FUCOMI(P).
496// m.
497def : InstRW<[Write3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
498 "UCOM_FIPr")>;
499
Michael Zuckermanf6684002017-06-28 11:23:31 +0000500// FTST.
501def : InstRW<[WriteP1], (instregex "TST_F")>;
502
503// FXAM.
504def : InstRW<[Write2P1], (instregex "FXAM")>;
505
506// FPREM.
507def WriteFPREM : SchedWriteRes<[]> {
508 let Latency = 19;
509 let NumMicroOps = 28;
510}
Craig Topper2d451e72018-03-18 08:38:06 +0000511def : InstRW<[WriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000512
513// FPREM1.
514def WriteFPREM1 : SchedWriteRes<[]> {
515 let Latency = 27;
516 let NumMicroOps = 41;
517}
Craig Topper2d451e72018-03-18 08:38:06 +0000518def : InstRW<[WriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000519
520// FRNDINT.
521def WriteFRNDINT : SchedWriteRes<[]> {
522 let Latency = 11;
523 let NumMicroOps = 17;
524}
525def : InstRW<[WriteFRNDINT], (instregex "FRNDINT")>;
526
527//-- Math instructions --//
528
529// FSCALE.
530def WriteFSCALE : SchedWriteRes<[]> {
531 let Latency = 75; // 49-125
532 let NumMicroOps = 50; // 25-75
533}
534def : InstRW<[WriteFSCALE], (instregex "FSCALE")>;
535
536// FXTRACT.
537def WriteFXTRACT : SchedWriteRes<[]> {
538 let Latency = 15;
539 let NumMicroOps = 17;
540}
541def : InstRW<[WriteFXTRACT], (instregex "FXTRACT")>;
542
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000543////////////////////////////////////////////////////////////////////////////////
544// Horizontal add/sub instructions.
545////////////////////////////////////////////////////////////////////////////////
546
547// HADD, HSUB PS/PD
548// x,x / v,v,v.
549def : WriteRes<WriteFHAdd, [HWPort1, HWPort5]> {
550 let Latency = 5;
551 let NumMicroOps = 3;
552 let ResourceCycles = [1, 2];
553}
554
555// x,m / v,v,m.
556def : WriteRes<WriteFHAddLd, [HWPort1, HWPort5, HWPort23]> {
557 let Latency = 9;
558 let NumMicroOps = 4;
559 let ResourceCycles = [1, 2, 1];
560}
561
562// PHADD|PHSUB (S) W/D.
563// v <- v,v.
564def : WriteRes<WritePHAdd, [HWPort1, HWPort5]> {
565 let Latency = 3;
566 let NumMicroOps = 3;
567 let ResourceCycles = [1, 2];
568}
569// v <- v,m.
570def : WriteRes<WritePHAddLd, [HWPort1, HWPort5, HWPort23]> {
571 let Latency = 6;
572 let NumMicroOps = 3;
573 let ResourceCycles = [1, 2, 1];
574}
575
Michael Zuckermanf6684002017-06-28 11:23:31 +0000576//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000577
Gadi Haberd76f7b82017-08-28 10:04:16 +0000578// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000579
Gadi Haberd76f7b82017-08-28 10:04:16 +0000580def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000581 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000582 let NumMicroOps = 1;
583 let ResourceCycles = [1];
584}
585def: InstRW<[HWWriteResGroup0], (instregex "LDDQUrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000586def: InstRW<[HWWriteResGroup0], (instregex "MOVAPDrm")>;
587def: InstRW<[HWWriteResGroup0], (instregex "MOVAPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000588def: InstRW<[HWWriteResGroup0], (instregex "MOVDQArm")>;
589def: InstRW<[HWWriteResGroup0], (instregex "MOVDQUrm")>;
590def: InstRW<[HWWriteResGroup0], (instregex "MOVNTDQArm")>;
591def: InstRW<[HWWriteResGroup0], (instregex "MOVSHDUPrm")>;
592def: InstRW<[HWWriteResGroup0], (instregex "MOVSLDUPrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000593def: InstRW<[HWWriteResGroup0], (instregex "MOVUPDrm")>;
594def: InstRW<[HWWriteResGroup0], (instregex "MOVUPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000595def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000596def: InstRW<[HWWriteResGroup0], (instregex "VLDDQUrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000597def: InstRW<[HWWriteResGroup0], (instregex "VMOVAPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000598def: InstRW<[HWWriteResGroup0], (instregex "VMOVAPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000599def: InstRW<[HWWriteResGroup0], (instregex "VMOVDQArm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000600def: InstRW<[HWWriteResGroup0], (instregex "VMOVDQUrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000601def: InstRW<[HWWriteResGroup0], (instregex "VMOVNTDQArm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000602def: InstRW<[HWWriteResGroup0], (instregex "VMOVSHDUPrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000603def: InstRW<[HWWriteResGroup0], (instregex "VMOVSLDUPrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000604def: InstRW<[HWWriteResGroup0], (instregex "VMOVUPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000605def: InstRW<[HWWriteResGroup0], (instregex "VMOVUPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000606def: InstRW<[HWWriteResGroup0], (instregex "VPBROADCASTDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000607def: InstRW<[HWWriteResGroup0], (instregex "VPBROADCASTQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000608def: InstRW<[HWWriteResGroup0], (instregex "ROUNDPDr")>;
609def: InstRW<[HWWriteResGroup0], (instregex "ROUNDPSr")>;
610def: InstRW<[HWWriteResGroup0], (instregex "ROUNDSDr")>;
611def: InstRW<[HWWriteResGroup0], (instregex "ROUNDSSr")>;
612def: InstRW<[HWWriteResGroup0], (instregex "VROUNDPDr")>;
613def: InstRW<[HWWriteResGroup0], (instregex "VROUNDPSr")>;
614def: InstRW<[HWWriteResGroup0], (instregex "VROUNDSDr")>;
615def: InstRW<[HWWriteResGroup0], (instregex "VROUNDSSr")>;
616def: InstRW<[HWWriteResGroup0], (instregex "VROUNDYPDr")>;
617def: InstRW<[HWWriteResGroup0], (instregex "VROUNDYPSr")>;
618
619def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
620 let Latency = 7;
621 let NumMicroOps = 1;
622 let ResourceCycles = [1];
623}
624def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m")>;
625def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F64m")>;
626def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F80m")>;
627def: InstRW<[HWWriteResGroup0_1], (instregex "VBROADCASTF128")>;
628def: InstRW<[HWWriteResGroup0_1], (instregex "VBROADCASTI128")>;
629def: InstRW<[HWWriteResGroup0_1], (instregex "VBROADCASTSDYrm")>;
630def: InstRW<[HWWriteResGroup0_1], (instregex "VBROADCASTSSYrm")>;
631def: InstRW<[HWWriteResGroup0_1], (instregex "VLDDQUYrm")>;
632def: InstRW<[HWWriteResGroup0_1], (instregex "VMOVAPDYrm")>;
633def: InstRW<[HWWriteResGroup0_1], (instregex "VMOVAPSYrm")>;
634def: InstRW<[HWWriteResGroup0_1], (instregex "VMOVDDUPYrm")>;
635def: InstRW<[HWWriteResGroup0_1], (instregex "VMOVDQAYrm")>;
636def: InstRW<[HWWriteResGroup0_1], (instregex "VMOVDQUYrm")>;
637def: InstRW<[HWWriteResGroup0_1], (instregex "VMOVNTDQAYrm")>;
638def: InstRW<[HWWriteResGroup0_1], (instregex "VMOVSHDUPYrm")>;
639def: InstRW<[HWWriteResGroup0_1], (instregex "VMOVSLDUPYrm")>;
640def: InstRW<[HWWriteResGroup0_1], (instregex "VMOVUPDYrm")>;
641def: InstRW<[HWWriteResGroup0_1], (instregex "VMOVUPSYrm")>;
642def: InstRW<[HWWriteResGroup0_1], (instregex "VPBROADCASTDYrm")>;
643def: InstRW<[HWWriteResGroup0_1], (instregex "VPBROADCASTQYrm")>;
644
645def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
646 let Latency = 5;
647 let NumMicroOps = 1;
648 let ResourceCycles = [1];
649}
Gadi Haber2cf601f2017-12-08 09:48:44 +0000650def: InstRW<[HWWriteResGroup0_2], (instregex "MMX_MOVD64rm")>;
651def: InstRW<[HWWriteResGroup0_2], (instregex "MMX_MOVD64to64rm")>;
652def: InstRW<[HWWriteResGroup0_2], (instregex "MMX_MOVQ64rm")>;
653def: InstRW<[HWWriteResGroup0_2], (instregex "MOV(16|32|64)rm")>;
654def: InstRW<[HWWriteResGroup0_2], (instregex "MOV64toPQIrm")>;
655def: InstRW<[HWWriteResGroup0_2], (instregex "MOV8rm")>;
656def: InstRW<[HWWriteResGroup0_2], (instregex "MOVDDUPrm")>;
657def: InstRW<[HWWriteResGroup0_2], (instregex "MOVDI2PDIrm")>;
Craig Topper90c9c152017-12-10 09:14:44 +0000658def: InstRW<[HWWriteResGroup0_2], (instregex "MOVQI2PQIrm")>;
659def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000660def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSSrm")>;
661def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm16")>;
662def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm32")>;
663def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm8")>;
664def: InstRW<[HWWriteResGroup0_2], (instregex "MOVZX(16|32|64)rm16")>;
665def: InstRW<[HWWriteResGroup0_2], (instregex "MOVZX(16|32|64)rm8")>;
666def: InstRW<[HWWriteResGroup0_2], (instregex "PREFETCHNTA")>;
667def: InstRW<[HWWriteResGroup0_2], (instregex "PREFETCHT0")>;
668def: InstRW<[HWWriteResGroup0_2], (instregex "PREFETCHT1")>;
669def: InstRW<[HWWriteResGroup0_2], (instregex "PREFETCHT2")>;
670def: InstRW<[HWWriteResGroup0_2], (instregex "VMOV64toPQIrm")>;
671def: InstRW<[HWWriteResGroup0_2], (instregex "VMOVDDUPrm")>;
672def: InstRW<[HWWriteResGroup0_2], (instregex "VMOVDI2PDIrm")>;
673def: InstRW<[HWWriteResGroup0_2], (instregex "VMOVQI2PQIrm")>;
674def: InstRW<[HWWriteResGroup0_2], (instregex "VMOVSDrm")>;
675def: InstRW<[HWWriteResGroup0_2], (instregex "VMOVSSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000676
Gadi Haberd76f7b82017-08-28 10:04:16 +0000677def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
678 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000679 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000680 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000681}
Gadi Haberd76f7b82017-08-28 10:04:16 +0000682def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm")>;
683def: InstRW<[HWWriteResGroup1], (instregex "MMX_MOVD64from64rm")>;
684def: InstRW<[HWWriteResGroup1], (instregex "MMX_MOVD64mr")>;
685def: InstRW<[HWWriteResGroup1], (instregex "MMX_MOVNTQmr")>;
686def: InstRW<[HWWriteResGroup1], (instregex "MMX_MOVQ64mr")>;
687def: InstRW<[HWWriteResGroup1], (instregex "MOV(16|32|64)mr")>;
688def: InstRW<[HWWriteResGroup1], (instregex "MOV8mi")>;
689def: InstRW<[HWWriteResGroup1], (instregex "MOV8mr")>;
690def: InstRW<[HWWriteResGroup1], (instregex "MOVAPDmr")>;
691def: InstRW<[HWWriteResGroup1], (instregex "MOVAPSmr")>;
692def: InstRW<[HWWriteResGroup1], (instregex "MOVDQAmr")>;
693def: InstRW<[HWWriteResGroup1], (instregex "MOVDQUmr")>;
694def: InstRW<[HWWriteResGroup1], (instregex "MOVHPDmr")>;
695def: InstRW<[HWWriteResGroup1], (instregex "MOVHPSmr")>;
696def: InstRW<[HWWriteResGroup1], (instregex "MOVLPDmr")>;
697def: InstRW<[HWWriteResGroup1], (instregex "MOVLPSmr")>;
698def: InstRW<[HWWriteResGroup1], (instregex "MOVNTDQmr")>;
699def: InstRW<[HWWriteResGroup1], (instregex "MOVNTI_64mr")>;
700def: InstRW<[HWWriteResGroup1], (instregex "MOVNTImr")>;
701def: InstRW<[HWWriteResGroup1], (instregex "MOVNTPDmr")>;
702def: InstRW<[HWWriteResGroup1], (instregex "MOVNTPSmr")>;
703def: InstRW<[HWWriteResGroup1], (instregex "MOVPDI2DImr")>;
704def: InstRW<[HWWriteResGroup1], (instregex "MOVPQI2QImr")>;
705def: InstRW<[HWWriteResGroup1], (instregex "MOVPQIto64mr")>;
Craig Topper90c9c152017-12-10 09:14:44 +0000706def: InstRW<[HWWriteResGroup1], (instregex "MOVSDmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000707def: InstRW<[HWWriteResGroup1], (instregex "MOVSSmr")>;
708def: InstRW<[HWWriteResGroup1], (instregex "MOVUPDmr")>;
709def: InstRW<[HWWriteResGroup1], (instregex "MOVUPSmr")>;
710def: InstRW<[HWWriteResGroup1], (instregex "ST_FP32m")>;
711def: InstRW<[HWWriteResGroup1], (instregex "ST_FP64m")>;
712def: InstRW<[HWWriteResGroup1], (instregex "ST_FP80m")>;
713def: InstRW<[HWWriteResGroup1], (instregex "VEXTRACTF128mr")>;
714def: InstRW<[HWWriteResGroup1], (instregex "VEXTRACTI128mr")>;
715def: InstRW<[HWWriteResGroup1], (instregex "VMOVAPDYmr")>;
716def: InstRW<[HWWriteResGroup1], (instregex "VMOVAPDmr")>;
717def: InstRW<[HWWriteResGroup1], (instregex "VMOVAPSYmr")>;
718def: InstRW<[HWWriteResGroup1], (instregex "VMOVAPSmr")>;
719def: InstRW<[HWWriteResGroup1], (instregex "VMOVDQAYmr")>;
720def: InstRW<[HWWriteResGroup1], (instregex "VMOVDQAmr")>;
721def: InstRW<[HWWriteResGroup1], (instregex "VMOVDQUYmr")>;
722def: InstRW<[HWWriteResGroup1], (instregex "VMOVDQUmr")>;
723def: InstRW<[HWWriteResGroup1], (instregex "VMOVHPDmr")>;
724def: InstRW<[HWWriteResGroup1], (instregex "VMOVHPSmr")>;
725def: InstRW<[HWWriteResGroup1], (instregex "VMOVLPDmr")>;
726def: InstRW<[HWWriteResGroup1], (instregex "VMOVLPSmr")>;
727def: InstRW<[HWWriteResGroup1], (instregex "VMOVNTDQYmr")>;
728def: InstRW<[HWWriteResGroup1], (instregex "VMOVNTDQmr")>;
729def: InstRW<[HWWriteResGroup1], (instregex "VMOVNTPDYmr")>;
730def: InstRW<[HWWriteResGroup1], (instregex "VMOVNTPDmr")>;
731def: InstRW<[HWWriteResGroup1], (instregex "VMOVNTPSYmr")>;
732def: InstRW<[HWWriteResGroup1], (instregex "VMOVNTPSmr")>;
733def: InstRW<[HWWriteResGroup1], (instregex "VMOVPDI2DImr")>;
734def: InstRW<[HWWriteResGroup1], (instregex "VMOVPQI2QImr")>;
735def: InstRW<[HWWriteResGroup1], (instregex "VMOVPQIto64mr")>;
736def: InstRW<[HWWriteResGroup1], (instregex "VMOVSDmr")>;
737def: InstRW<[HWWriteResGroup1], (instregex "VMOVSSmr")>;
738def: InstRW<[HWWriteResGroup1], (instregex "VMOVUPDYmr")>;
739def: InstRW<[HWWriteResGroup1], (instregex "VMOVUPDmr")>;
740def: InstRW<[HWWriteResGroup1], (instregex "VMOVUPSYmr")>;
741def: InstRW<[HWWriteResGroup1], (instregex "VMOVUPSmr")>;
742def: InstRW<[HWWriteResGroup1], (instregex "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000743
Gadi Haberd76f7b82017-08-28 10:04:16 +0000744def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
745 let Latency = 1;
746 let NumMicroOps = 1;
747 let ResourceCycles = [1];
748}
749def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr")>;
750def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64grr")>;
751def: InstRW<[HWWriteResGroup2], (instregex "MMX_PMOVMSKBrr")>;
752def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSLLDri")>;
753def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSLLDrr")>;
754def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSLLQri")>;
755def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSLLQrr")>;
756def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSLLWri")>;
757def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSLLWrr")>;
758def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSRADri")>;
759def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSRADrr")>;
760def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSRAWri")>;
761def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSRAWrr")>;
762def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSRLDri")>;
763def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSRLDrr")>;
764def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSRLQri")>;
765def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSRLQrr")>;
766def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSRLWri")>;
767def: InstRW<[HWWriteResGroup2], (instregex "MMX_PSRLWrr")>;
768def: InstRW<[HWWriteResGroup2], (instregex "MOVPDI2DIrr")>;
769def: InstRW<[HWWriteResGroup2], (instregex "MOVPQIto64rr")>;
770def: InstRW<[HWWriteResGroup2], (instregex "PSLLDri")>;
771def: InstRW<[HWWriteResGroup2], (instregex "PSLLQri")>;
772def: InstRW<[HWWriteResGroup2], (instregex "PSLLWri")>;
773def: InstRW<[HWWriteResGroup2], (instregex "PSRADri")>;
774def: InstRW<[HWWriteResGroup2], (instregex "PSRAWri")>;
775def: InstRW<[HWWriteResGroup2], (instregex "PSRLDri")>;
776def: InstRW<[HWWriteResGroup2], (instregex "PSRLQri")>;
777def: InstRW<[HWWriteResGroup2], (instregex "PSRLWri")>;
778def: InstRW<[HWWriteResGroup2], (instregex "VMOVPDI2DIrr")>;
779def: InstRW<[HWWriteResGroup2], (instregex "VMOVPQIto64rr")>;
780def: InstRW<[HWWriteResGroup2], (instregex "VPSLLDYri")>;
781def: InstRW<[HWWriteResGroup2], (instregex "VPSLLDri")>;
782def: InstRW<[HWWriteResGroup2], (instregex "VPSLLQYri")>;
783def: InstRW<[HWWriteResGroup2], (instregex "VPSLLQri")>;
784def: InstRW<[HWWriteResGroup2], (instregex "VPSLLVQYrr")>;
785def: InstRW<[HWWriteResGroup2], (instregex "VPSLLVQrr")>;
786def: InstRW<[HWWriteResGroup2], (instregex "VPSLLWYri")>;
787def: InstRW<[HWWriteResGroup2], (instregex "VPSLLWri")>;
788def: InstRW<[HWWriteResGroup2], (instregex "VPSRADYri")>;
789def: InstRW<[HWWriteResGroup2], (instregex "VPSRADri")>;
790def: InstRW<[HWWriteResGroup2], (instregex "VPSRAWYri")>;
791def: InstRW<[HWWriteResGroup2], (instregex "VPSRAWri")>;
792def: InstRW<[HWWriteResGroup2], (instregex "VPSRLDYri")>;
793def: InstRW<[HWWriteResGroup2], (instregex "VPSRLDri")>;
794def: InstRW<[HWWriteResGroup2], (instregex "VPSRLQYri")>;
795def: InstRW<[HWWriteResGroup2], (instregex "VPSRLQri")>;
796def: InstRW<[HWWriteResGroup2], (instregex "VPSRLVQYrr")>;
797def: InstRW<[HWWriteResGroup2], (instregex "VPSRLVQrr")>;
798def: InstRW<[HWWriteResGroup2], (instregex "VPSRLWYri")>;
799def: InstRW<[HWWriteResGroup2], (instregex "VPSRLWri")>;
800def: InstRW<[HWWriteResGroup2], (instregex "VTESTPDYrr")>;
801def: InstRW<[HWWriteResGroup2], (instregex "VTESTPDrr")>;
802def: InstRW<[HWWriteResGroup2], (instregex "VTESTPSYrr")>;
803def: InstRW<[HWWriteResGroup2], (instregex "VTESTPSrr")>;
804
805def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
806 let Latency = 1;
807 let NumMicroOps = 1;
808 let ResourceCycles = [1];
809}
810def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r")>;
811def: InstRW<[HWWriteResGroup3], (instregex "COM_FST0r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000812def: InstRW<[HWWriteResGroup3], (instregex "UCOM_FPr")>;
813def: InstRW<[HWWriteResGroup3], (instregex "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000814
815def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
816 let Latency = 1;
817 let NumMicroOps = 1;
818 let ResourceCycles = [1];
819}
820def: InstRW<[HWWriteResGroup4], (instregex "ANDNPDrr")>;
821def: InstRW<[HWWriteResGroup4], (instregex "ANDNPSrr")>;
822def: InstRW<[HWWriteResGroup4], (instregex "ANDPDrr")>;
823def: InstRW<[HWWriteResGroup4], (instregex "ANDPSrr")>;
824def: InstRW<[HWWriteResGroup4], (instregex "INSERTPSrr")>;
825def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr")>;
826def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64to64rr")>;
827def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVQ2DQrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +0000828def: InstRW<[HWWriteResGroup4], (instregex "MMX_PALIGNRrri")>;
829def: InstRW<[HWWriteResGroup4], (instregex "MMX_PSHUFBrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000830def: InstRW<[HWWriteResGroup4], (instregex "MMX_PSHUFWri")>;
831def: InstRW<[HWWriteResGroup4], (instregex "MMX_PUNPCKHBWirr")>;
832def: InstRW<[HWWriteResGroup4], (instregex "MMX_PUNPCKHDQirr")>;
833def: InstRW<[HWWriteResGroup4], (instregex "MMX_PUNPCKHWDirr")>;
834def: InstRW<[HWWriteResGroup4], (instregex "MMX_PUNPCKLBWirr")>;
835def: InstRW<[HWWriteResGroup4], (instregex "MMX_PUNPCKLDQirr")>;
836def: InstRW<[HWWriteResGroup4], (instregex "MMX_PUNPCKLWDirr")>;
837def: InstRW<[HWWriteResGroup4], (instregex "MOV64toPQIrr")>;
838def: InstRW<[HWWriteResGroup4], (instregex "MOVAPDrr")>;
839def: InstRW<[HWWriteResGroup4], (instregex "MOVAPSrr")>;
840def: InstRW<[HWWriteResGroup4], (instregex "MOVDDUPrr")>;
841def: InstRW<[HWWriteResGroup4], (instregex "MOVDI2PDIrr")>;
842def: InstRW<[HWWriteResGroup4], (instregex "MOVHLPSrr")>;
843def: InstRW<[HWWriteResGroup4], (instregex "MOVLHPSrr")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000844def: InstRW<[HWWriteResGroup4], (instregex "MOVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000845def: InstRW<[HWWriteResGroup4], (instregex "MOVSHDUPrr")>;
846def: InstRW<[HWWriteResGroup4], (instregex "MOVSLDUPrr")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000847def: InstRW<[HWWriteResGroup4], (instregex "MOVSSrr")>;
848def: InstRW<[HWWriteResGroup4], (instregex "MOVUPDrr")>;
849def: InstRW<[HWWriteResGroup4], (instregex "MOVUPSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000850def: InstRW<[HWWriteResGroup4], (instregex "ORPDrr")>;
851def: InstRW<[HWWriteResGroup4], (instregex "ORPSrr")>;
852def: InstRW<[HWWriteResGroup4], (instregex "PACKSSDWrr")>;
853def: InstRW<[HWWriteResGroup4], (instregex "PACKSSWBrr")>;
854def: InstRW<[HWWriteResGroup4], (instregex "PACKUSDWrr")>;
855def: InstRW<[HWWriteResGroup4], (instregex "PACKUSWBrr")>;
856def: InstRW<[HWWriteResGroup4], (instregex "PALIGNRrri")>;
857def: InstRW<[HWWriteResGroup4], (instregex "PBLENDWrri")>;
858def: InstRW<[HWWriteResGroup4], (instregex "PMOVSXBDrr")>;
859def: InstRW<[HWWriteResGroup4], (instregex "PMOVSXBQrr")>;
860def: InstRW<[HWWriteResGroup4], (instregex "PMOVSXBWrr")>;
861def: InstRW<[HWWriteResGroup4], (instregex "PMOVSXDQrr")>;
862def: InstRW<[HWWriteResGroup4], (instregex "PMOVSXWDrr")>;
863def: InstRW<[HWWriteResGroup4], (instregex "PMOVSXWQrr")>;
864def: InstRW<[HWWriteResGroup4], (instregex "PMOVZXBDrr")>;
865def: InstRW<[HWWriteResGroup4], (instregex "PMOVZXBQrr")>;
866def: InstRW<[HWWriteResGroup4], (instregex "PMOVZXBWrr")>;
867def: InstRW<[HWWriteResGroup4], (instregex "PMOVZXDQrr")>;
868def: InstRW<[HWWriteResGroup4], (instregex "PMOVZXWDrr")>;
869def: InstRW<[HWWriteResGroup4], (instregex "PMOVZXWQrr")>;
870def: InstRW<[HWWriteResGroup4], (instregex "PSHUFBrr")>;
871def: InstRW<[HWWriteResGroup4], (instregex "PSHUFDri")>;
872def: InstRW<[HWWriteResGroup4], (instregex "PSHUFHWri")>;
873def: InstRW<[HWWriteResGroup4], (instregex "PSHUFLWri")>;
874def: InstRW<[HWWriteResGroup4], (instregex "PSLLDQri")>;
875def: InstRW<[HWWriteResGroup4], (instregex "PSRLDQri")>;
876def: InstRW<[HWWriteResGroup4], (instregex "PUNPCKHBWrr")>;
877def: InstRW<[HWWriteResGroup4], (instregex "PUNPCKHDQrr")>;
878def: InstRW<[HWWriteResGroup4], (instregex "PUNPCKHQDQrr")>;
879def: InstRW<[HWWriteResGroup4], (instregex "PUNPCKHWDrr")>;
880def: InstRW<[HWWriteResGroup4], (instregex "PUNPCKLBWrr")>;
881def: InstRW<[HWWriteResGroup4], (instregex "PUNPCKLDQrr")>;
882def: InstRW<[HWWriteResGroup4], (instregex "PUNPCKLQDQrr")>;
883def: InstRW<[HWWriteResGroup4], (instregex "PUNPCKLWDrr")>;
884def: InstRW<[HWWriteResGroup4], (instregex "SHUFPDrri")>;
885def: InstRW<[HWWriteResGroup4], (instregex "SHUFPSrri")>;
886def: InstRW<[HWWriteResGroup4], (instregex "UNPCKHPDrr")>;
887def: InstRW<[HWWriteResGroup4], (instregex "UNPCKHPSrr")>;
888def: InstRW<[HWWriteResGroup4], (instregex "UNPCKLPDrr")>;
889def: InstRW<[HWWriteResGroup4], (instregex "UNPCKLPSrr")>;
890def: InstRW<[HWWriteResGroup4], (instregex "VANDNPDYrr")>;
891def: InstRW<[HWWriteResGroup4], (instregex "VANDNPDrr")>;
892def: InstRW<[HWWriteResGroup4], (instregex "VANDNPSYrr")>;
893def: InstRW<[HWWriteResGroup4], (instregex "VANDNPSrr")>;
894def: InstRW<[HWWriteResGroup4], (instregex "VANDPDYrr")>;
895def: InstRW<[HWWriteResGroup4], (instregex "VANDPDrr")>;
896def: InstRW<[HWWriteResGroup4], (instregex "VANDPSYrr")>;
897def: InstRW<[HWWriteResGroup4], (instregex "VANDPSrr")>;
898def: InstRW<[HWWriteResGroup4], (instregex "VBROADCASTSSrr")>;
899def: InstRW<[HWWriteResGroup4], (instregex "VINSERTPSrr")>;
900def: InstRW<[HWWriteResGroup4], (instregex "VMOV64toPQIrr")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000901def: InstRW<[HWWriteResGroup4], (instregex "VMOVAPDYrr")>;
902def: InstRW<[HWWriteResGroup4], (instregex "VMOVAPDrr")>;
903def: InstRW<[HWWriteResGroup4], (instregex "VMOVAPSYrr")>;
904def: InstRW<[HWWriteResGroup4], (instregex "VMOVAPSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000905def: InstRW<[HWWriteResGroup4], (instregex "VMOVDDUPYrr")>;
906def: InstRW<[HWWriteResGroup4], (instregex "VMOVDDUPrr")>;
907def: InstRW<[HWWriteResGroup4], (instregex "VMOVDI2PDIrr")>;
908def: InstRW<[HWWriteResGroup4], (instregex "VMOVHLPSrr")>;
909def: InstRW<[HWWriteResGroup4], (instregex "VMOVLHPSrr")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000910def: InstRW<[HWWriteResGroup4], (instregex "VMOVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000911def: InstRW<[HWWriteResGroup4], (instregex "VMOVSHDUPYrr")>;
912def: InstRW<[HWWriteResGroup4], (instregex "VMOVSHDUPrr")>;
913def: InstRW<[HWWriteResGroup4], (instregex "VMOVSLDUPYrr")>;
914def: InstRW<[HWWriteResGroup4], (instregex "VMOVSLDUPrr")>;
Craig Topper23cc8662018-01-24 17:58:42 +0000915def: InstRW<[HWWriteResGroup4], (instregex "VMOVSSrr")>;
916def: InstRW<[HWWriteResGroup4], (instregex "VMOVUPDYrr")>;
917def: InstRW<[HWWriteResGroup4], (instregex "VMOVUPDrr")>;
918def: InstRW<[HWWriteResGroup4], (instregex "VMOVUPSYrr")>;
919def: InstRW<[HWWriteResGroup4], (instregex "VMOVUPSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000920def: InstRW<[HWWriteResGroup4], (instregex "VORPDYrr")>;
921def: InstRW<[HWWriteResGroup4], (instregex "VORPDrr")>;
922def: InstRW<[HWWriteResGroup4], (instregex "VORPSYrr")>;
923def: InstRW<[HWWriteResGroup4], (instregex "VORPSrr")>;
924def: InstRW<[HWWriteResGroup4], (instregex "VPACKSSDWYrr")>;
925def: InstRW<[HWWriteResGroup4], (instregex "VPACKSSDWrr")>;
926def: InstRW<[HWWriteResGroup4], (instregex "VPACKSSWBYrr")>;
927def: InstRW<[HWWriteResGroup4], (instregex "VPACKSSWBrr")>;
928def: InstRW<[HWWriteResGroup4], (instregex "VPACKUSDWYrr")>;
929def: InstRW<[HWWriteResGroup4], (instregex "VPACKUSDWrr")>;
930def: InstRW<[HWWriteResGroup4], (instregex "VPACKUSWBYrr")>;
931def: InstRW<[HWWriteResGroup4], (instregex "VPACKUSWBrr")>;
932def: InstRW<[HWWriteResGroup4], (instregex "VPALIGNRYrri")>;
933def: InstRW<[HWWriteResGroup4], (instregex "VPALIGNRrri")>;
934def: InstRW<[HWWriteResGroup4], (instregex "VPBLENDWYrri")>;
935def: InstRW<[HWWriteResGroup4], (instregex "VPBLENDWrri")>;
936def: InstRW<[HWWriteResGroup4], (instregex "VPBROADCASTDrr")>;
937def: InstRW<[HWWriteResGroup4], (instregex "VPBROADCASTQrr")>;
938def: InstRW<[HWWriteResGroup4], (instregex "VPERMILPDYri")>;
939def: InstRW<[HWWriteResGroup4], (instregex "VPERMILPDYrr")>;
940def: InstRW<[HWWriteResGroup4], (instregex "VPERMILPDri")>;
941def: InstRW<[HWWriteResGroup4], (instregex "VPERMILPDrr")>;
942def: InstRW<[HWWriteResGroup4], (instregex "VPERMILPSYri")>;
943def: InstRW<[HWWriteResGroup4], (instregex "VPERMILPSYrr")>;
944def: InstRW<[HWWriteResGroup4], (instregex "VPERMILPSri")>;
945def: InstRW<[HWWriteResGroup4], (instregex "VPERMILPSrr")>;
946def: InstRW<[HWWriteResGroup4], (instregex "VPMOVSXBDrr")>;
947def: InstRW<[HWWriteResGroup4], (instregex "VPMOVSXBQrr")>;
948def: InstRW<[HWWriteResGroup4], (instregex "VPMOVSXBWrr")>;
949def: InstRW<[HWWriteResGroup4], (instregex "VPMOVSXDQrr")>;
950def: InstRW<[HWWriteResGroup4], (instregex "VPMOVSXWDrr")>;
951def: InstRW<[HWWriteResGroup4], (instregex "VPMOVSXWQrr")>;
952def: InstRW<[HWWriteResGroup4], (instregex "VPMOVZXBDrr")>;
953def: InstRW<[HWWriteResGroup4], (instregex "VPMOVZXBQrr")>;
954def: InstRW<[HWWriteResGroup4], (instregex "VPMOVZXBWrr")>;
955def: InstRW<[HWWriteResGroup4], (instregex "VPMOVZXDQrr")>;
956def: InstRW<[HWWriteResGroup4], (instregex "VPMOVZXWDrr")>;
957def: InstRW<[HWWriteResGroup4], (instregex "VPMOVZXWQrr")>;
958def: InstRW<[HWWriteResGroup4], (instregex "VPSHUFBYrr")>;
959def: InstRW<[HWWriteResGroup4], (instregex "VPSHUFBrr")>;
960def: InstRW<[HWWriteResGroup4], (instregex "VPSHUFDYri")>;
961def: InstRW<[HWWriteResGroup4], (instregex "VPSHUFDri")>;
962def: InstRW<[HWWriteResGroup4], (instregex "VPSHUFHWYri")>;
963def: InstRW<[HWWriteResGroup4], (instregex "VPSHUFHWri")>;
964def: InstRW<[HWWriteResGroup4], (instregex "VPSHUFLWYri")>;
965def: InstRW<[HWWriteResGroup4], (instregex "VPSHUFLWri")>;
966def: InstRW<[HWWriteResGroup4], (instregex "VPSLLDQYri")>;
967def: InstRW<[HWWriteResGroup4], (instregex "VPSLLDQri")>;
968def: InstRW<[HWWriteResGroup4], (instregex "VPSRLDQYri")>;
969def: InstRW<[HWWriteResGroup4], (instregex "VPSRLDQri")>;
970def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKHBWYrr")>;
971def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKHBWrr")>;
972def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKHDQYrr")>;
973def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKHDQrr")>;
974def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKHQDQYrr")>;
975def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKHQDQrr")>;
976def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKHWDYrr")>;
977def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKHWDrr")>;
978def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKLBWYrr")>;
979def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKLBWrr")>;
980def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKLDQYrr")>;
981def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKLDQrr")>;
982def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKLQDQYrr")>;
983def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKLQDQrr")>;
984def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKLWDYrr")>;
985def: InstRW<[HWWriteResGroup4], (instregex "VPUNPCKLWDrr")>;
986def: InstRW<[HWWriteResGroup4], (instregex "VSHUFPDYrri")>;
987def: InstRW<[HWWriteResGroup4], (instregex "VSHUFPDrri")>;
988def: InstRW<[HWWriteResGroup4], (instregex "VSHUFPSYrri")>;
989def: InstRW<[HWWriteResGroup4], (instregex "VSHUFPSrri")>;
990def: InstRW<[HWWriteResGroup4], (instregex "VUNPCKHPDYrr")>;
991def: InstRW<[HWWriteResGroup4], (instregex "VUNPCKHPDrr")>;
992def: InstRW<[HWWriteResGroup4], (instregex "VUNPCKHPSYrr")>;
993def: InstRW<[HWWriteResGroup4], (instregex "VUNPCKHPSrr")>;
994def: InstRW<[HWWriteResGroup4], (instregex "VUNPCKLPDYrr")>;
995def: InstRW<[HWWriteResGroup4], (instregex "VUNPCKLPDrr")>;
996def: InstRW<[HWWriteResGroup4], (instregex "VUNPCKLPSYrr")>;
997def: InstRW<[HWWriteResGroup4], (instregex "VUNPCKLPSrr")>;
998def: InstRW<[HWWriteResGroup4], (instregex "VXORPDYrr")>;
999def: InstRW<[HWWriteResGroup4], (instregex "VXORPDrr")>;
1000def: InstRW<[HWWriteResGroup4], (instregex "VXORPSYrr")>;
1001def: InstRW<[HWWriteResGroup4], (instregex "VXORPSrr")>;
1002def: InstRW<[HWWriteResGroup4], (instregex "XORPDrr")>;
1003def: InstRW<[HWWriteResGroup4], (instregex "XORPSrr")>;
1004
1005def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
1006 let Latency = 1;
1007 let NumMicroOps = 1;
1008 let ResourceCycles = [1];
1009}
1010def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
1011
1012def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
1013 let Latency = 1;
1014 let NumMicroOps = 1;
1015 let ResourceCycles = [1];
1016}
1017def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP")>;
1018def: InstRW<[HWWriteResGroup6], (instregex "FNOP")>;
1019
1020def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
1021 let Latency = 1;
1022 let NumMicroOps = 1;
1023 let ResourceCycles = [1];
1024}
1025def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8")>;
1026def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)rr")>;
1027def: InstRW<[HWWriteResGroup7], (instregex "BTC(16|32|64)ri8")>;
1028def: InstRW<[HWWriteResGroup7], (instregex "BTC(16|32|64)rr")>;
1029def: InstRW<[HWWriteResGroup7], (instregex "BTR(16|32|64)ri8")>;
1030def: InstRW<[HWWriteResGroup7], (instregex "BTR(16|32|64)rr")>;
1031def: InstRW<[HWWriteResGroup7], (instregex "BTS(16|32|64)ri8")>;
1032def: InstRW<[HWWriteResGroup7], (instregex "BTS(16|32|64)rr")>;
1033def: InstRW<[HWWriteResGroup7], (instregex "CDQ")>;
1034def: InstRW<[HWWriteResGroup7], (instregex "CQO")>;
Craig Topperf4cd9082018-01-19 05:47:32 +00001035def: InstRW<[HWWriteResGroup7], (instregex "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1")>;
1036def: InstRW<[HWWriteResGroup7], (instregex "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001037def: InstRW<[HWWriteResGroup7], (instregex "JMP_1")>;
1038def: InstRW<[HWWriteResGroup7], (instregex "JMP_4")>;
Craig Toppera42a2ba2017-12-16 18:35:31 +00001039def: InstRW<[HWWriteResGroup7], (instregex "RORX(32|64)ri")>;
Craig Topper13a16502018-03-19 00:56:09 +00001040def: InstRW<[HWWriteResGroup7], (instregex "SAR(8|16|32|64)r1")>;
1041def: InstRW<[HWWriteResGroup7], (instregex "SAR(8|16|32|64)ri")>;
Craig Toppera42a2ba2017-12-16 18:35:31 +00001042def: InstRW<[HWWriteResGroup7], (instregex "SARX(32|64)rr")>;
Craig Topperf4cd9082018-01-19 05:47:32 +00001043def: InstRW<[HWWriteResGroup7], (instregex "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)r")>;
Craig Topper13a16502018-03-19 00:56:09 +00001044def: InstRW<[HWWriteResGroup7], (instregex "SHL(8|16|32|64)r1")>;
1045def: InstRW<[HWWriteResGroup7], (instregex "SHL(8|16|32|64)ri")>;
Craig Toppera42a2ba2017-12-16 18:35:31 +00001046def: InstRW<[HWWriteResGroup7], (instregex "SHLX(32|64)rr")>;
Craig Topper13a16502018-03-19 00:56:09 +00001047def: InstRW<[HWWriteResGroup7], (instregex "SHR(8|16|32|64)r1")>;
1048def: InstRW<[HWWriteResGroup7], (instregex "SHR(8|16|32|64)ri")>;
Craig Toppera42a2ba2017-12-16 18:35:31 +00001049def: InstRW<[HWWriteResGroup7], (instregex "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001050
1051def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
1052 let Latency = 1;
1053 let NumMicroOps = 1;
1054 let ResourceCycles = [1];
1055}
Craig Toppera42a2ba2017-12-16 18:35:31 +00001056def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr")>;
1057def: InstRW<[HWWriteResGroup8], (instregex "BLSI(32|64)rr")>;
1058def: InstRW<[HWWriteResGroup8], (instregex "BLSMSK(32|64)rr")>;
1059def: InstRW<[HWWriteResGroup8], (instregex "BLSR(32|64)rr")>;
1060def: InstRW<[HWWriteResGroup8], (instregex "BZHI(32|64)rr")>;
Craig Topper28e55382017-12-10 09:14:42 +00001061def: InstRW<[HWWriteResGroup8], (instregex "LEA(16|32|64)(_32)?r")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001062def: InstRW<[HWWriteResGroup8], (instregex "MMX_PABSBrr")>;
1063def: InstRW<[HWWriteResGroup8], (instregex "MMX_PABSDrr")>;
1064def: InstRW<[HWWriteResGroup8], (instregex "MMX_PABSWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001065def: InstRW<[HWWriteResGroup8], (instregex "MMX_PADDBirr")>;
1066def: InstRW<[HWWriteResGroup8], (instregex "MMX_PADDDirr")>;
1067def: InstRW<[HWWriteResGroup8], (instregex "MMX_PADDQirr")>;
1068def: InstRW<[HWWriteResGroup8], (instregex "MMX_PADDSBirr")>;
1069def: InstRW<[HWWriteResGroup8], (instregex "MMX_PADDSWirr")>;
1070def: InstRW<[HWWriteResGroup8], (instregex "MMX_PADDUSBirr")>;
1071def: InstRW<[HWWriteResGroup8], (instregex "MMX_PADDUSWirr")>;
1072def: InstRW<[HWWriteResGroup8], (instregex "MMX_PADDWirr")>;
1073def: InstRW<[HWWriteResGroup8], (instregex "MMX_PAVGBirr")>;
1074def: InstRW<[HWWriteResGroup8], (instregex "MMX_PAVGWirr")>;
1075def: InstRW<[HWWriteResGroup8], (instregex "MMX_PCMPEQBirr")>;
1076def: InstRW<[HWWriteResGroup8], (instregex "MMX_PCMPEQDirr")>;
1077def: InstRW<[HWWriteResGroup8], (instregex "MMX_PCMPEQWirr")>;
1078def: InstRW<[HWWriteResGroup8], (instregex "MMX_PCMPGTBirr")>;
1079def: InstRW<[HWWriteResGroup8], (instregex "MMX_PCMPGTDirr")>;
1080def: InstRW<[HWWriteResGroup8], (instregex "MMX_PCMPGTWirr")>;
1081def: InstRW<[HWWriteResGroup8], (instregex "MMX_PMAXSWirr")>;
1082def: InstRW<[HWWriteResGroup8], (instregex "MMX_PMAXUBirr")>;
1083def: InstRW<[HWWriteResGroup8], (instregex "MMX_PMINSWirr")>;
1084def: InstRW<[HWWriteResGroup8], (instregex "MMX_PMINUBirr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001085def: InstRW<[HWWriteResGroup8], (instregex "MMX_PSIGNBrr")>;
1086def: InstRW<[HWWriteResGroup8], (instregex "MMX_PSIGNDrr")>;
1087def: InstRW<[HWWriteResGroup8], (instregex "MMX_PSIGNWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001088def: InstRW<[HWWriteResGroup8], (instregex "MMX_PSUBBirr")>;
1089def: InstRW<[HWWriteResGroup8], (instregex "MMX_PSUBDirr")>;
1090def: InstRW<[HWWriteResGroup8], (instregex "MMX_PSUBQirr")>;
1091def: InstRW<[HWWriteResGroup8], (instregex "MMX_PSUBSBirr")>;
1092def: InstRW<[HWWriteResGroup8], (instregex "MMX_PSUBSWirr")>;
1093def: InstRW<[HWWriteResGroup8], (instregex "MMX_PSUBUSBirr")>;
1094def: InstRW<[HWWriteResGroup8], (instregex "MMX_PSUBUSWirr")>;
1095def: InstRW<[HWWriteResGroup8], (instregex "MMX_PSUBWirr")>;
1096def: InstRW<[HWWriteResGroup8], (instregex "PABSBrr")>;
1097def: InstRW<[HWWriteResGroup8], (instregex "PABSDrr")>;
1098def: InstRW<[HWWriteResGroup8], (instregex "PABSWrr")>;
1099def: InstRW<[HWWriteResGroup8], (instregex "PADDBrr")>;
1100def: InstRW<[HWWriteResGroup8], (instregex "PADDDrr")>;
1101def: InstRW<[HWWriteResGroup8], (instregex "PADDQrr")>;
1102def: InstRW<[HWWriteResGroup8], (instregex "PADDSBrr")>;
1103def: InstRW<[HWWriteResGroup8], (instregex "PADDSWrr")>;
1104def: InstRW<[HWWriteResGroup8], (instregex "PADDUSBrr")>;
1105def: InstRW<[HWWriteResGroup8], (instregex "PADDUSWrr")>;
1106def: InstRW<[HWWriteResGroup8], (instregex "PADDWrr")>;
1107def: InstRW<[HWWriteResGroup8], (instregex "PAVGBrr")>;
1108def: InstRW<[HWWriteResGroup8], (instregex "PAVGWrr")>;
1109def: InstRW<[HWWriteResGroup8], (instregex "PCMPEQBrr")>;
1110def: InstRW<[HWWriteResGroup8], (instregex "PCMPEQDrr")>;
1111def: InstRW<[HWWriteResGroup8], (instregex "PCMPEQQrr")>;
1112def: InstRW<[HWWriteResGroup8], (instregex "PCMPEQWrr")>;
1113def: InstRW<[HWWriteResGroup8], (instregex "PCMPGTBrr")>;
1114def: InstRW<[HWWriteResGroup8], (instregex "PCMPGTDrr")>;
1115def: InstRW<[HWWriteResGroup8], (instregex "PCMPGTWrr")>;
1116def: InstRW<[HWWriteResGroup8], (instregex "PMAXSBrr")>;
1117def: InstRW<[HWWriteResGroup8], (instregex "PMAXSDrr")>;
1118def: InstRW<[HWWriteResGroup8], (instregex "PMAXSWrr")>;
1119def: InstRW<[HWWriteResGroup8], (instregex "PMAXUBrr")>;
1120def: InstRW<[HWWriteResGroup8], (instregex "PMAXUDrr")>;
1121def: InstRW<[HWWriteResGroup8], (instregex "PMAXUWrr")>;
1122def: InstRW<[HWWriteResGroup8], (instregex "PMINSBrr")>;
1123def: InstRW<[HWWriteResGroup8], (instregex "PMINSDrr")>;
1124def: InstRW<[HWWriteResGroup8], (instregex "PMINSWrr")>;
1125def: InstRW<[HWWriteResGroup8], (instregex "PMINUBrr")>;
1126def: InstRW<[HWWriteResGroup8], (instregex "PMINUDrr")>;
1127def: InstRW<[HWWriteResGroup8], (instregex "PMINUWrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001128def: InstRW<[HWWriteResGroup8], (instregex "PSIGNBrr")>;
1129def: InstRW<[HWWriteResGroup8], (instregex "PSIGNDrr")>;
1130def: InstRW<[HWWriteResGroup8], (instregex "PSIGNWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001131def: InstRW<[HWWriteResGroup8], (instregex "PSUBBrr")>;
1132def: InstRW<[HWWriteResGroup8], (instregex "PSUBDrr")>;
1133def: InstRW<[HWWriteResGroup8], (instregex "PSUBQrr")>;
1134def: InstRW<[HWWriteResGroup8], (instregex "PSUBSBrr")>;
1135def: InstRW<[HWWriteResGroup8], (instregex "PSUBSWrr")>;
1136def: InstRW<[HWWriteResGroup8], (instregex "PSUBUSBrr")>;
1137def: InstRW<[HWWriteResGroup8], (instregex "PSUBUSWrr")>;
1138def: InstRW<[HWWriteResGroup8], (instregex "PSUBWrr")>;
1139def: InstRW<[HWWriteResGroup8], (instregex "VPABSBYrr")>;
1140def: InstRW<[HWWriteResGroup8], (instregex "VPABSBrr")>;
1141def: InstRW<[HWWriteResGroup8], (instregex "VPABSDYrr")>;
1142def: InstRW<[HWWriteResGroup8], (instregex "VPABSDrr")>;
1143def: InstRW<[HWWriteResGroup8], (instregex "VPABSWYrr")>;
1144def: InstRW<[HWWriteResGroup8], (instregex "VPABSWrr")>;
1145def: InstRW<[HWWriteResGroup8], (instregex "VPADDBYrr")>;
1146def: InstRW<[HWWriteResGroup8], (instregex "VPADDBrr")>;
1147def: InstRW<[HWWriteResGroup8], (instregex "VPADDDYrr")>;
1148def: InstRW<[HWWriteResGroup8], (instregex "VPADDDrr")>;
1149def: InstRW<[HWWriteResGroup8], (instregex "VPADDQYrr")>;
1150def: InstRW<[HWWriteResGroup8], (instregex "VPADDQrr")>;
1151def: InstRW<[HWWriteResGroup8], (instregex "VPADDSBYrr")>;
1152def: InstRW<[HWWriteResGroup8], (instregex "VPADDSBrr")>;
1153def: InstRW<[HWWriteResGroup8], (instregex "VPADDSWYrr")>;
1154def: InstRW<[HWWriteResGroup8], (instregex "VPADDSWrr")>;
1155def: InstRW<[HWWriteResGroup8], (instregex "VPADDUSBYrr")>;
1156def: InstRW<[HWWriteResGroup8], (instregex "VPADDUSBrr")>;
1157def: InstRW<[HWWriteResGroup8], (instregex "VPADDUSWYrr")>;
1158def: InstRW<[HWWriteResGroup8], (instregex "VPADDUSWrr")>;
1159def: InstRW<[HWWriteResGroup8], (instregex "VPADDWYrr")>;
1160def: InstRW<[HWWriteResGroup8], (instregex "VPADDWrr")>;
1161def: InstRW<[HWWriteResGroup8], (instregex "VPAVGBYrr")>;
1162def: InstRW<[HWWriteResGroup8], (instregex "VPAVGBrr")>;
1163def: InstRW<[HWWriteResGroup8], (instregex "VPAVGWYrr")>;
1164def: InstRW<[HWWriteResGroup8], (instregex "VPAVGWrr")>;
1165def: InstRW<[HWWriteResGroup8], (instregex "VPCMPEQBYrr")>;
1166def: InstRW<[HWWriteResGroup8], (instregex "VPCMPEQBrr")>;
1167def: InstRW<[HWWriteResGroup8], (instregex "VPCMPEQDYrr")>;
1168def: InstRW<[HWWriteResGroup8], (instregex "VPCMPEQDrr")>;
1169def: InstRW<[HWWriteResGroup8], (instregex "VPCMPEQQYrr")>;
1170def: InstRW<[HWWriteResGroup8], (instregex "VPCMPEQQrr")>;
1171def: InstRW<[HWWriteResGroup8], (instregex "VPCMPEQWYrr")>;
1172def: InstRW<[HWWriteResGroup8], (instregex "VPCMPEQWrr")>;
1173def: InstRW<[HWWriteResGroup8], (instregex "VPCMPGTBYrr")>;
1174def: InstRW<[HWWriteResGroup8], (instregex "VPCMPGTBrr")>;
1175def: InstRW<[HWWriteResGroup8], (instregex "VPCMPGTDYrr")>;
1176def: InstRW<[HWWriteResGroup8], (instregex "VPCMPGTDrr")>;
1177def: InstRW<[HWWriteResGroup8], (instregex "VPCMPGTWYrr")>;
1178def: InstRW<[HWWriteResGroup8], (instregex "VPCMPGTWrr")>;
1179def: InstRW<[HWWriteResGroup8], (instregex "VPMAXSBYrr")>;
1180def: InstRW<[HWWriteResGroup8], (instregex "VPMAXSBrr")>;
1181def: InstRW<[HWWriteResGroup8], (instregex "VPMAXSDYrr")>;
1182def: InstRW<[HWWriteResGroup8], (instregex "VPMAXSDrr")>;
1183def: InstRW<[HWWriteResGroup8], (instregex "VPMAXSWYrr")>;
1184def: InstRW<[HWWriteResGroup8], (instregex "VPMAXSWrr")>;
1185def: InstRW<[HWWriteResGroup8], (instregex "VPMAXUBYrr")>;
1186def: InstRW<[HWWriteResGroup8], (instregex "VPMAXUBrr")>;
1187def: InstRW<[HWWriteResGroup8], (instregex "VPMAXUDYrr")>;
1188def: InstRW<[HWWriteResGroup8], (instregex "VPMAXUDrr")>;
1189def: InstRW<[HWWriteResGroup8], (instregex "VPMAXUWYrr")>;
1190def: InstRW<[HWWriteResGroup8], (instregex "VPMAXUWrr")>;
1191def: InstRW<[HWWriteResGroup8], (instregex "VPMINSBYrr")>;
1192def: InstRW<[HWWriteResGroup8], (instregex "VPMINSBrr")>;
1193def: InstRW<[HWWriteResGroup8], (instregex "VPMINSDYrr")>;
1194def: InstRW<[HWWriteResGroup8], (instregex "VPMINSDrr")>;
1195def: InstRW<[HWWriteResGroup8], (instregex "VPMINSWYrr")>;
1196def: InstRW<[HWWriteResGroup8], (instregex "VPMINSWrr")>;
1197def: InstRW<[HWWriteResGroup8], (instregex "VPMINUBYrr")>;
1198def: InstRW<[HWWriteResGroup8], (instregex "VPMINUBrr")>;
1199def: InstRW<[HWWriteResGroup8], (instregex "VPMINUDYrr")>;
1200def: InstRW<[HWWriteResGroup8], (instregex "VPMINUDrr")>;
1201def: InstRW<[HWWriteResGroup8], (instregex "VPMINUWYrr")>;
1202def: InstRW<[HWWriteResGroup8], (instregex "VPMINUWrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001203def: InstRW<[HWWriteResGroup8], (instregex "VPSIGNBYrr")>;
1204def: InstRW<[HWWriteResGroup8], (instregex "VPSIGNBrr")>;
1205def: InstRW<[HWWriteResGroup8], (instregex "VPSIGNDYrr")>;
1206def: InstRW<[HWWriteResGroup8], (instregex "VPSIGNDrr")>;
1207def: InstRW<[HWWriteResGroup8], (instregex "VPSIGNWYrr")>;
1208def: InstRW<[HWWriteResGroup8], (instregex "VPSIGNWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001209def: InstRW<[HWWriteResGroup8], (instregex "VPSUBBYrr")>;
1210def: InstRW<[HWWriteResGroup8], (instregex "VPSUBBrr")>;
1211def: InstRW<[HWWriteResGroup8], (instregex "VPSUBDYrr")>;
1212def: InstRW<[HWWriteResGroup8], (instregex "VPSUBDrr")>;
1213def: InstRW<[HWWriteResGroup8], (instregex "VPSUBQYrr")>;
1214def: InstRW<[HWWriteResGroup8], (instregex "VPSUBQrr")>;
1215def: InstRW<[HWWriteResGroup8], (instregex "VPSUBSBYrr")>;
1216def: InstRW<[HWWriteResGroup8], (instregex "VPSUBSBrr")>;
1217def: InstRW<[HWWriteResGroup8], (instregex "VPSUBSWYrr")>;
1218def: InstRW<[HWWriteResGroup8], (instregex "VPSUBSWrr")>;
1219def: InstRW<[HWWriteResGroup8], (instregex "VPSUBUSBYrr")>;
1220def: InstRW<[HWWriteResGroup8], (instregex "VPSUBUSBrr")>;
1221def: InstRW<[HWWriteResGroup8], (instregex "VPSUBUSWYrr")>;
1222def: InstRW<[HWWriteResGroup8], (instregex "VPSUBUSWrr")>;
1223def: InstRW<[HWWriteResGroup8], (instregex "VPSUBWYrr")>;
1224def: InstRW<[HWWriteResGroup8], (instregex "VPSUBWrr")>;
1225
1226def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
1227 let Latency = 1;
1228 let NumMicroOps = 1;
1229 let ResourceCycles = [1];
1230}
1231def: InstRW<[HWWriteResGroup9], (instregex "BLENDPDrri")>;
1232def: InstRW<[HWWriteResGroup9], (instregex "BLENDPSrri")>;
Craig Topper23cc8662018-01-24 17:58:42 +00001233def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001234def: InstRW<[HWWriteResGroup9], (instregex "MMX_PANDNirr")>;
1235def: InstRW<[HWWriteResGroup9], (instregex "MMX_PANDirr")>;
1236def: InstRW<[HWWriteResGroup9], (instregex "MMX_PORirr")>;
1237def: InstRW<[HWWriteResGroup9], (instregex "MMX_PXORirr")>;
Craig Topper23cc8662018-01-24 17:58:42 +00001238def: InstRW<[HWWriteResGroup9], (instregex "MOVDQArr")>;
1239def: InstRW<[HWWriteResGroup9], (instregex "MOVDQUrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001240def: InstRW<[HWWriteResGroup9], (instregex "MOVPQI2QIrr")>;
1241def: InstRW<[HWWriteResGroup9], (instregex "PANDNrr")>;
1242def: InstRW<[HWWriteResGroup9], (instregex "PANDrr")>;
1243def: InstRW<[HWWriteResGroup9], (instregex "PORrr")>;
1244def: InstRW<[HWWriteResGroup9], (instregex "PXORrr")>;
1245def: InstRW<[HWWriteResGroup9], (instregex "VBLENDPDYrri")>;
1246def: InstRW<[HWWriteResGroup9], (instregex "VBLENDPDrri")>;
1247def: InstRW<[HWWriteResGroup9], (instregex "VBLENDPSYrri")>;
1248def: InstRW<[HWWriteResGroup9], (instregex "VBLENDPSrri")>;
Craig Topper23cc8662018-01-24 17:58:42 +00001249def: InstRW<[HWWriteResGroup9], (instregex "VMOVDQAYrr")>;
1250def: InstRW<[HWWriteResGroup9], (instregex "VMOVDQArr")>;
1251def: InstRW<[HWWriteResGroup9], (instregex "VMOVDQUYrr")>;
1252def: InstRW<[HWWriteResGroup9], (instregex "VMOVDQUrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001253def: InstRW<[HWWriteResGroup9], (instregex "VMOVPQI2QIrr")>;
1254def: InstRW<[HWWriteResGroup9], (instregex "VMOVZPQILo2PQIrr")>;
1255def: InstRW<[HWWriteResGroup9], (instregex "VPANDNYrr")>;
1256def: InstRW<[HWWriteResGroup9], (instregex "VPANDNrr")>;
1257def: InstRW<[HWWriteResGroup9], (instregex "VPANDYrr")>;
1258def: InstRW<[HWWriteResGroup9], (instregex "VPANDrr")>;
1259def: InstRW<[HWWriteResGroup9], (instregex "VPBLENDDYrri")>;
1260def: InstRW<[HWWriteResGroup9], (instregex "VPBLENDDrri")>;
1261def: InstRW<[HWWriteResGroup9], (instregex "VPORYrr")>;
1262def: InstRW<[HWWriteResGroup9], (instregex "VPORrr")>;
1263def: InstRW<[HWWriteResGroup9], (instregex "VPXORYrr")>;
1264def: InstRW<[HWWriteResGroup9], (instregex "VPXORrr")>;
1265
1266def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
1267 let Latency = 1;
1268 let NumMicroOps = 1;
1269 let ResourceCycles = [1];
1270}
Craig Topper13a16502018-03-19 00:56:09 +00001271def: InstRW<[HWWriteResGroup10], (instregex "ADD(8|16|32|64)ri")>;
1272def: InstRW<[HWWriteResGroup10], (instregex "ADD(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001273def: InstRW<[HWWriteResGroup10], (instregex "ADD8i8")>;
Craig Topper13a16502018-03-19 00:56:09 +00001274def: InstRW<[HWWriteResGroup10], (instregex "AND(8|16|32|64)ri")>;
1275def: InstRW<[HWWriteResGroup10], (instregex "AND(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001276def: InstRW<[HWWriteResGroup10], (instregex "AND8i8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001277def: InstRW<[HWWriteResGroup10], (instregex "CBW")>;
1278def: InstRW<[HWWriteResGroup10], (instregex "CLC")>;
1279def: InstRW<[HWWriteResGroup10], (instregex "CMC")>;
Craig Topper13a16502018-03-19 00:56:09 +00001280def: InstRW<[HWWriteResGroup10], (instregex "CMP(8|16|32|64)ri")>;
1281def: InstRW<[HWWriteResGroup10], (instregex "CMP(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001282def: InstRW<[HWWriteResGroup10], (instregex "CMP8i8")>;
Craig Topper2d451e72018-03-18 08:38:06 +00001283def: InstRW<[HWWriteResGroup10], (instrs CWDE)>;
Craig Topper13a16502018-03-19 00:56:09 +00001284def: InstRW<[HWWriteResGroup10], (instregex "DEC(8|16|32|64)r")>;
1285def: InstRW<[HWWriteResGroup10], (instregex "INC(8|16|32|64)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001286def: InstRW<[HWWriteResGroup10], (instregex "LAHF")>;
Craig Topper13a16502018-03-19 00:56:09 +00001287def: InstRW<[HWWriteResGroup10], (instregex "MOV(8|16|32|64)rr")>;
Craig Topper81c87092018-01-25 04:45:28 +00001288def: InstRW<[HWWriteResGroup10], (instregex "MOV8ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001289def: InstRW<[HWWriteResGroup10], (instregex "MOVSX(16|32|64)rr16")>;
1290def: InstRW<[HWWriteResGroup10], (instregex "MOVSX(16|32|64)rr32")>;
1291def: InstRW<[HWWriteResGroup10], (instregex "MOVSX(16|32|64)rr8")>;
1292def: InstRW<[HWWriteResGroup10], (instregex "MOVZX(16|32|64)rr16")>;
1293def: InstRW<[HWWriteResGroup10], (instregex "MOVZX(16|32|64)rr8")>;
Craig Topper13a16502018-03-19 00:56:09 +00001294def: InstRW<[HWWriteResGroup10], (instregex "NEG(8|16|32|64)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001295def: InstRW<[HWWriteResGroup10], (instregex "NOOP")>;
Craig Topper13a16502018-03-19 00:56:09 +00001296def: InstRW<[HWWriteResGroup10], (instregex "NOT(8|16|32|64)r")>;
1297def: InstRW<[HWWriteResGroup10], (instregex "OR(8|16|32|64)ri")>;
1298def: InstRW<[HWWriteResGroup10], (instregex "OR(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001299def: InstRW<[HWWriteResGroup10], (instregex "OR8i8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001300def: InstRW<[HWWriteResGroup10], (instregex "SAHF")>;
1301def: InstRW<[HWWriteResGroup10], (instregex "SGDT64m")>;
1302def: InstRW<[HWWriteResGroup10], (instregex "SIDT64m")>;
1303def: InstRW<[HWWriteResGroup10], (instregex "SLDT64m")>;
1304def: InstRW<[HWWriteResGroup10], (instregex "SMSW16m")>;
1305def: InstRW<[HWWriteResGroup10], (instregex "STC")>;
1306def: InstRW<[HWWriteResGroup10], (instregex "STRm")>;
Craig Topper13a16502018-03-19 00:56:09 +00001307def: InstRW<[HWWriteResGroup10], (instregex "SUB(8|16|32|64)ri")>;
1308def: InstRW<[HWWriteResGroup10], (instregex "SUB(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001309def: InstRW<[HWWriteResGroup10], (instregex "SUB8i8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001310def: InstRW<[HWWriteResGroup10], (instregex "SYSCALL")>;
Craig Topper13a16502018-03-19 00:56:09 +00001311def: InstRW<[HWWriteResGroup10], (instregex "TEST(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001312def: InstRW<[HWWriteResGroup10], (instregex "TEST8i8")>;
1313def: InstRW<[HWWriteResGroup10], (instregex "TEST8ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001314def: InstRW<[HWWriteResGroup10], (instregex "XCHG(16|32|64)rr")>;
Craig Topper13a16502018-03-19 00:56:09 +00001315def: InstRW<[HWWriteResGroup10], (instregex "XOR(8|16|32|64)ri")>;
1316def: InstRW<[HWWriteResGroup10], (instregex "XOR(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001317def: InstRW<[HWWriteResGroup10], (instregex "XOR8i8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001318
1319def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001320 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001321 let NumMicroOps = 2;
1322 let ResourceCycles = [1,1];
1323}
1324def: InstRW<[HWWriteResGroup11], (instregex "CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001325def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm")>;
1326def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLQrm")>;
1327def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLWrm")>;
1328def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSRADrm")>;
1329def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSRAWrm")>;
1330def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSRLDrm")>;
1331def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSRLQrm")>;
1332def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSRLWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001333def: InstRW<[HWWriteResGroup11], (instregex "VCVTPH2PSrm")>;
1334def: InstRW<[HWWriteResGroup11], (instregex "VCVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001335
Gadi Haber2cf601f2017-12-08 09:48:44 +00001336def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
1337 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001338 let NumMicroOps = 2;
1339 let ResourceCycles = [1,1];
1340}
Gadi Haber2cf601f2017-12-08 09:48:44 +00001341def: InstRW<[HWWriteResGroup11_1], (instregex "CVTSS2SDrm")>;
1342def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm")>;
1343def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTSS2SDrm")>;
1344def: InstRW<[HWWriteResGroup11_1], (instregex "VPSLLVQrm")>;
1345def: InstRW<[HWWriteResGroup11_1], (instregex "VPSRLVQrm")>;
1346def: InstRW<[HWWriteResGroup11_1], (instregex "VTESTPDrm")>;
1347def: InstRW<[HWWriteResGroup11_1], (instregex "VTESTPSrm")>;
1348
1349def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1350 let Latency = 8;
1351 let NumMicroOps = 2;
1352 let ResourceCycles = [1,1];
1353}
1354def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm")>;
1355def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLQYrm")>;
1356def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLVQYrm")>;
1357def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLWYrm")>;
1358def: InstRW<[HWWriteResGroup11_2], (instregex "VPSRADYrm")>;
1359def: InstRW<[HWWriteResGroup11_2], (instregex "VPSRAWYrm")>;
1360def: InstRW<[HWWriteResGroup11_2], (instregex "VPSRLDYrm")>;
1361def: InstRW<[HWWriteResGroup11_2], (instregex "VPSRLQYrm")>;
1362def: InstRW<[HWWriteResGroup11_2], (instregex "VPSRLVQYrm")>;
1363def: InstRW<[HWWriteResGroup11_2], (instregex "VPSRLWYrm")>;
1364def: InstRW<[HWWriteResGroup11_2], (instregex "VTESTPDYrm")>;
1365def: InstRW<[HWWriteResGroup11_2], (instregex "VTESTPSYrm")>;
1366
1367def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
1368 let Latency = 8;
1369 let NumMicroOps = 2;
1370 let ResourceCycles = [1,1];
1371}
1372def: InstRW<[HWWriteResGroup12], (instregex "ADDSDrm")>;
1373def: InstRW<[HWWriteResGroup12], (instregex "ADDSSrm")>;
1374def: InstRW<[HWWriteResGroup12], (instregex "BSF(16|32|64)rm")>;
1375def: InstRW<[HWWriteResGroup12], (instregex "BSR(16|32|64)rm")>;
Craig Topper6c659102017-12-10 09:14:37 +00001376def: InstRW<[HWWriteResGroup12], (instregex "CMPSDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001377def: InstRW<[HWWriteResGroup12], (instregex "CMPSSrm")>;
1378def: InstRW<[HWWriteResGroup12], (instregex "COMISDrm")>;
1379def: InstRW<[HWWriteResGroup12], (instregex "COMISSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001380def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m")>;
1381def: InstRW<[HWWriteResGroup12], (instregex "FCOM64m")>;
1382def: InstRW<[HWWriteResGroup12], (instregex "FCOMP32m")>;
1383def: InstRW<[HWWriteResGroup12], (instregex "FCOMP64m")>;
Craig Topperb369cdb2018-01-25 06:57:42 +00001384def: InstRW<[HWWriteResGroup12], (instrs IMUL16m, IMUL32m, IMUL64m)>;
1385def: InstRW<[HWWriteResGroup12], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8, IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
1386def: InstRW<[HWWriteResGroup12], (instrs IMUL8m)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001387def: InstRW<[HWWriteResGroup12], (instregex "LZCNT(16|32|64)rm")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00001388def: InstRW<[HWWriteResGroup12], (instregex "MAX(C?)SDrm")>;
1389def: InstRW<[HWWriteResGroup12], (instregex "MAX(C?)SSrm")>;
1390def: InstRW<[HWWriteResGroup12], (instregex "MIN(C?)SDrm")>;
1391def: InstRW<[HWWriteResGroup12], (instregex "MIN(C?)SSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001392def: InstRW<[HWWriteResGroup12], (instregex "MMX_CVTPI2PSirm")>;
1393def: InstRW<[HWWriteResGroup12], (instregex "MMX_CVTPS2PIirm")>;
1394def: InstRW<[HWWriteResGroup12], (instregex "MMX_CVTTPS2PIirm")>;
Craig Topperb369cdb2018-01-25 06:57:42 +00001395def: InstRW<[HWWriteResGroup12], (instrs MUL16m, MUL32m, MUL64m)>;
1396def: InstRW<[HWWriteResGroup12], (instrs MUL8m)>;
Craig Toppera42a2ba2017-12-16 18:35:31 +00001397def: InstRW<[HWWriteResGroup12], (instregex "PDEP(32|64)rm")>;
1398def: InstRW<[HWWriteResGroup12], (instregex "PEXT(32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001399def: InstRW<[HWWriteResGroup12], (instregex "POPCNT(16|32|64)rm")>;
1400def: InstRW<[HWWriteResGroup12], (instregex "SUBSDrm")>;
1401def: InstRW<[HWWriteResGroup12], (instregex "SUBSSrm")>;
1402def: InstRW<[HWWriteResGroup12], (instregex "TZCNT(16|32|64)rm")>;
1403def: InstRW<[HWWriteResGroup12], (instregex "UCOMISDrm")>;
1404def: InstRW<[HWWriteResGroup12], (instregex "UCOMISSrm")>;
1405def: InstRW<[HWWriteResGroup12], (instregex "VADDSDrm")>;
1406def: InstRW<[HWWriteResGroup12], (instregex "VADDSSrm")>;
1407def: InstRW<[HWWriteResGroup12], (instregex "VCMPSDrm")>;
1408def: InstRW<[HWWriteResGroup12], (instregex "VCMPSSrm")>;
1409def: InstRW<[HWWriteResGroup12], (instregex "VCOMISDrm")>;
1410def: InstRW<[HWWriteResGroup12], (instregex "VCOMISSrm")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00001411def: InstRW<[HWWriteResGroup12], (instregex "VMAX(C?)SDrm")>;
1412def: InstRW<[HWWriteResGroup12], (instregex "VMAX(C?)SSrm")>;
1413def: InstRW<[HWWriteResGroup12], (instregex "VMIN(C?)SDrm")>;
1414def: InstRW<[HWWriteResGroup12], (instregex "VMIN(C?)SSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001415def: InstRW<[HWWriteResGroup12], (instregex "VSUBSDrm")>;
1416def: InstRW<[HWWriteResGroup12], (instregex "VSUBSSrm")>;
1417def: InstRW<[HWWriteResGroup12], (instregex "VUCOMISDrm")>;
1418def: InstRW<[HWWriteResGroup12], (instregex "VUCOMISSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001419
1420def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001421 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001422 let NumMicroOps = 2;
1423 let ResourceCycles = [1,1];
1424}
1425def: InstRW<[HWWriteResGroup13], (instregex "ANDNPDrm")>;
1426def: InstRW<[HWWriteResGroup13], (instregex "ANDNPSrm")>;
1427def: InstRW<[HWWriteResGroup13], (instregex "ANDPDrm")>;
1428def: InstRW<[HWWriteResGroup13], (instregex "ANDPSrm")>;
1429def: InstRW<[HWWriteResGroup13], (instregex "INSERTPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001430def: InstRW<[HWWriteResGroup13], (instregex "ORPDrm")>;
1431def: InstRW<[HWWriteResGroup13], (instregex "ORPSrm")>;
1432def: InstRW<[HWWriteResGroup13], (instregex "PACKSSDWrm")>;
1433def: InstRW<[HWWriteResGroup13], (instregex "PACKSSWBrm")>;
1434def: InstRW<[HWWriteResGroup13], (instregex "PACKUSDWrm")>;
1435def: InstRW<[HWWriteResGroup13], (instregex "PACKUSWBrm")>;
1436def: InstRW<[HWWriteResGroup13], (instregex "PALIGNRrmi")>;
1437def: InstRW<[HWWriteResGroup13], (instregex "PBLENDWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001438def: InstRW<[HWWriteResGroup13], (instregex "PSHUFBrm")>;
1439def: InstRW<[HWWriteResGroup13], (instregex "PSHUFDmi")>;
1440def: InstRW<[HWWriteResGroup13], (instregex "PSHUFHWmi")>;
1441def: InstRW<[HWWriteResGroup13], (instregex "PSHUFLWmi")>;
1442def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKHBWrm")>;
1443def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKHDQrm")>;
1444def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKHQDQrm")>;
1445def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKHWDrm")>;
1446def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLBWrm")>;
1447def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLDQrm")>;
1448def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLQDQrm")>;
1449def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm")>;
1450def: InstRW<[HWWriteResGroup13], (instregex "SHUFPDrmi")>;
1451def: InstRW<[HWWriteResGroup13], (instregex "SHUFPSrmi")>;
1452def: InstRW<[HWWriteResGroup13], (instregex "UNPCKHPDrm")>;
1453def: InstRW<[HWWriteResGroup13], (instregex "UNPCKHPSrm")>;
1454def: InstRW<[HWWriteResGroup13], (instregex "UNPCKLPDrm")>;
1455def: InstRW<[HWWriteResGroup13], (instregex "UNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001456def: InstRW<[HWWriteResGroup13], (instregex "VANDNPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001457def: InstRW<[HWWriteResGroup13], (instregex "VANDNPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001458def: InstRW<[HWWriteResGroup13], (instregex "VANDPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001459def: InstRW<[HWWriteResGroup13], (instregex "VANDPSrm")>;
1460def: InstRW<[HWWriteResGroup13], (instregex "VINSERTPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001461def: InstRW<[HWWriteResGroup13], (instregex "VORPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001462def: InstRW<[HWWriteResGroup13], (instregex "VORPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001463def: InstRW<[HWWriteResGroup13], (instregex "VPACKSSDWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001464def: InstRW<[HWWriteResGroup13], (instregex "VPACKSSWBrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001465def: InstRW<[HWWriteResGroup13], (instregex "VPACKUSDWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001466def: InstRW<[HWWriteResGroup13], (instregex "VPACKUSWBrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001467def: InstRW<[HWWriteResGroup13], (instregex "VPALIGNRrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001468def: InstRW<[HWWriteResGroup13], (instregex "VPBLENDWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001469def: InstRW<[HWWriteResGroup13], (instregex "VPERMILPDmi")>;
1470def: InstRW<[HWWriteResGroup13], (instregex "VPERMILPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001471def: InstRW<[HWWriteResGroup13], (instregex "VPERMILPSmi")>;
1472def: InstRW<[HWWriteResGroup13], (instregex "VPERMILPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001473def: InstRW<[HWWriteResGroup13], (instregex "VPSHUFBrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001474def: InstRW<[HWWriteResGroup13], (instregex "VPSHUFDmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001475def: InstRW<[HWWriteResGroup13], (instregex "VPSHUFHWmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001476def: InstRW<[HWWriteResGroup13], (instregex "VPSHUFLWmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001477def: InstRW<[HWWriteResGroup13], (instregex "VPUNPCKHBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001478def: InstRW<[HWWriteResGroup13], (instregex "VPUNPCKHDQrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001479def: InstRW<[HWWriteResGroup13], (instregex "VPUNPCKHQDQrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001480def: InstRW<[HWWriteResGroup13], (instregex "VPUNPCKHWDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001481def: InstRW<[HWWriteResGroup13], (instregex "VPUNPCKLBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001482def: InstRW<[HWWriteResGroup13], (instregex "VPUNPCKLDQrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001483def: InstRW<[HWWriteResGroup13], (instregex "VPUNPCKLQDQrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001484def: InstRW<[HWWriteResGroup13], (instregex "VPUNPCKLWDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001485def: InstRW<[HWWriteResGroup13], (instregex "VSHUFPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001486def: InstRW<[HWWriteResGroup13], (instregex "VSHUFPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001487def: InstRW<[HWWriteResGroup13], (instregex "VUNPCKHPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001488def: InstRW<[HWWriteResGroup13], (instregex "VUNPCKHPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001489def: InstRW<[HWWriteResGroup13], (instregex "VUNPCKLPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001490def: InstRW<[HWWriteResGroup13], (instregex "VUNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001491def: InstRW<[HWWriteResGroup13], (instregex "VXORPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001492def: InstRW<[HWWriteResGroup13], (instregex "VXORPSrm")>;
1493def: InstRW<[HWWriteResGroup13], (instregex "XORPDrm")>;
1494def: InstRW<[HWWriteResGroup13], (instregex "XORPSrm")>;
1495
Gadi Haber2cf601f2017-12-08 09:48:44 +00001496def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1497 let Latency = 8;
1498 let NumMicroOps = 2;
1499 let ResourceCycles = [1,1];
1500}
1501def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm")>;
1502def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPSYrm")>;
1503def: InstRW<[HWWriteResGroup13_1], (instregex "VANDPDYrm")>;
1504def: InstRW<[HWWriteResGroup13_1], (instregex "VANDPSYrm")>;
1505def: InstRW<[HWWriteResGroup13_1], (instregex "VORPDYrm")>;
1506def: InstRW<[HWWriteResGroup13_1], (instregex "VORPSYrm")>;
1507def: InstRW<[HWWriteResGroup13_1], (instregex "VPACKSSDWYrm")>;
1508def: InstRW<[HWWriteResGroup13_1], (instregex "VPACKSSWBYrm")>;
1509def: InstRW<[HWWriteResGroup13_1], (instregex "VPACKUSDWYrm")>;
1510def: InstRW<[HWWriteResGroup13_1], (instregex "VPACKUSWBYrm")>;
1511def: InstRW<[HWWriteResGroup13_1], (instregex "VPALIGNRYrmi")>;
1512def: InstRW<[HWWriteResGroup13_1], (instregex "VPBLENDWYrmi")>;
1513def: InstRW<[HWWriteResGroup13_1], (instregex "VPERMILPDYmi")>;
1514def: InstRW<[HWWriteResGroup13_1], (instregex "VPERMILPDYrm")>;
1515def: InstRW<[HWWriteResGroup13_1], (instregex "VPERMILPSYmi")>;
1516def: InstRW<[HWWriteResGroup13_1], (instregex "VPERMILPSYrm")>;
1517def: InstRW<[HWWriteResGroup13_1], (instregex "VPMOVSXBDYrm")>;
1518def: InstRW<[HWWriteResGroup13_1], (instregex "VPMOVSXBQYrm")>;
1519def: InstRW<[HWWriteResGroup13_1], (instregex "VPMOVSXWQYrm")>;
1520def: InstRW<[HWWriteResGroup13_1], (instregex "VPSHUFBYrm")>;
1521def: InstRW<[HWWriteResGroup13_1], (instregex "VPSHUFDYmi")>;
1522def: InstRW<[HWWriteResGroup13_1], (instregex "VPSHUFHWYmi")>;
1523def: InstRW<[HWWriteResGroup13_1], (instregex "VPSHUFLWYmi")>;
1524def: InstRW<[HWWriteResGroup13_1], (instregex "VPUNPCKHBWYrm")>;
1525def: InstRW<[HWWriteResGroup13_1], (instregex "VPUNPCKHDQYrm")>;
1526def: InstRW<[HWWriteResGroup13_1], (instregex "VPUNPCKHQDQYrm")>;
1527def: InstRW<[HWWriteResGroup13_1], (instregex "VPUNPCKHWDYrm")>;
1528def: InstRW<[HWWriteResGroup13_1], (instregex "VPUNPCKLBWYrm")>;
1529def: InstRW<[HWWriteResGroup13_1], (instregex "VPUNPCKLDQYrm")>;
1530def: InstRW<[HWWriteResGroup13_1], (instregex "VPUNPCKLQDQYrm")>;
1531def: InstRW<[HWWriteResGroup13_1], (instregex "VPUNPCKLWDYrm")>;
1532def: InstRW<[HWWriteResGroup13_1], (instregex "VSHUFPDYrmi")>;
1533def: InstRW<[HWWriteResGroup13_1], (instregex "VSHUFPSYrmi")>;
1534def: InstRW<[HWWriteResGroup13_1], (instregex "VUNPCKHPDYrm")>;
1535def: InstRW<[HWWriteResGroup13_1], (instregex "VUNPCKHPSYrm")>;
1536def: InstRW<[HWWriteResGroup13_1], (instregex "VUNPCKLPDYrm")>;
1537def: InstRW<[HWWriteResGroup13_1], (instregex "VUNPCKLPSYrm")>;
1538def: InstRW<[HWWriteResGroup13_1], (instregex "VXORPDYrm")>;
1539def: InstRW<[HWWriteResGroup13_1], (instregex "VXORPSYrm")>;
1540
1541def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1542 let Latency = 6;
1543 let NumMicroOps = 2;
1544 let ResourceCycles = [1,1];
1545}
Craig Topperdbddac02018-01-25 04:45:30 +00001546def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001547def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PINSRWrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001548def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PSHUFBrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001549def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PSHUFWmi")>;
1550def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PUNPCKHBWirm")>;
1551def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PUNPCKHDQirm")>;
1552def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PUNPCKHWDirm")>;
1553def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PUNPCKLBWirm")>;
1554def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PUNPCKLDQirm")>;
1555def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PUNPCKLWDirm")>;
1556def: InstRW<[HWWriteResGroup13_2], (instregex "MOVHPDrm")>;
1557def: InstRW<[HWWriteResGroup13_2], (instregex "MOVHPSrm")>;
1558def: InstRW<[HWWriteResGroup13_2], (instregex "MOVLPDrm")>;
1559def: InstRW<[HWWriteResGroup13_2], (instregex "MOVLPSrm")>;
1560def: InstRW<[HWWriteResGroup13_2], (instregex "PINSRBrm")>;
1561def: InstRW<[HWWriteResGroup13_2], (instregex "PINSRDrm")>;
1562def: InstRW<[HWWriteResGroup13_2], (instregex "PINSRQrm")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001563def: InstRW<[HWWriteResGroup13_2], (instregex "PINSRWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001564def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVSXBDrm")>;
1565def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVSXBQrm")>;
1566def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVSXBWrm")>;
1567def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVSXDQrm")>;
1568def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVSXWDrm")>;
1569def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVSXWQrm")>;
1570def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVZXBDrm")>;
1571def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVZXBQrm")>;
1572def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVZXBWrm")>;
1573def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVZXDQrm")>;
1574def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVZXWDrm")>;
1575def: InstRW<[HWWriteResGroup13_2], (instregex "PMOVZXWQrm")>;
1576def: InstRW<[HWWriteResGroup13_2], (instregex "VMOVHPDrm")>;
1577def: InstRW<[HWWriteResGroup13_2], (instregex "VMOVHPSrm")>;
1578def: InstRW<[HWWriteResGroup13_2], (instregex "VMOVLPDrm")>;
1579def: InstRW<[HWWriteResGroup13_2], (instregex "VMOVLPSrm")>;
1580def: InstRW<[HWWriteResGroup13_2], (instregex "VPINSRBrm")>;
1581def: InstRW<[HWWriteResGroup13_2], (instregex "VPINSRDrm")>;
1582def: InstRW<[HWWriteResGroup13_2], (instregex "VPINSRQrm")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001583def: InstRW<[HWWriteResGroup13_2], (instregex "VPINSRWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001584def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVSXBDrm")>;
1585def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVSXBQrm")>;
1586def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVSXBWrm")>;
1587def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVSXDQrm")>;
1588def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVSXWDrm")>;
1589def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVSXWQrm")>;
1590def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVZXBDrm")>;
1591def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVZXBQrm")>;
1592def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVZXBWrm")>;
1593def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVZXDQrm")>;
1594def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVZXWDrm")>;
1595def: InstRW<[HWWriteResGroup13_2], (instregex "VPMOVZXWQrm")>;
1596
Gadi Haberd76f7b82017-08-28 10:04:16 +00001597def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001598 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001599 let NumMicroOps = 2;
1600 let ResourceCycles = [1,1];
1601}
1602def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64")>;
1603def: InstRW<[HWWriteResGroup14], (instregex "JMP(16|32|64)m")>;
1604
1605def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001606 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001607 let NumMicroOps = 2;
1608 let ResourceCycles = [1,1];
1609}
1610def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8")>;
1611def: InstRW<[HWWriteResGroup15], (instregex "RORX32mi")>;
1612def: InstRW<[HWWriteResGroup15], (instregex "RORX64mi")>;
1613def: InstRW<[HWWriteResGroup15], (instregex "SARX32rm")>;
1614def: InstRW<[HWWriteResGroup15], (instregex "SARX64rm")>;
1615def: InstRW<[HWWriteResGroup15], (instregex "SHLX32rm")>;
1616def: InstRW<[HWWriteResGroup15], (instregex "SHLX64rm")>;
1617def: InstRW<[HWWriteResGroup15], (instregex "SHRX32rm")>;
1618def: InstRW<[HWWriteResGroup15], (instregex "SHRX64rm")>;
1619
1620def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001621 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001622 let NumMicroOps = 2;
1623 let ResourceCycles = [1,1];
1624}
Craig Toppera42a2ba2017-12-16 18:35:31 +00001625def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm")>;
1626def: InstRW<[HWWriteResGroup16], (instregex "BLSI(32|64)rm")>;
1627def: InstRW<[HWWriteResGroup16], (instregex "BLSMSK(32|64)rm")>;
1628def: InstRW<[HWWriteResGroup16], (instregex "BLSR(32|64)rm")>;
1629def: InstRW<[HWWriteResGroup16], (instregex "BZHI(32|64)rm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001630def: InstRW<[HWWriteResGroup16], (instregex "MMX_PABSBrm")>;
1631def: InstRW<[HWWriteResGroup16], (instregex "MMX_PABSDrm")>;
1632def: InstRW<[HWWriteResGroup16], (instregex "MMX_PABSWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001633def: InstRW<[HWWriteResGroup16], (instregex "MMX_PADDBirm")>;
1634def: InstRW<[HWWriteResGroup16], (instregex "MMX_PADDDirm")>;
1635def: InstRW<[HWWriteResGroup16], (instregex "MMX_PADDQirm")>;
1636def: InstRW<[HWWriteResGroup16], (instregex "MMX_PADDSBirm")>;
1637def: InstRW<[HWWriteResGroup16], (instregex "MMX_PADDSWirm")>;
1638def: InstRW<[HWWriteResGroup16], (instregex "MMX_PADDUSBirm")>;
1639def: InstRW<[HWWriteResGroup16], (instregex "MMX_PADDUSWirm")>;
1640def: InstRW<[HWWriteResGroup16], (instregex "MMX_PADDWirm")>;
1641def: InstRW<[HWWriteResGroup16], (instregex "MMX_PAVGBirm")>;
1642def: InstRW<[HWWriteResGroup16], (instregex "MMX_PAVGWirm")>;
1643def: InstRW<[HWWriteResGroup16], (instregex "MMX_PCMPEQBirm")>;
1644def: InstRW<[HWWriteResGroup16], (instregex "MMX_PCMPEQDirm")>;
1645def: InstRW<[HWWriteResGroup16], (instregex "MMX_PCMPEQWirm")>;
1646def: InstRW<[HWWriteResGroup16], (instregex "MMX_PCMPGTBirm")>;
1647def: InstRW<[HWWriteResGroup16], (instregex "MMX_PCMPGTDirm")>;
1648def: InstRW<[HWWriteResGroup16], (instregex "MMX_PCMPGTWirm")>;
1649def: InstRW<[HWWriteResGroup16], (instregex "MMX_PMAXSWirm")>;
1650def: InstRW<[HWWriteResGroup16], (instregex "MMX_PMAXUBirm")>;
1651def: InstRW<[HWWriteResGroup16], (instregex "MMX_PMINSWirm")>;
1652def: InstRW<[HWWriteResGroup16], (instregex "MMX_PMINUBirm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001653def: InstRW<[HWWriteResGroup16], (instregex "MMX_PSIGNBrm")>;
1654def: InstRW<[HWWriteResGroup16], (instregex "MMX_PSIGNDrm")>;
1655def: InstRW<[HWWriteResGroup16], (instregex "MMX_PSIGNWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001656def: InstRW<[HWWriteResGroup16], (instregex "MMX_PSUBBirm")>;
1657def: InstRW<[HWWriteResGroup16], (instregex "MMX_PSUBDirm")>;
1658def: InstRW<[HWWriteResGroup16], (instregex "MMX_PSUBQirm")>;
1659def: InstRW<[HWWriteResGroup16], (instregex "MMX_PSUBSBirm")>;
1660def: InstRW<[HWWriteResGroup16], (instregex "MMX_PSUBSWirm")>;
1661def: InstRW<[HWWriteResGroup16], (instregex "MMX_PSUBUSBirm")>;
1662def: InstRW<[HWWriteResGroup16], (instregex "MMX_PSUBUSWirm")>;
1663def: InstRW<[HWWriteResGroup16], (instregex "MMX_PSUBWirm")>;
1664def: InstRW<[HWWriteResGroup16], (instregex "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001665
1666def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1667 let Latency = 7;
1668 let NumMicroOps = 2;
1669 let ResourceCycles = [1,1];
1670}
1671def: InstRW<[HWWriteResGroup16_1], (instregex "PABSBrm")>;
1672def: InstRW<[HWWriteResGroup16_1], (instregex "PABSDrm")>;
1673def: InstRW<[HWWriteResGroup16_1], (instregex "PABSWrm")>;
1674def: InstRW<[HWWriteResGroup16_1], (instregex "PADDBrm")>;
1675def: InstRW<[HWWriteResGroup16_1], (instregex "PADDDrm")>;
1676def: InstRW<[HWWriteResGroup16_1], (instregex "PADDQrm")>;
1677def: InstRW<[HWWriteResGroup16_1], (instregex "PADDSBrm")>;
1678def: InstRW<[HWWriteResGroup16_1], (instregex "PADDSWrm")>;
1679def: InstRW<[HWWriteResGroup16_1], (instregex "PADDUSBrm")>;
1680def: InstRW<[HWWriteResGroup16_1], (instregex "PADDUSWrm")>;
1681def: InstRW<[HWWriteResGroup16_1], (instregex "PADDWrm")>;
1682def: InstRW<[HWWriteResGroup16_1], (instregex "PAVGBrm")>;
1683def: InstRW<[HWWriteResGroup16_1], (instregex "PAVGWrm")>;
1684def: InstRW<[HWWriteResGroup16_1], (instregex "PCMPEQBrm")>;
1685def: InstRW<[HWWriteResGroup16_1], (instregex "PCMPEQDrm")>;
1686def: InstRW<[HWWriteResGroup16_1], (instregex "PCMPEQQrm")>;
1687def: InstRW<[HWWriteResGroup16_1], (instregex "PCMPEQWrm")>;
1688def: InstRW<[HWWriteResGroup16_1], (instregex "PCMPGTBrm")>;
1689def: InstRW<[HWWriteResGroup16_1], (instregex "PCMPGTDrm")>;
1690def: InstRW<[HWWriteResGroup16_1], (instregex "PCMPGTWrm")>;
1691def: InstRW<[HWWriteResGroup16_1], (instregex "PMAXSBrm")>;
1692def: InstRW<[HWWriteResGroup16_1], (instregex "PMAXSDrm")>;
1693def: InstRW<[HWWriteResGroup16_1], (instregex "PMAXSWrm")>;
1694def: InstRW<[HWWriteResGroup16_1], (instregex "PMAXUBrm")>;
1695def: InstRW<[HWWriteResGroup16_1], (instregex "PMAXUDrm")>;
1696def: InstRW<[HWWriteResGroup16_1], (instregex "PMAXUWrm")>;
1697def: InstRW<[HWWriteResGroup16_1], (instregex "PMINSBrm")>;
1698def: InstRW<[HWWriteResGroup16_1], (instregex "PMINSDrm")>;
1699def: InstRW<[HWWriteResGroup16_1], (instregex "PMINSWrm")>;
1700def: InstRW<[HWWriteResGroup16_1], (instregex "PMINUBrm")>;
1701def: InstRW<[HWWriteResGroup16_1], (instregex "PMINUDrm")>;
1702def: InstRW<[HWWriteResGroup16_1], (instregex "PMINUWrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001703def: InstRW<[HWWriteResGroup16_1], (instregex "PSIGNBrm")>;
1704def: InstRW<[HWWriteResGroup16_1], (instregex "PSIGNDrm")>;
1705def: InstRW<[HWWriteResGroup16_1], (instregex "PSIGNWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001706def: InstRW<[HWWriteResGroup16_1], (instregex "PSUBBrm")>;
1707def: InstRW<[HWWriteResGroup16_1], (instregex "PSUBDrm")>;
1708def: InstRW<[HWWriteResGroup16_1], (instregex "PSUBQrm")>;
1709def: InstRW<[HWWriteResGroup16_1], (instregex "PSUBSBrm")>;
1710def: InstRW<[HWWriteResGroup16_1], (instregex "PSUBSWrm")>;
1711def: InstRW<[HWWriteResGroup16_1], (instregex "PSUBUSBrm")>;
1712def: InstRW<[HWWriteResGroup16_1], (instregex "PSUBUSWrm")>;
1713def: InstRW<[HWWriteResGroup16_1], (instregex "PSUBWrm")>;
1714def: InstRW<[HWWriteResGroup16_1], (instregex "VPABSBrm")>;
1715def: InstRW<[HWWriteResGroup16_1], (instregex "VPABSDrm")>;
1716def: InstRW<[HWWriteResGroup16_1], (instregex "VPABSWrm")>;
1717def: InstRW<[HWWriteResGroup16_1], (instregex "VPADDBrm")>;
1718def: InstRW<[HWWriteResGroup16_1], (instregex "VPADDDrm")>;
1719def: InstRW<[HWWriteResGroup16_1], (instregex "VPADDQrm")>;
1720def: InstRW<[HWWriteResGroup16_1], (instregex "VPADDSBrm")>;
1721def: InstRW<[HWWriteResGroup16_1], (instregex "VPADDSWrm")>;
1722def: InstRW<[HWWriteResGroup16_1], (instregex "VPADDUSBrm")>;
1723def: InstRW<[HWWriteResGroup16_1], (instregex "VPADDUSWrm")>;
1724def: InstRW<[HWWriteResGroup16_1], (instregex "VPADDWrm")>;
1725def: InstRW<[HWWriteResGroup16_1], (instregex "VPAVGBrm")>;
1726def: InstRW<[HWWriteResGroup16_1], (instregex "VPAVGWrm")>;
1727def: InstRW<[HWWriteResGroup16_1], (instregex "VPCMPEQBrm")>;
1728def: InstRW<[HWWriteResGroup16_1], (instregex "VPCMPEQDrm")>;
1729def: InstRW<[HWWriteResGroup16_1], (instregex "VPCMPEQQrm")>;
1730def: InstRW<[HWWriteResGroup16_1], (instregex "VPCMPEQWrm")>;
1731def: InstRW<[HWWriteResGroup16_1], (instregex "VPCMPGTBrm")>;
1732def: InstRW<[HWWriteResGroup16_1], (instregex "VPCMPGTDrm")>;
1733def: InstRW<[HWWriteResGroup16_1], (instregex "VPCMPGTWrm")>;
1734def: InstRW<[HWWriteResGroup16_1], (instregex "VPMAXSBrm")>;
1735def: InstRW<[HWWriteResGroup16_1], (instregex "VPMAXSDrm")>;
1736def: InstRW<[HWWriteResGroup16_1], (instregex "VPMAXSWrm")>;
1737def: InstRW<[HWWriteResGroup16_1], (instregex "VPMAXUBrm")>;
1738def: InstRW<[HWWriteResGroup16_1], (instregex "VPMAXUDrm")>;
1739def: InstRW<[HWWriteResGroup16_1], (instregex "VPMAXUWrm")>;
1740def: InstRW<[HWWriteResGroup16_1], (instregex "VPMINSBrm")>;
1741def: InstRW<[HWWriteResGroup16_1], (instregex "VPMINSDrm")>;
1742def: InstRW<[HWWriteResGroup16_1], (instregex "VPMINSWrm")>;
1743def: InstRW<[HWWriteResGroup16_1], (instregex "VPMINUBrm")>;
1744def: InstRW<[HWWriteResGroup16_1], (instregex "VPMINUDrm")>;
1745def: InstRW<[HWWriteResGroup16_1], (instregex "VPMINUWrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001746def: InstRW<[HWWriteResGroup16_1], (instregex "VPSIGNBrm")>;
1747def: InstRW<[HWWriteResGroup16_1], (instregex "VPSIGNDrm")>;
1748def: InstRW<[HWWriteResGroup16_1], (instregex "VPSIGNWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001749def: InstRW<[HWWriteResGroup16_1], (instregex "VPSUBBrm")>;
1750def: InstRW<[HWWriteResGroup16_1], (instregex "VPSUBDrm")>;
1751def: InstRW<[HWWriteResGroup16_1], (instregex "VPSUBQrm")>;
1752def: InstRW<[HWWriteResGroup16_1], (instregex "VPSUBSBrm")>;
1753def: InstRW<[HWWriteResGroup16_1], (instregex "VPSUBSWrm")>;
1754def: InstRW<[HWWriteResGroup16_1], (instregex "VPSUBUSBrm")>;
1755def: InstRW<[HWWriteResGroup16_1], (instregex "VPSUBUSWrm")>;
1756def: InstRW<[HWWriteResGroup16_1], (instregex "VPSUBWrm")>;
1757
1758def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1759 let Latency = 8;
1760 let NumMicroOps = 2;
1761 let ResourceCycles = [1,1];
1762}
1763def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm")>;
1764def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSDYrm")>;
1765def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSWYrm")>;
1766def: InstRW<[HWWriteResGroup16_2], (instregex "VPADDBYrm")>;
1767def: InstRW<[HWWriteResGroup16_2], (instregex "VPADDDYrm")>;
1768def: InstRW<[HWWriteResGroup16_2], (instregex "VPADDQYrm")>;
1769def: InstRW<[HWWriteResGroup16_2], (instregex "VPADDSBYrm")>;
1770def: InstRW<[HWWriteResGroup16_2], (instregex "VPADDSWYrm")>;
1771def: InstRW<[HWWriteResGroup16_2], (instregex "VPADDUSBYrm")>;
1772def: InstRW<[HWWriteResGroup16_2], (instregex "VPADDUSWYrm")>;
1773def: InstRW<[HWWriteResGroup16_2], (instregex "VPADDWYrm")>;
1774def: InstRW<[HWWriteResGroup16_2], (instregex "VPAVGBYrm")>;
1775def: InstRW<[HWWriteResGroup16_2], (instregex "VPAVGWYrm")>;
1776def: InstRW<[HWWriteResGroup16_2], (instregex "VPCMPEQBYrm")>;
1777def: InstRW<[HWWriteResGroup16_2], (instregex "VPCMPEQDYrm")>;
1778def: InstRW<[HWWriteResGroup16_2], (instregex "VPCMPEQQYrm")>;
1779def: InstRW<[HWWriteResGroup16_2], (instregex "VPCMPEQWYrm")>;
1780def: InstRW<[HWWriteResGroup16_2], (instregex "VPCMPGTBYrm")>;
1781def: InstRW<[HWWriteResGroup16_2], (instregex "VPCMPGTDYrm")>;
1782def: InstRW<[HWWriteResGroup16_2], (instregex "VPCMPGTWYrm")>;
1783def: InstRW<[HWWriteResGroup16_2], (instregex "VPMAXSBYrm")>;
1784def: InstRW<[HWWriteResGroup16_2], (instregex "VPMAXSDYrm")>;
1785def: InstRW<[HWWriteResGroup16_2], (instregex "VPMAXSWYrm")>;
1786def: InstRW<[HWWriteResGroup16_2], (instregex "VPMAXUBYrm")>;
1787def: InstRW<[HWWriteResGroup16_2], (instregex "VPMAXUDYrm")>;
1788def: InstRW<[HWWriteResGroup16_2], (instregex "VPMAXUWYrm")>;
1789def: InstRW<[HWWriteResGroup16_2], (instregex "VPMINSBYrm")>;
1790def: InstRW<[HWWriteResGroup16_2], (instregex "VPMINSDYrm")>;
1791def: InstRW<[HWWriteResGroup16_2], (instregex "VPMINSWYrm")>;
1792def: InstRW<[HWWriteResGroup16_2], (instregex "VPMINUBYrm")>;
1793def: InstRW<[HWWriteResGroup16_2], (instregex "VPMINUDYrm")>;
1794def: InstRW<[HWWriteResGroup16_2], (instregex "VPMINUWYrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00001795def: InstRW<[HWWriteResGroup16_2], (instregex "VPSIGNBYrm")>;
1796def: InstRW<[HWWriteResGroup16_2], (instregex "VPSIGNDYrm")>;
1797def: InstRW<[HWWriteResGroup16_2], (instregex "VPSIGNWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001798def: InstRW<[HWWriteResGroup16_2], (instregex "VPSUBBYrm")>;
1799def: InstRW<[HWWriteResGroup16_2], (instregex "VPSUBDYrm")>;
1800def: InstRW<[HWWriteResGroup16_2], (instregex "VPSUBQYrm")>;
1801def: InstRW<[HWWriteResGroup16_2], (instregex "VPSUBSBYrm")>;
1802def: InstRW<[HWWriteResGroup16_2], (instregex "VPSUBSWYrm")>;
1803def: InstRW<[HWWriteResGroup16_2], (instregex "VPSUBUSBYrm")>;
1804def: InstRW<[HWWriteResGroup16_2], (instregex "VPSUBUSWYrm")>;
1805def: InstRW<[HWWriteResGroup16_2], (instregex "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001806
1807def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001808 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001809 let NumMicroOps = 2;
1810 let ResourceCycles = [1,1];
1811}
1812def: InstRW<[HWWriteResGroup17], (instregex "BLENDPDrmi")>;
1813def: InstRW<[HWWriteResGroup17], (instregex "BLENDPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001814def: InstRW<[HWWriteResGroup17], (instregex "PANDNrm")>;
1815def: InstRW<[HWWriteResGroup17], (instregex "PANDrm")>;
1816def: InstRW<[HWWriteResGroup17], (instregex "PORrm")>;
1817def: InstRW<[HWWriteResGroup17], (instregex "PXORrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001818def: InstRW<[HWWriteResGroup17], (instregex "VBLENDPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001819def: InstRW<[HWWriteResGroup17], (instregex "VBLENDPSrmi")>;
1820def: InstRW<[HWWriteResGroup17], (instregex "VINSERTF128rm")>;
1821def: InstRW<[HWWriteResGroup17], (instregex "VINSERTI128rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001822def: InstRW<[HWWriteResGroup17], (instregex "VPANDNrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001823def: InstRW<[HWWriteResGroup17], (instregex "VPANDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001824def: InstRW<[HWWriteResGroup17], (instregex "VPBLENDDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001825def: InstRW<[HWWriteResGroup17], (instregex "VPORrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001826def: InstRW<[HWWriteResGroup17], (instregex "VPXORrm")>;
1827
Gadi Haber2cf601f2017-12-08 09:48:44 +00001828def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1829 let Latency = 6;
1830 let NumMicroOps = 2;
1831 let ResourceCycles = [1,1];
1832}
1833def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm")>;
1834def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDirm")>;
1835def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PORirm")>;
1836def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PXORirm")>;
1837
1838def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1839 let Latency = 8;
1840 let NumMicroOps = 2;
1841 let ResourceCycles = [1,1];
1842}
1843def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi")>;
1844def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPSYrmi")>;
1845def: InstRW<[HWWriteResGroup17_2], (instregex "VPANDNYrm")>;
1846def: InstRW<[HWWriteResGroup17_2], (instregex "VPANDYrm")>;
1847def: InstRW<[HWWriteResGroup17_2], (instregex "VPBLENDDYrmi")>;
1848def: InstRW<[HWWriteResGroup17_2], (instregex "VPORYrm")>;
1849def: InstRW<[HWWriteResGroup17_2], (instregex "VPXORYrm")>;
1850
Gadi Haberd76f7b82017-08-28 10:04:16 +00001851def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001852 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001853 let NumMicroOps = 2;
1854 let ResourceCycles = [1,1];
1855}
Craig Topper13a16502018-03-19 00:56:09 +00001856def: InstRW<[HWWriteResGroup18], (instregex "ADD(8|16|32|64)rm")>;
1857def: InstRW<[HWWriteResGroup18], (instregex "AND(8|16|32|64)rm")>;
1858def: InstRW<[HWWriteResGroup18], (instregex "CMP(8|16|32|64)mi")>;
1859def: InstRW<[HWWriteResGroup18], (instregex "CMP(8|16|32|64)mr")>;
1860def: InstRW<[HWWriteResGroup18], (instregex "CMP(8|16|32|64)rm")>;
1861def: InstRW<[HWWriteResGroup18], (instregex "OR(8|16|32|64)rm")>;
Craig Topper2d451e72018-03-18 08:38:06 +00001862def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
1863def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Craig Topper13a16502018-03-19 00:56:09 +00001864def: InstRW<[HWWriteResGroup18], (instregex "SUB(8|16|32|64)rm")>;
1865def: InstRW<[HWWriteResGroup18], (instregex "TEST(8|16|32|64)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001866def: InstRW<[HWWriteResGroup18], (instregex "TEST8mi")>;
Craig Topper13a16502018-03-19 00:56:09 +00001867def: InstRW<[HWWriteResGroup18], (instregex "XOR(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001868
1869def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001870 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001871 let NumMicroOps = 2;
1872 let ResourceCycles = [1,1];
1873}
1874def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1875
1876def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001877 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001878 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001879 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001880}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001881def: InstRW<[HWWriteResGroup20], (instregex "EXTRACTPSmr")>;
1882def: InstRW<[HWWriteResGroup20], (instregex "PEXTRBmr")>;
1883def: InstRW<[HWWriteResGroup20], (instregex "PEXTRDmr")>;
1884def: InstRW<[HWWriteResGroup20], (instregex "PEXTRQmr")>;
1885def: InstRW<[HWWriteResGroup20], (instregex "PEXTRWmr")>;
1886def: InstRW<[HWWriteResGroup20], (instregex "STMXCSR")>;
1887def: InstRW<[HWWriteResGroup20], (instregex "VEXTRACTPSmr")>;
1888def: InstRW<[HWWriteResGroup20], (instregex "VPEXTRBmr")>;
1889def: InstRW<[HWWriteResGroup20], (instregex "VPEXTRDmr")>;
1890def: InstRW<[HWWriteResGroup20], (instregex "VPEXTRQmr")>;
1891def: InstRW<[HWWriteResGroup20], (instregex "VPEXTRWmr")>;
1892def: InstRW<[HWWriteResGroup20], (instregex "VSTMXCSR")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001893
Gadi Haberd76f7b82017-08-28 10:04:16 +00001894def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001895 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001896 let NumMicroOps = 3;
1897 let ResourceCycles = [1,1,1];
1898}
1899def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001900
Gadi Haberd76f7b82017-08-28 10:04:16 +00001901def HWWriteResGroup22 : SchedWriteRes<[HWPort4,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001902 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001903 let NumMicroOps = 3;
1904 let ResourceCycles = [1,1,1];
1905}
Craig Topperf4cd9082018-01-19 05:47:32 +00001906def: InstRW<[HWWriteResGroup22], (instregex "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001907
Gadi Haberd76f7b82017-08-28 10:04:16 +00001908def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001909 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001910 let NumMicroOps = 3;
1911 let ResourceCycles = [1,1,1];
1912}
1913def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1914
1915def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001916 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001917 let NumMicroOps = 3;
1918 let ResourceCycles = [1,1,1];
1919}
1920def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1921
1922def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001923 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001924 let NumMicroOps = 3;
1925 let ResourceCycles = [1,1,1];
1926}
Craig Topper2d451e72018-03-18 08:38:06 +00001927def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
1928def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001929def: InstRW<[HWWriteResGroup24], (instregex "PUSH64i8")>;
1930def: InstRW<[HWWriteResGroup24], (instregex "STOSB")>;
1931def: InstRW<[HWWriteResGroup24], (instregex "STOSL")>;
1932def: InstRW<[HWWriteResGroup24], (instregex "STOSQ")>;
1933def: InstRW<[HWWriteResGroup24], (instregex "STOSW")>;
1934
1935def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001936 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001937 let NumMicroOps = 4;
1938 let ResourceCycles = [1,1,1,1];
1939}
1940def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8")>;
1941def: InstRW<[HWWriteResGroup25], (instregex "BTR(16|32|64)mi8")>;
1942def: InstRW<[HWWriteResGroup25], (instregex "BTS(16|32|64)mi8")>;
Craig Topper13a16502018-03-19 00:56:09 +00001943def: InstRW<[HWWriteResGroup25], (instregex "SAR(8|16|32|64)m1")>;
1944def: InstRW<[HWWriteResGroup25], (instregex "SAR(8|16|32|64)mi")>;
1945def: InstRW<[HWWriteResGroup25], (instregex "SHL(8|16|32|64)m1")>;
1946def: InstRW<[HWWriteResGroup25], (instregex "SHL(8|16|32|64)mi")>;
1947def: InstRW<[HWWriteResGroup25], (instregex "SHR(8|16|32|64)m1")>;
1948def: InstRW<[HWWriteResGroup25], (instregex "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001949
1950def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001951 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001952 let NumMicroOps = 4;
1953 let ResourceCycles = [1,1,1,1];
1954}
Craig Topper13a16502018-03-19 00:56:09 +00001955def: InstRW<[HWWriteResGroup26], (instregex "ADD(8|16|32|64)mi")>;
1956def: InstRW<[HWWriteResGroup26], (instregex "ADD(8|16|32|64)mr")>;
1957def: InstRW<[HWWriteResGroup26], (instregex "AND(8|16|32|64)mi")>;
1958def: InstRW<[HWWriteResGroup26], (instregex "AND(8|16|32|64)mr")>;
1959def: InstRW<[HWWriteResGroup26], (instregex "DEC(8|16|32|64)m")>;
1960def: InstRW<[HWWriteResGroup26], (instregex "INC(8|16|32|64)m")>;
1961def: InstRW<[HWWriteResGroup26], (instregex "NEG(8|16|32|64)m")>;
1962def: InstRW<[HWWriteResGroup26], (instregex "NOT(8|16|32|64)m")>;
1963def: InstRW<[HWWriteResGroup26], (instregex "OR(8|16|32|64)mi")>;
1964def: InstRW<[HWWriteResGroup26], (instregex "OR(8|16|32|64)mr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001965def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm")>;
1966def: InstRW<[HWWriteResGroup26], (instregex "PUSH(16|32|64)rmm")>;
Craig Topper13a16502018-03-19 00:56:09 +00001967def: InstRW<[HWWriteResGroup26], (instregex "SUB(8|16|32|64)mi")>;
1968def: InstRW<[HWWriteResGroup26], (instregex "SUB(8|16|32|64)mr")>;
1969def: InstRW<[HWWriteResGroup26], (instregex "XOR(8|16|32|64)mi")>;
1970def: InstRW<[HWWriteResGroup26], (instregex "XOR(8|16|32|64)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001971
1972def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001973 let Latency = 2;
1974 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001975 let ResourceCycles = [2];
1976}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001977def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0")>;
1978def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPSrr0")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001979def: InstRW<[HWWriteResGroup27], (instregex "MMX_PINSRWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001980def: InstRW<[HWWriteResGroup27], (instregex "PBLENDVBrr0")>;
1981def: InstRW<[HWWriteResGroup27], (instregex "PINSRBrr")>;
1982def: InstRW<[HWWriteResGroup27], (instregex "PINSRDrr")>;
1983def: InstRW<[HWWriteResGroup27], (instregex "PINSRQrr")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001984def: InstRW<[HWWriteResGroup27], (instregex "PINSRWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001985def: InstRW<[HWWriteResGroup27], (instregex "VBLENDVPDYrr")>;
1986def: InstRW<[HWWriteResGroup27], (instregex "VBLENDVPDrr")>;
1987def: InstRW<[HWWriteResGroup27], (instregex "VBLENDVPSYrr")>;
1988def: InstRW<[HWWriteResGroup27], (instregex "VBLENDVPSrr")>;
1989def: InstRW<[HWWriteResGroup27], (instregex "VPBLENDVBYrr")>;
1990def: InstRW<[HWWriteResGroup27], (instregex "VPBLENDVBrr")>;
1991def: InstRW<[HWWriteResGroup27], (instregex "VPINSRBrr")>;
1992def: InstRW<[HWWriteResGroup27], (instregex "VPINSRDrr")>;
1993def: InstRW<[HWWriteResGroup27], (instregex "VPINSRQrr")>;
Craig Topperb85b4842018-01-24 17:58:51 +00001994def: InstRW<[HWWriteResGroup27], (instregex "VPINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001995
Gadi Haberd76f7b82017-08-28 10:04:16 +00001996def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1997 let Latency = 2;
1998 let NumMicroOps = 2;
1999 let ResourceCycles = [2];
2000}
2001def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
2002
2003def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
2004 let Latency = 2;
2005 let NumMicroOps = 2;
2006 let ResourceCycles = [2];
2007}
Craig Topper13a16502018-03-19 00:56:09 +00002008def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1")>;
2009def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)ri")>;
2010def: InstRW<[HWWriteResGroup29], (instregex "ROR(8|16|32|64)r1")>;
2011def: InstRW<[HWWriteResGroup29], (instregex "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002012
2013def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
2014 let Latency = 2;
2015 let NumMicroOps = 2;
2016 let ResourceCycles = [2];
2017}
2018def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
2019def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
2020def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
2021def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
2022
2023def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
2024 let Latency = 2;
2025 let NumMicroOps = 2;
2026 let ResourceCycles = [1,1];
2027}
2028def: InstRW<[HWWriteResGroup31], (instregex "CVTPS2PDrr")>;
2029def: InstRW<[HWWriteResGroup31], (instregex "CVTSS2SDrr")>;
2030def: InstRW<[HWWriteResGroup31], (instregex "EXTRACTPSrr")>;
Craig Topperb85b4842018-01-24 17:58:51 +00002031def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002032def: InstRW<[HWWriteResGroup31], (instregex "PEXTRBrr")>;
2033def: InstRW<[HWWriteResGroup31], (instregex "PEXTRDrr")>;
2034def: InstRW<[HWWriteResGroup31], (instregex "PEXTRQrr")>;
Craig Topperb85b4842018-01-24 17:58:51 +00002035def: InstRW<[HWWriteResGroup31], (instregex "PEXTRWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002036def: InstRW<[HWWriteResGroup31], (instregex "PSLLDrr")>;
2037def: InstRW<[HWWriteResGroup31], (instregex "PSLLQrr")>;
2038def: InstRW<[HWWriteResGroup31], (instregex "PSLLWrr")>;
2039def: InstRW<[HWWriteResGroup31], (instregex "PSRADrr")>;
2040def: InstRW<[HWWriteResGroup31], (instregex "PSRAWrr")>;
2041def: InstRW<[HWWriteResGroup31], (instregex "PSRLDrr")>;
2042def: InstRW<[HWWriteResGroup31], (instregex "PSRLQrr")>;
2043def: InstRW<[HWWriteResGroup31], (instregex "PSRLWrr")>;
2044def: InstRW<[HWWriteResGroup31], (instregex "PTESTrr")>;
2045def: InstRW<[HWWriteResGroup31], (instregex "VCVTPH2PSYrr")>;
2046def: InstRW<[HWWriteResGroup31], (instregex "VCVTPH2PSrr")>;
2047def: InstRW<[HWWriteResGroup31], (instregex "VCVTPS2PDrr")>;
2048def: InstRW<[HWWriteResGroup31], (instregex "VCVTSS2SDrr")>;
2049def: InstRW<[HWWriteResGroup31], (instregex "VEXTRACTPSrr")>;
2050def: InstRW<[HWWriteResGroup31], (instregex "VPEXTRBrr")>;
2051def: InstRW<[HWWriteResGroup31], (instregex "VPEXTRDrr")>;
2052def: InstRW<[HWWriteResGroup31], (instregex "VPEXTRQrr")>;
Craig Topperb85b4842018-01-24 17:58:51 +00002053def: InstRW<[HWWriteResGroup31], (instregex "VPEXTRWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002054def: InstRW<[HWWriteResGroup31], (instregex "VPSLLDrr")>;
2055def: InstRW<[HWWriteResGroup31], (instregex "VPSLLQrr")>;
2056def: InstRW<[HWWriteResGroup31], (instregex "VPSLLWrr")>;
2057def: InstRW<[HWWriteResGroup31], (instregex "VPSRADrr")>;
2058def: InstRW<[HWWriteResGroup31], (instregex "VPSRAWrr")>;
2059def: InstRW<[HWWriteResGroup31], (instregex "VPSRLDrr")>;
2060def: InstRW<[HWWriteResGroup31], (instregex "VPSRLQrr")>;
2061def: InstRW<[HWWriteResGroup31], (instregex "VPSRLWrr")>;
2062def: InstRW<[HWWriteResGroup31], (instregex "VPTESTrr")>;
2063
2064def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
2065 let Latency = 2;
2066 let NumMicroOps = 2;
2067 let ResourceCycles = [1,1];
2068}
2069def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
2070
2071def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
2072 let Latency = 2;
2073 let NumMicroOps = 2;
2074 let ResourceCycles = [1,1];
2075}
2076def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
2077
2078def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
2079 let Latency = 2;
2080 let NumMicroOps = 2;
2081 let ResourceCycles = [1,1];
2082}
Craig Toppera42a2ba2017-12-16 18:35:31 +00002083def: InstRW<[HWWriteResGroup34], (instregex "BEXTR(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002084def: InstRW<[HWWriteResGroup34], (instregex "BSWAP(16|32|64)r")>;
2085
2086def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
2087 let Latency = 2;
2088 let NumMicroOps = 2;
2089 let ResourceCycles = [1,1];
2090}
Craig Topper13a16502018-03-19 00:56:09 +00002091def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri")>;
2092def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002093def: InstRW<[HWWriteResGroup35], (instregex "ADC8i8")>;
Craig Topperf4cd9082018-01-19 05:47:32 +00002094def: InstRW<[HWWriteResGroup35], (instregex "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002095def: InstRW<[HWWriteResGroup35], (instrs CWD)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002096def: InstRW<[HWWriteResGroup35], (instregex "JRCXZ")>;
Craig Topper13a16502018-03-19 00:56:09 +00002097def: InstRW<[HWWriteResGroup35], (instregex "SBB(8|16|32|64)ri")>;
2098def: InstRW<[HWWriteResGroup35], (instregex "SBB(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002099def: InstRW<[HWWriteResGroup35], (instregex "SBB8i8")>;
Craig Topperf4cd9082018-01-19 05:47:32 +00002100def: InstRW<[HWWriteResGroup35], (instregex "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002101
2102def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002103 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002104 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002105 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002106}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002107def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0")>;
2108def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPSrm0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002109def: InstRW<[HWWriteResGroup36], (instregex "PBLENDVBrm0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002110def: InstRW<[HWWriteResGroup36], (instregex "VBLENDVPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002111def: InstRW<[HWWriteResGroup36], (instregex "VBLENDVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002112def: InstRW<[HWWriteResGroup36], (instregex "VMASKMOVPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002113def: InstRW<[HWWriteResGroup36], (instregex "VMASKMOVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002114def: InstRW<[HWWriteResGroup36], (instregex "VPBLENDVBrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002115def: InstRW<[HWWriteResGroup36], (instregex "VPMASKMOVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002116def: InstRW<[HWWriteResGroup36], (instregex "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002117
Gadi Haber2cf601f2017-12-08 09:48:44 +00002118def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
2119 let Latency = 9;
2120 let NumMicroOps = 3;
2121 let ResourceCycles = [2,1];
2122}
2123def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm")>;
2124def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPSYrm")>;
2125def: InstRW<[HWWriteResGroup36_1], (instregex "VMASKMOVPDYrm")>;
2126def: InstRW<[HWWriteResGroup36_1], (instregex "VMASKMOVPSYrm")>;
2127def: InstRW<[HWWriteResGroup36_1], (instregex "VPBLENDVBYrm")>;
2128def: InstRW<[HWWriteResGroup36_1], (instregex "VPMASKMOVDYrm")>;
2129def: InstRW<[HWWriteResGroup36_1], (instregex "VPMASKMOVQYrm")>;
2130
2131def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
2132 let Latency = 7;
2133 let NumMicroOps = 3;
2134 let ResourceCycles = [2,1];
2135}
2136def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm")>;
2137def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSWBirm")>;
2138def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKUSWBirm")>;
2139
Gadi Haberd76f7b82017-08-28 10:04:16 +00002140def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002141 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002142 let NumMicroOps = 3;
2143 let ResourceCycles = [1,2];
2144}
2145def: InstRW<[HWWriteResGroup37], (instregex "LEAVE64")>;
2146def: InstRW<[HWWriteResGroup37], (instregex "SCASB")>;
2147def: InstRW<[HWWriteResGroup37], (instregex "SCASL")>;
2148def: InstRW<[HWWriteResGroup37], (instregex "SCASQ")>;
2149def: InstRW<[HWWriteResGroup37], (instregex "SCASW")>;
2150
2151def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002152 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002153 let NumMicroOps = 3;
2154 let ResourceCycles = [1,1,1];
2155}
2156def: InstRW<[HWWriteResGroup38], (instregex "PSLLDrm")>;
2157def: InstRW<[HWWriteResGroup38], (instregex "PSLLQrm")>;
2158def: InstRW<[HWWriteResGroup38], (instregex "PSLLWrm")>;
2159def: InstRW<[HWWriteResGroup38], (instregex "PSRADrm")>;
2160def: InstRW<[HWWriteResGroup38], (instregex "PSRAWrm")>;
2161def: InstRW<[HWWriteResGroup38], (instregex "PSRLDrm")>;
2162def: InstRW<[HWWriteResGroup38], (instregex "PSRLQrm")>;
2163def: InstRW<[HWWriteResGroup38], (instregex "PSRLWrm")>;
2164def: InstRW<[HWWriteResGroup38], (instregex "PTESTrm")>;
2165def: InstRW<[HWWriteResGroup38], (instregex "VPSLLDrm")>;
2166def: InstRW<[HWWriteResGroup38], (instregex "VPSLLQrm")>;
2167def: InstRW<[HWWriteResGroup38], (instregex "VPSLLWrm")>;
2168def: InstRW<[HWWriteResGroup38], (instregex "VPSRADrm")>;
2169def: InstRW<[HWWriteResGroup38], (instregex "VPSRAWrm")>;
2170def: InstRW<[HWWriteResGroup38], (instregex "VPSRLDrm")>;
2171def: InstRW<[HWWriteResGroup38], (instregex "VPSRLQrm")>;
2172def: InstRW<[HWWriteResGroup38], (instregex "VPSRLWrm")>;
2173def: InstRW<[HWWriteResGroup38], (instregex "VPTESTrm")>;
2174
2175def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002176 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002177 let NumMicroOps = 3;
2178 let ResourceCycles = [1,1,1];
2179}
2180def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
2181
2182def HWWriteResGroup40 : SchedWriteRes<[HWPort0,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002183 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002184 let NumMicroOps = 3;
2185 let ResourceCycles = [1,1,1];
2186}
2187def: InstRW<[HWWriteResGroup40], (instregex "LDMXCSR")>;
2188def: InstRW<[HWWriteResGroup40], (instregex "VLDMXCSR")>;
2189
2190def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002191 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002192 let NumMicroOps = 3;
2193 let ResourceCycles = [1,1,1];
2194}
2195def: InstRW<[HWWriteResGroup41], (instregex "LRETQ")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002196def: InstRW<[HWWriteResGroup41], (instregex "RETL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002197def: InstRW<[HWWriteResGroup41], (instregex "RETQ")>;
2198
2199def HWWriteResGroup42 : SchedWriteRes<[HWPort23,HWPort06,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002200 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002201 let NumMicroOps = 3;
2202 let ResourceCycles = [1,1,1];
2203}
Craig Toppera42a2ba2017-12-16 18:35:31 +00002204def: InstRW<[HWWriteResGroup42], (instregex "BEXTR(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002205
2206def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002207 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002208 let NumMicroOps = 3;
2209 let ResourceCycles = [1,1,1];
2210}
Craig Topper13a16502018-03-19 00:56:09 +00002211def: InstRW<[HWWriteResGroup43], (instregex "ADC(8|16|32|64)rm")>;
Craig Topperf4cd9082018-01-19 05:47:32 +00002212def: InstRW<[HWWriteResGroup43], (instregex "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rm")>;
Craig Topper13a16502018-03-19 00:56:09 +00002213def: InstRW<[HWWriteResGroup43], (instregex "SBB(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002214
2215def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002216 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002217 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002218 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002219}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002220def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002221
Gadi Haberd76f7b82017-08-28 10:04:16 +00002222def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002223 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002224 let NumMicroOps = 4;
2225 let ResourceCycles = [1,1,1,1];
2226}
2227def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32")>;
Craig Topperf4cd9082018-01-19 05:47:32 +00002228def: InstRW<[HWWriteResGroup45], (instregex "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002229
2230def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002231 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002232 let NumMicroOps = 5;
2233 let ResourceCycles = [1,1,1,2];
2234}
Craig Topper13a16502018-03-19 00:56:09 +00002235def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1")>;
2236def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)mi")>;
2237def: InstRW<[HWWriteResGroup46], (instregex "ROR(8|16|32|64)m1")>;
2238def: InstRW<[HWWriteResGroup46], (instregex "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002239
2240def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002241 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002242 let NumMicroOps = 5;
2243 let ResourceCycles = [1,1,1,2];
2244}
Craig Topper13a16502018-03-19 00:56:09 +00002245def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002246
2247def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002248 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002249 let NumMicroOps = 5;
2250 let ResourceCycles = [1,1,1,1,1];
2251}
2252def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m")>;
2253def: InstRW<[HWWriteResGroup48], (instregex "FARCALL64")>;
2254
2255def HWWriteResGroup49 : SchedWriteRes<[HWPort0]> {
2256 let Latency = 3;
2257 let NumMicroOps = 1;
2258 let ResourceCycles = [1];
2259}
2260def: InstRW<[HWWriteResGroup49], (instregex "MOVMSKPDrr")>;
2261def: InstRW<[HWWriteResGroup49], (instregex "MOVMSKPSrr")>;
2262def: InstRW<[HWWriteResGroup49], (instregex "PMOVMSKBrr")>;
2263def: InstRW<[HWWriteResGroup49], (instregex "VMOVMSKPDYrr")>;
2264def: InstRW<[HWWriteResGroup49], (instregex "VMOVMSKPDrr")>;
2265def: InstRW<[HWWriteResGroup49], (instregex "VMOVMSKPSYrr")>;
2266def: InstRW<[HWWriteResGroup49], (instregex "VMOVMSKPSrr")>;
2267def: InstRW<[HWWriteResGroup49], (instregex "VPMOVMSKBYrr")>;
2268def: InstRW<[HWWriteResGroup49], (instregex "VPMOVMSKBrr")>;
2269
2270def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
2271 let Latency = 3;
2272 let NumMicroOps = 1;
2273 let ResourceCycles = [1];
2274}
2275def: InstRW<[HWWriteResGroup50], (instregex "ADDPDrr")>;
2276def: InstRW<[HWWriteResGroup50], (instregex "ADDPSrr")>;
2277def: InstRW<[HWWriteResGroup50], (instregex "ADDSDrr")>;
2278def: InstRW<[HWWriteResGroup50], (instregex "ADDSSrr")>;
2279def: InstRW<[HWWriteResGroup50], (instregex "ADDSUBPDrr")>;
2280def: InstRW<[HWWriteResGroup50], (instregex "ADDSUBPSrr")>;
2281def: InstRW<[HWWriteResGroup50], (instregex "ADD_FPrST0")>;
2282def: InstRW<[HWWriteResGroup50], (instregex "ADD_FST0r")>;
2283def: InstRW<[HWWriteResGroup50], (instregex "ADD_FrST0")>;
2284def: InstRW<[HWWriteResGroup50], (instregex "BSF(16|32|64)rr")>;
2285def: InstRW<[HWWriteResGroup50], (instregex "BSR(16|32|64)rr")>;
2286def: InstRW<[HWWriteResGroup50], (instregex "CMPPDrri")>;
2287def: InstRW<[HWWriteResGroup50], (instregex "CMPPSrri")>;
Craig Topper6c659102017-12-10 09:14:37 +00002288def: InstRW<[HWWriteResGroup50], (instregex "CMPSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002289def: InstRW<[HWWriteResGroup50], (instregex "CMPSSrr")>;
2290def: InstRW<[HWWriteResGroup50], (instregex "COMISDrr")>;
2291def: InstRW<[HWWriteResGroup50], (instregex "COMISSrr")>;
2292def: InstRW<[HWWriteResGroup50], (instregex "CVTDQ2PSrr")>;
2293def: InstRW<[HWWriteResGroup50], (instregex "CVTPS2DQrr")>;
2294def: InstRW<[HWWriteResGroup50], (instregex "CVTTPS2DQrr")>;
Clement Courbet327fac42018-03-07 08:14:02 +00002295def: InstRW<[HWWriteResGroup50], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
Craig Topperb369cdb2018-01-25 06:57:42 +00002296def: InstRW<[HWWriteResGroup50], (instrs IMUL8r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002297def: InstRW<[HWWriteResGroup50], (instregex "LZCNT(16|32|64)rr")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00002298def: InstRW<[HWWriteResGroup50], (instregex "MAX(C?)PDrr")>;
2299def: InstRW<[HWWriteResGroup50], (instregex "MAX(C?)PSrr")>;
2300def: InstRW<[HWWriteResGroup50], (instregex "MAX(C?)SDrr")>;
2301def: InstRW<[HWWriteResGroup50], (instregex "MAX(C?)SSrr")>;
2302def: InstRW<[HWWriteResGroup50], (instregex "MIN(C?)PDrr")>;
2303def: InstRW<[HWWriteResGroup50], (instregex "MIN(C?)PSrr")>;
2304def: InstRW<[HWWriteResGroup50], (instregex "MIN(C?)SDrr")>;
2305def: InstRW<[HWWriteResGroup50], (instregex "MIN(C?)SSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002306def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr")>;
Craig Topperb369cdb2018-01-25 06:57:42 +00002307def: InstRW<[HWWriteResGroup50], (instrs MUL8r)>;
Craig Toppera42a2ba2017-12-16 18:35:31 +00002308def: InstRW<[HWWriteResGroup50], (instregex "PDEP(32|64)rr")>;
2309def: InstRW<[HWWriteResGroup50], (instregex "PEXT(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002310def: InstRW<[HWWriteResGroup50], (instregex "POPCNT(16|32|64)rr")>;
2311def: InstRW<[HWWriteResGroup50], (instregex "SHLD(16|32|64)rri8")>;
2312def: InstRW<[HWWriteResGroup50], (instregex "SHRD(16|32|64)rri8")>;
2313def: InstRW<[HWWriteResGroup50], (instregex "SUBPDrr")>;
2314def: InstRW<[HWWriteResGroup50], (instregex "SUBPSrr")>;
2315def: InstRW<[HWWriteResGroup50], (instregex "SUBR_FPrST0")>;
2316def: InstRW<[HWWriteResGroup50], (instregex "SUBR_FST0r")>;
2317def: InstRW<[HWWriteResGroup50], (instregex "SUBR_FrST0")>;
2318def: InstRW<[HWWriteResGroup50], (instregex "SUBSDrr")>;
2319def: InstRW<[HWWriteResGroup50], (instregex "SUBSSrr")>;
2320def: InstRW<[HWWriteResGroup50], (instregex "SUB_FPrST0")>;
2321def: InstRW<[HWWriteResGroup50], (instregex "SUB_FST0r")>;
2322def: InstRW<[HWWriteResGroup50], (instregex "SUB_FrST0")>;
2323def: InstRW<[HWWriteResGroup50], (instregex "TZCNT(16|32|64)rr")>;
2324def: InstRW<[HWWriteResGroup50], (instregex "UCOMISDrr")>;
2325def: InstRW<[HWWriteResGroup50], (instregex "UCOMISSrr")>;
2326def: InstRW<[HWWriteResGroup50], (instregex "VADDPDYrr")>;
2327def: InstRW<[HWWriteResGroup50], (instregex "VADDPDrr")>;
2328def: InstRW<[HWWriteResGroup50], (instregex "VADDPSYrr")>;
2329def: InstRW<[HWWriteResGroup50], (instregex "VADDPSrr")>;
2330def: InstRW<[HWWriteResGroup50], (instregex "VADDSDrr")>;
2331def: InstRW<[HWWriteResGroup50], (instregex "VADDSSrr")>;
2332def: InstRW<[HWWriteResGroup50], (instregex "VADDSUBPDYrr")>;
2333def: InstRW<[HWWriteResGroup50], (instregex "VADDSUBPDrr")>;
2334def: InstRW<[HWWriteResGroup50], (instregex "VADDSUBPSYrr")>;
2335def: InstRW<[HWWriteResGroup50], (instregex "VADDSUBPSrr")>;
2336def: InstRW<[HWWriteResGroup50], (instregex "VCMPPDYrri")>;
2337def: InstRW<[HWWriteResGroup50], (instregex "VCMPPDrri")>;
2338def: InstRW<[HWWriteResGroup50], (instregex "VCMPPSYrri")>;
2339def: InstRW<[HWWriteResGroup50], (instregex "VCMPPSrri")>;
2340def: InstRW<[HWWriteResGroup50], (instregex "VCMPSDrr")>;
2341def: InstRW<[HWWriteResGroup50], (instregex "VCMPSSrr")>;
2342def: InstRW<[HWWriteResGroup50], (instregex "VCOMISDrr")>;
2343def: InstRW<[HWWriteResGroup50], (instregex "VCOMISSrr")>;
2344def: InstRW<[HWWriteResGroup50], (instregex "VCVTDQ2PSYrr")>;
2345def: InstRW<[HWWriteResGroup50], (instregex "VCVTDQ2PSrr")>;
2346def: InstRW<[HWWriteResGroup50], (instregex "VCVTPS2DQYrr")>;
2347def: InstRW<[HWWriteResGroup50], (instregex "VCVTPS2DQrr")>;
2348def: InstRW<[HWWriteResGroup50], (instregex "VCVTTPS2DQYrr")>;
2349def: InstRW<[HWWriteResGroup50], (instregex "VCVTTPS2DQrr")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00002350def: InstRW<[HWWriteResGroup50], (instregex "VMAX(C?)PDYrr")>;
2351def: InstRW<[HWWriteResGroup50], (instregex "VMAX(C?)PDrr")>;
2352def: InstRW<[HWWriteResGroup50], (instregex "VMAX(C?)PSYrr")>;
2353def: InstRW<[HWWriteResGroup50], (instregex "VMAX(C?)PSrr")>;
2354def: InstRW<[HWWriteResGroup50], (instregex "VMAX(C?)SDrr")>;
2355def: InstRW<[HWWriteResGroup50], (instregex "VMAX(C?)SSrr")>;
2356def: InstRW<[HWWriteResGroup50], (instregex "VMIN(C?)PDYrr")>;
2357def: InstRW<[HWWriteResGroup50], (instregex "VMIN(C?)PDrr")>;
2358def: InstRW<[HWWriteResGroup50], (instregex "VMIN(C?)PSYrr")>;
2359def: InstRW<[HWWriteResGroup50], (instregex "VMIN(C?)PSrr")>;
2360def: InstRW<[HWWriteResGroup50], (instregex "VMIN(C?)SDrr")>;
2361def: InstRW<[HWWriteResGroup50], (instregex "VMIN(C?)SSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002362def: InstRW<[HWWriteResGroup50], (instregex "VSUBPDYrr")>;
2363def: InstRW<[HWWriteResGroup50], (instregex "VSUBPDrr")>;
2364def: InstRW<[HWWriteResGroup50], (instregex "VSUBPSYrr")>;
2365def: InstRW<[HWWriteResGroup50], (instregex "VSUBPSrr")>;
2366def: InstRW<[HWWriteResGroup50], (instregex "VSUBSDrr")>;
2367def: InstRW<[HWWriteResGroup50], (instregex "VSUBSSrr")>;
2368def: InstRW<[HWWriteResGroup50], (instregex "VUCOMISDrr")>;
2369def: InstRW<[HWWriteResGroup50], (instregex "VUCOMISSrr")>;
2370
Clement Courbet327fac42018-03-07 08:14:02 +00002371def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002372 let Latency = 3;
Clement Courbet327fac42018-03-07 08:14:02 +00002373 let NumMicroOps = 2;
2374 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002375}
Clement Courbet327fac42018-03-07 08:14:02 +00002376def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002377
2378def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
2379 let Latency = 3;
2380 let NumMicroOps = 1;
2381 let ResourceCycles = [1];
2382}
2383def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr")>;
2384def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSSYrr")>;
2385def: InstRW<[HWWriteResGroup51], (instregex "VEXTRACTF128rr")>;
2386def: InstRW<[HWWriteResGroup51], (instregex "VEXTRACTI128rr")>;
2387def: InstRW<[HWWriteResGroup51], (instregex "VINSERTF128rr")>;
2388def: InstRW<[HWWriteResGroup51], (instregex "VINSERTI128rr")>;
2389def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTBYrr")>;
2390def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTBrr")>;
2391def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTDYrr")>;
2392def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTQYrr")>;
2393def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTWYrr")>;
2394def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTWrr")>;
2395def: InstRW<[HWWriteResGroup51], (instregex "VPERM2F128rr")>;
2396def: InstRW<[HWWriteResGroup51], (instregex "VPERM2I128rr")>;
2397def: InstRW<[HWWriteResGroup51], (instregex "VPERMDYrr")>;
2398def: InstRW<[HWWriteResGroup51], (instregex "VPERMPDYri")>;
2399def: InstRW<[HWWriteResGroup51], (instregex "VPERMPSYrr")>;
2400def: InstRW<[HWWriteResGroup51], (instregex "VPERMQYri")>;
2401def: InstRW<[HWWriteResGroup51], (instregex "VPMOVSXBDYrr")>;
2402def: InstRW<[HWWriteResGroup51], (instregex "VPMOVSXBQYrr")>;
2403def: InstRW<[HWWriteResGroup51], (instregex "VPMOVSXBWYrr")>;
2404def: InstRW<[HWWriteResGroup51], (instregex "VPMOVSXDQYrr")>;
2405def: InstRW<[HWWriteResGroup51], (instregex "VPMOVSXWDYrr")>;
2406def: InstRW<[HWWriteResGroup51], (instregex "VPMOVSXWQYrr")>;
2407def: InstRW<[HWWriteResGroup51], (instregex "VPMOVZXBDYrr")>;
2408def: InstRW<[HWWriteResGroup51], (instregex "VPMOVZXBQYrr")>;
2409def: InstRW<[HWWriteResGroup51], (instregex "VPMOVZXBWYrr")>;
2410def: InstRW<[HWWriteResGroup51], (instregex "VPMOVZXDQYrr")>;
2411def: InstRW<[HWWriteResGroup51], (instregex "VPMOVZXWDYrr")>;
2412def: InstRW<[HWWriteResGroup51], (instregex "VPMOVZXWQYrr")>;
2413
2414def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002415 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002416 let NumMicroOps = 2;
2417 let ResourceCycles = [1,1];
2418}
2419def: InstRW<[HWWriteResGroup52], (instregex "ADDPDrm")>;
2420def: InstRW<[HWWriteResGroup52], (instregex "ADDPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002421def: InstRW<[HWWriteResGroup52], (instregex "ADDSUBPDrm")>;
2422def: InstRW<[HWWriteResGroup52], (instregex "ADDSUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002423def: InstRW<[HWWriteResGroup52], (instregex "CMPPDrmi")>;
2424def: InstRW<[HWWriteResGroup52], (instregex "CMPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002425def: InstRW<[HWWriteResGroup52], (instregex "CVTDQ2PSrm")>;
2426def: InstRW<[HWWriteResGroup52], (instregex "CVTPS2DQrm")>;
2427def: InstRW<[HWWriteResGroup52], (instregex "CVTTPS2DQrm")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00002428def: InstRW<[HWWriteResGroup52], (instregex "MAX(C?)PDrm")>;
2429def: InstRW<[HWWriteResGroup52], (instregex "MAX(C?)PSrm")>;
2430def: InstRW<[HWWriteResGroup52], (instregex "MIN(C?)PDrm")>;
2431def: InstRW<[HWWriteResGroup52], (instregex "MIN(C?)PSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002432def: InstRW<[HWWriteResGroup52], (instregex "SUBPDrm")>;
2433def: InstRW<[HWWriteResGroup52], (instregex "SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002434def: InstRW<[HWWriteResGroup52], (instregex "VADDPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002435def: InstRW<[HWWriteResGroup52], (instregex "VADDPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002436def: InstRW<[HWWriteResGroup52], (instregex "VADDSUBPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002437def: InstRW<[HWWriteResGroup52], (instregex "VADDSUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002438def: InstRW<[HWWriteResGroup52], (instregex "VCMPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002439def: InstRW<[HWWriteResGroup52], (instregex "VCMPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002440def: InstRW<[HWWriteResGroup52], (instregex "VCVTDQ2PSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002441def: InstRW<[HWWriteResGroup52], (instregex "VCVTPS2DQrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002442def: InstRW<[HWWriteResGroup52], (instregex "VCVTTPS2DQrm")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00002443def: InstRW<[HWWriteResGroup52], (instregex "VMAX(C?)PDrm")>;
2444def: InstRW<[HWWriteResGroup52], (instregex "VMAX(C?)PSrm")>;
2445def: InstRW<[HWWriteResGroup52], (instregex "VMIN(C?)PDrm")>;
2446def: InstRW<[HWWriteResGroup52], (instregex "VMIN(C?)PSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002447def: InstRW<[HWWriteResGroup52], (instregex "VSUBPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002448def: InstRW<[HWWriteResGroup52], (instregex "VSUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002449
Gadi Haber2cf601f2017-12-08 09:48:44 +00002450def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2451 let Latency = 10;
2452 let NumMicroOps = 2;
2453 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002454}
Gadi Haber2cf601f2017-12-08 09:48:44 +00002455def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m")>;
2456def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F64m")>;
2457def: InstRW<[HWWriteResGroup52_1], (instregex "ILD_F16m")>;
2458def: InstRW<[HWWriteResGroup52_1], (instregex "ILD_F32m")>;
2459def: InstRW<[HWWriteResGroup52_1], (instregex "ILD_F64m")>;
2460def: InstRW<[HWWriteResGroup52_1], (instregex "SUBR_F32m")>;
2461def: InstRW<[HWWriteResGroup52_1], (instregex "SUBR_F64m")>;
2462def: InstRW<[HWWriteResGroup52_1], (instregex "SUB_F32m")>;
2463def: InstRW<[HWWriteResGroup52_1], (instregex "SUB_F64m")>;
2464def: InstRW<[HWWriteResGroup52_1], (instregex "VADDPDYrm")>;
2465def: InstRW<[HWWriteResGroup52_1], (instregex "VADDPSYrm")>;
2466def: InstRW<[HWWriteResGroup52_1], (instregex "VADDSUBPDYrm")>;
2467def: InstRW<[HWWriteResGroup52_1], (instregex "VADDSUBPSYrm")>;
2468def: InstRW<[HWWriteResGroup52_1], (instregex "VCMPPDYrmi")>;
2469def: InstRW<[HWWriteResGroup52_1], (instregex "VCMPPSYrmi")>;
2470def: InstRW<[HWWriteResGroup52_1], (instregex "VCVTDQ2PSYrm")>;
2471def: InstRW<[HWWriteResGroup52_1], (instregex "VCVTPS2DQYrm")>;
2472def: InstRW<[HWWriteResGroup52_1], (instregex "VCVTTPS2DQYrm")>;
Craig Topper5ffe8012017-12-10 01:24:05 +00002473def: InstRW<[HWWriteResGroup52_1], (instregex "VMAX(C?)PDYrm")>;
2474def: InstRW<[HWWriteResGroup52_1], (instregex "VMAX(C?)PSYrm")>;
2475def: InstRW<[HWWriteResGroup52_1], (instregex "VMIN(C?)PDYrm")>;
2476def: InstRW<[HWWriteResGroup52_1], (instregex "VMIN(C?)PSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002477def: InstRW<[HWWriteResGroup52_1], (instregex "VSUBPDYrm")>;
2478def: InstRW<[HWWriteResGroup52_1], (instregex "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002479
2480def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002481 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002482 let NumMicroOps = 2;
2483 let ResourceCycles = [1,1];
2484}
2485def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm")>;
2486def: InstRW<[HWWriteResGroup53], (instregex "VPERM2I128rm")>;
2487def: InstRW<[HWWriteResGroup53], (instregex "VPERMDYrm")>;
2488def: InstRW<[HWWriteResGroup53], (instregex "VPERMPDYmi")>;
2489def: InstRW<[HWWriteResGroup53], (instregex "VPERMPSYrm")>;
2490def: InstRW<[HWWriteResGroup53], (instregex "VPERMQYmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002491def: InstRW<[HWWriteResGroup53], (instregex "VPMOVZXBDYrm")>;
2492def: InstRW<[HWWriteResGroup53], (instregex "VPMOVZXBQYrm")>;
2493def: InstRW<[HWWriteResGroup53], (instregex "VPMOVZXBWYrm")>;
2494def: InstRW<[HWWriteResGroup53], (instregex "VPMOVZXDQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002495def: InstRW<[HWWriteResGroup53], (instregex "VPMOVZXWQYrm")>;
2496
Gadi Haber2cf601f2017-12-08 09:48:44 +00002497def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
2498 let Latency = 9;
2499 let NumMicroOps = 2;
2500 let ResourceCycles = [1,1];
2501}
2502def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm")>;
2503def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXDQYrm")>;
2504def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXWDYrm")>;
2505def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVZXWDYrm")>;
2506
Gadi Haberd76f7b82017-08-28 10:04:16 +00002507def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
2508 let Latency = 3;
2509 let NumMicroOps = 3;
2510 let ResourceCycles = [3];
2511}
Craig Topper13a16502018-03-19 00:56:09 +00002512def: InstRW<[HWWriteResGroup54], (instregex "XADD(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002513def: InstRW<[HWWriteResGroup54], (instregex "XCHG8rr")>;
2514
2515def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
2516 let Latency = 3;
2517 let NumMicroOps = 3;
2518 let ResourceCycles = [2,1];
2519}
2520def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVDYrr")>;
2521def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVDrr")>;
2522def: InstRW<[HWWriteResGroup55], (instregex "VPSRAVDYrr")>;
2523def: InstRW<[HWWriteResGroup55], (instregex "VPSRAVDrr")>;
2524def: InstRW<[HWWriteResGroup55], (instregex "VPSRLVDYrr")>;
2525def: InstRW<[HWWriteResGroup55], (instregex "VPSRLVDrr")>;
2526
2527def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
2528 let Latency = 3;
2529 let NumMicroOps = 3;
2530 let ResourceCycles = [2,1];
2531}
Craig Topper066e7372018-01-25 04:45:32 +00002532def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHADDDrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002533def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHADDSWrr")>;
2534def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHADDWrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002535def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHSUBDrr")>;
2536def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHSUBSWrr")>;
2537def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHSUBWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002538def: InstRW<[HWWriteResGroup56], (instregex "PHADDDrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002539def: InstRW<[HWWriteResGroup56], (instregex "PHADDSWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002540def: InstRW<[HWWriteResGroup56], (instregex "PHADDWrr")>;
2541def: InstRW<[HWWriteResGroup56], (instregex "PHSUBDrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002542def: InstRW<[HWWriteResGroup56], (instregex "PHSUBSWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002543def: InstRW<[HWWriteResGroup56], (instregex "PHSUBWrr")>;
2544def: InstRW<[HWWriteResGroup56], (instregex "VPHADDDYrr")>;
2545def: InstRW<[HWWriteResGroup56], (instregex "VPHADDDrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002546def: InstRW<[HWWriteResGroup56], (instregex "VPHADDSWrr")>;
2547def: InstRW<[HWWriteResGroup56], (instregex "VPHADDSWYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002548def: InstRW<[HWWriteResGroup56], (instregex "VPHADDWYrr")>;
2549def: InstRW<[HWWriteResGroup56], (instregex "VPHADDWrr")>;
2550def: InstRW<[HWWriteResGroup56], (instregex "VPHSUBDYrr")>;
2551def: InstRW<[HWWriteResGroup56], (instregex "VPHSUBDrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002552def: InstRW<[HWWriteResGroup56], (instregex "VPHSUBSWrr")>;
2553def: InstRW<[HWWriteResGroup56], (instregex "VPHSUBSWYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002554def: InstRW<[HWWriteResGroup56], (instregex "VPHSUBWYrr")>;
2555def: InstRW<[HWWriteResGroup56], (instregex "VPHSUBWrr")>;
2556
2557def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
2558 let Latency = 3;
2559 let NumMicroOps = 3;
2560 let ResourceCycles = [2,1];
2561}
2562def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr")>;
2563def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSWBirr")>;
2564def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKUSWBirr")>;
2565
2566def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
2567 let Latency = 3;
2568 let NumMicroOps = 3;
2569 let ResourceCycles = [1,2];
2570}
2571def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
2572
2573def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
2574 let Latency = 3;
2575 let NumMicroOps = 3;
2576 let ResourceCycles = [1,2];
2577}
Craig Topperf4cd9082018-01-19 05:47:32 +00002578def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr")>;
Craig Topper13a16502018-03-19 00:56:09 +00002579def: InstRW<[HWWriteResGroup59], (instregex "RCL(8|16|32|64)r1")>;
2580def: InstRW<[HWWriteResGroup59], (instregex "RCL(8|16|32|64)ri")>;
2581def: InstRW<[HWWriteResGroup59], (instregex "RCR(8|16|32|64)r1")>;
2582def: InstRW<[HWWriteResGroup59], (instregex "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002583
2584def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
2585 let Latency = 3;
2586 let NumMicroOps = 3;
2587 let ResourceCycles = [2,1];
2588}
Craig Topper13a16502018-03-19 00:56:09 +00002589def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL")>;
2590def: InstRW<[HWWriteResGroup60], (instregex "ROR(8|16|32|64)rCL")>;
2591def: InstRW<[HWWriteResGroup60], (instregex "SAR(8|16|32|64)rCL")>;
2592def: InstRW<[HWWriteResGroup60], (instregex "SHL(8|16|32|64)rCL")>;
2593def: InstRW<[HWWriteResGroup60], (instregex "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002594
2595def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002596 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002597 let NumMicroOps = 3;
2598 let ResourceCycles = [1,1,1];
2599}
2600def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
2601
2602def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002603 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002604 let NumMicroOps = 3;
2605 let ResourceCycles = [1,1,1];
2606}
2607def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m")>;
2608def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP32m")>;
2609def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP64m")>;
2610def: InstRW<[HWWriteResGroup62], (instregex "IST_F16m")>;
2611def: InstRW<[HWWriteResGroup62], (instregex "IST_F32m")>;
2612def: InstRW<[HWWriteResGroup62], (instregex "IST_FP16m")>;
2613def: InstRW<[HWWriteResGroup62], (instregex "IST_FP32m")>;
2614def: InstRW<[HWWriteResGroup62], (instregex "IST_FP64m")>;
2615
2616def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002617 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002618 let NumMicroOps = 4;
2619 let ResourceCycles = [2,1,1];
2620}
2621def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002622def: InstRW<[HWWriteResGroup63], (instregex "VPSRAVDYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002623def: InstRW<[HWWriteResGroup63], (instregex "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002624
2625def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2626 let Latency = 9;
2627 let NumMicroOps = 4;
2628 let ResourceCycles = [2,1,1];
2629}
2630def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm")>;
2631def: InstRW<[HWWriteResGroup63_1], (instregex "VPSRAVDrm")>;
2632def: InstRW<[HWWriteResGroup63_1], (instregex "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002633
2634def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002635 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002636 let NumMicroOps = 4;
2637 let ResourceCycles = [2,1,1];
2638}
Craig Topper066e7372018-01-25 04:45:32 +00002639def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHADDDrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002640def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHADDSWrm")>;
2641def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHADDWrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002642def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHSUBDrm")>;
2643def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHSUBSWrm")>;
2644def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002645
2646def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
2647 let Latency = 10;
2648 let NumMicroOps = 4;
2649 let ResourceCycles = [2,1,1];
2650}
2651def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002652def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDSWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002653def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDWYrm")>;
2654def: InstRW<[HWWriteResGroup64_1], (instregex "VPHSUBDYrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002655def: InstRW<[HWWriteResGroup64_1], (instregex "VPHSUBSWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002656def: InstRW<[HWWriteResGroup64_1], (instregex "VPHSUBWYrm")>;
2657
2658def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
2659 let Latency = 9;
2660 let NumMicroOps = 4;
2661 let ResourceCycles = [2,1,1];
2662}
2663def: InstRW<[HWWriteResGroup64_2], (instregex "PHADDDrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002664def: InstRW<[HWWriteResGroup64_2], (instregex "PHADDSWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002665def: InstRW<[HWWriteResGroup64_2], (instregex "PHADDWrm")>;
2666def: InstRW<[HWWriteResGroup64_2], (instregex "PHSUBDrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002667def: InstRW<[HWWriteResGroup64_2], (instregex "PHSUBSWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002668def: InstRW<[HWWriteResGroup64_2], (instregex "PHSUBWrm")>;
2669def: InstRW<[HWWriteResGroup64_2], (instregex "VPHADDDrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002670def: InstRW<[HWWriteResGroup64_2], (instregex "VPHADDSWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002671def: InstRW<[HWWriteResGroup64_2], (instregex "VPHADDWrm")>;
2672def: InstRW<[HWWriteResGroup64_2], (instregex "VPHSUBDrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002673def: InstRW<[HWWriteResGroup64_2], (instregex "VPHSUBSWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002674def: InstRW<[HWWriteResGroup64_2], (instregex "VPHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002675
2676def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002677 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002678 let NumMicroOps = 4;
2679 let ResourceCycles = [1,1,2];
2680}
Craig Topperf4cd9082018-01-19 05:47:32 +00002681def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002682
2683def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002684 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002685 let NumMicroOps = 5;
2686 let ResourceCycles = [1,1,1,2];
2687}
Craig Topper13a16502018-03-19 00:56:09 +00002688def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1")>;
2689def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)mi")>;
2690def: InstRW<[HWWriteResGroup66], (instregex "RCR(8|16|32|64)m1")>;
2691def: InstRW<[HWWriteResGroup66], (instregex "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002692
2693def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002694 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002695 let NumMicroOps = 5;
2696 let ResourceCycles = [1,1,2,1];
2697}
Craig Topper13a16502018-03-19 00:56:09 +00002698def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002699
2700def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002701 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002702 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002703 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002704}
Craig Topper13a16502018-03-19 00:56:09 +00002705def: InstRW<[HWWriteResGroup68], (instregex "ADC(8|16|32|64)mi")>;
2706def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002707
Gadi Haberd76f7b82017-08-28 10:04:16 +00002708def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002709 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002710 let NumMicroOps = 6;
2711 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002712}
Craig Topper13a16502018-03-19 00:56:09 +00002713def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mr")>;
2714def: InstRW<[HWWriteResGroup69], (instregex "CMPXCHG(8|16|32|64)rm")>;
2715def: InstRW<[HWWriteResGroup69], (instregex "ROL(8|16|32|64)mCL")>;
2716def: InstRW<[HWWriteResGroup69], (instregex "SAR(8|16|32|64)mCL")>;
2717def: InstRW<[HWWriteResGroup69], (instregex "SBB(8|16|32|64)mi")>;
2718def: InstRW<[HWWriteResGroup69], (instregex "SBB(8|16|32|64)mr")>;
2719def: InstRW<[HWWriteResGroup69], (instregex "SHL(8|16|32|64)mCL")>;
2720def: InstRW<[HWWriteResGroup69], (instregex "SHR(8|16|32|64)mCL")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002721
Gadi Haberd76f7b82017-08-28 10:04:16 +00002722def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
2723 let Latency = 4;
2724 let NumMicroOps = 2;
2725 let ResourceCycles = [1,1];
2726}
2727def: InstRW<[HWWriteResGroup70], (instregex "CVTSD2SI64rr")>;
2728def: InstRW<[HWWriteResGroup70], (instregex "CVTSD2SIrr")>;
2729def: InstRW<[HWWriteResGroup70], (instregex "CVTSS2SI64rr")>;
2730def: InstRW<[HWWriteResGroup70], (instregex "CVTSS2SIrr")>;
2731def: InstRW<[HWWriteResGroup70], (instregex "CVTTSD2SI64rr")>;
2732def: InstRW<[HWWriteResGroup70], (instregex "CVTTSD2SIrr")>;
2733def: InstRW<[HWWriteResGroup70], (instregex "CVTTSS2SI64rr")>;
2734def: InstRW<[HWWriteResGroup70], (instregex "CVTTSS2SIrr")>;
2735def: InstRW<[HWWriteResGroup70], (instregex "VCVTSD2SI64rr")>;
2736def: InstRW<[HWWriteResGroup70], (instregex "VCVTSD2SIrr")>;
2737def: InstRW<[HWWriteResGroup70], (instregex "VCVTSS2SI64rr")>;
2738def: InstRW<[HWWriteResGroup70], (instregex "VCVTSS2SIrr")>;
2739def: InstRW<[HWWriteResGroup70], (instregex "VCVTTSD2SI64rr")>;
2740def: InstRW<[HWWriteResGroup70], (instregex "VCVTTSD2SIrr")>;
2741def: InstRW<[HWWriteResGroup70], (instregex "VCVTTSS2SI64rr")>;
2742def: InstRW<[HWWriteResGroup70], (instregex "VCVTTSS2SIrr")>;
2743
2744def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
2745 let Latency = 4;
2746 let NumMicroOps = 2;
2747 let ResourceCycles = [1,1];
2748}
2749def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr")>;
2750def: InstRW<[HWWriteResGroup71], (instregex "VPSLLDYrr")>;
2751def: InstRW<[HWWriteResGroup71], (instregex "VPSLLQYrr")>;
2752def: InstRW<[HWWriteResGroup71], (instregex "VPSLLWYrr")>;
2753def: InstRW<[HWWriteResGroup71], (instregex "VPSRADYrr")>;
2754def: InstRW<[HWWriteResGroup71], (instregex "VPSRAWYrr")>;
2755def: InstRW<[HWWriteResGroup71], (instregex "VPSRLDYrr")>;
2756def: InstRW<[HWWriteResGroup71], (instregex "VPSRLQYrr")>;
2757def: InstRW<[HWWriteResGroup71], (instregex "VPSRLWYrr")>;
2758def: InstRW<[HWWriteResGroup71], (instregex "VPTESTYrr")>;
2759
2760def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
2761 let Latency = 4;
2762 let NumMicroOps = 2;
2763 let ResourceCycles = [1,1];
2764}
2765def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
2766
2767def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
2768 let Latency = 4;
2769 let NumMicroOps = 2;
2770 let ResourceCycles = [1,1];
2771}
2772def: InstRW<[HWWriteResGroup73], (instregex "CVTDQ2PDrr")>;
2773def: InstRW<[HWWriteResGroup73], (instregex "CVTPD2DQrr")>;
2774def: InstRW<[HWWriteResGroup73], (instregex "CVTPD2PSrr")>;
2775def: InstRW<[HWWriteResGroup73], (instregex "CVTSD2SSrr")>;
Craig Toppera0be5a02017-12-10 19:47:56 +00002776def: InstRW<[HWWriteResGroup73], (instregex "CVTSI642SDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002777def: InstRW<[HWWriteResGroup73], (instregex "CVTSI2SDrr")>;
2778def: InstRW<[HWWriteResGroup73], (instregex "CVTSI2SSrr")>;
2779def: InstRW<[HWWriteResGroup73], (instregex "CVTTPD2DQrr")>;
2780def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr")>;
2781def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPI2PDirr")>;
2782def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPS2PIirr")>;
2783def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTTPD2PIirr")>;
2784def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTTPS2PIirr")>;
2785def: InstRW<[HWWriteResGroup73], (instregex "VCVTDQ2PDrr")>;
2786def: InstRW<[HWWriteResGroup73], (instregex "VCVTPD2DQrr")>;
2787def: InstRW<[HWWriteResGroup73], (instregex "VCVTPD2PSrr")>;
2788def: InstRW<[HWWriteResGroup73], (instregex "VCVTPS2PHrr")>;
2789def: InstRW<[HWWriteResGroup73], (instregex "VCVTSD2SSrr")>;
Craig Toppera0be5a02017-12-10 19:47:56 +00002790def: InstRW<[HWWriteResGroup73], (instregex "VCVTSI642SDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002791def: InstRW<[HWWriteResGroup73], (instregex "VCVTSI2SDrr")>;
2792def: InstRW<[HWWriteResGroup73], (instregex "VCVTSI2SSrr")>;
2793def: InstRW<[HWWriteResGroup73], (instregex "VCVTTPD2DQrr")>;
2794
2795def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
2796 let Latency = 4;
2797 let NumMicroOps = 2;
2798 let ResourceCycles = [1,1];
2799}
Craig Topperb369cdb2018-01-25 06:57:42 +00002800def: InstRW<[HWWriteResGroup74], (instrs IMUL64r)>;
2801def: InstRW<[HWWriteResGroup74], (instrs MUL64r)>;
2802def: InstRW<[HWWriteResGroup74], (instrs MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002803
2804def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort0156]> {
2805 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002806 let NumMicroOps = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002807}
Craig Topperb369cdb2018-01-25 06:57:42 +00002808def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r)>;
2809def: InstRW<[HWWriteResGroup74_16], (instrs MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002810
Gadi Haberd76f7b82017-08-28 10:04:16 +00002811def HWWriteResGroup74_32 : SchedWriteRes<[HWPort1,HWPort0156]> {
2812 let Latency = 4;
2813 let NumMicroOps = 3;
2814}
Craig Topperb369cdb2018-01-25 06:57:42 +00002815def: InstRW<[HWWriteResGroup74_32], (instrs IMUL32r)>;
2816def: InstRW<[HWWriteResGroup74_32], (instrs MUL32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002817
2818def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002819 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002820 let NumMicroOps = 3;
2821 let ResourceCycles = [2,1];
2822}
2823def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m")>;
2824def: InstRW<[HWWriteResGroup75], (instregex "FICOM32m")>;
2825def: InstRW<[HWWriteResGroup75], (instregex "FICOMP16m")>;
2826def: InstRW<[HWWriteResGroup75], (instregex "FICOMP32m")>;
2827
2828def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002829 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002830 let NumMicroOps = 3;
2831 let ResourceCycles = [1,1,1];
2832}
2833def: InstRW<[HWWriteResGroup76], (instregex "CVTSD2SI64rm")>;
2834def: InstRW<[HWWriteResGroup76], (instregex "CVTSD2SIrm")>;
2835def: InstRW<[HWWriteResGroup76], (instregex "CVTSS2SI64rm")>;
2836def: InstRW<[HWWriteResGroup76], (instregex "CVTSS2SIrm")>;
2837def: InstRW<[HWWriteResGroup76], (instregex "CVTTSD2SI64rm")>;
2838def: InstRW<[HWWriteResGroup76], (instregex "CVTTSD2SIrm")>;
2839def: InstRW<[HWWriteResGroup76], (instregex "CVTTSS2SIrm")>;
2840def: InstRW<[HWWriteResGroup76], (instregex "VCVTSD2SI64rm")>;
2841def: InstRW<[HWWriteResGroup76], (instregex "VCVTSD2SIrm")>;
2842def: InstRW<[HWWriteResGroup76], (instregex "VCVTSS2SI64rm")>;
2843def: InstRW<[HWWriteResGroup76], (instregex "VCVTSS2SIrm")>;
2844def: InstRW<[HWWriteResGroup76], (instregex "VCVTTSD2SI64rm")>;
2845def: InstRW<[HWWriteResGroup76], (instregex "VCVTTSD2SIrm")>;
2846def: InstRW<[HWWriteResGroup76], (instregex "VCVTTSS2SI64rm")>;
2847def: InstRW<[HWWriteResGroup76], (instregex "VCVTTSS2SIrm")>;
2848
2849def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002850 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002851 let NumMicroOps = 3;
2852 let ResourceCycles = [1,1,1];
2853}
2854def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002855
2856def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2857 let Latency = 11;
2858 let NumMicroOps = 3;
2859 let ResourceCycles = [1,1,1];
2860}
2861def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002862
2863def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002864 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002865 let NumMicroOps = 3;
2866 let ResourceCycles = [1,1,1];
2867}
2868def: InstRW<[HWWriteResGroup78], (instregex "CVTDQ2PDrm")>;
2869def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm")>;
2870def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2PSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002871def: InstRW<[HWWriteResGroup78], (instregex "CVTTPD2DQrm")>;
2872def: InstRW<[HWWriteResGroup78], (instregex "MMX_CVTPD2PIirm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002873def: InstRW<[HWWriteResGroup78], (instregex "MMX_CVTTPD2PIirm")>;
2874def: InstRW<[HWWriteResGroup78], (instregex "VCVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002875
2876def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2877 let Latency = 9;
2878 let NumMicroOps = 3;
2879 let ResourceCycles = [1,1,1];
2880}
2881def: InstRW<[HWWriteResGroup78_1], (instregex "CVTSD2SSrm")>;
2882def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm")>;
2883def: InstRW<[HWWriteResGroup78_1], (instregex "VCVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002884
2885def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002886 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002887 let NumMicroOps = 3;
2888 let ResourceCycles = [1,1,1];
2889}
Craig Topperb369cdb2018-01-25 06:57:42 +00002890def: InstRW<[HWWriteResGroup79], (instrs MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002891
2892def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002893 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002894 let NumMicroOps = 3;
2895 let ResourceCycles = [1,1,1];
2896}
2897def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm")>;
2898def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBrm")>;
2899def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTWYrm")>;
2900def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTWrm")>;
2901
2902def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2903 let Latency = 4;
2904 let NumMicroOps = 4;
2905 let ResourceCycles = [4];
2906}
2907def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2908
2909def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2910 let Latency = 4;
2911 let NumMicroOps = 4;
2912 let ResourceCycles = [1,3];
2913}
2914def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2915
2916def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2917 let Latency = 4;
2918 let NumMicroOps = 4;
2919 let ResourceCycles = [1,1,2];
2920}
2921def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2922
2923def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002924 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002925 let NumMicroOps = 4;
2926 let ResourceCycles = [1,1,1,1];
2927}
2928def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPDYmr")>;
2929def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPDmr")>;
2930def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPSYmr")>;
2931def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPSmr")>;
2932def: InstRW<[HWWriteResGroup84], (instregex "VPMASKMOVDYmr")>;
2933def: InstRW<[HWWriteResGroup84], (instregex "VPMASKMOVDmr")>;
2934def: InstRW<[HWWriteResGroup84], (instregex "VPMASKMOVQYmr")>;
2935def: InstRW<[HWWriteResGroup84], (instregex "VPMASKMOVQmr")>;
2936
2937def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002938 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002939 let NumMicroOps = 4;
2940 let ResourceCycles = [1,1,1,1];
2941}
2942def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2943
2944def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002945 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002946 let NumMicroOps = 4;
2947 let ResourceCycles = [1,1,1,1];
2948}
2949def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8")>;
2950def: InstRW<[HWWriteResGroup86], (instregex "SHRD(16|32|64)mri8")>;
2951
2952def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002953 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002954 let NumMicroOps = 5;
2955 let ResourceCycles = [1,2,1,1];
2956}
2957def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm")>;
2958def: InstRW<[HWWriteResGroup87], (instregex "LSL(16|32|64)rm")>;
2959
2960def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002961 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002962 let NumMicroOps = 6;
2963 let ResourceCycles = [1,1,4];
2964}
2965def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16")>;
2966def: InstRW<[HWWriteResGroup88], (instregex "PUSHF64")>;
2967
2968def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002969 let Latency = 5;
2970 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002971 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002972}
Craig Topperdbddac02018-01-25 04:45:30 +00002973def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMADDUBSWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002974def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMADDWDirr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002975def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMULHRSWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002976def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMULHUWirr")>;
2977def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMULHWirr")>;
2978def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMULLWirr")>;
2979def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMULUDQirr")>;
2980def: InstRW<[HWWriteResGroup89], (instregex "MMX_PSADBWirr")>;
2981def: InstRW<[HWWriteResGroup89], (instregex "MUL_FPrST0")>;
2982def: InstRW<[HWWriteResGroup89], (instregex "MUL_FST0r")>;
2983def: InstRW<[HWWriteResGroup89], (instregex "MUL_FrST0")>;
2984def: InstRW<[HWWriteResGroup89], (instregex "PCMPGTQrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00002985def: InstRW<[HWWriteResGroup89], (instregex "PHMINPOSUWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002986def: InstRW<[HWWriteResGroup89], (instregex "PMADDUBSWrr")>;
2987def: InstRW<[HWWriteResGroup89], (instregex "PMADDWDrr")>;
2988def: InstRW<[HWWriteResGroup89], (instregex "PMULDQrr")>;
2989def: InstRW<[HWWriteResGroup89], (instregex "PMULHRSWrr")>;
2990def: InstRW<[HWWriteResGroup89], (instregex "PMULHUWrr")>;
2991def: InstRW<[HWWriteResGroup89], (instregex "PMULHWrr")>;
2992def: InstRW<[HWWriteResGroup89], (instregex "PMULLWrr")>;
2993def: InstRW<[HWWriteResGroup89], (instregex "PMULUDQrr")>;
2994def: InstRW<[HWWriteResGroup89], (instregex "PSADBWrr")>;
2995def: InstRW<[HWWriteResGroup89], (instregex "RCPPSr")>;
2996def: InstRW<[HWWriteResGroup89], (instregex "RCPSSr")>;
2997def: InstRW<[HWWriteResGroup89], (instregex "RSQRTPSr")>;
2998def: InstRW<[HWWriteResGroup89], (instregex "RSQRTSSr")>;
2999def: InstRW<[HWWriteResGroup89], (instregex "VPCMPGTQYrr")>;
3000def: InstRW<[HWWriteResGroup89], (instregex "VPCMPGTQrr")>;
Craig Topperdbddac02018-01-25 04:45:30 +00003001def: InstRW<[HWWriteResGroup89], (instregex "VPHMINPOSUWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003002def: InstRW<[HWWriteResGroup89], (instregex "VPMADDUBSWYrr")>;
3003def: InstRW<[HWWriteResGroup89], (instregex "VPMADDUBSWrr")>;
3004def: InstRW<[HWWriteResGroup89], (instregex "VPMADDWDYrr")>;
3005def: InstRW<[HWWriteResGroup89], (instregex "VPMADDWDrr")>;
3006def: InstRW<[HWWriteResGroup89], (instregex "VPMULDQYrr")>;
3007def: InstRW<[HWWriteResGroup89], (instregex "VPMULDQrr")>;
3008def: InstRW<[HWWriteResGroup89], (instregex "VPMULHRSWYrr")>;
3009def: InstRW<[HWWriteResGroup89], (instregex "VPMULHRSWrr")>;
3010def: InstRW<[HWWriteResGroup89], (instregex "VPMULHUWYrr")>;
3011def: InstRW<[HWWriteResGroup89], (instregex "VPMULHUWrr")>;
3012def: InstRW<[HWWriteResGroup89], (instregex "VPMULHWYrr")>;
3013def: InstRW<[HWWriteResGroup89], (instregex "VPMULHWrr")>;
3014def: InstRW<[HWWriteResGroup89], (instregex "VPMULLWYrr")>;
3015def: InstRW<[HWWriteResGroup89], (instregex "VPMULLWrr")>;
3016def: InstRW<[HWWriteResGroup89], (instregex "VPMULUDQYrr")>;
3017def: InstRW<[HWWriteResGroup89], (instregex "VPMULUDQrr")>;
3018def: InstRW<[HWWriteResGroup89], (instregex "VPSADBWYrr")>;
3019def: InstRW<[HWWriteResGroup89], (instregex "VPSADBWrr")>;
3020def: InstRW<[HWWriteResGroup89], (instregex "VRCPPSr")>;
3021def: InstRW<[HWWriteResGroup89], (instregex "VRCPSSr")>;
3022def: InstRW<[HWWriteResGroup89], (instregex "VRSQRTPSr")>;
3023def: InstRW<[HWWriteResGroup89], (instregex "VRSQRTSSr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003024
Gadi Haberd76f7b82017-08-28 10:04:16 +00003025def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00003026 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003027 let NumMicroOps = 1;
3028 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00003029}
Gadi Haberd76f7b82017-08-28 10:04:16 +00003030def: InstRW<[HWWriteResGroup90], (instregex "MULPDrr")>;
3031def: InstRW<[HWWriteResGroup90], (instregex "MULPSrr")>;
3032def: InstRW<[HWWriteResGroup90], (instregex "MULSDrr")>;
3033def: InstRW<[HWWriteResGroup90], (instregex "MULSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003034def: InstRW<[HWWriteResGroup90], (instregex "VMULPDYrr")>;
3035def: InstRW<[HWWriteResGroup90], (instregex "VMULPDrr")>;
3036def: InstRW<[HWWriteResGroup90], (instregex "VMULPSYrr")>;
3037def: InstRW<[HWWriteResGroup90], (instregex "VMULPSrr")>;
3038def: InstRW<[HWWriteResGroup90], (instregex "VMULSDrr")>;
3039def: InstRW<[HWWriteResGroup90], (instregex "VMULSSrr")>;
Craig Topperf82867c2017-12-13 23:11:30 +00003040def: InstRW<[HWWriteResGroup90],
3041 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
3042 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003043
Gadi Haberd76f7b82017-08-28 10:04:16 +00003044def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003045 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003046 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003047 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00003048}
Craig Topperdbddac02018-01-25 04:45:30 +00003049def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003050def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDWDirm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00003051def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMULHRSWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003052def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMULHUWirm")>;
3053def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMULHWirm")>;
3054def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMULLWirm")>;
3055def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMULUDQirm")>;
3056def: InstRW<[HWWriteResGroup91], (instregex "MMX_PSADBWirm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003057def: InstRW<[HWWriteResGroup91], (instregex "RCPSSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003058def: InstRW<[HWWriteResGroup91], (instregex "RSQRTSSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003059def: InstRW<[HWWriteResGroup91], (instregex "VRCPSSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003060def: InstRW<[HWWriteResGroup91], (instregex "VRSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003061
Gadi Haber2cf601f2017-12-08 09:48:44 +00003062def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23]> {
3063 let Latency = 18;
3064 let NumMicroOps = 2;
3065 let ResourceCycles = [1,1];
3066}
3067def: InstRW<[HWWriteResGroup91_1], (instregex "SQRTSSm")>;
3068def: InstRW<[HWWriteResGroup91_1], (instregex "VDIVSSrm")>;
3069
3070def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
3071 let Latency = 11;
3072 let NumMicroOps = 2;
3073 let ResourceCycles = [1,1];
3074}
3075def: InstRW<[HWWriteResGroup91_2], (instregex "PCMPGTQrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00003076def: InstRW<[HWWriteResGroup91_2], (instregex "PHMINPOSUWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003077def: InstRW<[HWWriteResGroup91_2], (instregex "PMADDUBSWrm")>;
3078def: InstRW<[HWWriteResGroup91_2], (instregex "PMADDWDrm")>;
3079def: InstRW<[HWWriteResGroup91_2], (instregex "PMULDQrm")>;
3080def: InstRW<[HWWriteResGroup91_2], (instregex "PMULHRSWrm")>;
3081def: InstRW<[HWWriteResGroup91_2], (instregex "PMULHUWrm")>;
3082def: InstRW<[HWWriteResGroup91_2], (instregex "PMULHWrm")>;
3083def: InstRW<[HWWriteResGroup91_2], (instregex "PMULLWrm")>;
3084def: InstRW<[HWWriteResGroup91_2], (instregex "PMULUDQrm")>;
3085def: InstRW<[HWWriteResGroup91_2], (instregex "PSADBWrm")>;
3086def: InstRW<[HWWriteResGroup91_2], (instregex "RCPPSm")>;
3087def: InstRW<[HWWriteResGroup91_2], (instregex "RSQRTPSm")>;
3088def: InstRW<[HWWriteResGroup91_2], (instregex "VPCMPGTQrm")>;
Craig Topperdbddac02018-01-25 04:45:30 +00003089def: InstRW<[HWWriteResGroup91_2], (instregex "VPHMINPOSUWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003090def: InstRW<[HWWriteResGroup91_2], (instregex "VPMADDUBSWrm")>;
3091def: InstRW<[HWWriteResGroup91_2], (instregex "VPMADDWDrm")>;
3092def: InstRW<[HWWriteResGroup91_2], (instregex "VPMULDQrm")>;
3093def: InstRW<[HWWriteResGroup91_2], (instregex "VPMULHRSWrm")>;
3094def: InstRW<[HWWriteResGroup91_2], (instregex "VPMULHUWrm")>;
3095def: InstRW<[HWWriteResGroup91_2], (instregex "VPMULHWrm")>;
3096def: InstRW<[HWWriteResGroup91_2], (instregex "VPMULLWrm")>;
3097def: InstRW<[HWWriteResGroup91_2], (instregex "VPMULUDQrm")>;
3098def: InstRW<[HWWriteResGroup91_2], (instregex "VPSADBWrm")>;
3099def: InstRW<[HWWriteResGroup91_2], (instregex "VRCPPSm")>;
3100def: InstRW<[HWWriteResGroup91_2], (instregex "VRSQRTPSm")>;
3101
3102def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
3103 let Latency = 12;
3104 let NumMicroOps = 2;
3105 let ResourceCycles = [1,1];
3106}
3107def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m")>;
3108def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F64m")>;
3109def: InstRW<[HWWriteResGroup91_3], (instregex "VPCMPGTQYrm")>;
3110def: InstRW<[HWWriteResGroup91_3], (instregex "VPMADDUBSWYrm")>;
3111def: InstRW<[HWWriteResGroup91_3], (instregex "VPMADDWDYrm")>;
3112def: InstRW<[HWWriteResGroup91_3], (instregex "VPMULDQYrm")>;
3113def: InstRW<[HWWriteResGroup91_3], (instregex "VPMULHRSWYrm")>;
3114def: InstRW<[HWWriteResGroup91_3], (instregex "VPMULHUWYrm")>;
3115def: InstRW<[HWWriteResGroup91_3], (instregex "VPMULHWYrm")>;
3116def: InstRW<[HWWriteResGroup91_3], (instregex "VPMULLWYrm")>;
3117def: InstRW<[HWWriteResGroup91_3], (instregex "VPMULUDQYrm")>;
3118def: InstRW<[HWWriteResGroup91_3], (instregex "VPSADBWYrm")>;
3119
Gadi Haberd76f7b82017-08-28 10:04:16 +00003120def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003121 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003122 let NumMicroOps = 2;
3123 let ResourceCycles = [1,1];
3124}
3125def: InstRW<[HWWriteResGroup92], (instregex "MULPDrm")>;
3126def: InstRW<[HWWriteResGroup92], (instregex "MULPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003127def: InstRW<[HWWriteResGroup92], (instregex "VMULPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003128def: InstRW<[HWWriteResGroup92], (instregex "VMULPSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00003129def: InstRW<[HWWriteResGroup92],
3130 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003131
3132def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
3133 let Latency = 12;
3134 let NumMicroOps = 2;
3135 let ResourceCycles = [1,1];
3136}
Gadi Haber2cf601f2017-12-08 09:48:44 +00003137def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm")>;
3138def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPSYrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00003139def: InstRW<[HWWriteResGroup92_1],
3140 (instregex "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003141
3142def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
3143 let Latency = 10;
3144 let NumMicroOps = 2;
3145 let ResourceCycles = [1,1];
3146}
3147def: InstRW<[HWWriteResGroup92_2], (instregex "MULSDrm")>;
3148def: InstRW<[HWWriteResGroup92_2], (instregex "MULSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003149def: InstRW<[HWWriteResGroup92_2], (instregex "VMULSDrm")>;
3150def: InstRW<[HWWriteResGroup92_2], (instregex "VMULSSrm")>;
Craig Topperf82867c2017-12-13 23:11:30 +00003151def: InstRW<[HWWriteResGroup92_2],
3152 (instregex "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003153
3154def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
3155 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003156 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003157 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00003158}
Craig Toppera0be5a02017-12-10 19:47:56 +00003159def: InstRW<[HWWriteResGroup93], (instregex "CVTSI642SSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003160def: InstRW<[HWWriteResGroup93], (instregex "HADDPDrr")>;
3161def: InstRW<[HWWriteResGroup93], (instregex "HADDPSrr")>;
3162def: InstRW<[HWWriteResGroup93], (instregex "HSUBPDrr")>;
3163def: InstRW<[HWWriteResGroup93], (instregex "HSUBPSrr")>;
Craig Toppera0be5a02017-12-10 19:47:56 +00003164def: InstRW<[HWWriteResGroup93], (instregex "VCVTSI642SSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003165def: InstRW<[HWWriteResGroup93], (instregex "VHADDPDYrr")>;
3166def: InstRW<[HWWriteResGroup93], (instregex "VHADDPDrr")>;
3167def: InstRW<[HWWriteResGroup93], (instregex "VHADDPSYrr")>;
3168def: InstRW<[HWWriteResGroup93], (instregex "VHADDPSrr")>;
3169def: InstRW<[HWWriteResGroup93], (instregex "VHSUBPDYrr")>;
3170def: InstRW<[HWWriteResGroup93], (instregex "VHSUBPDrr")>;
3171def: InstRW<[HWWriteResGroup93], (instregex "VHSUBPSYrr")>;
3172def: InstRW<[HWWriteResGroup93], (instregex "VHSUBPSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003173
Gadi Haberd76f7b82017-08-28 10:04:16 +00003174def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
3175 let Latency = 5;
3176 let NumMicroOps = 3;
3177 let ResourceCycles = [1,1,1];
3178}
3179def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
3180
3181def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
3182 let Latency = 5;
3183 let NumMicroOps = 3;
3184 let ResourceCycles = [1,1,1];
3185}
Craig Topperb369cdb2018-01-25 06:57:42 +00003186def: InstRW<[HWWriteResGroup95], (instrs MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003187
3188def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003189 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003190 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003191 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00003192}
Gadi Haberd76f7b82017-08-28 10:04:16 +00003193def: InstRW<[HWWriteResGroup96], (instregex "HADDPDrm")>;
3194def: InstRW<[HWWriteResGroup96], (instregex "HADDPSrm")>;
3195def: InstRW<[HWWriteResGroup96], (instregex "HSUBPDrm")>;
3196def: InstRW<[HWWriteResGroup96], (instregex "HSUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003197def: InstRW<[HWWriteResGroup96], (instregex "VHADDPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003198def: InstRW<[HWWriteResGroup96], (instregex "VHADDPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003199def: InstRW<[HWWriteResGroup96], (instregex "VHSUBPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003200def: InstRW<[HWWriteResGroup96], (instregex "VHSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003201
Gadi Haber2cf601f2017-12-08 09:48:44 +00003202def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
3203 let Latency = 12;
3204 let NumMicroOps = 4;
3205 let ResourceCycles = [1,2,1];
3206}
3207def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm")>;
3208def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPSYrm")>;
3209def: InstRW<[HWWriteResGroup96_1], (instregex "VHSUBPDYrm")>;
3210def: InstRW<[HWWriteResGroup96_1], (instregex "VHSUBPSYrm")>;
3211
Gadi Haberd76f7b82017-08-28 10:04:16 +00003212def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003213 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003214 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003215 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00003216}
Gadi Haberd76f7b82017-08-28 10:04:16 +00003217def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003218
Gadi Haberd76f7b82017-08-28 10:04:16 +00003219def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003220 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003221 let NumMicroOps = 4;
3222 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00003223}
Craig Topperb369cdb2018-01-25 06:57:42 +00003224def: InstRW<[HWWriteResGroup98], (instrs MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003225
Gadi Haberd76f7b82017-08-28 10:04:16 +00003226def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
3227 let Latency = 5;
3228 let NumMicroOps = 5;
3229 let ResourceCycles = [1,4];
3230}
3231def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
3232
3233def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
3234 let Latency = 5;
3235 let NumMicroOps = 5;
3236 let ResourceCycles = [1,4];
3237}
3238def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
3239
3240def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
3241 let Latency = 5;
3242 let NumMicroOps = 5;
3243 let ResourceCycles = [2,3];
3244}
Craig Topper13a16502018-03-19 00:56:09 +00003245def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003246
3247def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
3248 let Latency = 6;
3249 let NumMicroOps = 2;
3250 let ResourceCycles = [1,1];
3251}
3252def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr")>;
3253def: InstRW<[HWWriteResGroup102], (instregex "VCVTPD2DQYrr")>;
3254def: InstRW<[HWWriteResGroup102], (instregex "VCVTPD2PSYrr")>;
3255def: InstRW<[HWWriteResGroup102], (instregex "VCVTPS2PHYrr")>;
3256def: InstRW<[HWWriteResGroup102], (instregex "VCVTTPD2DQYrr")>;
3257
3258def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003259 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003260 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003261 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00003262}
Gadi Haberd76f7b82017-08-28 10:04:16 +00003263def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m")>;
3264def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003265def: InstRW<[HWWriteResGroup103], (instregex "SUBR_FI16m")>;
3266def: InstRW<[HWWriteResGroup103], (instregex "SUBR_FI32m")>;
3267def: InstRW<[HWWriteResGroup103], (instregex "SUB_FI16m")>;
3268def: InstRW<[HWWriteResGroup103], (instregex "SUB_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003269def: InstRW<[HWWriteResGroup103], (instregex "VROUNDYPDm")>;
3270def: InstRW<[HWWriteResGroup103], (instregex "VROUNDYPSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003271
Gadi Haber2cf601f2017-12-08 09:48:44 +00003272def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
3273 let Latency = 12;
3274 let NumMicroOps = 3;
3275 let ResourceCycles = [2,1];
3276}
3277def: InstRW<[HWWriteResGroup103_1], (instregex "ROUNDPDm")>;
3278def: InstRW<[HWWriteResGroup103_1], (instregex "ROUNDPSm")>;
3279def: InstRW<[HWWriteResGroup103_1], (instregex "ROUNDSDm")>;
3280def: InstRW<[HWWriteResGroup103_1], (instregex "ROUNDSSm")>;
3281def: InstRW<[HWWriteResGroup103_1], (instregex "VROUNDPDm")>;
3282def: InstRW<[HWWriteResGroup103_1], (instregex "VROUNDPSm")>;
3283def: InstRW<[HWWriteResGroup103_1], (instregex "VROUNDSDm")>;
3284def: InstRW<[HWWriteResGroup103_1], (instregex "VROUNDSSm")>;
3285
Gadi Haberd76f7b82017-08-28 10:04:16 +00003286def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003287 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003288 let NumMicroOps = 3;
3289 let ResourceCycles = [1,1,1];
3290}
3291def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
3292
3293def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
3294 let Latency = 6;
3295 let NumMicroOps = 4;
3296 let ResourceCycles = [1,1,2];
3297}
3298def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL")>;
3299def: InstRW<[HWWriteResGroup105], (instregex "SHRD(16|32|64)rrCL")>;
3300
3301def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003302 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003303 let NumMicroOps = 4;
3304 let ResourceCycles = [1,1,1,1];
3305}
3306def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
3307
3308def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
3309 let Latency = 6;
3310 let NumMicroOps = 4;
3311 let ResourceCycles = [1,1,1,1];
3312}
3313def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
3314
3315def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
3316 let Latency = 6;
3317 let NumMicroOps = 6;
3318 let ResourceCycles = [1,5];
3319}
3320def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
3321
3322def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003323 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003324 let NumMicroOps = 6;
3325 let ResourceCycles = [1,1,1,1,2];
3326}
3327def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL")>;
3328def: InstRW<[HWWriteResGroup109], (instregex "SHRD(16|32|64)mrCL")>;
3329
3330def HWWriteResGroup110 : SchedWriteRes<[HWPort5]> {
3331 let Latency = 7;
3332 let NumMicroOps = 1;
3333 let ResourceCycles = [1];
3334}
3335def: InstRW<[HWWriteResGroup110], (instregex "AESDECLASTrr")>;
3336def: InstRW<[HWWriteResGroup110], (instregex "AESDECrr")>;
3337def: InstRW<[HWWriteResGroup110], (instregex "AESENCLASTrr")>;
3338def: InstRW<[HWWriteResGroup110], (instregex "AESENCrr")>;
3339def: InstRW<[HWWriteResGroup110], (instregex "VAESDECLASTrr")>;
3340def: InstRW<[HWWriteResGroup110], (instregex "VAESDECrr")>;
3341def: InstRW<[HWWriteResGroup110], (instregex "VAESENCLASTrr")>;
3342def: InstRW<[HWWriteResGroup110], (instregex "VAESENCrr")>;
3343
3344def HWWriteResGroup111 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003345 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003346 let NumMicroOps = 2;
3347 let ResourceCycles = [1,1];
3348}
3349def: InstRW<[HWWriteResGroup111], (instregex "AESDECLASTrm")>;
3350def: InstRW<[HWWriteResGroup111], (instregex "AESDECrm")>;
3351def: InstRW<[HWWriteResGroup111], (instregex "AESENCLASTrm")>;
3352def: InstRW<[HWWriteResGroup111], (instregex "AESENCrm")>;
3353def: InstRW<[HWWriteResGroup111], (instregex "VAESDECLASTrm")>;
3354def: InstRW<[HWWriteResGroup111], (instregex "VAESDECrm")>;
3355def: InstRW<[HWWriteResGroup111], (instregex "VAESENCLASTrm")>;
3356def: InstRW<[HWWriteResGroup111], (instregex "VAESENCrm")>;
3357
3358def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
3359 let Latency = 7;
3360 let NumMicroOps = 3;
3361 let ResourceCycles = [1,2];
3362}
3363def: InstRW<[HWWriteResGroup112], (instregex "MPSADBWrri")>;
3364def: InstRW<[HWWriteResGroup112], (instregex "VMPSADBWYrri")>;
3365def: InstRW<[HWWriteResGroup112], (instregex "VMPSADBWrri")>;
3366
3367def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003368 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00003369 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003370 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00003371}
Gadi Haberd76f7b82017-08-28 10:04:16 +00003372def: InstRW<[HWWriteResGroup113], (instregex "MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003373def: InstRW<[HWWriteResGroup113], (instregex "VMPSADBWrmi")>;
3374
Gadi Haber2cf601f2017-12-08 09:48:44 +00003375def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
3376 let Latency = 14;
3377 let NumMicroOps = 4;
3378 let ResourceCycles = [1,2,1];
3379}
3380def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
3381
Gadi Haberd76f7b82017-08-28 10:04:16 +00003382def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
3383 let Latency = 7;
3384 let NumMicroOps = 7;
3385 let ResourceCycles = [2,2,1,2];
3386}
Craig Topper2d451e72018-03-18 08:38:06 +00003387def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003388
3389def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003390 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003391 let NumMicroOps = 3;
3392 let ResourceCycles = [1,1,1];
3393}
3394def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m")>;
3395def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI32m")>;
3396
3397def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
3398 let Latency = 9;
3399 let NumMicroOps = 3;
3400 let ResourceCycles = [1,1,1];
3401}
3402def: InstRW<[HWWriteResGroup116], (instregex "DPPDrri")>;
3403def: InstRW<[HWWriteResGroup116], (instregex "VDPPDrri")>;
3404
3405def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003406 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003407 let NumMicroOps = 4;
3408 let ResourceCycles = [1,1,1,1];
3409}
3410def: InstRW<[HWWriteResGroup117], (instregex "DPPDrmi")>;
3411def: InstRW<[HWWriteResGroup117], (instregex "VDPPDrmi")>;
3412
3413def HWWriteResGroup118 : SchedWriteRes<[HWPort0]> {
3414 let Latency = 10;
3415 let NumMicroOps = 2;
3416 let ResourceCycles = [2];
3417}
3418def: InstRW<[HWWriteResGroup118], (instregex "PMULLDrr")>;
3419def: InstRW<[HWWriteResGroup118], (instregex "VPMULLDYrr")>;
3420def: InstRW<[HWWriteResGroup118], (instregex "VPMULLDrr")>;
3421
3422def HWWriteResGroup119 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003423 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003424 let NumMicroOps = 3;
3425 let ResourceCycles = [2,1];
3426}
3427def: InstRW<[HWWriteResGroup119], (instregex "PMULLDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003428def: InstRW<[HWWriteResGroup119], (instregex "VPMULLDrm")>;
3429
Gadi Haber2cf601f2017-12-08 09:48:44 +00003430def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
3431 let Latency = 17;
3432 let NumMicroOps = 3;
3433 let ResourceCycles = [2,1];
3434}
3435def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
3436
Gadi Haberd76f7b82017-08-28 10:04:16 +00003437def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003438 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003439 let NumMicroOps = 10;
3440 let ResourceCycles = [1,1,1,4,1,2];
3441}
Craig Topper13a16502018-03-19 00:56:09 +00003442def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003443
3444def HWWriteResGroup121 : SchedWriteRes<[HWPort0]> {
3445 let Latency = 11;
3446 let NumMicroOps = 1;
3447 let ResourceCycles = [1];
3448}
3449def: InstRW<[HWWriteResGroup121], (instregex "DIVPSrr")>;
3450def: InstRW<[HWWriteResGroup121], (instregex "DIVSSrr")>;
3451
3452def HWWriteResGroup122 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003453 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003454 let NumMicroOps = 2;
3455 let ResourceCycles = [1,1];
3456}
3457def: InstRW<[HWWriteResGroup122], (instregex "DIVPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003458
3459def HWWriteResGroup122_1 : SchedWriteRes<[HWPort0,HWPort23]> {
3460 let Latency = 16;
3461 let NumMicroOps = 2;
3462 let ResourceCycles = [1,1];
3463}
3464def: InstRW<[HWWriteResGroup122_1], (instregex "DIVSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003465
3466def HWWriteResGroup123 : SchedWriteRes<[HWPort0]> {
3467 let Latency = 11;
3468 let NumMicroOps = 3;
3469 let ResourceCycles = [3];
3470}
3471def: InstRW<[HWWriteResGroup123], (instregex "PCMPISTRIrr")>;
3472def: InstRW<[HWWriteResGroup123], (instregex "PCMPISTRM128rr")>;
3473def: InstRW<[HWWriteResGroup123], (instregex "VPCMPISTRIrr")>;
3474def: InstRW<[HWWriteResGroup123], (instregex "VPCMPISTRM128rr")>;
3475
3476def HWWriteResGroup124 : SchedWriteRes<[HWPort0,HWPort5]> {
3477 let Latency = 11;
3478 let NumMicroOps = 3;
3479 let ResourceCycles = [2,1];
3480}
3481def: InstRW<[HWWriteResGroup124], (instregex "PCLMULQDQrr")>;
3482def: InstRW<[HWWriteResGroup124], (instregex "VPCLMULQDQrr")>;
3483
3484def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
3485 let Latency = 11;
3486 let NumMicroOps = 3;
3487 let ResourceCycles = [2,1];
3488}
3489def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr")>;
3490def: InstRW<[HWWriteResGroup125], (instregex "VRSQRTPSYr")>;
3491
3492def HWWriteResGroup126 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003493 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003494 let NumMicroOps = 4;
3495 let ResourceCycles = [3,1];
3496}
3497def: InstRW<[HWWriteResGroup126], (instregex "PCMPISTRIrm")>;
3498def: InstRW<[HWWriteResGroup126], (instregex "PCMPISTRM128rm")>;
3499def: InstRW<[HWWriteResGroup126], (instregex "VPCMPISTRIrm")>;
3500def: InstRW<[HWWriteResGroup126], (instregex "VPCMPISTRM128rm")>;
3501
3502def HWWriteResGroup127 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003503 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003504 let NumMicroOps = 4;
3505 let ResourceCycles = [2,1,1];
3506}
3507def: InstRW<[HWWriteResGroup127], (instregex "PCLMULQDQrm")>;
3508def: InstRW<[HWWriteResGroup127], (instregex "VPCLMULQDQrm")>;
3509
3510def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003511 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003512 let NumMicroOps = 4;
3513 let ResourceCycles = [2,1,1];
3514}
3515def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm")>;
3516def: InstRW<[HWWriteResGroup128], (instregex "VRSQRTPSYm")>;
3517
3518def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
3519 let Latency = 11;
3520 let NumMicroOps = 7;
3521 let ResourceCycles = [2,2,3];
3522}
3523def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL")>;
3524def: InstRW<[HWWriteResGroup129], (instregex "RCR(16|32|64)rCL")>;
3525
3526def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
3527 let Latency = 11;
3528 let NumMicroOps = 9;
3529 let ResourceCycles = [1,4,1,3];
3530}
3531def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
3532
3533def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
3534 let Latency = 11;
3535 let NumMicroOps = 11;
3536 let ResourceCycles = [2,9];
3537}
Craig Topper2d451e72018-03-18 08:38:06 +00003538def: InstRW<[HWWriteResGroup131], (instrs LOOPE)>;
3539def: InstRW<[HWWriteResGroup131], (instrs LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003540
3541def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003542 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003543 let NumMicroOps = 14;
3544 let ResourceCycles = [1,1,1,4,2,5];
3545}
3546def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
3547
3548def HWWriteResGroup133 : SchedWriteRes<[HWPort0]> {
3549 let Latency = 13;
3550 let NumMicroOps = 1;
3551 let ResourceCycles = [1];
3552}
3553def: InstRW<[HWWriteResGroup133], (instregex "SQRTPSr")>;
3554def: InstRW<[HWWriteResGroup133], (instregex "SQRTSSr")>;
3555def: InstRW<[HWWriteResGroup133], (instregex "VDIVPSrr")>;
3556def: InstRW<[HWWriteResGroup133], (instregex "VDIVSSrr")>;
3557
3558def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003559 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003560 let NumMicroOps = 2;
3561 let ResourceCycles = [1,1];
3562}
Gadi Haber2cf601f2017-12-08 09:48:44 +00003563def: InstRW<[HWWriteResGroup134], (instregex "DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003564def: InstRW<[HWWriteResGroup134], (instregex "SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003565def: InstRW<[HWWriteResGroup134], (instregex "VDIVPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003566def: InstRW<[HWWriteResGroup134], (instregex "VSQRTSSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003567
3568def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003569 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003570 let NumMicroOps = 11;
3571 let ResourceCycles = [2,1,1,3,1,3];
3572}
Craig Topper13a16502018-03-19 00:56:09 +00003573def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003574
3575def HWWriteResGroup136 : SchedWriteRes<[HWPort0]> {
3576 let Latency = 14;
3577 let NumMicroOps = 1;
3578 let ResourceCycles = [1];
3579}
3580def: InstRW<[HWWriteResGroup136], (instregex "DIVPDrr")>;
3581def: InstRW<[HWWriteResGroup136], (instregex "DIVSDrr")>;
3582def: InstRW<[HWWriteResGroup136], (instregex "VSQRTPSr")>;
3583def: InstRW<[HWWriteResGroup136], (instregex "VSQRTSSr")>;
3584
3585def HWWriteResGroup137 : SchedWriteRes<[HWPort5]> {
3586 let Latency = 14;
3587 let NumMicroOps = 2;
3588 let ResourceCycles = [2];
3589}
3590def: InstRW<[HWWriteResGroup137], (instregex "AESIMCrr")>;
3591def: InstRW<[HWWriteResGroup137], (instregex "VAESIMCrr")>;
3592
3593def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003594 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003595 let NumMicroOps = 2;
3596 let ResourceCycles = [1,1];
3597}
3598def: InstRW<[HWWriteResGroup138], (instregex "DIVPDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003599def: InstRW<[HWWriteResGroup138], (instregex "VSQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003600
3601def HWWriteResGroup139 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003602 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003603 let NumMicroOps = 3;
3604 let ResourceCycles = [2,1];
3605}
3606def: InstRW<[HWWriteResGroup139], (instregex "AESIMCrm")>;
3607def: InstRW<[HWWriteResGroup139], (instregex "VAESIMCrm")>;
3608
3609def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
3610 let Latency = 14;
3611 let NumMicroOps = 4;
3612 let ResourceCycles = [2,1,1];
3613}
3614def: InstRW<[HWWriteResGroup140], (instregex "DPPSrri")>;
3615def: InstRW<[HWWriteResGroup140], (instregex "VDPPSYrri")>;
3616def: InstRW<[HWWriteResGroup140], (instregex "VDPPSrri")>;
3617
3618def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003619 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003620 let NumMicroOps = 5;
3621 let ResourceCycles = [2,1,1,1];
3622}
3623def: InstRW<[HWWriteResGroup141], (instregex "DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003624def: InstRW<[HWWriteResGroup141], (instregex "VDPPSrmi")>;
3625
Gadi Haber2cf601f2017-12-08 09:48:44 +00003626def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
3627 let Latency = 21;
3628 let NumMicroOps = 5;
3629 let ResourceCycles = [2,1,1,1];
3630}
3631def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
3632
Gadi Haberd76f7b82017-08-28 10:04:16 +00003633def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
3634 let Latency = 14;
3635 let NumMicroOps = 10;
3636 let ResourceCycles = [2,3,1,4];
3637}
3638def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
3639
3640def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003641 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003642 let NumMicroOps = 15;
3643 let ResourceCycles = [1,14];
3644}
3645def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
3646
3647def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003648 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003649 let NumMicroOps = 8;
3650 let ResourceCycles = [1,1,1,1,1,1,2];
3651}
3652def: InstRW<[HWWriteResGroup144], (instregex "INSB")>;
3653def: InstRW<[HWWriteResGroup144], (instregex "INSL")>;
3654def: InstRW<[HWWriteResGroup144], (instregex "INSW")>;
3655
3656def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
3657 let Latency = 16;
3658 let NumMicroOps = 16;
3659 let ResourceCycles = [16];
3660}
3661def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
3662
3663def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003664 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003665 let NumMicroOps = 19;
3666 let ResourceCycles = [2,1,4,1,1,4,6];
3667}
3668def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
3669
3670def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
3671 let Latency = 17;
3672 let NumMicroOps = 15;
3673 let ResourceCycles = [2,1,2,4,2,4];
3674}
3675def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
3676
3677def HWWriteResGroup148 : SchedWriteRes<[HWPort0,HWPort5,HWPort0156]> {
3678 let Latency = 18;
3679 let NumMicroOps = 8;
3680 let ResourceCycles = [4,3,1];
3681}
3682def: InstRW<[HWWriteResGroup148], (instregex "PCMPESTRIrr")>;
3683def: InstRW<[HWWriteResGroup148], (instregex "VPCMPESTRIrr")>;
3684
3685def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
3686 let Latency = 18;
3687 let NumMicroOps = 8;
3688 let ResourceCycles = [1,1,1,5];
3689}
3690def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00003691def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003692
3693def HWWriteResGroup150 : SchedWriteRes<[HWPort0,HWPort5,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003694 let Latency = 24;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003695 let NumMicroOps = 9;
3696 let ResourceCycles = [4,3,1,1];
3697}
3698def: InstRW<[HWWriteResGroup150], (instregex "PCMPESTRIrm")>;
3699def: InstRW<[HWWriteResGroup150], (instregex "VPCMPESTRIrm")>;
3700
3701def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003702 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003703 let NumMicroOps = 19;
3704 let ResourceCycles = [3,1,15];
3705}
Craig Topper391c6f92017-12-10 01:24:08 +00003706def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003707
3708def HWWriteResGroup152 : SchedWriteRes<[HWPort0,HWPort5,HWPort015,HWPort0156]> {
3709 let Latency = 19;
3710 let NumMicroOps = 9;
3711 let ResourceCycles = [4,3,1,1];
3712}
3713def: InstRW<[HWWriteResGroup152], (instregex "PCMPESTRM128rr")>;
3714def: InstRW<[HWWriteResGroup152], (instregex "VPCMPESTRM128rr")>;
3715
3716def HWWriteResGroup153 : SchedWriteRes<[HWPort0,HWPort5,HWPort23,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003717 let Latency = 25;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003718 let NumMicroOps = 10;
3719 let ResourceCycles = [4,3,1,1,1];
3720}
3721def: InstRW<[HWWriteResGroup153], (instregex "PCMPESTRM128rm")>;
3722def: InstRW<[HWWriteResGroup153], (instregex "VPCMPESTRM128rm")>;
3723
3724def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
3725 let Latency = 20;
3726 let NumMicroOps = 1;
3727 let ResourceCycles = [1];
3728}
3729def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0")>;
3730def: InstRW<[HWWriteResGroup154], (instregex "DIV_FST0r")>;
3731def: InstRW<[HWWriteResGroup154], (instregex "DIV_FrST0")>;
3732def: InstRW<[HWWriteResGroup154], (instregex "SQRTPDr")>;
3733def: InstRW<[HWWriteResGroup154], (instregex "SQRTSDr")>;
3734def: InstRW<[HWWriteResGroup154], (instregex "VDIVPDrr")>;
3735def: InstRW<[HWWriteResGroup154], (instregex "VDIVSDrr")>;
3736
3737def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003738 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003739 let NumMicroOps = 2;
3740 let ResourceCycles = [1,1];
3741}
3742def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m")>;
3743def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003744def: InstRW<[HWWriteResGroup155], (instregex "VSQRTPDm")>;
3745
3746def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23]> {
3747 let Latency = 26;
3748 let NumMicroOps = 2;
3749 let ResourceCycles = [1,1];
3750}
3751def: InstRW<[HWWriteResGroup155_1], (instregex "SQRTPDm")>;
3752def: InstRW<[HWWriteResGroup155_1], (instregex "VDIVPDrm")>;
3753def: InstRW<[HWWriteResGroup155_1], (instregex "VSQRTSDm")>;
3754
3755def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23]> {
3756 let Latency = 25;
3757 let NumMicroOps = 2;
3758 let ResourceCycles = [1,1];
3759}
3760def: InstRW<[HWWriteResGroup155_2], (instregex "SQRTSDm")>;
3761def: InstRW<[HWWriteResGroup155_2], (instregex "VDIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003762
3763def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
3764 let Latency = 20;
3765 let NumMicroOps = 10;
3766 let ResourceCycles = [1,2,7];
3767}
3768def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
3769
3770def HWWriteResGroup157 : SchedWriteRes<[HWPort0]> {
3771 let Latency = 21;
3772 let NumMicroOps = 1;
3773 let ResourceCycles = [1];
3774}
3775def: InstRW<[HWWriteResGroup157], (instregex "VSQRTPDr")>;
3776def: InstRW<[HWWriteResGroup157], (instregex "VSQRTSDr")>;
3777
Gadi Haberd76f7b82017-08-28 10:04:16 +00003778def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort015]> {
3779 let Latency = 21;
3780 let NumMicroOps = 3;
3781 let ResourceCycles = [2,1];
3782}
3783def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr")>;
3784def: InstRW<[HWWriteResGroup159], (instregex "VSQRTPSYr")>;
3785
3786def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003787 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003788 let NumMicroOps = 4;
3789 let ResourceCycles = [2,1,1];
3790}
3791def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm")>;
3792def: InstRW<[HWWriteResGroup160], (instregex "VSQRTPSYm")>;
3793
3794def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003795 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003796 let NumMicroOps = 3;
3797 let ResourceCycles = [1,1,1];
3798}
3799def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m")>;
3800def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI32m")>;
3801
3802def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
3803 let Latency = 24;
3804 let NumMicroOps = 1;
3805 let ResourceCycles = [1];
3806}
3807def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0")>;
3808def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FST0r")>;
3809def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FrST0")>;
3810
3811def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003812 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003813 let NumMicroOps = 2;
3814 let ResourceCycles = [1,1];
3815}
3816def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m")>;
3817def: InstRW<[HWWriteResGroup163], (instregex "DIV_F64m")>;
3818
3819def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003820 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003821 let NumMicroOps = 27;
3822 let ResourceCycles = [1,5,1,1,19];
3823}
3824def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
3825
3826def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003827 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003828 let NumMicroOps = 28;
3829 let ResourceCycles = [1,6,1,1,19];
3830}
Craig Topper2d451e72018-03-18 08:38:06 +00003831def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003832
3833def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003834 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003835 let NumMicroOps = 3;
3836 let ResourceCycles = [1,1,1];
3837}
3838def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m")>;
3839def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI32m")>;
3840
3841def HWWriteResGroup167 : SchedWriteRes<[HWPort0,HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003842 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003843 let NumMicroOps = 11;
3844 let ResourceCycles = [2,7,1,1];
3845}
3846def: InstRW<[HWWriteResGroup167], (instregex "AESKEYGENASSIST128rm")>;
3847def: InstRW<[HWWriteResGroup167], (instregex "VAESKEYGENASSIST128rm")>;
3848
3849def HWWriteResGroup168 : SchedWriteRes<[HWPort0,HWPort5,HWPort015]> {
3850 let Latency = 29;
3851 let NumMicroOps = 11;
3852 let ResourceCycles = [2,7,2];
3853}
3854def: InstRW<[HWWriteResGroup168], (instregex "AESKEYGENASSIST128rr")>;
3855def: InstRW<[HWWriteResGroup168], (instregex "VAESKEYGENASSIST128rr")>;
3856
3857def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003858 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003859 let NumMicroOps = 23;
3860 let ResourceCycles = [1,5,3,4,10];
3861}
Craig Topper13a16502018-03-19 00:56:09 +00003862def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri")>;
3863def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003864
3865def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003866 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003867 let NumMicroOps = 23;
3868 let ResourceCycles = [1,5,2,1,4,10];
3869}
Craig Topper13a16502018-03-19 00:56:09 +00003870def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir")>;
3871def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003872
3873def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
3874 let Latency = 31;
3875 let NumMicroOps = 31;
3876 let ResourceCycles = [8,1,21,1];
3877}
3878def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
3879
3880def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort015]> {
3881 let Latency = 35;
3882 let NumMicroOps = 3;
3883 let ResourceCycles = [2,1];
3884}
3885def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr")>;
3886def: InstRW<[HWWriteResGroup173], (instregex "VSQRTPDYr")>;
3887
3888def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003889 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003890 let NumMicroOps = 4;
3891 let ResourceCycles = [2,1,1];
3892}
3893def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm")>;
3894def: InstRW<[HWWriteResGroup174], (instregex "VSQRTPDYm")>;
3895
3896def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003897 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003898 let NumMicroOps = 18;
3899 let ResourceCycles = [1,1,2,3,1,1,1,8];
3900}
3901def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
3902
3903def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
3904 let Latency = 42;
3905 let NumMicroOps = 22;
3906 let ResourceCycles = [2,20];
3907}
Craig Topper2d451e72018-03-18 08:38:06 +00003908def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003909
3910def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003911 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003912 let NumMicroOps = 64;
3913 let ResourceCycles = [2,2,8,1,10,2,39];
3914}
3915def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003916
3917def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003918 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003919 let NumMicroOps = 88;
3920 let ResourceCycles = [4,4,31,1,2,1,45];
3921}
Craig Topper2d451e72018-03-18 08:38:06 +00003922def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003923
3924def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003925 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003926 let NumMicroOps = 90;
3927 let ResourceCycles = [4,2,33,1,2,1,47];
3928}
Craig Topper2d451e72018-03-18 08:38:06 +00003929def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003930
3931def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
3932 let Latency = 75;
3933 let NumMicroOps = 15;
3934 let ResourceCycles = [6,3,6];
3935}
3936def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
3937
3938def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
3939 let Latency = 98;
3940 let NumMicroOps = 32;
3941 let ResourceCycles = [7,7,3,3,1,11];
3942}
3943def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
3944
3945def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
3946 let Latency = 112;
3947 let NumMicroOps = 66;
3948 let ResourceCycles = [4,2,4,8,14,34];
3949}
3950def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
3951
3952def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003953 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003954 let NumMicroOps = 100;
3955 let ResourceCycles = [9,9,11,8,1,11,21,30];
3956}
3957def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00003958
Gadi Haber2cf601f2017-12-08 09:48:44 +00003959def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
3960 let Latency = 26;
3961 let NumMicroOps = 12;
3962 let ResourceCycles = [2,2,1,3,2,2];
3963}
Craig Topper17a31182017-12-16 18:35:29 +00003964def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
3965 VPGATHERDQrm,
3966 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003967
3968def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3969 let Latency = 24;
3970 let NumMicroOps = 22;
3971 let ResourceCycles = [5,3,4,1,5,4];
3972}
Craig Topper17a31182017-12-16 18:35:29 +00003973def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
3974 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003975
3976def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3977 let Latency = 28;
3978 let NumMicroOps = 22;
3979 let ResourceCycles = [5,3,4,1,5,4];
3980}
Craig Topper17a31182017-12-16 18:35:29 +00003981def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003982
3983def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3984 let Latency = 25;
3985 let NumMicroOps = 22;
3986 let ResourceCycles = [5,3,4,1,5,4];
3987}
Craig Topper17a31182017-12-16 18:35:29 +00003988def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003989
3990def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3991 let Latency = 27;
3992 let NumMicroOps = 20;
3993 let ResourceCycles = [3,3,4,1,5,4];
3994}
Craig Topper17a31182017-12-16 18:35:29 +00003995def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
3996 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003997
3998def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3999 let Latency = 27;
4000 let NumMicroOps = 34;
4001 let ResourceCycles = [5,3,8,1,9,8];
4002}
Craig Topper17a31182017-12-16 18:35:29 +00004003def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
4004 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00004005
4006def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
4007 let Latency = 23;
4008 let NumMicroOps = 14;
4009 let ResourceCycles = [3,3,2,1,3,2];
4010}
Craig Topper17a31182017-12-16 18:35:29 +00004011def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
4012 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00004013
4014def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
4015 let Latency = 28;
4016 let NumMicroOps = 15;
4017 let ResourceCycles = [3,3,2,1,4,2];
4018}
Craig Topper17a31182017-12-16 18:35:29 +00004019def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00004020
4021def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
4022 let Latency = 25;
4023 let NumMicroOps = 15;
4024 let ResourceCycles = [3,3,2,1,4,2];
4025}
Craig Topper17a31182017-12-16 18:35:29 +00004026def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
4027 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00004028
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00004029} // SchedModel