blob: 3ef90062763651f9977f6699ae31146eb86d83f6 [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,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000083 list<ProcResourceKind> ExePorts,
84 int Lat, list<int> Res = [1], int UOps = 1> {
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000085 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000086 def : WriteRes<SchedRW, ExePorts> {
87 let Latency = Lat;
88 let ResourceCycles = Res;
89 let NumMicroOps = UOps;
90 }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000091
Gadi Haber2cf601f2017-12-08 09:48:44 +000092 // Memory variant also uses a cycle on port 2/3 and adds 5 cycles to the
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000093 // latency.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000094 def : WriteRes<SchedRW.Folded, !listconcat([HWPort23], ExePorts)> {
95 let Latency = !add(Lat, 5);
96 let ResourceCycles = !listconcat([1], Res);
97 let NumMicroOps = UOps;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000098 }
99}
100
101// A folded store needs a cycle on port 4 for the store data, but it does not
102// need an extra port 2/3 cycle to recompute the address.
103def : WriteRes<WriteRMW, [HWPort4]>;
104
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000105// Store_addr on 237.
106// Store_data on 4.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000107def : WriteRes<WriteStore, [HWPort237, HWPort4]>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000108def : WriteRes<WriteLoad, [HWPort23]> { let Latency = 5; }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000109def : WriteRes<WriteMove, [HWPort0156]>;
110def : WriteRes<WriteZero, []>;
111
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000112defm : HWWriteResPair<WriteALU, [HWPort0156], 1>;
113defm : HWWriteResPair<WriteIMul, [HWPort1], 3>;
Andrew Trick7201f4f2013-06-21 18:33:04 +0000114def : WriteRes<WriteIMulH, []> { let Latency = 3; }
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000115defm : HWWriteResPair<WriteShift, [HWPort06], 1>;
116defm : HWWriteResPair<WriteJump, [HWPort06], 1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000117
118// This is for simple LEAs with one or two input operands.
119// The complex ones can only execute on port 1, and they require two cycles on
120// the port to read all inputs. We don't model that.
121def : WriteRes<WriteLEA, [HWPort15]>;
122
123// This is quite rough, latency depends on the dividend.
124def : WriteRes<WriteIDiv, [HWPort0, HWDivider]> {
125 let Latency = 25;
126 let ResourceCycles = [1, 10];
127}
128def : WriteRes<WriteIDivLd, [HWPort23, HWPort0, HWDivider]> {
129 let Latency = 29;
130 let ResourceCycles = [1, 1, 10];
131}
132
133// Scalar and vector floating point.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000134def : WriteRes<WriteFStore, [HWPort237, HWPort4]>;
135def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; }
136def : WriteRes<WriteFMove, [HWPort5]>;
137
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000138defm : HWWriteResPair<WriteFAdd, [HWPort1], 3>;
139defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
140defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
141defm : HWWriteResPair<WriteFRcp, [HWPort0], 5>;
142defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5>;
143defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15>;
144defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
145defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
146defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
147defm : HWWriteResPair<WriteFMA, [HWPort01], 5>;
148defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1>;
149defm : HWWriteResPair<WriteFBlend, [HWPort015], 1>;
150defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
151defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000152
153// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000154def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
155def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
156def : WriteRes<WriteVecMove, [HWPort015]>;
157
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000158defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
159defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1>;
160defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
161defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
162defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
163defm : HWWriteResPair<WriteBlend, [HWPort15], 1>;
164defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
165defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2]>;
166defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
167defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 6, [1, 2]>;
Quentin Colombetca498512014-02-24 19:33:51 +0000168
169// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000170
Quentin Colombetca498512014-02-24 19:33:51 +0000171// Packed Compare Implicit Length Strings, Return Mask
172def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000173 let Latency = 11;
174 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000175 let ResourceCycles = [3];
176}
177def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000178 let Latency = 17;
179 let NumMicroOps = 4;
180 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000181}
182
183// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000184def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
185 let Latency = 19;
186 let NumMicroOps = 9;
187 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000188}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000189def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
190 let Latency = 25;
191 let NumMicroOps = 10;
192 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000193}
194
195// Packed Compare Implicit Length Strings, Return Index
196def : WriteRes<WritePCmpIStrI, [HWPort0]> {
197 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000198 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000199 let ResourceCycles = [3];
200}
201def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000202 let Latency = 17;
203 let NumMicroOps = 4;
204 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000205}
206
207// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000208def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
209 let Latency = 18;
210 let NumMicroOps = 8;
211 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000212}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000213def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
214 let Latency = 24;
215 let NumMicroOps = 9;
216 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000217}
218
219// AES Instructions.
220def : WriteRes<WriteAESDecEnc, [HWPort5]> {
221 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000222 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000223 let ResourceCycles = [1];
224}
225def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000226 let Latency = 13;
227 let NumMicroOps = 2;
228 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000229}
230
231def : WriteRes<WriteAESIMC, [HWPort5]> {
232 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000233 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000234 let ResourceCycles = [2];
235}
236def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000237 let Latency = 20;
238 let NumMicroOps = 3;
239 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000240}
241
Simon Pilgrim7684e052018-03-22 13:18:08 +0000242def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
243 let Latency = 29;
244 let NumMicroOps = 11;
245 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000246}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000247def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
248 let Latency = 34;
249 let NumMicroOps = 11;
250 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000251}
252
253// Carry-less multiplication instructions.
254def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000255 let Latency = 11;
256 let NumMicroOps = 3;
257 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000258}
259def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000260 let Latency = 17;
261 let NumMicroOps = 4;
262 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000263}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000264
265def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
266def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000267def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
268def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000269
Michael Zuckermanf6684002017-06-28 11:23:31 +0000270//================ Exceptions ================//
271
272//-- Specific Scheduling Models --//
273
274// Starting with P0.
275def WriteP0 : SchedWriteRes<[HWPort0]>;
276
Michael Zuckermanf6684002017-06-28 11:23:31 +0000277def WriteP01 : SchedWriteRes<[HWPort01]>;
278
279def Write2P01 : SchedWriteRes<[HWPort01]> {
280 let NumMicroOps = 2;
281}
282def Write3P01 : SchedWriteRes<[HWPort01]> {
283 let NumMicroOps = 3;
284}
285
Michael Zuckermanf6684002017-06-28 11:23:31 +0000286def WriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
287 let NumMicroOps = 2;
288}
289
290def Write2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
291 let NumMicroOps = 3;
292 let ResourceCycles = [2, 1];
293}
294
Michael Zuckermanf6684002017-06-28 11:23:31 +0000295// Starting with P1.
296def WriteP1 : SchedWriteRes<[HWPort1]>;
297
Michael Zuckermanf6684002017-06-28 11:23:31 +0000298
299def Write2P1 : SchedWriteRes<[HWPort1]> {
300 let NumMicroOps = 2;
301 let ResourceCycles = [2];
302}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000303
304// Notation:
305// - r: register.
306// - mm: 64 bit mmx register.
307// - x = 128 bit xmm register.
308// - (x)mm = mmx or xmm register.
309// - y = 256 bit ymm register.
310// - v = any vector register.
311// - m = memory.
312
313//=== Integer Instructions ===//
314//-- Move instructions --//
315
Michael Zuckermanf6684002017-06-28 11:23:31 +0000316// XLAT.
317def WriteXLAT : SchedWriteRes<[]> {
318 let Latency = 7;
319 let NumMicroOps = 3;
320}
321def : InstRW<[WriteXLAT], (instregex "XLAT")>;
322
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323// PUSHA.
324def WritePushA : SchedWriteRes<[]> {
325 let NumMicroOps = 19;
326}
327def : InstRW<[WritePushA], (instregex "PUSHA(16|32)")>;
328
Michael Zuckermanf6684002017-06-28 11:23:31 +0000329// POPA.
330def WritePopA : SchedWriteRes<[]> {
331 let NumMicroOps = 18;
332}
333def : InstRW<[WritePopA], (instregex "POPA(16|32)")>;
334
Michael Zuckermanf6684002017-06-28 11:23:31 +0000335//-- Arithmetic instructions --//
336
Michael Zuckermanf6684002017-06-28 11:23:31 +0000337// DIV.
338// r8.
339def WriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
340 let Latency = 22;
341 let NumMicroOps = 9;
342}
343def : InstRW<[WriteDiv8], (instregex "DIV8r")>;
344
Michael Zuckermanf6684002017-06-28 11:23:31 +0000345// IDIV.
346// r8.
347def WriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
348 let Latency = 23;
349 let NumMicroOps = 9;
350}
351def : InstRW<[WriteIDiv8], (instregex "IDIV8r")>;
352
Michael Zuckermanf6684002017-06-28 11:23:31 +0000353// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000354// m,r.
355def WriteBTmr : SchedWriteRes<[]> {
356 let NumMicroOps = 10;
357}
358def : InstRW<[WriteBTmr], (instregex "BT(16|32|64)mr")>;
359
Michael Zuckermanf6684002017-06-28 11:23:31 +0000360// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000361// m,r.
362def WriteBTRSCmr : SchedWriteRes<[]> {
363 let NumMicroOps = 11;
364}
365def : InstRW<[WriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
366
Michael Zuckermanf6684002017-06-28 11:23:31 +0000367//-- Control transfer instructions --//
368
Michael Zuckermanf6684002017-06-28 11:23:31 +0000369// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000370// i.
371def WriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
372 let NumMicroOps = 4;
373 let ResourceCycles = [1, 2, 1];
374}
375def : InstRW<[WriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
376
377// BOUND.
378// r,m.
379def WriteBOUND : SchedWriteRes<[]> {
380 let NumMicroOps = 15;
381}
382def : InstRW<[WriteBOUND], (instregex "BOUNDS(16|32)rm")>;
383
384// INTO.
385def WriteINTO : SchedWriteRes<[]> {
386 let NumMicroOps = 4;
387}
388def : InstRW<[WriteINTO], (instregex "INTO")>;
389
390//-- String instructions --//
391
392// LODSB/W.
393def : InstRW<[Write2P0156_P23], (instregex "LODS(B|W)")>;
394
395// LODSD/Q.
396def : InstRW<[WriteP0156_P23], (instregex "LODS(L|Q)")>;
397
Michael Zuckermanf6684002017-06-28 11:23:31 +0000398// MOVS.
399def WriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
400 let Latency = 4;
401 let NumMicroOps = 5;
402 let ResourceCycles = [2, 1, 2];
403}
Craig Topper2d451e72018-03-18 08:38:06 +0000404def : InstRW<[WriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000405
Michael Zuckermanf6684002017-06-28 11:23:31 +0000406// CMPS.
407def WriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
408 let Latency = 4;
409 let NumMicroOps = 5;
410 let ResourceCycles = [2, 3];
411}
412def : InstRW<[WriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
413
Michael Zuckermanf6684002017-06-28 11:23:31 +0000414//-- Other --//
415
Gadi Haberd76f7b82017-08-28 10:04:16 +0000416// RDPMC.f
Michael Zuckermanf6684002017-06-28 11:23:31 +0000417def WriteRDPMC : SchedWriteRes<[]> {
418 let NumMicroOps = 34;
419}
420def : InstRW<[WriteRDPMC], (instregex "RDPMC")>;
421
422// RDRAND.
423def WriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
424 let NumMicroOps = 17;
425 let ResourceCycles = [1, 16];
426}
427def : InstRW<[WriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
428
429//=== Floating Point x87 Instructions ===//
430//-- Move instructions --//
431
432// FLD.
433// m80.
434def : InstRW<[WriteP01], (instregex "LD_Frr")>;
435
Michael Zuckermanf6684002017-06-28 11:23:31 +0000436// FBLD.
437// m80.
438def WriteFBLD : SchedWriteRes<[]> {
439 let Latency = 47;
440 let NumMicroOps = 43;
441}
442def : InstRW<[WriteFBLD], (instregex "FBLDm")>;
443
444// FST(P).
445// r.
446def : InstRW<[WriteP01], (instregex "ST_(F|FP)rr")>;
447
Michael Zuckermanf6684002017-06-28 11:23:31 +0000448// FLDZ.
449def : InstRW<[WriteP01], (instregex "LD_F0")>;
450
Michael Zuckermanf6684002017-06-28 11:23:31 +0000451// FLDPI FLDL2E etc.
Simon Pilgrim62690e92018-03-20 15:44:47 +0000452def : InstRW<[Write2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000453
Michael Zuckermanf6684002017-06-28 11:23:31 +0000454// FFREE.
455def : InstRW<[WriteP01], (instregex "FFREE")>;
456
457// FNSAVE.
458def WriteFNSAVE : SchedWriteRes<[]> {
459 let NumMicroOps = 147;
460}
461def : InstRW<[WriteFNSAVE], (instregex "FSAVEm")>;
462
463// FRSTOR.
464def WriteFRSTOR : SchedWriteRes<[]> {
465 let NumMicroOps = 90;
466}
467def : InstRW<[WriteFRSTOR], (instregex "FRSTORm")>;
468
469//-- Arithmetic instructions --//
470
471// FABS.
472def : InstRW<[WriteP0], (instregex "ABS_F")>;
473
474// FCHS.
475def : InstRW<[WriteP0], (instregex "CHS_F")>;
476
Michael Zuckermanf6684002017-06-28 11:23:31 +0000477// FCOMPP FUCOMPP.
478// r.
479def : InstRW<[Write2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
480
481// FCOMI(P) FUCOMI(P).
482// m.
483def : InstRW<[Write3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
484 "UCOM_FIPr")>;
485
Michael Zuckermanf6684002017-06-28 11:23:31 +0000486// FTST.
487def : InstRW<[WriteP1], (instregex "TST_F")>;
488
489// FXAM.
490def : InstRW<[Write2P1], (instregex "FXAM")>;
491
492// FPREM.
493def WriteFPREM : SchedWriteRes<[]> {
494 let Latency = 19;
495 let NumMicroOps = 28;
496}
Craig Topper2d451e72018-03-18 08:38:06 +0000497def : InstRW<[WriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000498
499// FPREM1.
500def WriteFPREM1 : SchedWriteRes<[]> {
501 let Latency = 27;
502 let NumMicroOps = 41;
503}
Craig Topper2d451e72018-03-18 08:38:06 +0000504def : InstRW<[WriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000505
506// FRNDINT.
507def WriteFRNDINT : SchedWriteRes<[]> {
508 let Latency = 11;
509 let NumMicroOps = 17;
510}
511def : InstRW<[WriteFRNDINT], (instregex "FRNDINT")>;
512
513//-- Math instructions --//
514
515// FSCALE.
516def WriteFSCALE : SchedWriteRes<[]> {
517 let Latency = 75; // 49-125
518 let NumMicroOps = 50; // 25-75
519}
520def : InstRW<[WriteFSCALE], (instregex "FSCALE")>;
521
522// FXTRACT.
523def WriteFXTRACT : SchedWriteRes<[]> {
524 let Latency = 15;
525 let NumMicroOps = 17;
526}
527def : InstRW<[WriteFXTRACT], (instregex "FXTRACT")>;
528
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000529////////////////////////////////////////////////////////////////////////////////
530// Horizontal add/sub instructions.
531////////////////////////////////////////////////////////////////////////////////
532
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000533defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1, 2], 3>;
534defm : HWWriteResPair<WritePHAdd, [HWPort1, HWPort5], 3, [1, 2], 3>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000535
Michael Zuckermanf6684002017-06-28 11:23:31 +0000536//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000537
Gadi Haberd76f7b82017-08-28 10:04:16 +0000538// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000539
Gadi Haberd76f7b82017-08-28 10:04:16 +0000540def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000541 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000542 let NumMicroOps = 1;
543 let ResourceCycles = [1];
544}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000545def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
546 "(V?)LDDQUrm",
547 "(V?)MOVAPDrm",
548 "(V?)MOVAPSrm",
549 "(V?)MOVDQArm",
550 "(V?)MOVDQUrm",
551 "(V?)MOVNTDQArm",
552 "(V?)MOVSHDUPrm",
553 "(V?)MOVSLDUPrm",
554 "(V?)MOVUPDrm",
555 "(V?)MOVUPSrm",
556 "VPBROADCASTDrm",
557 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000558 "(V?)ROUNDPD(Y?)r",
559 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000560 "(V?)ROUNDSDr",
561 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000562
563def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
564 let Latency = 7;
565 let NumMicroOps = 1;
566 let ResourceCycles = [1];
567}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000568def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
569 "LD_F64m",
570 "LD_F80m",
571 "VBROADCASTF128",
572 "VBROADCASTI128",
573 "VBROADCASTSDYrm",
574 "VBROADCASTSSYrm",
575 "VLDDQUYrm",
576 "VMOVAPDYrm",
577 "VMOVAPSYrm",
578 "VMOVDDUPYrm",
579 "VMOVDQAYrm",
580 "VMOVDQUYrm",
581 "VMOVNTDQAYrm",
582 "VMOVSHDUPYrm",
583 "VMOVSLDUPYrm",
584 "VMOVUPDYrm",
585 "VMOVUPSYrm",
586 "VPBROADCASTDYrm",
587 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000588
589def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
590 let Latency = 5;
591 let NumMicroOps = 1;
592 let ResourceCycles = [1];
593}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000594def: InstRW<[HWWriteResGroup0_2], (instregex "MMX_MOVD64rm",
595 "MMX_MOVD64to64rm",
596 "MMX_MOVQ64rm",
597 "MOV(8|16|32|64)rm",
598 "MOVSX(16|32|64)rm16",
599 "MOVSX(16|32|64)rm32",
600 "MOVSX(16|32|64)rm8",
601 "MOVZX(16|32|64)rm16",
602 "MOVZX(16|32|64)rm8",
603 "PREFETCHNTA",
604 "PREFETCHT0",
605 "PREFETCHT1",
606 "PREFETCHT2",
607 "(V?)MOV64toPQIrm",
608 "(V?)MOVDDUPrm",
609 "(V?)MOVDI2PDIrm",
610 "(V?)MOVQI2PQIrm",
611 "(V?)MOVSDrm",
612 "(V?)MOVSSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000613
Gadi Haberd76f7b82017-08-28 10:04:16 +0000614def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
615 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000616 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000617 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000618}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000619def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
620 "MMX_MOVD64from64rm",
621 "MMX_MOVD64mr",
622 "MMX_MOVNTQmr",
623 "MMX_MOVQ64mr",
624 "MOV(16|32|64)mr",
625 "MOV8mi",
626 "MOV8mr",
627 "MOVNTI_64mr",
628 "MOVNTImr",
629 "ST_FP32m",
630 "ST_FP64m",
631 "ST_FP80m",
632 "VEXTRACTF128mr",
633 "VEXTRACTI128mr",
634 "(V?)MOVAPD(Y?)mr",
635 "(V?)MOVAPS(V?)mr",
636 "(V?)MOVDQA(Y?)mr",
637 "(V?)MOVDQU(Y?)mr",
638 "(V?)MOVHPDmr",
639 "(V?)MOVHPSmr",
640 "(V?)MOVLPDmr",
641 "(V?)MOVLPSmr",
642 "(V?)MOVNTDQ(Y?)mr",
643 "(V?)MOVNTPD(Y?)mr",
644 "(V?)MOVNTPS(Y?)mr",
645 "(V?)MOVPDI2DImr",
646 "(V?)MOVPQI2QImr",
647 "(V?)MOVPQIto64mr",
648 "(V?)MOVSDmr",
649 "(V?)MOVSSmr",
650 "(V?)MOVUPD(Y?)mr",
651 "(V?)MOVUPS(Y?)mr",
652 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000653
Gadi Haberd76f7b82017-08-28 10:04:16 +0000654def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
655 let Latency = 1;
656 let NumMicroOps = 1;
657 let ResourceCycles = [1];
658}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000659def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
660 "MMX_MOVD64grr",
661 "MMX_PMOVMSKBrr",
662 "MMX_PSLLDri",
663 "MMX_PSLLDrr",
664 "MMX_PSLLQri",
665 "MMX_PSLLQrr",
666 "MMX_PSLLWri",
667 "MMX_PSLLWrr",
668 "MMX_PSRADri",
669 "MMX_PSRADrr",
670 "MMX_PSRAWri",
671 "MMX_PSRAWrr",
672 "MMX_PSRLDri",
673 "MMX_PSRLDrr",
674 "MMX_PSRLQri",
675 "MMX_PSRLQrr",
676 "MMX_PSRLWri",
677 "MMX_PSRLWrr",
678 "(V?)MOVPDI2DIrr",
679 "(V?)MOVPQIto64rr",
680 "(V?)PSLLD(Y?)ri",
681 "(V?)PSLLQ(Y?)ri",
682 "VPSLLVQ(Y?)rr",
683 "(V?)PSLLW(Y?)ri",
684 "(V?)PSRAD(Y?)ri",
685 "(V?)PSRAW(Y?)ri",
686 "(V?)PSRLD(Y?)ri",
687 "(V?)PSRLQ(Y?)ri",
688 "VPSRLVQ(Y?)rr",
689 "(V?)PSRLW(Y?)ri",
690 "VTESTPDYrr",
691 "VTESTPDrr",
692 "VTESTPSYrr",
693 "VTESTPSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000694
695def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
696 let Latency = 1;
697 let NumMicroOps = 1;
698 let ResourceCycles = [1];
699}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000700def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
701 "COM_FST0r",
702 "UCOM_FPr",
703 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000704
705def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
706 let Latency = 1;
707 let NumMicroOps = 1;
708 let ResourceCycles = [1];
709}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000710def: InstRW<[HWWriteResGroup4], (instregex "ANDNPDrr",
711 "ANDNPSrr",
712 "ANDPDrr",
713 "ANDPSrr",
714 "INSERTPSrr",
715 "MMX_MOVD64rr",
716 "MMX_MOVD64to64rr",
717 "MMX_MOVQ2DQrr",
718 "MMX_PALIGNRrri",
719 "MMX_PSHUFBrr",
720 "MMX_PSHUFWri",
721 "MMX_PUNPCKHBWirr",
722 "MMX_PUNPCKHDQirr",
723 "MMX_PUNPCKHWDirr",
724 "MMX_PUNPCKLBWirr",
725 "MMX_PUNPCKLDQirr",
726 "MMX_PUNPCKLWDirr",
727 "MOV64toPQIrr",
728 "MOVAPDrr",
729 "MOVAPSrr",
730 "MOVDDUPrr",
731 "MOVDI2PDIrr",
732 "MOVHLPSrr",
733 "MOVLHPSrr",
734 "MOVSDrr",
735 "MOVSHDUPrr",
736 "MOVSLDUPrr",
737 "MOVSSrr",
738 "MOVUPDrr",
739 "MOVUPSrr",
740 "ORPDrr",
741 "ORPSrr",
742 "PACKSSDWrr",
743 "PACKSSWBrr",
744 "PACKUSDWrr",
745 "PACKUSWBrr",
746 "PALIGNRrri",
747 "PBLENDWrri",
748 "PMOVSXBDrr",
749 "PMOVSXBQrr",
750 "PMOVSXBWrr",
751 "PMOVSXDQrr",
752 "PMOVSXWDrr",
753 "PMOVSXWQrr",
754 "PMOVZXBDrr",
755 "PMOVZXBQrr",
756 "PMOVZXBWrr",
757 "PMOVZXDQrr",
758 "PMOVZXWDrr",
759 "PMOVZXWQrr",
760 "PSHUFBrr",
761 "PSHUFDri",
762 "PSHUFHWri",
763 "PSHUFLWri",
764 "PSLLDQri",
765 "PSRLDQri",
766 "PUNPCKHBWrr",
767 "PUNPCKHDQrr",
768 "PUNPCKHQDQrr",
769 "PUNPCKHWDrr",
770 "PUNPCKLBWrr",
771 "PUNPCKLDQrr",
772 "PUNPCKLQDQrr",
773 "PUNPCKLWDrr",
774 "SHUFPDrri",
775 "SHUFPSrri",
776 "UNPCKHPDrr",
777 "UNPCKHPSrr",
778 "UNPCKLPDrr",
779 "UNPCKLPSrr",
780 "VANDNPDYrr",
781 "VANDNPDrr",
782 "VANDNPSYrr",
783 "VANDNPSrr",
784 "VANDPDYrr",
785 "VANDPDrr",
786 "VANDPSYrr",
787 "VANDPSrr",
788 "VBROADCASTSSrr",
789 "VINSERTPSrr",
790 "VMOV64toPQIrr",
791 "VMOVAPDYrr",
792 "VMOVAPDrr",
793 "VMOVAPSYrr",
794 "VMOVAPSrr",
795 "VMOVDDUPYrr",
796 "VMOVDDUPrr",
797 "VMOVDI2PDIrr",
798 "VMOVHLPSrr",
799 "VMOVLHPSrr",
800 "VMOVSDrr",
801 "VMOVSHDUPYrr",
802 "VMOVSHDUPrr",
803 "VMOVSLDUPYrr",
804 "VMOVSLDUPrr",
805 "VMOVSSrr",
806 "VMOVUPDYrr",
807 "VMOVUPDrr",
808 "VMOVUPSYrr",
809 "VMOVUPSrr",
810 "VORPDYrr",
811 "VORPDrr",
812 "VORPSYrr",
813 "VORPSrr",
814 "VPACKSSDWYrr",
815 "VPACKSSDWrr",
816 "VPACKSSWBYrr",
817 "VPACKSSWBrr",
818 "VPACKUSDWYrr",
819 "VPACKUSDWrr",
820 "VPACKUSWBYrr",
821 "VPACKUSWBrr",
822 "VPALIGNRYrri",
823 "VPALIGNRrri",
824 "VPBLENDWYrri",
825 "VPBLENDWrri",
826 "VPBROADCASTDrr",
827 "VPBROADCASTQrr",
828 "VPERMILPDYri",
829 "VPERMILPDYrr",
830 "VPERMILPDri",
831 "VPERMILPDrr",
832 "VPERMILPSYri",
833 "VPERMILPSYrr",
834 "VPERMILPSri",
835 "VPERMILPSrr",
836 "VPMOVSXBDrr",
837 "VPMOVSXBQrr",
838 "VPMOVSXBWrr",
839 "VPMOVSXDQrr",
840 "VPMOVSXWDrr",
841 "VPMOVSXWQrr",
842 "VPMOVZXBDrr",
843 "VPMOVZXBQrr",
844 "VPMOVZXBWrr",
845 "VPMOVZXDQrr",
846 "VPMOVZXWDrr",
847 "VPMOVZXWQrr",
848 "VPSHUFBYrr",
849 "VPSHUFBrr",
850 "VPSHUFDYri",
851 "VPSHUFDri",
852 "VPSHUFHWYri",
853 "VPSHUFHWri",
854 "VPSHUFLWYri",
855 "VPSHUFLWri",
856 "VPSLLDQYri",
857 "VPSLLDQri",
858 "VPSRLDQYri",
859 "VPSRLDQri",
860 "VPUNPCKHBWYrr",
861 "VPUNPCKHBWrr",
862 "VPUNPCKHDQYrr",
863 "VPUNPCKHDQrr",
864 "VPUNPCKHQDQYrr",
865 "VPUNPCKHQDQrr",
866 "VPUNPCKHWDYrr",
867 "VPUNPCKHWDrr",
868 "VPUNPCKLBWYrr",
869 "VPUNPCKLBWrr",
870 "VPUNPCKLDQYrr",
871 "VPUNPCKLDQrr",
872 "VPUNPCKLQDQYrr",
873 "VPUNPCKLQDQrr",
874 "VPUNPCKLWDYrr",
875 "VPUNPCKLWDrr",
876 "VSHUFPDYrri",
877 "VSHUFPDrri",
878 "VSHUFPSYrri",
879 "VSHUFPSrri",
880 "VUNPCKHPDYrr",
881 "VUNPCKHPDrr",
882 "VUNPCKHPSYrr",
883 "VUNPCKHPSrr",
884 "VUNPCKLPDYrr",
885 "VUNPCKLPDrr",
886 "VUNPCKLPSYrr",
887 "VUNPCKLPSrr",
888 "(V?)XORPD(Y?)rr",
889 "(V?)XORPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000890
891def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
892 let Latency = 1;
893 let NumMicroOps = 1;
894 let ResourceCycles = [1];
895}
896def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
897
898def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
899 let Latency = 1;
900 let NumMicroOps = 1;
901 let ResourceCycles = [1];
902}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000903def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP",
904 "FNOP")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000905
906def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
907 let Latency = 1;
908 let NumMicroOps = 1;
909 let ResourceCycles = [1];
910}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000911def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
912 "BT(16|32|64)rr",
913 "BTC(16|32|64)ri8",
914 "BTC(16|32|64)rr",
915 "BTR(16|32|64)ri8",
916 "BTR(16|32|64)rr",
917 "BTS(16|32|64)ri8",
918 "BTS(16|32|64)rr",
919 "CDQ",
920 "CQO",
921 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_1",
922 "J(A|AE|B|BE|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)_4",
923 "JMP_1",
924 "JMP_4",
925 "RORX(32|64)ri",
926 "SAR(8|16|32|64)r1",
927 "SAR(8|16|32|64)ri",
928 "SARX(32|64)rr",
929 "SET(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)r",
930 "SHL(8|16|32|64)r1",
931 "SHL(8|16|32|64)ri",
932 "SHLX(32|64)rr",
933 "SHR(8|16|32|64)r1",
934 "SHR(8|16|32|64)ri",
935 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000936
937def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
938 let Latency = 1;
939 let NumMicroOps = 1;
940 let ResourceCycles = [1];
941}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000942def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
943 "BLSI(32|64)rr",
944 "BLSMSK(32|64)rr",
945 "BLSR(32|64)rr",
946 "BZHI(32|64)rr",
947 "LEA(16|32|64)(_32)?r",
948 "MMX_PABSBrr",
949 "MMX_PABSDrr",
950 "MMX_PABSWrr",
951 "MMX_PADDBirr",
952 "MMX_PADDDirr",
953 "MMX_PADDQirr",
954 "MMX_PADDSBirr",
955 "MMX_PADDSWirr",
956 "MMX_PADDUSBirr",
957 "MMX_PADDUSWirr",
958 "MMX_PADDWirr",
959 "MMX_PAVGBirr",
960 "MMX_PAVGWirr",
961 "MMX_PCMPEQBirr",
962 "MMX_PCMPEQDirr",
963 "MMX_PCMPEQWirr",
964 "MMX_PCMPGTBirr",
965 "MMX_PCMPGTDirr",
966 "MMX_PCMPGTWirr",
967 "MMX_PMAXSWirr",
968 "MMX_PMAXUBirr",
969 "MMX_PMINSWirr",
970 "MMX_PMINUBirr",
971 "MMX_PSIGNBrr",
972 "MMX_PSIGNDrr",
973 "MMX_PSIGNWrr",
974 "MMX_PSUBBirr",
975 "MMX_PSUBDirr",
976 "MMX_PSUBQirr",
977 "MMX_PSUBSBirr",
978 "MMX_PSUBSWirr",
979 "MMX_PSUBUSBirr",
980 "MMX_PSUBUSWirr",
981 "MMX_PSUBWirr",
982 "PABSBrr",
983 "PABSDrr",
984 "PABSWrr",
985 "PADDBrr",
986 "PADDDrr",
987 "PADDQrr",
988 "PADDSBrr",
989 "PADDSWrr",
990 "PADDUSBrr",
991 "PADDUSWrr",
992 "PADDWrr",
993 "PAVGBrr",
994 "PAVGWrr",
995 "PCMPEQBrr",
996 "PCMPEQDrr",
997 "PCMPEQQrr",
998 "PCMPEQWrr",
999 "PCMPGTBrr",
1000 "PCMPGTDrr",
1001 "PCMPGTWrr",
1002 "PMAXSBrr",
1003 "PMAXSDrr",
1004 "PMAXSWrr",
1005 "PMAXUBrr",
1006 "PMAXUDrr",
1007 "PMAXUWrr",
1008 "PMINSBrr",
1009 "PMINSDrr",
1010 "PMINSWrr",
1011 "PMINUBrr",
1012 "PMINUDrr",
1013 "PMINUWrr",
1014 "PSIGNBrr",
1015 "PSIGNDrr",
1016 "PSIGNWrr",
1017 "PSUBBrr",
1018 "PSUBDrr",
1019 "PSUBQrr",
1020 "PSUBSBrr",
1021 "PSUBSWrr",
1022 "PSUBUSBrr",
1023 "PSUBUSWrr",
1024 "PSUBWrr",
1025 "VPABSBYrr",
1026 "VPABSBrr",
1027 "VPABSDYrr",
1028 "VPABSDrr",
1029 "VPABSWYrr",
1030 "VPABSWrr",
1031 "VPADDBYrr",
1032 "VPADDBrr",
1033 "VPADDDYrr",
1034 "VPADDDrr",
1035 "VPADDQYrr",
1036 "VPADDQrr",
1037 "VPADDSBYrr",
1038 "VPADDSBrr",
1039 "VPADDSWYrr",
1040 "VPADDSWrr",
1041 "VPADDUSBYrr",
1042 "VPADDUSBrr",
1043 "VPADDUSWYrr",
1044 "VPADDUSWrr",
1045 "VPADDWYrr",
1046 "VPADDWrr",
1047 "VPAVGBYrr",
1048 "VPAVGBrr",
1049 "VPAVGWYrr",
1050 "VPAVGWrr",
1051 "VPCMPEQBYrr",
1052 "VPCMPEQBrr",
1053 "VPCMPEQDYrr",
1054 "VPCMPEQDrr",
1055 "VPCMPEQQYrr",
1056 "VPCMPEQQrr",
1057 "VPCMPEQWYrr",
1058 "VPCMPEQWrr",
1059 "VPCMPGTBYrr",
1060 "VPCMPGTBrr",
1061 "VPCMPGTDYrr",
1062 "VPCMPGTDrr",
1063 "VPCMPGTWYrr",
1064 "VPCMPGTWrr",
1065 "VPMAXSBYrr",
1066 "VPMAXSBrr",
1067 "VPMAXSDYrr",
1068 "VPMAXSDrr",
1069 "VPMAXSWYrr",
1070 "VPMAXSWrr",
1071 "VPMAXUBYrr",
1072 "VPMAXUBrr",
1073 "VPMAXUDYrr",
1074 "VPMAXUDrr",
1075 "VPMAXUWYrr",
1076 "VPMAXUWrr",
1077 "VPMINSBYrr",
1078 "VPMINSBrr",
1079 "VPMINSDYrr",
1080 "VPMINSDrr",
1081 "VPMINSWYrr",
1082 "VPMINSWrr",
1083 "VPMINUBYrr",
1084 "VPMINUBrr",
1085 "VPMINUDYrr",
1086 "VPMINUDrr",
1087 "VPMINUWYrr",
1088 "VPMINUWrr",
1089 "VPSIGNBYrr",
1090 "VPSIGNBrr",
1091 "VPSIGNDYrr",
1092 "VPSIGNDrr",
1093 "VPSIGNWYrr",
1094 "VPSIGNWrr",
1095 "VPSUBBYrr",
1096 "VPSUBBrr",
1097 "VPSUBDYrr",
1098 "VPSUBDrr",
1099 "VPSUBQYrr",
1100 "VPSUBQrr",
1101 "VPSUBSBYrr",
1102 "VPSUBSBrr",
1103 "VPSUBSWYrr",
1104 "VPSUBSWrr",
1105 "VPSUBUSBYrr",
1106 "VPSUBUSBrr",
1107 "VPSUBUSWYrr",
1108 "VPSUBUSWrr",
1109 "VPSUBWYrr",
1110 "VPSUBWrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001111
1112def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
1113 let Latency = 1;
1114 let NumMicroOps = 1;
1115 let ResourceCycles = [1];
1116}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001117def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
1118 "MMX_PANDNirr",
1119 "MMX_PANDirr",
1120 "MMX_PORirr",
1121 "MMX_PXORirr",
1122 "(V?)BLENDPD(Y?)rri",
1123 "(V?)BLENDPS(Y?)rri",
1124 "(V?)MOVDQA(Y?)rr",
1125 "(V?)MOVDQU(Y?)rr",
1126 "(V?)MOVPQI2QIrr",
1127 "VMOVZPQILo2PQIrr",
1128 "(V?)PANDN(Y?)rr",
1129 "(V?)PAND(Y?)rr",
1130 "VPBLENDD(Y?)rri",
1131 "(V?)POR(Y?)rr",
1132 "(V?)PXOR(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001133
1134def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
1135 let Latency = 1;
1136 let NumMicroOps = 1;
1137 let ResourceCycles = [1];
1138}
Craig Topper2d451e72018-03-18 08:38:06 +00001139def: InstRW<[HWWriteResGroup10], (instrs CWDE)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001140def: InstRW<[HWWriteResGroup10], (instregex "ADD(8|16|32|64)ri",
1141 "ADD(8|16|32|64)rr",
1142 "ADD(8|16|32|64)i",
1143 "AND(8|16|32|64)ri",
1144 "AND(8|16|32|64)rr",
1145 "AND(8|16|32|64)i",
1146 "CBW",
1147 "CLC",
1148 "CMC",
1149 "CMP(8|16|32|64)ri",
1150 "CMP(8|16|32|64)rr",
1151 "CMP(8|16|32|64)i",
1152 "DEC(8|16|32|64)r",
1153 "INC(8|16|32|64)r",
1154 "LAHF",
1155 "MOV(8|16|32|64)rr",
1156 "MOV(8|16|32|64)ri",
1157 "MOVSX(16|32|64)rr16",
1158 "MOVSX(16|32|64)rr32",
1159 "MOVSX(16|32|64)rr8",
1160 "MOVZX(16|32|64)rr16",
1161 "MOVZX(16|32|64)rr8",
1162 "NEG(8|16|32|64)r",
1163 "NOOP",
1164 "NOT(8|16|32|64)r",
1165 "OR(8|16|32|64)ri",
1166 "OR(8|16|32|64)rr",
1167 "OR(8|16|32|64)i",
1168 "SAHF",
1169 "SGDT64m",
1170 "SIDT64m",
1171 "SLDT64m",
1172 "SMSW16m",
1173 "STC",
1174 "STRm",
1175 "SUB(8|16|32|64)ri",
1176 "SUB(8|16|32|64)rr",
1177 "SUB(8|16|32|64)i",
1178 "SYSCALL",
1179 "TEST(8|16|32|64)rr",
1180 "TEST(8|16|32|64)i",
1181 "TEST(8|16|32|64)ri",
1182 "XCHG(16|32|64)rr",
1183 "XOR(8|16|32|64)ri",
1184 "XOR(8|16|32|64)rr",
1185 "XOR(8|16|32|64)i")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001186
1187def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001188 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001189 let NumMicroOps = 2;
1190 let ResourceCycles = [1,1];
1191}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001192def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
1193 "MMX_PSLLQrm",
1194 "MMX_PSLLWrm",
1195 "MMX_PSRADrm",
1196 "MMX_PSRAWrm",
1197 "MMX_PSRLDrm",
1198 "MMX_PSRLQrm",
1199 "MMX_PSRLWrm",
1200 "VCVTPH2PSrm",
1201 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001202
Gadi Haber2cf601f2017-12-08 09:48:44 +00001203def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
1204 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001205 let NumMicroOps = 2;
1206 let ResourceCycles = [1,1];
1207}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001208def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
1209 "(V?)CVTSS2SDrm",
1210 "VPSLLVQrm",
1211 "VPSRLVQrm",
1212 "VTESTPDrm",
1213 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001214
1215def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1216 let Latency = 8;
1217 let NumMicroOps = 2;
1218 let ResourceCycles = [1,1];
1219}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001220def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
1221 "VPSLLQYrm",
1222 "VPSLLVQYrm",
1223 "VPSLLWYrm",
1224 "VPSRADYrm",
1225 "VPSRAWYrm",
1226 "VPSRLDYrm",
1227 "VPSRLQYrm",
1228 "VPSRLVQYrm",
1229 "VPSRLWYrm",
1230 "VTESTPDYrm",
1231 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001232
1233def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
1234 let Latency = 8;
1235 let NumMicroOps = 2;
1236 let ResourceCycles = [1,1];
1237}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001238def: InstRW<[HWWriteResGroup12], (instrs MUL8m, MUL16m,
1239 IMUL8m, IMUL16m,
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001240 IMUL16rm, IMUL16rmi, IMUL16rmi8, IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi32, IMUL64rmi8)>;
1241def: InstRW<[HWWriteResGroup12], (instregex "BSF(16|32|64)rm",
1242 "BSR(16|32|64)rm",
1243 "FCOM32m",
1244 "FCOM64m",
1245 "FCOMP32m",
1246 "FCOMP64m",
1247 "LZCNT(16|32|64)rm",
1248 "MMX_CVTPI2PSirm",
1249 "MMX_CVTPS2PIirm",
1250 "MMX_CVTTPS2PIirm",
1251 "PDEP(32|64)rm",
1252 "PEXT(32|64)rm",
1253 "POPCNT(16|32|64)rm",
1254 "TZCNT(16|32|64)rm",
1255 "(V?)ADDSDrm",
1256 "(V?)ADDSSrm",
1257 "(V?)CMPSDrm",
1258 "(V?)CMPSSrm",
1259 "(V?)COMISDrm",
1260 "(V?)COMISSrm",
1261 "(V?)MAX(C?)SDrm",
1262 "(V?)MAX(C?)SSrm",
1263 "(V?)MIN(C?)SDrm",
1264 "(V?)MIN(C?)SSrm",
1265 "(V?)SUBSDrm",
1266 "(V?)SUBSSrm",
1267 "(V?)UCOMISDrm",
1268 "(V?)UCOMISSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001269
1270def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001271 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001272 let NumMicroOps = 2;
1273 let ResourceCycles = [1,1];
1274}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001275def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
1276 "(V?)ANDNPDrm",
1277 "(V?)ANDNPSrm",
1278 "(V?)ANDPDrm",
1279 "(V?)ANDPSrm",
1280 "(V?)INSERTPSrm",
1281 "(V?)ORPDrm",
1282 "(V?)ORPSrm",
1283 "(V?)PACKSSDWrm",
1284 "(V?)PACKSSWBrm",
1285 "(V?)PACKUSDWrm",
1286 "(V?)PACKUSWBrm",
1287 "(V?)PALIGNRrmi",
1288 "(V?)PBLENDWrmi",
1289 "VPERMILPDmi",
1290 "VPERMILPDrm",
1291 "VPERMILPSmi",
1292 "VPERMILPSrm",
1293 "(V?)PSHUFBrm",
1294 "(V?)PSHUFDmi",
1295 "(V?)PSHUFHWmi",
1296 "(V?)PSHUFLWmi",
1297 "(V?)PUNPCKHBWrm",
1298 "(V?)PUNPCKHDQrm",
1299 "(V?)PUNPCKHQDQrm",
1300 "(V?)PUNPCKHWDrm",
1301 "(V?)PUNPCKLBWrm",
1302 "(V?)PUNPCKLDQrm",
1303 "(V?)PUNPCKLQDQrm",
1304 "(V?)PUNPCKLWDrm",
1305 "(V?)SHUFPDrmi",
1306 "(V?)SHUFPSrmi",
1307 "(V?)UNPCKHPDrm",
1308 "(V?)UNPCKHPSrm",
1309 "(V?)UNPCKLPDrm",
1310 "(V?)UNPCKLPSrm",
1311 "(V?)XORPDrm",
1312 "(V?)XORPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001313
Gadi Haber2cf601f2017-12-08 09:48:44 +00001314def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1315 let Latency = 8;
1316 let NumMicroOps = 2;
1317 let ResourceCycles = [1,1];
1318}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001319def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
1320 "VANDNPSYrm",
1321 "VANDPDYrm",
1322 "VANDPSYrm",
1323 "VORPDYrm",
1324 "VORPSYrm",
1325 "VPACKSSDWYrm",
1326 "VPACKSSWBYrm",
1327 "VPACKUSDWYrm",
1328 "VPACKUSWBYrm",
1329 "VPALIGNRYrmi",
1330 "VPBLENDWYrmi",
1331 "VPERMILPDYmi",
1332 "VPERMILPDYrm",
1333 "VPERMILPSYmi",
1334 "VPERMILPSYrm",
1335 "VPMOVSXBDYrm",
1336 "VPMOVSXBQYrm",
1337 "VPMOVSXWQYrm",
1338 "VPSHUFBYrm",
1339 "VPSHUFDYmi",
1340 "VPSHUFHWYmi",
1341 "VPSHUFLWYmi",
1342 "VPUNPCKHBWYrm",
1343 "VPUNPCKHDQYrm",
1344 "VPUNPCKHQDQYrm",
1345 "VPUNPCKHWDYrm",
1346 "VPUNPCKLBWYrm",
1347 "VPUNPCKLDQYrm",
1348 "VPUNPCKLQDQYrm",
1349 "VPUNPCKLWDYrm",
1350 "VSHUFPDYrmi",
1351 "VSHUFPSYrmi",
1352 "VUNPCKHPDYrm",
1353 "VUNPCKHPSYrm",
1354 "VUNPCKLPDYrm",
1355 "VUNPCKLPSYrm",
1356 "VXORPDYrm",
1357 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001358
1359def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1360 let Latency = 6;
1361 let NumMicroOps = 2;
1362 let ResourceCycles = [1,1];
1363}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001364def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
1365 "MMX_PINSRWrm",
1366 "MMX_PSHUFBrm",
1367 "MMX_PSHUFWmi",
1368 "MMX_PUNPCKHBWirm",
1369 "MMX_PUNPCKHDQirm",
1370 "MMX_PUNPCKHWDirm",
1371 "MMX_PUNPCKLBWirm",
1372 "MMX_PUNPCKLDQirm",
1373 "MMX_PUNPCKLWDirm",
1374 "(V?)MOVHPDrm",
1375 "(V?)MOVHPSrm",
1376 "(V?)MOVLPDrm",
1377 "(V?)MOVLPSrm",
1378 "(V?)PINSRBrm",
1379 "(V?)PINSRDrm",
1380 "(V?)PINSRQrm",
1381 "(V?)PINSRWrm",
1382 "(V?)PMOVSXBDrm",
1383 "(V?)PMOVSXBQrm",
1384 "(V?)PMOVSXBWrm",
1385 "(V?)PMOVSXDQrm",
1386 "(V?)PMOVSXWDrm",
1387 "(V?)PMOVSXWQrm",
1388 "(V?)PMOVZXBDrm",
1389 "(V?)PMOVZXBQrm",
1390 "(V?)PMOVZXBWrm",
1391 "(V?)PMOVZXDQrm",
1392 "(V?)PMOVZXWDrm",
1393 "(V?)PMOVZXWQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001394
Gadi Haberd76f7b82017-08-28 10:04:16 +00001395def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001396 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001397 let NumMicroOps = 2;
1398 let ResourceCycles = [1,1];
1399}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001400def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
1401 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001402
1403def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001404 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001405 let NumMicroOps = 2;
1406 let ResourceCycles = [1,1];
1407}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001408def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1409 "RORX(32|64)mi",
1410 "SARX(32|64)rm",
1411 "SHLX(32|64)rm",
1412 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001413
1414def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001415 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001416 let NumMicroOps = 2;
1417 let ResourceCycles = [1,1];
1418}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001419def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1420 "BLSI(32|64)rm",
1421 "BLSMSK(32|64)rm",
1422 "BLSR(32|64)rm",
1423 "BZHI(32|64)rm",
1424 "MMX_PABSBrm",
1425 "MMX_PABSDrm",
1426 "MMX_PABSWrm",
1427 "MMX_PADDBirm",
1428 "MMX_PADDDirm",
1429 "MMX_PADDQirm",
1430 "MMX_PADDSBirm",
1431 "MMX_PADDSWirm",
1432 "MMX_PADDUSBirm",
1433 "MMX_PADDUSWirm",
1434 "MMX_PADDWirm",
1435 "MMX_PAVGBirm",
1436 "MMX_PAVGWirm",
1437 "MMX_PCMPEQBirm",
1438 "MMX_PCMPEQDirm",
1439 "MMX_PCMPEQWirm",
1440 "MMX_PCMPGTBirm",
1441 "MMX_PCMPGTDirm",
1442 "MMX_PCMPGTWirm",
1443 "MMX_PMAXSWirm",
1444 "MMX_PMAXUBirm",
1445 "MMX_PMINSWirm",
1446 "MMX_PMINUBirm",
1447 "MMX_PSIGNBrm",
1448 "MMX_PSIGNDrm",
1449 "MMX_PSIGNWrm",
1450 "MMX_PSUBBirm",
1451 "MMX_PSUBDirm",
1452 "MMX_PSUBQirm",
1453 "MMX_PSUBSBirm",
1454 "MMX_PSUBSWirm",
1455 "MMX_PSUBUSBirm",
1456 "MMX_PSUBUSWirm",
1457 "MMX_PSUBWirm",
1458 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001459
1460def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1461 let Latency = 7;
1462 let NumMicroOps = 2;
1463 let ResourceCycles = [1,1];
1464}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001465def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1466 "(V?)PABSDrm",
1467 "(V?)PABSWrm",
1468 "(V?)PADDBrm",
1469 "(V?)PADDDrm",
1470 "(V?)PADDQrm",
1471 "(V?)PADDSBrm",
1472 "(V?)PADDSWrm",
1473 "(V?)PADDUSBrm",
1474 "(V?)PADDUSWrm",
1475 "(V?)PADDWrm",
1476 "(V?)PAVGBrm",
1477 "(V?)PAVGWrm",
1478 "(V?)PCMPEQBrm",
1479 "(V?)PCMPEQDrm",
1480 "(V?)PCMPEQQrm",
1481 "(V?)PCMPEQWrm",
1482 "(V?)PCMPGTBrm",
1483 "(V?)PCMPGTDrm",
1484 "(V?)PCMPGTWrm",
1485 "(V?)PMAXSBrm",
1486 "(V?)PMAXSDrm",
1487 "(V?)PMAXSWrm",
1488 "(V?)PMAXUBrm",
1489 "(V?)PMAXUDrm",
1490 "(V?)PMAXUWrm",
1491 "(V?)PMINSBrm",
1492 "(V?)PMINSDrm",
1493 "(V?)PMINSWrm",
1494 "(V?)PMINUBrm",
1495 "(V?)PMINUDrm",
1496 "(V?)PMINUWrm",
1497 "(V?)PSIGNBrm",
1498 "(V?)PSIGNDrm",
1499 "(V?)PSIGNWrm",
1500 "(V?)PSUBBrm",
1501 "(V?)PSUBDrm",
1502 "(V?)PSUBQrm",
1503 "(V?)PSUBSBrm",
1504 "(V?)PSUBSWrm",
1505 "(V?)PSUBUSBrm",
1506 "(V?)PSUBUSWrm",
1507 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001508
1509def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1510 let Latency = 8;
1511 let NumMicroOps = 2;
1512 let ResourceCycles = [1,1];
1513}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001514def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1515 "VPABSDYrm",
1516 "VPABSWYrm",
1517 "VPADDBYrm",
1518 "VPADDDYrm",
1519 "VPADDQYrm",
1520 "VPADDSBYrm",
1521 "VPADDSWYrm",
1522 "VPADDUSBYrm",
1523 "VPADDUSWYrm",
1524 "VPADDWYrm",
1525 "VPAVGBYrm",
1526 "VPAVGWYrm",
1527 "VPCMPEQBYrm",
1528 "VPCMPEQDYrm",
1529 "VPCMPEQQYrm",
1530 "VPCMPEQWYrm",
1531 "VPCMPGTBYrm",
1532 "VPCMPGTDYrm",
1533 "VPCMPGTWYrm",
1534 "VPMAXSBYrm",
1535 "VPMAXSDYrm",
1536 "VPMAXSWYrm",
1537 "VPMAXUBYrm",
1538 "VPMAXUDYrm",
1539 "VPMAXUWYrm",
1540 "VPMINSBYrm",
1541 "VPMINSDYrm",
1542 "VPMINSWYrm",
1543 "VPMINUBYrm",
1544 "VPMINUDYrm",
1545 "VPMINUWYrm",
1546 "VPSIGNBYrm",
1547 "VPSIGNDYrm",
1548 "VPSIGNWYrm",
1549 "VPSUBBYrm",
1550 "VPSUBDYrm",
1551 "VPSUBQYrm",
1552 "VPSUBSBYrm",
1553 "VPSUBSWYrm",
1554 "VPSUBUSBYrm",
1555 "VPSUBUSWYrm",
1556 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001557
1558def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001559 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001560 let NumMicroOps = 2;
1561 let ResourceCycles = [1,1];
1562}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001563def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1564 "(V?)BLENDPSrmi",
1565 "VINSERTF128rm",
1566 "VINSERTI128rm",
1567 "(V?)PANDNrm",
1568 "(V?)PANDrm",
1569 "VPBLENDDrmi",
1570 "(V?)PORrm",
1571 "(V?)PXORrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001572
Gadi Haber2cf601f2017-12-08 09:48:44 +00001573def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1574 let Latency = 6;
1575 let NumMicroOps = 2;
1576 let ResourceCycles = [1,1];
1577}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001578def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1579 "MMX_PANDirm",
1580 "MMX_PORirm",
1581 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001582
1583def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1584 let Latency = 8;
1585 let NumMicroOps = 2;
1586 let ResourceCycles = [1,1];
1587}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001588def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1589 "VBLENDPSYrmi",
1590 "VPANDNYrm",
1591 "VPANDYrm",
1592 "VPBLENDDYrmi",
1593 "VPORYrm",
1594 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001595
Gadi Haberd76f7b82017-08-28 10:04:16 +00001596def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001597 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001598 let NumMicroOps = 2;
1599 let ResourceCycles = [1,1];
1600}
Craig Topper2d451e72018-03-18 08:38:06 +00001601def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001602def: InstRW<[HWWriteResGroup18], (instregex "ADD(8|16|32|64)rm",
1603 "AND(8|16|32|64)rm",
1604 "CMP(8|16|32|64)mi",
1605 "CMP(8|16|32|64)mr",
1606 "CMP(8|16|32|64)rm",
1607 "OR(8|16|32|64)rm",
1608 "POP(16|32|64)rmr",
1609 "SUB(8|16|32|64)rm",
1610 "TEST(8|16|32|64)mr",
1611 "TEST(8|16|32|64)mi",
1612 "XOR(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001613
1614def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001615 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001616 let NumMicroOps = 2;
1617 let ResourceCycles = [1,1];
1618}
1619def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1620
1621def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001622 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001623 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001624 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001625}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001626def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1627 "(V?)PEXTRBmr",
1628 "(V?)PEXTRDmr",
1629 "(V?)PEXTRQmr",
1630 "(V?)PEXTRWmr",
1631 "(V?)STMXCSR")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001632
Gadi Haberd76f7b82017-08-28 10:04:16 +00001633def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001634 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001635 let NumMicroOps = 3;
1636 let ResourceCycles = [1,1,1];
1637}
1638def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001639
Gadi Haberd76f7b82017-08-28 10:04:16 +00001640def HWWriteResGroup22 : SchedWriteRes<[HWPort4,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001641 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001642 let NumMicroOps = 3;
1643 let ResourceCycles = [1,1,1];
1644}
Craig Topperf4cd9082018-01-19 05:47:32 +00001645def: 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 +00001646
Gadi Haberd76f7b82017-08-28 10:04:16 +00001647def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001648 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001649 let NumMicroOps = 3;
1650 let ResourceCycles = [1,1,1];
1651}
1652def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1653
1654def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001655 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001656 let NumMicroOps = 3;
1657 let ResourceCycles = [1,1,1];
1658}
1659def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1660
1661def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001662 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001663 let NumMicroOps = 3;
1664 let ResourceCycles = [1,1,1];
1665}
Craig Topper2d451e72018-03-18 08:38:06 +00001666def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001667def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1668 "PUSH64i8",
1669 "STOSB",
1670 "STOSL",
1671 "STOSQ",
1672 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001673
1674def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001675 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001676 let NumMicroOps = 4;
1677 let ResourceCycles = [1,1,1,1];
1678}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001679def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1680 "BTR(16|32|64)mi8",
1681 "BTS(16|32|64)mi8",
1682 "SAR(8|16|32|64)m1",
1683 "SAR(8|16|32|64)mi",
1684 "SHL(8|16|32|64)m1",
1685 "SHL(8|16|32|64)mi",
1686 "SHR(8|16|32|64)m1",
1687 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001688
1689def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001690 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001691 let NumMicroOps = 4;
1692 let ResourceCycles = [1,1,1,1];
1693}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001694def: InstRW<[HWWriteResGroup26], (instregex "ADD(8|16|32|64)mi",
1695 "ADD(8|16|32|64)mr",
1696 "AND(8|16|32|64)mi",
1697 "AND(8|16|32|64)mr",
1698 "DEC(8|16|32|64)m",
1699 "INC(8|16|32|64)m",
1700 "NEG(8|16|32|64)m",
1701 "NOT(8|16|32|64)m",
1702 "OR(8|16|32|64)mi",
1703 "OR(8|16|32|64)mr",
1704 "POP(16|32|64)rmm",
1705 "PUSH(16|32|64)rmm",
1706 "SUB(8|16|32|64)mi",
1707 "SUB(8|16|32|64)mr",
1708 "XOR(8|16|32|64)mi",
1709 "XOR(8|16|32|64)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001710
1711def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001712 let Latency = 2;
1713 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001714 let ResourceCycles = [2];
1715}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001716def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1717 "BLENDVPSrr0",
1718 "MMX_PINSRWrr",
1719 "PBLENDVBrr0",
1720 "VBLENDVPDYrr",
1721 "VBLENDVPDrr",
1722 "VBLENDVPSYrr",
1723 "VBLENDVPSrr",
1724 "VPBLENDVBYrr",
1725 "VPBLENDVBrr",
1726 "(V?)PINSRBrr",
1727 "(V?)PINSRDrr",
1728 "(V?)PINSRQrr",
1729 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001730
Gadi Haberd76f7b82017-08-28 10:04:16 +00001731def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1732 let Latency = 2;
1733 let NumMicroOps = 2;
1734 let ResourceCycles = [2];
1735}
1736def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1737
1738def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1739 let Latency = 2;
1740 let NumMicroOps = 2;
1741 let ResourceCycles = [2];
1742}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001743def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1744 "ROL(8|16|32|64)ri",
1745 "ROR(8|16|32|64)r1",
1746 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001747
1748def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1749 let Latency = 2;
1750 let NumMicroOps = 2;
1751 let ResourceCycles = [2];
1752}
1753def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1754def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1755def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1756def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1757
1758def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1759 let Latency = 2;
1760 let NumMicroOps = 2;
1761 let ResourceCycles = [1,1];
1762}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001763def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1764 "VCVTPH2PSYrr",
1765 "VCVTPH2PSrr",
1766 "(V?)CVTPS2PDrr",
1767 "(V?)CVTSS2SDrr",
1768 "(V?)EXTRACTPSrr",
1769 "(V?)PEXTRBrr",
1770 "(V?)PEXTRDrr",
1771 "(V?)PEXTRQrr",
1772 "(V?)PEXTRWrr",
1773 "(V?)PSLLDrr",
1774 "(V?)PSLLQrr",
1775 "(V?)PSLLWrr",
1776 "(V?)PSRADrr",
1777 "(V?)PSRAWrr",
1778 "(V?)PSRLDrr",
1779 "(V?)PSRLQrr",
1780 "(V?)PSRLWrr",
1781 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001782
1783def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1784 let Latency = 2;
1785 let NumMicroOps = 2;
1786 let ResourceCycles = [1,1];
1787}
1788def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1789
1790def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1791 let Latency = 2;
1792 let NumMicroOps = 2;
1793 let ResourceCycles = [1,1];
1794}
1795def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1796
1797def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1798 let Latency = 2;
1799 let NumMicroOps = 2;
1800 let ResourceCycles = [1,1];
1801}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001802def: InstRW<[HWWriteResGroup34], (instregex "BEXTR(32|64)rr",
1803 "BSWAP(16|32|64)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001804
1805def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1806 let Latency = 2;
1807 let NumMicroOps = 2;
1808 let ResourceCycles = [1,1];
1809}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001810def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1811def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1812 "ADC(8|16|32|64)rr",
1813 "ADC(8|16|32|64)i",
1814 "CMOV(AE|B|E|G|GE|L|LE|NE|NO|NP|NS|O|P|S)(16|32|64)rr",
1815 "SBB(8|16|32|64)ri",
1816 "SBB(8|16|32|64)rr",
1817 "SBB(8|16|32|64)i",
1818 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001819
1820def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001821 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001822 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001823 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001824}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001825def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1826 "BLENDVPSrm0",
1827 "PBLENDVBrm0",
1828 "VBLENDVPDrm",
1829 "VBLENDVPSrm",
1830 "VMASKMOVPDrm",
1831 "VMASKMOVPSrm",
1832 "VPBLENDVBrm",
1833 "VPMASKMOVDrm",
1834 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001835
Gadi Haber2cf601f2017-12-08 09:48:44 +00001836def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1837 let Latency = 9;
1838 let NumMicroOps = 3;
1839 let ResourceCycles = [2,1];
1840}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001841def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1842 "VBLENDVPSYrm",
1843 "VMASKMOVPDYrm",
1844 "VMASKMOVPSYrm",
1845 "VPBLENDVBYrm",
1846 "VPMASKMOVDYrm",
1847 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001848
1849def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1850 let Latency = 7;
1851 let NumMicroOps = 3;
1852 let ResourceCycles = [2,1];
1853}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001854def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1855 "MMX_PACKSSWBirm",
1856 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001857
Gadi Haberd76f7b82017-08-28 10:04:16 +00001858def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001859 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001860 let NumMicroOps = 3;
1861 let ResourceCycles = [1,2];
1862}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001863def: InstRW<[HWWriteResGroup37], (instregex "LEAVE64",
1864 "SCASB",
1865 "SCASL",
1866 "SCASQ",
1867 "SCASW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001868
1869def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001870 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001871 let NumMicroOps = 3;
1872 let ResourceCycles = [1,1,1];
1873}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001874def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1875 "(V?)PSLLQrm",
1876 "(V?)PSLLWrm",
1877 "(V?)PSRADrm",
1878 "(V?)PSRAWrm",
1879 "(V?)PSRLDrm",
1880 "(V?)PSRLQrm",
1881 "(V?)PSRLWrm",
1882 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001883
1884def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001885 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001886 let NumMicroOps = 3;
1887 let ResourceCycles = [1,1,1];
1888}
1889def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1890
1891def HWWriteResGroup40 : SchedWriteRes<[HWPort0,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001892 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001893 let NumMicroOps = 3;
1894 let ResourceCycles = [1,1,1];
1895}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001896def: InstRW<[HWWriteResGroup40], (instregex "(V?)LDMXCSR")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001897
1898def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001899 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001900 let NumMicroOps = 3;
1901 let ResourceCycles = [1,1,1];
1902}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001903def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1904 "RETL",
1905 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001906
1907def HWWriteResGroup42 : SchedWriteRes<[HWPort23,HWPort06,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001908 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001909 let NumMicroOps = 3;
1910 let ResourceCycles = [1,1,1];
1911}
Craig Toppera42a2ba2017-12-16 18:35:31 +00001912def: InstRW<[HWWriteResGroup42], (instregex "BEXTR(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001913
1914def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001915 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001916 let NumMicroOps = 3;
1917 let ResourceCycles = [1,1,1];
1918}
Craig Topper13a16502018-03-19 00:56:09 +00001919def: InstRW<[HWWriteResGroup43], (instregex "ADC(8|16|32|64)rm")>;
Craig Topperf4cd9082018-01-19 05:47:32 +00001920def: 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 +00001921def: InstRW<[HWWriteResGroup43], (instregex "SBB(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001922
1923def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001924 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001925 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001926 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001927}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001928def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001929
Gadi Haberd76f7b82017-08-28 10:04:16 +00001930def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001931 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001932 let NumMicroOps = 4;
1933 let ResourceCycles = [1,1,1,1];
1934}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001935def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1936 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001937
1938def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001939 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001940 let NumMicroOps = 5;
1941 let ResourceCycles = [1,1,1,2];
1942}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001943def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1944 "ROL(8|16|32|64)mi",
1945 "ROR(8|16|32|64)m1",
1946 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001947
1948def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001949 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001950 let NumMicroOps = 5;
1951 let ResourceCycles = [1,1,1,2];
1952}
Craig Topper13a16502018-03-19 00:56:09 +00001953def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001954
1955def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001956 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001957 let NumMicroOps = 5;
1958 let ResourceCycles = [1,1,1,1,1];
1959}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001960def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1961 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001962
1963def HWWriteResGroup49 : SchedWriteRes<[HWPort0]> {
1964 let Latency = 3;
1965 let NumMicroOps = 1;
1966 let ResourceCycles = [1];
1967}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001968def: InstRW<[HWWriteResGroup49], (instregex "(V?)MOVMSKPD(Y?)rr",
1969 "(V?)MOVMSKPS(Y?)rr",
1970 "(V?)PMOVMSKB(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001971
1972def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1973 let Latency = 3;
1974 let NumMicroOps = 1;
1975 let ResourceCycles = [1];
1976}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001977def: InstRW<[HWWriteResGroup50], (instrs MUL8r, IMUL8r, IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
1978def: InstRW<[HWWriteResGroup50], (instregex "ADD_FPrST0",
1979 "ADD_FST0r",
1980 "ADD_FrST0",
1981 "BSF(16|32|64)rr",
1982 "BSR(16|32|64)rr",
1983 "LZCNT(16|32|64)rr",
1984 "MMX_CVTPI2PSirr",
1985 "PDEP(32|64)rr",
1986 "PEXT(32|64)rr",
1987 "POPCNT(16|32|64)rr",
1988 "SHLD(16|32|64)rri8",
1989 "SHRD(16|32|64)rri8",
1990 "SUBR_FPrST0",
1991 "SUBR_FST0r",
1992 "SUBR_FrST0",
1993 "SUB_FPrST0",
1994 "SUB_FST0r",
1995 "SUB_FrST0",
1996 "TZCNT(16|32|64)rr",
1997 "(V?)ADDPD(Y?)rr",
1998 "(V?)ADDPS(Y?)rr",
1999 "(V?)ADDSDrr",
2000 "(V?)ADDSSrr",
2001 "(V?)ADDSUBPD(Y?)rr",
2002 "(V?)ADDSUBPS(Y?)rr",
2003 "(V?)CMPPD(Y?)rri",
2004 "(V?)CMPPS(Y?)rri",
2005 "(V?)CMPSDrr",
2006 "(V?)CMPSSrr",
2007 "(V?)COMISDrr",
2008 "(V?)COMISSrr",
2009 "(V?)CVTDQ2PS(Y?)rr",
2010 "(V?)CVTPS2DQ(Y?)rr",
2011 "(V?)CVTTPS2DQ(Y?)rr",
2012 "(V?)MAX(C?)PD(Y?)rr",
2013 "(V?)MAX(C?)PS(Y?)rr",
2014 "(V?)MAX(C?)SDrr",
2015 "(V?)MAX(C?)SSrr",
2016 "(V?)MIN(C?)PD(Y?)rr",
2017 "(V?)MIN(C?)PS(Y?)rr",
2018 "(V?)MIN(C?)SDrr",
2019 "(V?)MIN(C?)SSrr",
2020 "(V?)SUBPD(Y?)rr",
2021 "(V?)SUBPS(Y?)rr",
2022 "(V?)SUBSDrr",
2023 "(V?)SUBSSrr",
2024 "(V?)UCOMISDrr",
2025 "(V?)UCOMISSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002026
Clement Courbet327fac42018-03-07 08:14:02 +00002027def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002028 let Latency = 3;
Clement Courbet327fac42018-03-07 08:14:02 +00002029 let NumMicroOps = 2;
2030 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002031}
Clement Courbet327fac42018-03-07 08:14:02 +00002032def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002033
2034def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
2035 let Latency = 3;
2036 let NumMicroOps = 1;
2037 let ResourceCycles = [1];
2038}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002039def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
2040 "VBROADCASTSSYrr",
2041 "VEXTRACTF128rr",
2042 "VEXTRACTI128rr",
2043 "VINSERTF128rr",
2044 "VINSERTI128rr",
2045 "VPBROADCASTBYrr",
2046 "VPBROADCASTBrr",
2047 "VPBROADCASTDYrr",
2048 "VPBROADCASTQYrr",
2049 "VPBROADCASTWYrr",
2050 "VPBROADCASTWrr",
2051 "VPERM2F128rr",
2052 "VPERM2I128rr",
2053 "VPERMDYrr",
2054 "VPERMPDYri",
2055 "VPERMPSYrr",
2056 "VPERMQYri",
2057 "VPMOVSXBDYrr",
2058 "VPMOVSXBQYrr",
2059 "VPMOVSXBWYrr",
2060 "VPMOVSXDQYrr",
2061 "VPMOVSXWDYrr",
2062 "VPMOVSXWQYrr",
2063 "VPMOVZXBDYrr",
2064 "VPMOVZXBQYrr",
2065 "VPMOVZXBWYrr",
2066 "VPMOVZXDQYrr",
2067 "VPMOVZXWDYrr",
2068 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002069
2070def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002071 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002072 let NumMicroOps = 2;
2073 let ResourceCycles = [1,1];
2074}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002075def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
2076 "(V?)ADDPSrm",
2077 "(V?)ADDSUBPDrm",
2078 "(V?)ADDSUBPSrm",
2079 "(V?)CMPPDrmi",
2080 "(V?)CMPPSrmi",
2081 "(V?)CVTDQ2PSrm",
2082 "(V?)CVTPS2DQrm",
2083 "(V?)CVTTPS2DQrm",
2084 "(V?)MAX(C?)PDrm",
2085 "(V?)MAX(C?)PSrm",
2086 "(V?)MIN(C?)PDrm",
2087 "(V?)MIN(C?)PSrm",
2088 "(V?)SUBPDrm",
2089 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002090
Gadi Haber2cf601f2017-12-08 09:48:44 +00002091def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2092 let Latency = 10;
2093 let NumMicroOps = 2;
2094 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002095}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002096def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
2097 "ADD_F64m",
2098 "ILD_F16m",
2099 "ILD_F32m",
2100 "ILD_F64m",
2101 "SUBR_F32m",
2102 "SUBR_F64m",
2103 "SUB_F32m",
2104 "SUB_F64m",
2105 "VADDPDYrm",
2106 "VADDPSYrm",
2107 "VADDSUBPDYrm",
2108 "VADDSUBPSYrm",
2109 "VCMPPDYrmi",
2110 "VCMPPSYrmi",
2111 "VCVTDQ2PSYrm",
2112 "VCVTPS2DQYrm",
2113 "VCVTTPS2DQYrm",
2114 "VMAX(C?)PDYrm",
2115 "VMAX(C?)PSYrm",
2116 "VMIN(C?)PDYrm",
2117 "VMIN(C?)PSYrm",
2118 "VSUBPDYrm",
2119 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002120
2121def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002122 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002123 let NumMicroOps = 2;
2124 let ResourceCycles = [1,1];
2125}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002126def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
2127 "VPERM2I128rm",
2128 "VPERMDYrm",
2129 "VPERMPDYmi",
2130 "VPERMPSYrm",
2131 "VPERMQYmi",
2132 "VPMOVZXBDYrm",
2133 "VPMOVZXBQYrm",
2134 "VPMOVZXBWYrm",
2135 "VPMOVZXDQYrm",
2136 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002137
Gadi Haber2cf601f2017-12-08 09:48:44 +00002138def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
2139 let Latency = 9;
2140 let NumMicroOps = 2;
2141 let ResourceCycles = [1,1];
2142}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002143def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
2144 "VPMOVSXDQYrm",
2145 "VPMOVSXWDYrm",
2146 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002147
Gadi Haberd76f7b82017-08-28 10:04:16 +00002148def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
2149 let Latency = 3;
2150 let NumMicroOps = 3;
2151 let ResourceCycles = [3];
2152}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002153def: InstRW<[HWWriteResGroup54], (instregex "XADD(8|16|32|64)rr",
2154 "XCHG8rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002155
2156def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
2157 let Latency = 3;
2158 let NumMicroOps = 3;
2159 let ResourceCycles = [2,1];
2160}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002161def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVDYrr",
2162 "VPSLLVDrr",
2163 "VPSRAVDYrr",
2164 "VPSRAVDrr",
2165 "VPSRLVDYrr",
2166 "VPSRLVDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002167
2168def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
2169 let Latency = 3;
2170 let NumMicroOps = 3;
2171 let ResourceCycles = [2,1];
2172}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002173def: InstRW<[HWWriteResGroup56], (instregex "MMX_PHADDDrr",
2174 "MMX_PHADDSWrr",
2175 "MMX_PHADDWrr",
2176 "MMX_PHSUBDrr",
2177 "MMX_PHSUBSWrr",
2178 "MMX_PHSUBWrr",
2179 "(V?)PHADDD(Y?)rr",
2180 "(V?)PHADDSW(Y?)rr",
2181 "(V?)PHADDW(Y?)rr",
2182 "(V?)PHSUBD(Y?)rr",
2183 "(V?)PHSUBSW(Y?)rr",
2184 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002185
2186def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
2187 let Latency = 3;
2188 let NumMicroOps = 3;
2189 let ResourceCycles = [2,1];
2190}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002191def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
2192 "MMX_PACKSSWBirr",
2193 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002194
2195def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
2196 let Latency = 3;
2197 let NumMicroOps = 3;
2198 let ResourceCycles = [1,2];
2199}
2200def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
2201
2202def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
2203 let Latency = 3;
2204 let NumMicroOps = 3;
2205 let ResourceCycles = [1,2];
2206}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002207def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
2208 "RCL(8|16|32|64)r1",
2209 "RCL(8|16|32|64)ri",
2210 "RCR(8|16|32|64)r1",
2211 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002212
2213def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
2214 let Latency = 3;
2215 let NumMicroOps = 3;
2216 let ResourceCycles = [2,1];
2217}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002218def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
2219 "ROR(8|16|32|64)rCL",
2220 "SAR(8|16|32|64)rCL",
2221 "SHL(8|16|32|64)rCL",
2222 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002223
2224def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002225 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002226 let NumMicroOps = 3;
2227 let ResourceCycles = [1,1,1];
2228}
2229def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
2230
2231def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002232 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002233 let NumMicroOps = 3;
2234 let ResourceCycles = [1,1,1];
2235}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002236def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
2237 "ISTT_FP32m",
2238 "ISTT_FP64m",
2239 "IST_F16m",
2240 "IST_F32m",
2241 "IST_FP16m",
2242 "IST_FP32m",
2243 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002244
2245def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002246 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002247 let NumMicroOps = 4;
2248 let ResourceCycles = [2,1,1];
2249}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002250def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
2251 "VPSRAVDYrm",
2252 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002253
2254def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2255 let Latency = 9;
2256 let NumMicroOps = 4;
2257 let ResourceCycles = [2,1,1];
2258}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002259def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
2260 "VPSRAVDrm",
2261 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002262
2263def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002264 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002265 let NumMicroOps = 4;
2266 let ResourceCycles = [2,1,1];
2267}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002268def: InstRW<[HWWriteResGroup64], (instregex "MMX_PHADDDrm",
2269 "MMX_PHADDSWrm",
2270 "MMX_PHADDWrm",
2271 "MMX_PHSUBDrm",
2272 "MMX_PHSUBSWrm",
2273 "MMX_PHSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002274
2275def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
2276 let Latency = 10;
2277 let NumMicroOps = 4;
2278 let ResourceCycles = [2,1,1];
2279}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002280def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
2281 "VPHADDSWYrm",
2282 "VPHADDWYrm",
2283 "VPHSUBDYrm",
2284 "VPHSUBSWYrm",
2285 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002286
2287def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
2288 let Latency = 9;
2289 let NumMicroOps = 4;
2290 let ResourceCycles = [2,1,1];
2291}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002292def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
2293 "(V?)PHADDSWrm",
2294 "(V?)PHADDWrm",
2295 "(V?)PHSUBDrm",
2296 "(V?)PHSUBSWrm",
2297 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002298
2299def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002300 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002301 let NumMicroOps = 4;
2302 let ResourceCycles = [1,1,2];
2303}
Craig Topperf4cd9082018-01-19 05:47:32 +00002304def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002305
2306def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002307 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002308 let NumMicroOps = 5;
2309 let ResourceCycles = [1,1,1,2];
2310}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002311def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
2312 "RCL(8|16|32|64)mi",
2313 "RCR(8|16|32|64)m1",
2314 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002315
2316def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002317 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002318 let NumMicroOps = 5;
2319 let ResourceCycles = [1,1,2,1];
2320}
Craig Topper13a16502018-03-19 00:56:09 +00002321def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002322
2323def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002324 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002325 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002326 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002327}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002328def: InstRW<[HWWriteResGroup68], (instregex "ADC(8|16|32|64)mi",
2329 "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002330
Gadi Haberd76f7b82017-08-28 10:04:16 +00002331def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002332 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002333 let NumMicroOps = 6;
2334 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002335}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002336def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mr",
2337 "CMPXCHG(8|16|32|64)rm",
2338 "ROL(8|16|32|64)mCL",
2339 "SAR(8|16|32|64)mCL",
2340 "SBB(8|16|32|64)mi",
2341 "SBB(8|16|32|64)mr",
2342 "SHL(8|16|32|64)mCL",
2343 "SHR(8|16|32|64)mCL")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002344
Gadi Haberd76f7b82017-08-28 10:04:16 +00002345def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
2346 let Latency = 4;
2347 let NumMicroOps = 2;
2348 let ResourceCycles = [1,1];
2349}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002350def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
2351 "(V?)CVTSD2SIrr",
2352 "(V?)CVTSS2SI64rr",
2353 "(V?)CVTSS2SIrr",
2354 "(V?)CVTTSD2SI64rr",
2355 "(V?)CVTTSD2SIrr",
2356 "(V?)CVTTSS2SI64rr",
2357 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002358
2359def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
2360 let Latency = 4;
2361 let NumMicroOps = 2;
2362 let ResourceCycles = [1,1];
2363}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002364def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
2365 "VPSLLDYrr",
2366 "VPSLLQYrr",
2367 "VPSLLWYrr",
2368 "VPSRADYrr",
2369 "VPSRAWYrr",
2370 "VPSRLDYrr",
2371 "VPSRLQYrr",
2372 "VPSRLWYrr",
2373 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002374
2375def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
2376 let Latency = 4;
2377 let NumMicroOps = 2;
2378 let ResourceCycles = [1,1];
2379}
2380def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
2381
2382def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
2383 let Latency = 4;
2384 let NumMicroOps = 2;
2385 let ResourceCycles = [1,1];
2386}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002387def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
2388 "MMX_CVTPI2PDirr",
2389 "MMX_CVTPS2PIirr",
2390 "MMX_CVTTPD2PIirr",
2391 "MMX_CVTTPS2PIirr",
2392 "(V?)CVTDQ2PDrr",
2393 "(V?)CVTPD2DQrr",
2394 "(V?)CVTPD2PSrr",
2395 "VCVTPS2PHrr",
2396 "(V?)CVTSD2SSrr",
2397 "(V?)CVTSI642SDrr",
2398 "(V?)CVTSI2SDrr",
2399 "(V?)CVTSI2SSrr",
2400 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002401
2402def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
2403 let Latency = 4;
2404 let NumMicroOps = 2;
2405 let ResourceCycles = [1,1];
2406}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002407def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002408
2409def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort0156]> {
2410 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002411 let NumMicroOps = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002412}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002413def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002414
Gadi Haberd76f7b82017-08-28 10:04:16 +00002415def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002416 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002417 let NumMicroOps = 3;
2418 let ResourceCycles = [2,1];
2419}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002420def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
2421 "FICOM32m",
2422 "FICOMP16m",
2423 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002424
2425def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002426 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002427 let NumMicroOps = 3;
2428 let ResourceCycles = [1,1,1];
2429}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002430def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
2431 "(V?)CVTSD2SIrm",
2432 "(V?)CVTSS2SI64rm",
2433 "(V?)CVTSS2SIrm",
2434 "(V?)CVTTSD2SI64rm",
2435 "(V?)CVTTSD2SIrm",
2436 "VCVTTSS2SI64rm",
2437 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002438
2439def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002440 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002441 let NumMicroOps = 3;
2442 let ResourceCycles = [1,1,1];
2443}
2444def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002445
2446def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2447 let Latency = 11;
2448 let NumMicroOps = 3;
2449 let ResourceCycles = [1,1,1];
2450}
2451def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002452
2453def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002454 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002455 let NumMicroOps = 3;
2456 let ResourceCycles = [1,1,1];
2457}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002458def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
2459 "CVTPD2PSrm",
2460 "CVTTPD2DQrm",
2461 "MMX_CVTPD2PIirm",
2462 "MMX_CVTTPD2PIirm",
2463 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002464
2465def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2466 let Latency = 9;
2467 let NumMicroOps = 3;
2468 let ResourceCycles = [1,1,1];
2469}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002470def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
2471 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002472
2473def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002474 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002475 let NumMicroOps = 3;
2476 let ResourceCycles = [1,1,1];
2477}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002478def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002479
2480def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002481 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002482 let NumMicroOps = 3;
2483 let ResourceCycles = [1,1,1];
2484}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002485def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
2486 "VPBROADCASTBrm",
2487 "VPBROADCASTWYrm",
2488 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002489
2490def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2491 let Latency = 4;
2492 let NumMicroOps = 4;
2493 let ResourceCycles = [4];
2494}
2495def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2496
2497def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2498 let Latency = 4;
2499 let NumMicroOps = 4;
2500 let ResourceCycles = [1,3];
2501}
2502def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2503
2504def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2505 let Latency = 4;
2506 let NumMicroOps = 4;
2507 let ResourceCycles = [1,1,2];
2508}
2509def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2510
2511def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002512 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002513 let NumMicroOps = 4;
2514 let ResourceCycles = [1,1,1,1];
2515}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002516def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPDYmr",
2517 "VMASKMOVPDmr",
2518 "VMASKMOVPSYmr",
2519 "VMASKMOVPSmr",
2520 "VPMASKMOVDYmr",
2521 "VPMASKMOVDmr",
2522 "VPMASKMOVQYmr",
2523 "VPMASKMOVQmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002524
2525def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002526 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002527 let NumMicroOps = 4;
2528 let ResourceCycles = [1,1,1,1];
2529}
2530def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2531
2532def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002533 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002534 let NumMicroOps = 4;
2535 let ResourceCycles = [1,1,1,1];
2536}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002537def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
2538 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002539
2540def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002541 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002542 let NumMicroOps = 5;
2543 let ResourceCycles = [1,2,1,1];
2544}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002545def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
2546 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002547
2548def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002549 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002550 let NumMicroOps = 6;
2551 let ResourceCycles = [1,1,4];
2552}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002553def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
2554 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002555
2556def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002557 let Latency = 5;
2558 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002559 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002560}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002561def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMADDUBSWrr",
2562 "MMX_PMADDWDirr",
2563 "MMX_PMULHRSWrr",
2564 "MMX_PMULHUWirr",
2565 "MMX_PMULHWirr",
2566 "MMX_PMULLWirr",
2567 "MMX_PMULUDQirr",
2568 "MMX_PSADBWirr",
2569 "MUL_FPrST0",
2570 "MUL_FST0r",
2571 "MUL_FrST0",
2572 "(V?)PCMPGTQ(Y?)rr",
2573 "(V?)PHMINPOSUWrr",
2574 "(V?)PMADDUBSW(Y?)rr",
2575 "(V?)PMADDWD(Y?)rr",
2576 "(V?)PMULDQ(Y?)rr",
2577 "(V?)PMULHRSW(Y?)rr",
2578 "(V?)PMULHUW(Y?)rr",
2579 "(V?)PMULHW(Y?)rr",
2580 "(V?)PMULLW(Y?)rr",
2581 "(V?)PMULUDQ(Y?)rr",
2582 "(V?)PSADBW(Y?)rr",
2583 "(V?)RCPPSr",
2584 "(V?)RCPSSr",
2585 "(V?)RSQRTPSr",
2586 "(V?)RSQRTSSr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002587
Gadi Haberd76f7b82017-08-28 10:04:16 +00002588def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002589 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002590 let NumMicroOps = 1;
2591 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002592}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002593def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2594 "(V?)MULPS(Y?)rr",
2595 "(V?)MULSDrr",
2596 "(V?)MULSSrr",
2597 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)(Y)?r",
2598 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002599
Gadi Haberd76f7b82017-08-28 10:04:16 +00002600def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002601 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002602 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002603 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002604}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002605def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2606 "MMX_PMADDWDirm",
2607 "MMX_PMULHRSWrm",
2608 "MMX_PMULHUWirm",
2609 "MMX_PMULHWirm",
2610 "MMX_PMULLWirm",
2611 "MMX_PMULUDQirm",
2612 "MMX_PSADBWirm",
2613 "(V?)RCPSSm",
2614 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002615
Gadi Haber2cf601f2017-12-08 09:48:44 +00002616def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2617 let Latency = 18;
2618 let NumMicroOps = 2;
2619 let ResourceCycles = [1,1];
2620}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002621def: InstRW<[HWWriteResGroup91_1], (instregex "SQRTSSm",
2622 "VDIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002623
2624def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2625 let Latency = 11;
2626 let NumMicroOps = 2;
2627 let ResourceCycles = [1,1];
2628}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002629def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2630 "(V?)PHMINPOSUWrm",
2631 "(V?)PMADDUBSWrm",
2632 "(V?)PMADDWDrm",
2633 "(V?)PMULDQrm",
2634 "(V?)PMULHRSWrm",
2635 "(V?)PMULHUWrm",
2636 "(V?)PMULHWrm",
2637 "(V?)PMULLWrm",
2638 "(V?)PMULUDQrm",
2639 "(V?)PSADBWrm",
2640 "(V?)RCPPSm",
2641 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002642
2643def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2644 let Latency = 12;
2645 let NumMicroOps = 2;
2646 let ResourceCycles = [1,1];
2647}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002648def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2649 "MUL_F64m",
2650 "VPCMPGTQYrm",
2651 "VPMADDUBSWYrm",
2652 "VPMADDWDYrm",
2653 "VPMULDQYrm",
2654 "VPMULHRSWYrm",
2655 "VPMULHUWYrm",
2656 "VPMULHWYrm",
2657 "VPMULLWYrm",
2658 "VPMULUDQYrm",
2659 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002660
Gadi Haberd76f7b82017-08-28 10:04:16 +00002661def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002662 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002663 let NumMicroOps = 2;
2664 let ResourceCycles = [1,1];
2665}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002666def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2667 "(V?)MULPSrm",
2668 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002669
2670def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2671 let Latency = 12;
2672 let NumMicroOps = 2;
2673 let ResourceCycles = [1,1];
2674}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002675def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2676 "VMULPSYrm",
2677 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002678
2679def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2680 let Latency = 10;
2681 let NumMicroOps = 2;
2682 let ResourceCycles = [1,1];
2683}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002684def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2685 "(V?)MULSSrm",
2686 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002687
2688def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2689 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002690 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002691 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002692}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002693def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr",
2694 "(V?)HADDPD(Y?)rr",
2695 "(V?)HADDPS(Y?)rr",
2696 "(V?)HSUBPD(Y?)rr",
2697 "(V?)HSUBPS(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002698
Gadi Haberd76f7b82017-08-28 10:04:16 +00002699def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2700 let Latency = 5;
2701 let NumMicroOps = 3;
2702 let ResourceCycles = [1,1,1];
2703}
2704def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2705
2706def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002707 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002708 let NumMicroOps = 3;
2709 let ResourceCycles = [1,1,1];
2710}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002711def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002712
2713def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002714 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002715 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002716 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002717}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002718def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2719 "(V?)HADDPSrm",
2720 "(V?)HSUBPDrm",
2721 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002722
Gadi Haber2cf601f2017-12-08 09:48:44 +00002723def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2724 let Latency = 12;
2725 let NumMicroOps = 4;
2726 let ResourceCycles = [1,2,1];
2727}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002728def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2729 "VHADDPSYrm",
2730 "VHSUBPDYrm",
2731 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002732
Gadi Haberd76f7b82017-08-28 10:04:16 +00002733def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002734 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002735 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002736 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002737}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002738def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002739
Gadi Haberd76f7b82017-08-28 10:04:16 +00002740def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002741 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002742 let NumMicroOps = 4;
2743 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002744}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002745def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002746
Gadi Haberd76f7b82017-08-28 10:04:16 +00002747def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2748 let Latency = 5;
2749 let NumMicroOps = 5;
2750 let ResourceCycles = [1,4];
2751}
2752def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2753
2754def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2755 let Latency = 5;
2756 let NumMicroOps = 5;
2757 let ResourceCycles = [1,4];
2758}
2759def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2760
2761def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2762 let Latency = 5;
2763 let NumMicroOps = 5;
2764 let ResourceCycles = [2,3];
2765}
Craig Topper13a16502018-03-19 00:56:09 +00002766def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002767
2768def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2769 let Latency = 6;
2770 let NumMicroOps = 2;
2771 let ResourceCycles = [1,1];
2772}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002773def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2774 "VCVTPD2DQYrr",
2775 "VCVTPD2PSYrr",
2776 "VCVTPS2PHYrr",
2777 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002778
2779def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002780 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002781 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002782 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002783}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002784def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2785 "ADD_FI32m",
2786 "SUBR_FI16m",
2787 "SUBR_FI32m",
2788 "SUB_FI16m",
2789 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002790 "VROUNDPDYm",
2791 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002792
Gadi Haber2cf601f2017-12-08 09:48:44 +00002793def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2794 let Latency = 12;
2795 let NumMicroOps = 3;
2796 let ResourceCycles = [2,1];
2797}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002798def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2799 "(V?)ROUNDPSm",
2800 "(V?)ROUNDSDm",
2801 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002802
Gadi Haberd76f7b82017-08-28 10:04:16 +00002803def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002804 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002805 let NumMicroOps = 3;
2806 let ResourceCycles = [1,1,1];
2807}
2808def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2809
2810def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2811 let Latency = 6;
2812 let NumMicroOps = 4;
2813 let ResourceCycles = [1,1,2];
2814}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002815def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2816 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002817
2818def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002819 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002820 let NumMicroOps = 4;
2821 let ResourceCycles = [1,1,1,1];
2822}
2823def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2824
2825def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2826 let Latency = 6;
2827 let NumMicroOps = 4;
2828 let ResourceCycles = [1,1,1,1];
2829}
2830def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2831
2832def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2833 let Latency = 6;
2834 let NumMicroOps = 6;
2835 let ResourceCycles = [1,5];
2836}
2837def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2838
2839def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002840 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002841 let NumMicroOps = 6;
2842 let ResourceCycles = [1,1,1,1,2];
2843}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002844def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2845 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002846
Gadi Haberd76f7b82017-08-28 10:04:16 +00002847def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2848 let Latency = 7;
2849 let NumMicroOps = 3;
2850 let ResourceCycles = [1,2];
2851}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002852def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002853
2854def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002855 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002856 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002857 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002858}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002859def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002860
Gadi Haber2cf601f2017-12-08 09:48:44 +00002861def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2862 let Latency = 14;
2863 let NumMicroOps = 4;
2864 let ResourceCycles = [1,2,1];
2865}
2866def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2867
Gadi Haberd76f7b82017-08-28 10:04:16 +00002868def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2869 let Latency = 7;
2870 let NumMicroOps = 7;
2871 let ResourceCycles = [2,2,1,2];
2872}
Craig Topper2d451e72018-03-18 08:38:06 +00002873def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002874
2875def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002876 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002877 let NumMicroOps = 3;
2878 let ResourceCycles = [1,1,1];
2879}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002880def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2881 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002882
2883def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2884 let Latency = 9;
2885 let NumMicroOps = 3;
2886 let ResourceCycles = [1,1,1];
2887}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002888def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002889
2890def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002891 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002892 let NumMicroOps = 4;
2893 let ResourceCycles = [1,1,1,1];
2894}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002895def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002896
2897def HWWriteResGroup118 : SchedWriteRes<[HWPort0]> {
2898 let Latency = 10;
2899 let NumMicroOps = 2;
2900 let ResourceCycles = [2];
2901}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002902def: InstRW<[HWWriteResGroup118], (instregex "(V?)PMULLD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002903
2904def HWWriteResGroup119 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002905 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002906 let NumMicroOps = 3;
2907 let ResourceCycles = [2,1];
2908}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002909def: InstRW<[HWWriteResGroup119], (instregex "(V?)PMULLDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002910
Gadi Haber2cf601f2017-12-08 09:48:44 +00002911def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2912 let Latency = 17;
2913 let NumMicroOps = 3;
2914 let ResourceCycles = [2,1];
2915}
2916def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2917
Gadi Haberd76f7b82017-08-28 10:04:16 +00002918def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002919 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002920 let NumMicroOps = 10;
2921 let ResourceCycles = [1,1,1,4,1,2];
2922}
Craig Topper13a16502018-03-19 00:56:09 +00002923def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002924
2925def HWWriteResGroup121 : SchedWriteRes<[HWPort0]> {
2926 let Latency = 11;
2927 let NumMicroOps = 1;
2928 let ResourceCycles = [1];
2929}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002930def: InstRW<[HWWriteResGroup121], (instregex "DIVPSrr",
2931 "DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002932
2933def HWWriteResGroup122 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002934 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002935 let NumMicroOps = 2;
2936 let ResourceCycles = [1,1];
2937}
2938def: InstRW<[HWWriteResGroup122], (instregex "DIVPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002939
2940def HWWriteResGroup122_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2941 let Latency = 16;
2942 let NumMicroOps = 2;
2943 let ResourceCycles = [1,1];
2944}
2945def: InstRW<[HWWriteResGroup122_1], (instregex "DIVSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002946
Gadi Haberd76f7b82017-08-28 10:04:16 +00002947def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2948 let Latency = 11;
2949 let NumMicroOps = 3;
2950 let ResourceCycles = [2,1];
2951}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002952def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2953 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002954
Gadi Haberd76f7b82017-08-28 10:04:16 +00002955def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002956 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002957 let NumMicroOps = 4;
2958 let ResourceCycles = [2,1,1];
2959}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002960def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2961 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002962
2963def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2964 let Latency = 11;
2965 let NumMicroOps = 7;
2966 let ResourceCycles = [2,2,3];
2967}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002968def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2969 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002970
2971def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2972 let Latency = 11;
2973 let NumMicroOps = 9;
2974 let ResourceCycles = [1,4,1,3];
2975}
2976def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2977
2978def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2979 let Latency = 11;
2980 let NumMicroOps = 11;
2981 let ResourceCycles = [2,9];
2982}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002983def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002984
2985def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002986 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002987 let NumMicroOps = 14;
2988 let ResourceCycles = [1,1,1,4,2,5];
2989}
2990def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2991
2992def HWWriteResGroup133 : SchedWriteRes<[HWPort0]> {
2993 let Latency = 13;
2994 let NumMicroOps = 1;
2995 let ResourceCycles = [1];
2996}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002997def: InstRW<[HWWriteResGroup133], (instregex "SQRTPSr",
2998 "SQRTSSr",
2999 "VDIVPSrr",
3000 "VDIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003001
3002def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003003 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003004 let NumMicroOps = 2;
3005 let ResourceCycles = [1,1];
3006}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003007def: InstRW<[HWWriteResGroup134], (instregex "DIVSDrm",
3008 "SQRTPSm",
3009 "VDIVPSrm",
3010 "VSQRTSSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003011
3012def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003013 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003014 let NumMicroOps = 11;
3015 let ResourceCycles = [2,1,1,3,1,3];
3016}
Craig Topper13a16502018-03-19 00:56:09 +00003017def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003018
3019def HWWriteResGroup136 : SchedWriteRes<[HWPort0]> {
3020 let Latency = 14;
3021 let NumMicroOps = 1;
3022 let ResourceCycles = [1];
3023}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003024def: InstRW<[HWWriteResGroup136], (instregex "DIVPDrr",
3025 "DIVSDrr",
3026 "VSQRTPSr",
3027 "VSQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003028
Gadi Haberd76f7b82017-08-28 10:04:16 +00003029def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003030 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003031 let NumMicroOps = 2;
3032 let ResourceCycles = [1,1];
3033}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003034def: InstRW<[HWWriteResGroup138], (instregex "DIVPDrm",
3035 "VSQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003036
Gadi Haberd76f7b82017-08-28 10:04:16 +00003037def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
3038 let Latency = 14;
3039 let NumMicroOps = 4;
3040 let ResourceCycles = [2,1,1];
3041}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003042def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003043
3044def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003045 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003046 let NumMicroOps = 5;
3047 let ResourceCycles = [2,1,1,1];
3048}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003049def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003050
Gadi Haber2cf601f2017-12-08 09:48:44 +00003051def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
3052 let Latency = 21;
3053 let NumMicroOps = 5;
3054 let ResourceCycles = [2,1,1,1];
3055}
3056def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
3057
Gadi Haberd76f7b82017-08-28 10:04:16 +00003058def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
3059 let Latency = 14;
3060 let NumMicroOps = 10;
3061 let ResourceCycles = [2,3,1,4];
3062}
3063def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
3064
3065def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003066 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003067 let NumMicroOps = 15;
3068 let ResourceCycles = [1,14];
3069}
3070def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
3071
3072def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003073 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003074 let NumMicroOps = 8;
3075 let ResourceCycles = [1,1,1,1,1,1,2];
3076}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003077def: InstRW<[HWWriteResGroup144], (instregex "INSB",
3078 "INSL",
3079 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003080
3081def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
3082 let Latency = 16;
3083 let NumMicroOps = 16;
3084 let ResourceCycles = [16];
3085}
3086def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
3087
3088def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003089 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003090 let NumMicroOps = 19;
3091 let ResourceCycles = [2,1,4,1,1,4,6];
3092}
3093def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
3094
3095def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
3096 let Latency = 17;
3097 let NumMicroOps = 15;
3098 let ResourceCycles = [2,1,2,4,2,4];
3099}
3100def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
3101
Gadi Haberd76f7b82017-08-28 10:04:16 +00003102def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
3103 let Latency = 18;
3104 let NumMicroOps = 8;
3105 let ResourceCycles = [1,1,1,5];
3106}
3107def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00003108def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003109
Gadi Haberd76f7b82017-08-28 10:04:16 +00003110def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003111 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003112 let NumMicroOps = 19;
3113 let ResourceCycles = [3,1,15];
3114}
Craig Topper391c6f92017-12-10 01:24:08 +00003115def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003116
Gadi Haberd76f7b82017-08-28 10:04:16 +00003117def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
3118 let Latency = 20;
3119 let NumMicroOps = 1;
3120 let ResourceCycles = [1];
3121}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003122def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
3123 "DIV_FST0r",
3124 "DIV_FrST0",
3125 "SQRTPDr",
3126 "SQRTSDr",
3127 "VDIVPDrr",
3128 "VDIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003129
3130def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003131 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003132 let NumMicroOps = 2;
3133 let ResourceCycles = [1,1];
3134}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003135def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
3136 "DIVR_F64m",
3137 "VSQRTPDm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003138
3139def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23]> {
3140 let Latency = 26;
3141 let NumMicroOps = 2;
3142 let ResourceCycles = [1,1];
3143}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003144def: InstRW<[HWWriteResGroup155_1], (instregex "SQRTPDm",
3145 "VDIVPDrm",
3146 "VSQRTSDm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003147
3148def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23]> {
3149 let Latency = 25;
3150 let NumMicroOps = 2;
3151 let ResourceCycles = [1,1];
3152}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003153def: InstRW<[HWWriteResGroup155_2], (instregex "SQRTSDm",
3154 "VDIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003155
3156def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
3157 let Latency = 20;
3158 let NumMicroOps = 10;
3159 let ResourceCycles = [1,2,7];
3160}
3161def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
3162
3163def HWWriteResGroup157 : SchedWriteRes<[HWPort0]> {
3164 let Latency = 21;
3165 let NumMicroOps = 1;
3166 let ResourceCycles = [1];
3167}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003168def: InstRW<[HWWriteResGroup157], (instregex "VSQRTPDr",
3169 "VSQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003170
Gadi Haberd76f7b82017-08-28 10:04:16 +00003171def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort015]> {
3172 let Latency = 21;
3173 let NumMicroOps = 3;
3174 let ResourceCycles = [2,1];
3175}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003176def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
3177 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003178
3179def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003180 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003181 let NumMicroOps = 4;
3182 let ResourceCycles = [2,1,1];
3183}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003184def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
3185 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003186
3187def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003188 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003189 let NumMicroOps = 3;
3190 let ResourceCycles = [1,1,1];
3191}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003192def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
3193 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003194
3195def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
3196 let Latency = 24;
3197 let NumMicroOps = 1;
3198 let ResourceCycles = [1];
3199}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003200def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
3201 "DIVR_FST0r",
3202 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003203
3204def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003205 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003206 let NumMicroOps = 2;
3207 let ResourceCycles = [1,1];
3208}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003209def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
3210 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003211
3212def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003213 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003214 let NumMicroOps = 27;
3215 let ResourceCycles = [1,5,1,1,19];
3216}
3217def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
3218
3219def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003220 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003221 let NumMicroOps = 28;
3222 let ResourceCycles = [1,6,1,1,19];
3223}
Craig Topper2d451e72018-03-18 08:38:06 +00003224def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003225
3226def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003227 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003228 let NumMicroOps = 3;
3229 let ResourceCycles = [1,1,1];
3230}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003231def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
3232 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003233
Gadi Haberd76f7b82017-08-28 10:04:16 +00003234def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003235 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003236 let NumMicroOps = 23;
3237 let ResourceCycles = [1,5,3,4,10];
3238}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003239def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
3240 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003241
3242def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003243 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003244 let NumMicroOps = 23;
3245 let ResourceCycles = [1,5,2,1,4,10];
3246}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003247def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
3248 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003249
3250def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
3251 let Latency = 31;
3252 let NumMicroOps = 31;
3253 let ResourceCycles = [8,1,21,1];
3254}
3255def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
3256
3257def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort015]> {
3258 let Latency = 35;
3259 let NumMicroOps = 3;
3260 let ResourceCycles = [2,1];
3261}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003262def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
3263 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003264
3265def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003266 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003267 let NumMicroOps = 4;
3268 let ResourceCycles = [2,1,1];
3269}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00003270def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
3271 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003272
3273def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003274 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003275 let NumMicroOps = 18;
3276 let ResourceCycles = [1,1,2,3,1,1,1,8];
3277}
3278def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
3279
3280def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
3281 let Latency = 42;
3282 let NumMicroOps = 22;
3283 let ResourceCycles = [2,20];
3284}
Craig Topper2d451e72018-03-18 08:38:06 +00003285def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003286
3287def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003288 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003289 let NumMicroOps = 64;
3290 let ResourceCycles = [2,2,8,1,10,2,39];
3291}
3292def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003293
3294def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003295 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003296 let NumMicroOps = 88;
3297 let ResourceCycles = [4,4,31,1,2,1,45];
3298}
Craig Topper2d451e72018-03-18 08:38:06 +00003299def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003300
3301def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003302 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003303 let NumMicroOps = 90;
3304 let ResourceCycles = [4,2,33,1,2,1,47];
3305}
Craig Topper2d451e72018-03-18 08:38:06 +00003306def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003307
3308def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
3309 let Latency = 75;
3310 let NumMicroOps = 15;
3311 let ResourceCycles = [6,3,6];
3312}
3313def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
3314
3315def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
3316 let Latency = 98;
3317 let NumMicroOps = 32;
3318 let ResourceCycles = [7,7,3,3,1,11];
3319}
3320def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
3321
3322def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
3323 let Latency = 112;
3324 let NumMicroOps = 66;
3325 let ResourceCycles = [4,2,4,8,14,34];
3326}
3327def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
3328
3329def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00003330 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00003331 let NumMicroOps = 100;
3332 let ResourceCycles = [9,9,11,8,1,11,21,30];
3333}
3334def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00003335
Gadi Haber2cf601f2017-12-08 09:48:44 +00003336def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
3337 let Latency = 26;
3338 let NumMicroOps = 12;
3339 let ResourceCycles = [2,2,1,3,2,2];
3340}
Craig Topper17a31182017-12-16 18:35:29 +00003341def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
3342 VPGATHERDQrm,
3343 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003344
3345def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3346 let Latency = 24;
3347 let NumMicroOps = 22;
3348 let ResourceCycles = [5,3,4,1,5,4];
3349}
Craig Topper17a31182017-12-16 18:35:29 +00003350def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
3351 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003352
3353def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3354 let Latency = 28;
3355 let NumMicroOps = 22;
3356 let ResourceCycles = [5,3,4,1,5,4];
3357}
Craig Topper17a31182017-12-16 18:35:29 +00003358def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003359
3360def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3361 let Latency = 25;
3362 let NumMicroOps = 22;
3363 let ResourceCycles = [5,3,4,1,5,4];
3364}
Craig Topper17a31182017-12-16 18:35:29 +00003365def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003366
3367def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3368 let Latency = 27;
3369 let NumMicroOps = 20;
3370 let ResourceCycles = [3,3,4,1,5,4];
3371}
Craig Topper17a31182017-12-16 18:35:29 +00003372def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
3373 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003374
3375def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3376 let Latency = 27;
3377 let NumMicroOps = 34;
3378 let ResourceCycles = [5,3,8,1,9,8];
3379}
Craig Topper17a31182017-12-16 18:35:29 +00003380def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
3381 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003382
3383def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3384 let Latency = 23;
3385 let NumMicroOps = 14;
3386 let ResourceCycles = [3,3,2,1,3,2];
3387}
Craig Topper17a31182017-12-16 18:35:29 +00003388def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
3389 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003390
3391def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3392 let Latency = 28;
3393 let NumMicroOps = 15;
3394 let ResourceCycles = [3,3,2,1,4,2];
3395}
Craig Topper17a31182017-12-16 18:35:29 +00003396def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003397
3398def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
3399 let Latency = 25;
3400 let NumMicroOps = 15;
3401 let ResourceCycles = [3,3,2,1,4,2];
3402}
Craig Topper17a31182017-12-16 18:35:29 +00003403def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
3404 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00003405
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00003406} // SchedModel