blob: 56df7e446f90ab22e08e337d0a625f1f3afd14f4 [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
Simon Pilgrim2b5967f2018-03-24 18:36:01 +000026 // This flag is set to allow the scheduler to assign a default model to
Gadi Haberd76f7b82017-08-28 10:04:16 +000027 // 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>;
Craig Topper8104f262018-04-02 05:33:28 +000072// FP division and sqrt on port 0.
73def HWFPDivider : ProcResource<1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000074
Gadi Haber2cf601f2017-12-08 09:48:44 +000075// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000076// cycles after the memory operand.
Gadi Haber2cf601f2017-12-08 09:48:44 +000077def : ReadAdvance<ReadAfterLd, 5>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000078
79// Many SchedWrites are defined in pairs with and without a folded load.
80// Instructions with folded loads are usually micro-fused, so they only appear
81// as two micro-ops when queued in the reservation station.
82// This multiclass defines the resource usage for variants with and without
83// folded loads.
84multiclass HWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000085 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000086 int Lat, list<int> Res = [1], int UOps = 1,
87 int LoadLat = 5> {
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000088 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000089 def : WriteRes<SchedRW, ExePorts> {
90 let Latency = Lat;
91 let ResourceCycles = Res;
92 let NumMicroOps = UOps;
93 }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000094
Simon Pilgrime3547af2018-03-25 10:21:19 +000095 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
96 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000097 def : WriteRes<SchedRW.Folded, !listconcat([HWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000098 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000099 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +0000100 let NumMicroOps = !add(UOps, 1);
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000101 }
102}
103
Craig Topperf131b602018-04-06 16:16:46 +0000104// A folded store needs a cycle on port 4 for the store data, and an extra port
105// 2/3/7 cycle to recompute the address.
106def : WriteRes<WriteRMW, [HWPort237,HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000107
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000108// Store_addr on 237.
109// Store_data on 4.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000110def : WriteRes<WriteStore, [HWPort237, HWPort4]>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000111def : WriteRes<WriteLoad, [HWPort23]> { let Latency = 5; }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000112def : WriteRes<WriteMove, [HWPort0156]>;
113def : WriteRes<WriteZero, []>;
114
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000115defm : HWWriteResPair<WriteALU, [HWPort0156], 1>;
116defm : HWWriteResPair<WriteIMul, [HWPort1], 3>;
Andrew Trick7201f4f2013-06-21 18:33:04 +0000117def : WriteRes<WriteIMulH, []> { let Latency = 3; }
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000118defm : HWWriteResPair<WriteShift, [HWPort06], 1>;
119defm : HWWriteResPair<WriteJump, [HWPort06], 1>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000120defm : HWWriteResPair<WriteCRC32, [HWPort1], 3>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000121
Craig Topperb7baa352018-04-08 17:53:18 +0000122defm : HWWriteResPair<WriteCMOV, [HWPort06,HWPort0156], 2, [1,1], 2>; // Conditional move.
123def : WriteRes<WriteSETCC, [HWPort06]>; // Setcc.
124def : WriteRes<WriteSETCCStore, [HWPort06,HWPort4,HWPort237]> {
125 let Latency = 2;
126 let NumMicroOps = 3;
127}
128
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000129// This is for simple LEAs with one or two input operands.
130// The complex ones can only execute on port 1, and they require two cycles on
131// the port to read all inputs. We don't model that.
132def : WriteRes<WriteLEA, [HWPort15]>;
133
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000134// Bit counts.
135defm : HWWriteResPair<WriteBitScan, [HWPort1], 3>;
136defm : HWWriteResPair<WriteLZCNT, [HWPort1], 3>;
137defm : HWWriteResPair<WriteTZCNT, [HWPort1], 3>;
138defm : HWWriteResPair<WritePOPCNT, [HWPort1], 3>;
139
Craig Topper89310f52018-03-29 20:41:39 +0000140// BMI1 BEXTR, BMI2 BZHI
141defm : HWWriteResPair<WriteBEXTR, [HWPort06,HWPort15], 2, [1,1], 2>;
142defm : HWWriteResPair<WriteBZHI, [HWPort15], 1>;
143
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000144// This is quite rough, latency depends on the dividend.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000145defm : HWWriteResPair<WriteIDiv, [HWPort0, HWDivider], 25, [1,10], 1, 4>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000146// Scalar and vector floating point.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000147def : WriteRes<WriteFStore, [HWPort237, HWPort4]>;
148def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; }
149def : WriteRes<WriteFMove, [HWPort5]>;
150
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000151defm : HWWriteResPair<WriteFAdd, [HWPort1], 3>;
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000152defm : HWWriteResPair<WriteFCmp, [HWPort1], 3, [1], 1, 6>;
153defm : HWWriteResPair<WriteFCom, [HWPort1], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000154defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
155defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
156defm : HWWriteResPair<WriteFRcp, [HWPort0], 5>;
157defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5>;
158defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15>;
159defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
160defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
161defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
162defm : HWWriteResPair<WriteFMA, [HWPort01], 5>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : HWWriteResPair<WriteFSign, [HWPort0], 1>;
164defm : HWWriteResPair<WriteFLogic, [HWPort5], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : HWWriteResPair<WriteFVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000167defm : HWWriteResPair<WriteFBlend, [HWPort015], 1>;
168defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : HWWriteResPair<WriteFVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000170defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000171
172// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000173def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
174def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
175def : WriteRes<WriteVecMove, [HWPort015]>;
176
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000177defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000178defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000179defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
180defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
Craig Topper13a0f832018-03-31 04:54:32 +0000181defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000182defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000183defm : HWWriteResPair<WriteVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000184defm : HWWriteResPair<WriteBlend, [HWPort15], 1>;
185defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000186defm : HWWriteResPair<WriteVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000187defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2]>;
188defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
189defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 6, [1, 2]>;
Craig Toppere56a2fc2018-04-17 19:35:19 +0000190defm : HWWriteResPair<WritePSADBW, [HWPort0], 5>;
Quentin Colombetca498512014-02-24 19:33:51 +0000191
192// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000193
Quentin Colombetca498512014-02-24 19:33:51 +0000194// Packed Compare Implicit Length Strings, Return Mask
195def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196 let Latency = 11;
197 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000198 let ResourceCycles = [3];
199}
200def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000201 let Latency = 17;
202 let NumMicroOps = 4;
203 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000204}
205
206// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000207def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
208 let Latency = 19;
209 let NumMicroOps = 9;
210 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000211}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000212def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
213 let Latency = 25;
214 let NumMicroOps = 10;
215 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000216}
217
218// Packed Compare Implicit Length Strings, Return Index
219def : WriteRes<WritePCmpIStrI, [HWPort0]> {
220 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000221 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000222 let ResourceCycles = [3];
223}
224def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000225 let Latency = 17;
226 let NumMicroOps = 4;
227 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000228}
229
230// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
232 let Latency = 18;
233 let NumMicroOps = 8;
234 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000235}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000236def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
237 let Latency = 24;
238 let NumMicroOps = 9;
239 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000240}
241
Simon Pilgrima2f26782018-03-27 20:38:54 +0000242// MOVMSK Instructions.
243def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
244def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
245def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
246
Quentin Colombetca498512014-02-24 19:33:51 +0000247// AES Instructions.
248def : WriteRes<WriteAESDecEnc, [HWPort5]> {
249 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000250 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000251 let ResourceCycles = [1];
252}
253def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000254 let Latency = 13;
255 let NumMicroOps = 2;
256 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000257}
258
259def : WriteRes<WriteAESIMC, [HWPort5]> {
260 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000262 let ResourceCycles = [2];
263}
264def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000265 let Latency = 20;
266 let NumMicroOps = 3;
267 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000268}
269
Simon Pilgrim7684e052018-03-22 13:18:08 +0000270def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
271 let Latency = 29;
272 let NumMicroOps = 11;
273 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000274}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000275def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
276 let Latency = 34;
277 let NumMicroOps = 11;
278 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000279}
280
281// Carry-less multiplication instructions.
282def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000283 let Latency = 11;
284 let NumMicroOps = 3;
285 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000286}
287def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000288 let Latency = 17;
289 let NumMicroOps = 4;
290 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000291}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000292
293def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
294def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000295def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
296def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000297
Michael Zuckermanf6684002017-06-28 11:23:31 +0000298//================ Exceptions ================//
299
300//-- Specific Scheduling Models --//
301
302// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000303def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000304
Craig Topper02daec02018-04-02 01:12:32 +0000305def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000306
Craig Topper02daec02018-04-02 01:12:32 +0000307def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000308 let NumMicroOps = 2;
309}
Craig Topper02daec02018-04-02 01:12:32 +0000310def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000311 let NumMicroOps = 3;
312}
313
Craig Topper02daec02018-04-02 01:12:32 +0000314def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000315 let NumMicroOps = 2;
316}
317
Craig Topper02daec02018-04-02 01:12:32 +0000318def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000319 let NumMicroOps = 3;
320 let ResourceCycles = [2, 1];
321}
322
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000324def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000325
Michael Zuckermanf6684002017-06-28 11:23:31 +0000326
Craig Topper02daec02018-04-02 01:12:32 +0000327def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000328 let NumMicroOps = 2;
329 let ResourceCycles = [2];
330}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000331
332// Notation:
333// - r: register.
334// - mm: 64 bit mmx register.
335// - x = 128 bit xmm register.
336// - (x)mm = mmx or xmm register.
337// - y = 256 bit ymm register.
338// - v = any vector register.
339// - m = memory.
340
341//=== Integer Instructions ===//
342//-- Move instructions --//
343
Michael Zuckermanf6684002017-06-28 11:23:31 +0000344// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000345def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000346 let Latency = 7;
347 let NumMicroOps = 3;
348}
Craig Topper02daec02018-04-02 01:12:32 +0000349def : InstRW<[HWWriteXLAT], (instregex "XLAT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000350
Michael Zuckermanf6684002017-06-28 11:23:31 +0000351// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000352def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000353 let NumMicroOps = 19;
354}
Craig Topper02daec02018-04-02 01:12:32 +0000355def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000356
Michael Zuckermanf6684002017-06-28 11:23:31 +0000357// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000358def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000359 let NumMicroOps = 18;
360}
Craig Topper02daec02018-04-02 01:12:32 +0000361def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000362
Michael Zuckermanf6684002017-06-28 11:23:31 +0000363//-- Arithmetic instructions --//
364
Michael Zuckermanf6684002017-06-28 11:23:31 +0000365// DIV.
366// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000367def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000368 let Latency = 22;
369 let NumMicroOps = 9;
370}
Craig Topper02daec02018-04-02 01:12:32 +0000371def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000372
Michael Zuckermanf6684002017-06-28 11:23:31 +0000373// IDIV.
374// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000375def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000376 let Latency = 23;
377 let NumMicroOps = 9;
378}
Craig Topper02daec02018-04-02 01:12:32 +0000379def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000380
Michael Zuckermanf6684002017-06-28 11:23:31 +0000381// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000382// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000383def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000384 let NumMicroOps = 10;
385}
Craig Topper02daec02018-04-02 01:12:32 +0000386def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000387
Michael Zuckermanf6684002017-06-28 11:23:31 +0000388// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000389// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000390def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000391 let NumMicroOps = 11;
392}
Craig Topper02daec02018-04-02 01:12:32 +0000393def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000394
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395//-- Control transfer instructions --//
396
Michael Zuckermanf6684002017-06-28 11:23:31 +0000397// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000398// i.
Craig Topper02daec02018-04-02 01:12:32 +0000399def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000400 let NumMicroOps = 4;
401 let ResourceCycles = [1, 2, 1];
402}
Craig Topper02daec02018-04-02 01:12:32 +0000403def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000404
405// BOUND.
406// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000407def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000408 let NumMicroOps = 15;
409}
Craig Topper02daec02018-04-02 01:12:32 +0000410def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000411
412// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000413def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000414 let NumMicroOps = 4;
415}
Craig Topper02daec02018-04-02 01:12:32 +0000416def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000417
418//-- String instructions --//
419
420// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000421def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000422
423// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000424def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000425
Michael Zuckermanf6684002017-06-28 11:23:31 +0000426// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000427def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000428 let Latency = 4;
429 let NumMicroOps = 5;
430 let ResourceCycles = [2, 1, 2];
431}
Craig Topper02daec02018-04-02 01:12:32 +0000432def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000433
Michael Zuckermanf6684002017-06-28 11:23:31 +0000434// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000435def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000436 let Latency = 4;
437 let NumMicroOps = 5;
438 let ResourceCycles = [2, 3];
439}
Craig Topper02daec02018-04-02 01:12:32 +0000440def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000441
Michael Zuckermanf6684002017-06-28 11:23:31 +0000442//-- Other --//
443
Gadi Haberd76f7b82017-08-28 10:04:16 +0000444// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000445def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000446 let NumMicroOps = 34;
447}
Craig Topper02daec02018-04-02 01:12:32 +0000448def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000449
450// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000451def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000452 let NumMicroOps = 17;
453 let ResourceCycles = [1, 16];
454}
Craig Topper02daec02018-04-02 01:12:32 +0000455def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000456
457//=== Floating Point x87 Instructions ===//
458//-- Move instructions --//
459
460// FLD.
461// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000462def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000463
Michael Zuckermanf6684002017-06-28 11:23:31 +0000464// FBLD.
465// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000466def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000467 let Latency = 47;
468 let NumMicroOps = 43;
469}
Craig Topper02daec02018-04-02 01:12:32 +0000470def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000471
472// FST(P).
473// r.
Craig Topper02daec02018-04-02 01:12:32 +0000474def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000475
Michael Zuckermanf6684002017-06-28 11:23:31 +0000476// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000477def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000478
Michael Zuckermanf6684002017-06-28 11:23:31 +0000479// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000480def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000481
Michael Zuckermanf6684002017-06-28 11:23:31 +0000482// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000483def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000484
485// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000486def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000487 let NumMicroOps = 147;
488}
Craig Topper02daec02018-04-02 01:12:32 +0000489def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000490
491// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000492def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000493 let NumMicroOps = 90;
494}
Craig Topper02daec02018-04-02 01:12:32 +0000495def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000496
497//-- Arithmetic instructions --//
498
Michael Zuckermanf6684002017-06-28 11:23:31 +0000499// FCOMPP FUCOMPP.
500// r.
Craig Topper02daec02018-04-02 01:12:32 +0000501def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000502
503// FCOMI(P) FUCOMI(P).
504// m.
Craig Topper02daec02018-04-02 01:12:32 +0000505def : InstRW<[HWWrite3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
506 "UCOM_FIPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000507
Michael Zuckermanf6684002017-06-28 11:23:31 +0000508// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000509def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000510
511// FXAM.
Craig Topper02daec02018-04-02 01:12:32 +0000512def : InstRW<[HWWrite2P1], (instregex "FXAM")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000513
514// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000515def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000516 let Latency = 19;
517 let NumMicroOps = 28;
518}
Craig Topper02daec02018-04-02 01:12:32 +0000519def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000520
521// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000522def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000523 let Latency = 27;
524 let NumMicroOps = 41;
525}
Craig Topper02daec02018-04-02 01:12:32 +0000526def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000527
528// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000529def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000530 let Latency = 11;
531 let NumMicroOps = 17;
532}
Craig Topper02daec02018-04-02 01:12:32 +0000533def : InstRW<[HWWriteFRNDINT], (instregex "FRNDINT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000534
535//-- Math instructions --//
536
537// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000538def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000539 let Latency = 75; // 49-125
540 let NumMicroOps = 50; // 25-75
541}
Craig Topper02daec02018-04-02 01:12:32 +0000542def : InstRW<[HWWriteFSCALE], (instregex "FSCALE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000543
544// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000545def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000546 let Latency = 15;
547 let NumMicroOps = 17;
548}
Craig Topper02daec02018-04-02 01:12:32 +0000549def : InstRW<[HWWriteFXTRACT], (instregex "FXTRACT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000550
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000551////////////////////////////////////////////////////////////////////////////////
552// Horizontal add/sub instructions.
553////////////////////////////////////////////////////////////////////////////////
554
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000555defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1, 2], 3>;
556defm : HWWriteResPair<WritePHAdd, [HWPort1, HWPort5], 3, [1, 2], 3>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000557
Michael Zuckermanf6684002017-06-28 11:23:31 +0000558//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000559
Gadi Haberd76f7b82017-08-28 10:04:16 +0000560// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000561
Gadi Haberd76f7b82017-08-28 10:04:16 +0000562def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000563 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000564 let NumMicroOps = 1;
565 let ResourceCycles = [1];
566}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000567def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
568 "(V?)LDDQUrm",
569 "(V?)MOVAPDrm",
570 "(V?)MOVAPSrm",
571 "(V?)MOVDQArm",
572 "(V?)MOVDQUrm",
573 "(V?)MOVNTDQArm",
574 "(V?)MOVSHDUPrm",
575 "(V?)MOVSLDUPrm",
576 "(V?)MOVUPDrm",
577 "(V?)MOVUPSrm",
578 "VPBROADCASTDrm",
579 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000580 "(V?)ROUNDPD(Y?)r",
581 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000582 "(V?)ROUNDSDr",
583 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000584
585def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
586 let Latency = 7;
587 let NumMicroOps = 1;
588 let ResourceCycles = [1];
589}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000590def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
591 "LD_F64m",
592 "LD_F80m",
593 "VBROADCASTF128",
594 "VBROADCASTI128",
595 "VBROADCASTSDYrm",
596 "VBROADCASTSSYrm",
597 "VLDDQUYrm",
598 "VMOVAPDYrm",
599 "VMOVAPSYrm",
600 "VMOVDDUPYrm",
601 "VMOVDQAYrm",
602 "VMOVDQUYrm",
603 "VMOVNTDQAYrm",
604 "VMOVSHDUPYrm",
605 "VMOVSLDUPYrm",
606 "VMOVUPDYrm",
607 "VMOVUPSYrm",
608 "VPBROADCASTDYrm",
609 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000610
611def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
612 let Latency = 5;
613 let NumMicroOps = 1;
614 let ResourceCycles = [1];
615}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000616def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm16",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000617 "MOVSX(16|32|64)rm32",
618 "MOVSX(16|32|64)rm8",
619 "MOVZX(16|32|64)rm16",
620 "MOVZX(16|32|64)rm8",
621 "PREFETCHNTA",
622 "PREFETCHT0",
623 "PREFETCHT1",
624 "PREFETCHT2",
625 "(V?)MOV64toPQIrm",
626 "(V?)MOVDDUPrm",
627 "(V?)MOVDI2PDIrm",
628 "(V?)MOVQI2PQIrm",
629 "(V?)MOVSDrm",
630 "(V?)MOVSSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000631
Gadi Haberd76f7b82017-08-28 10:04:16 +0000632def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
633 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000634 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000635 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000636}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000637def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
638 "MMX_MOVD64from64rm",
639 "MMX_MOVD64mr",
640 "MMX_MOVNTQmr",
641 "MMX_MOVQ64mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000642 "MOVNTI_64mr",
643 "MOVNTImr",
644 "ST_FP32m",
645 "ST_FP64m",
646 "ST_FP80m",
647 "VEXTRACTF128mr",
648 "VEXTRACTI128mr",
649 "(V?)MOVAPD(Y?)mr",
650 "(V?)MOVAPS(V?)mr",
651 "(V?)MOVDQA(Y?)mr",
652 "(V?)MOVDQU(Y?)mr",
653 "(V?)MOVHPDmr",
654 "(V?)MOVHPSmr",
655 "(V?)MOVLPDmr",
656 "(V?)MOVLPSmr",
657 "(V?)MOVNTDQ(Y?)mr",
658 "(V?)MOVNTPD(Y?)mr",
659 "(V?)MOVNTPS(Y?)mr",
660 "(V?)MOVPDI2DImr",
661 "(V?)MOVPQI2QImr",
662 "(V?)MOVPQIto64mr",
663 "(V?)MOVSDmr",
664 "(V?)MOVSSmr",
665 "(V?)MOVUPD(Y?)mr",
666 "(V?)MOVUPS(Y?)mr",
667 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000668
Gadi Haberd76f7b82017-08-28 10:04:16 +0000669def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
670 let Latency = 1;
671 let NumMicroOps = 1;
672 let ResourceCycles = [1];
673}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000674def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
675 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000676 "(V?)MOVPDI2DIrr",
677 "(V?)MOVPQIto64rr",
678 "(V?)PSLLD(Y?)ri",
679 "(V?)PSLLQ(Y?)ri",
680 "VPSLLVQ(Y?)rr",
681 "(V?)PSLLW(Y?)ri",
682 "(V?)PSRAD(Y?)ri",
683 "(V?)PSRAW(Y?)ri",
684 "(V?)PSRLD(Y?)ri",
685 "(V?)PSRLQ(Y?)ri",
686 "VPSRLVQ(Y?)rr",
687 "(V?)PSRLW(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000688 "VTESTPD(Y?)rr",
689 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000690
691def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
692 let Latency = 1;
693 let NumMicroOps = 1;
694 let ResourceCycles = [1];
695}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000696def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
697 "COM_FST0r",
698 "UCOM_FPr",
699 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000700
701def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
702 let Latency = 1;
703 let NumMicroOps = 1;
704 let ResourceCycles = [1];
705}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000706def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000707 "MMX_MOVD64to64rr",
708 "MMX_MOVQ2DQrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000709 "VBROADCASTSSrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000710 "(V?)INSERTPSrr",
711 "(V?)MOV64toPQIrr",
712 "(V?)MOVAPD(Y?)rr",
713 "(V?)MOVAPS(Y?)rr",
714 "(V?)MOVDDUP(Y?)rr",
715 "(V?)MOVDI2PDIrr",
716 "(V?)MOVHLPSrr",
717 "(V?)MOVLHPSrr",
718 "(V?)MOVSDrr",
719 "(V?)MOVSHDUP(Y?)rr",
720 "(V?)MOVSLDUP(Y?)rr",
721 "(V?)MOVSSrr",
722 "(V?)MOVUPD(Y?)rr",
723 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000724 "(V?)PACKSSDW(Y?)rr",
725 "(V?)PACKSSWB(Y?)rr",
726 "(V?)PACKUSDW(Y?)rr",
727 "(V?)PACKUSWB(Y?)rr",
728 "(V?)PALIGNR(Y?)rri",
729 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000730 "VPBROADCASTDrr",
731 "VPBROADCASTQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000732 "VPERMILPD(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000733 "VPERMILPS(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000734 "(V?)PMOVSXBDrr",
735 "(V?)PMOVSXBQrr",
736 "(V?)PMOVSXBWrr",
737 "(V?)PMOVSXDQrr",
738 "(V?)PMOVSXWDrr",
739 "(V?)PMOVSXWQrr",
740 "(V?)PMOVZXBDrr",
741 "(V?)PMOVZXBQrr",
742 "(V?)PMOVZXBWrr",
743 "(V?)PMOVZXDQrr",
744 "(V?)PMOVZXWDrr",
745 "(V?)PMOVZXWQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000746 "(V?)PSHUFD(Y?)ri",
747 "(V?)PSHUFHW(Y?)ri",
748 "(V?)PSHUFLW(Y?)ri",
749 "(V?)PSLLDQ(Y?)ri",
750 "(V?)PSRLDQ(Y?)ri",
751 "(V?)PUNPCKHBW(Y?)rr",
752 "(V?)PUNPCKHDQ(Y?)rr",
753 "(V?)PUNPCKHQDQ(Y?)rr",
754 "(V?)PUNPCKHWD(Y?)rr",
755 "(V?)PUNPCKLBW(Y?)rr",
756 "(V?)PUNPCKLDQ(Y?)rr",
757 "(V?)PUNPCKLQDQ(Y?)rr",
758 "(V?)PUNPCKLWD(Y?)rr",
759 "(V?)SHUFPD(Y?)rri",
760 "(V?)SHUFPS(Y?)rri",
761 "(V?)UNPCKHPD(Y?)rr",
762 "(V?)UNPCKHPS(Y?)rr",
763 "(V?)UNPCKLPD(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000764 "(V?)UNPCKLPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000765
766def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
767 let Latency = 1;
768 let NumMicroOps = 1;
769 let ResourceCycles = [1];
770}
771def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
772
773def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
774 let Latency = 1;
775 let NumMicroOps = 1;
776 let ResourceCycles = [1];
777}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000778def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP",
779 "FNOP")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000780
781def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
782 let Latency = 1;
783 let NumMicroOps = 1;
784 let ResourceCycles = [1];
785}
Craig Topperfbe31322018-04-05 21:56:19 +0000786def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000787def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
788 "BT(16|32|64)rr",
789 "BTC(16|32|64)ri8",
790 "BTC(16|32|64)rr",
791 "BTR(16|32|64)ri8",
792 "BTR(16|32|64)rr",
793 "BTS(16|32|64)ri8",
794 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000795 "RORX(32|64)ri",
796 "SAR(8|16|32|64)r1",
797 "SAR(8|16|32|64)ri",
798 "SARX(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000799 "SHL(8|16|32|64)r1",
800 "SHL(8|16|32|64)ri",
801 "SHLX(32|64)rr",
802 "SHR(8|16|32|64)r1",
803 "SHR(8|16|32|64)ri",
804 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000805
806def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
807 let Latency = 1;
808 let NumMicroOps = 1;
809 let ResourceCycles = [1];
810}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000811def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
812 "BLSI(32|64)rr",
813 "BLSMSK(32|64)rr",
814 "BLSR(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000815 "LEA(16|32|64)(_32)?r",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000816 "(V?)PABSB(Y?)rr",
817 "(V?)PABSD(Y?)rr",
818 "(V?)PABSW(Y?)rr",
819 "(V?)PADDB(Y?)rr",
820 "(V?)PADDD(Y?)rr",
821 "(V?)PADDQ(Y?)rr",
822 "(V?)PADDSB(Y?)rr",
823 "(V?)PADDSW(Y?)rr",
824 "(V?)PADDUSB(Y?)rr",
825 "(V?)PADDUSW(Y?)rr",
826 "(V?)PADDW(Y?)rr",
827 "(V?)PAVGB(Y?)rr",
828 "(V?)PAVGW(Y?)rr",
829 "(V?)PCMPEQB(Y?)rr",
830 "(V?)PCMPEQD(Y?)rr",
831 "(V?)PCMPEQQ(Y?)rr",
832 "(V?)PCMPEQW(Y?)rr",
833 "(V?)PCMPGTB(Y?)rr",
834 "(V?)PCMPGTD(Y?)rr",
835 "(V?)PCMPGTW(Y?)rr",
836 "(V?)PMAXSB(Y?)rr",
837 "(V?)PMAXSD(Y?)rr",
838 "(V?)PMAXSW(Y?)rr",
839 "(V?)PMAXUB(Y?)rr",
840 "(V?)PMAXUD(Y?)rr",
841 "(V?)PMAXUW(Y?)rr",
842 "(V?)PMINSB(Y?)rr",
843 "(V?)PMINSD(Y?)rr",
844 "(V?)PMINSW(Y?)rr",
845 "(V?)PMINUB(Y?)rr",
846 "(V?)PMINUD(Y?)rr",
847 "(V?)PMINUW(Y?)rr",
848 "(V?)PSIGNB(Y?)rr",
849 "(V?)PSIGND(Y?)rr",
850 "(V?)PSIGNW(Y?)rr",
851 "(V?)PSUBB(Y?)rr",
852 "(V?)PSUBD(Y?)rr",
853 "(V?)PSUBQ(Y?)rr",
854 "(V?)PSUBSB(Y?)rr",
855 "(V?)PSUBSW(Y?)rr",
856 "(V?)PSUBUSB(Y?)rr",
857 "(V?)PSUBUSW(Y?)rr",
858 "(V?)PSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000859
860def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
861 let Latency = 1;
862 let NumMicroOps = 1;
863 let ResourceCycles = [1];
864}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000865def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000866 "(V?)BLENDPD(Y?)rri",
867 "(V?)BLENDPS(Y?)rri",
868 "(V?)MOVDQA(Y?)rr",
869 "(V?)MOVDQU(Y?)rr",
870 "(V?)MOVPQI2QIrr",
871 "VMOVZPQILo2PQIrr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000872 "VPBLENDD(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000873
874def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
875 let Latency = 1;
876 let NumMicroOps = 1;
877 let ResourceCycles = [1];
878}
Craig Topperfbe31322018-04-05 21:56:19 +0000879def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000880def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000881 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000882 "LAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000883 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000884 "SAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000885 "SGDT64m",
886 "SIDT64m",
887 "SLDT64m",
888 "SMSW16m",
889 "STC",
890 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000891 "SYSCALL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000892
893def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000894 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000895 let NumMicroOps = 2;
896 let ResourceCycles = [1,1];
897}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000898def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
899 "MMX_PSLLQrm",
900 "MMX_PSLLWrm",
901 "MMX_PSRADrm",
902 "MMX_PSRAWrm",
903 "MMX_PSRLDrm",
904 "MMX_PSRLQrm",
905 "MMX_PSRLWrm",
906 "VCVTPH2PSrm",
907 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000908
Gadi Haber2cf601f2017-12-08 09:48:44 +0000909def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
910 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000911 let NumMicroOps = 2;
912 let ResourceCycles = [1,1];
913}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000914def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
915 "(V?)CVTSS2SDrm",
916 "VPSLLVQrm",
917 "VPSRLVQrm",
918 "VTESTPDrm",
919 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000920
921def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
922 let Latency = 8;
923 let NumMicroOps = 2;
924 let ResourceCycles = [1,1];
925}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000926def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
927 "VPSLLQYrm",
928 "VPSLLVQYrm",
929 "VPSLLWYrm",
930 "VPSRADYrm",
931 "VPSRAWYrm",
932 "VPSRLDYrm",
933 "VPSRLQYrm",
934 "VPSRLVQYrm",
935 "VPSRLWYrm",
936 "VTESTPDYrm",
937 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000938
939def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
940 let Latency = 8;
941 let NumMicroOps = 2;
942 let ResourceCycles = [1,1];
943}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000944def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000945 "FCOM64m",
946 "FCOMP32m",
947 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000948 "MMX_CVTPI2PSirm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000949 "PDEP(32|64)rm",
950 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000951 "(V?)ADDSDrm",
952 "(V?)ADDSSrm",
953 "(V?)CMPSDrm",
954 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000955 "(V?)MAX(C?)SDrm",
956 "(V?)MAX(C?)SSrm",
957 "(V?)MIN(C?)SDrm",
958 "(V?)MIN(C?)SSrm",
959 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000960 "(V?)SUBSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000961
Craig Topperf846e2d2018-04-19 05:34:05 +0000962def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
963 let Latency = 8;
964 let NumMicroOps = 3;
965 let ResourceCycles = [1,1,1];
966}
967def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
968
969def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
970 let Latency = 9;
971 let NumMicroOps = 5;
972 let ResourceCycles = [1,1,2,1];
973}
974def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
975
Gadi Haberd76f7b82017-08-28 10:04:16 +0000976def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000977 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000978 let NumMicroOps = 2;
979 let ResourceCycles = [1,1];
980}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000981def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000982 "(V?)INSERTPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000983 "(V?)PACKSSDWrm",
984 "(V?)PACKSSWBrm",
985 "(V?)PACKUSDWrm",
986 "(V?)PACKUSWBrm",
987 "(V?)PALIGNRrmi",
988 "(V?)PBLENDWrmi",
989 "VPERMILPDmi",
990 "VPERMILPDrm",
991 "VPERMILPSmi",
992 "VPERMILPSrm",
993 "(V?)PSHUFBrm",
994 "(V?)PSHUFDmi",
995 "(V?)PSHUFHWmi",
996 "(V?)PSHUFLWmi",
997 "(V?)PUNPCKHBWrm",
998 "(V?)PUNPCKHDQrm",
999 "(V?)PUNPCKHQDQrm",
1000 "(V?)PUNPCKHWDrm",
1001 "(V?)PUNPCKLBWrm",
1002 "(V?)PUNPCKLDQrm",
1003 "(V?)PUNPCKLQDQrm",
1004 "(V?)PUNPCKLWDrm",
1005 "(V?)SHUFPDrmi",
1006 "(V?)SHUFPSrmi",
1007 "(V?)UNPCKHPDrm",
1008 "(V?)UNPCKHPSrm",
1009 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001010 "(V?)UNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001011
Gadi Haber2cf601f2017-12-08 09:48:44 +00001012def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1013 let Latency = 8;
1014 let NumMicroOps = 2;
1015 let ResourceCycles = [1,1];
1016}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001017def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
1018 "VANDNPSYrm",
1019 "VANDPDYrm",
1020 "VANDPSYrm",
1021 "VORPDYrm",
1022 "VORPSYrm",
1023 "VPACKSSDWYrm",
1024 "VPACKSSWBYrm",
1025 "VPACKUSDWYrm",
1026 "VPACKUSWBYrm",
1027 "VPALIGNRYrmi",
1028 "VPBLENDWYrmi",
1029 "VPERMILPDYmi",
1030 "VPERMILPDYrm",
1031 "VPERMILPSYmi",
1032 "VPERMILPSYrm",
1033 "VPMOVSXBDYrm",
1034 "VPMOVSXBQYrm",
1035 "VPMOVSXWQYrm",
1036 "VPSHUFBYrm",
1037 "VPSHUFDYmi",
1038 "VPSHUFHWYmi",
1039 "VPSHUFLWYmi",
1040 "VPUNPCKHBWYrm",
1041 "VPUNPCKHDQYrm",
1042 "VPUNPCKHQDQYrm",
1043 "VPUNPCKHWDYrm",
1044 "VPUNPCKLBWYrm",
1045 "VPUNPCKLDQYrm",
1046 "VPUNPCKLQDQYrm",
1047 "VPUNPCKLWDYrm",
1048 "VSHUFPDYrmi",
1049 "VSHUFPSYrmi",
1050 "VUNPCKHPDYrm",
1051 "VUNPCKHPSYrm",
1052 "VUNPCKLPDYrm",
1053 "VUNPCKLPSYrm",
1054 "VXORPDYrm",
1055 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001056
1057def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1058 let Latency = 6;
1059 let NumMicroOps = 2;
1060 let ResourceCycles = [1,1];
1061}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001062def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
1063 "MMX_PINSRWrm",
1064 "MMX_PSHUFBrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001065 "MMX_PUNPCKHBWirm",
1066 "MMX_PUNPCKHDQirm",
1067 "MMX_PUNPCKHWDirm",
1068 "MMX_PUNPCKLBWirm",
1069 "MMX_PUNPCKLDQirm",
1070 "MMX_PUNPCKLWDirm",
1071 "(V?)MOVHPDrm",
1072 "(V?)MOVHPSrm",
1073 "(V?)MOVLPDrm",
1074 "(V?)MOVLPSrm",
1075 "(V?)PINSRBrm",
1076 "(V?)PINSRDrm",
1077 "(V?)PINSRQrm",
1078 "(V?)PINSRWrm",
1079 "(V?)PMOVSXBDrm",
1080 "(V?)PMOVSXBQrm",
1081 "(V?)PMOVSXBWrm",
1082 "(V?)PMOVSXDQrm",
1083 "(V?)PMOVSXWDrm",
1084 "(V?)PMOVSXWQrm",
1085 "(V?)PMOVZXBDrm",
1086 "(V?)PMOVZXBQrm",
1087 "(V?)PMOVZXBWrm",
1088 "(V?)PMOVZXDQrm",
1089 "(V?)PMOVZXWDrm",
1090 "(V?)PMOVZXWQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001091
Gadi Haberd76f7b82017-08-28 10:04:16 +00001092def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001093 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001094 let NumMicroOps = 2;
1095 let ResourceCycles = [1,1];
1096}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001097def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
1098 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001099
1100def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001101 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001102 let NumMicroOps = 2;
1103 let ResourceCycles = [1,1];
1104}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001105def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1106 "RORX(32|64)mi",
1107 "SARX(32|64)rm",
1108 "SHLX(32|64)rm",
1109 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001110
1111def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001112 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001113 let NumMicroOps = 2;
1114 let ResourceCycles = [1,1];
1115}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001116def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1117 "BLSI(32|64)rm",
1118 "BLSMSK(32|64)rm",
1119 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001120 "MMX_PADD(B|D|Q|W)irm",
1121 "MMX_PADDS(B|W)irm",
1122 "MMX_PADDUS(B|W)irm",
1123 "MMX_PAVG(B|W)irm",
1124 "MMX_PCMPEQ(B|D|W)irm",
1125 "MMX_PCMPGT(B|D|W)irm",
1126 "MMX_P(MAX|MIN)SWirm",
1127 "MMX_P(MAX|MIN)UBirm",
1128 "MMX_PSIGN(B|D|W)rm",
1129 "MMX_PSUB(B|D|Q|W)irm",
1130 "MMX_PSUBS(B|W)irm",
1131 "MMX_PSUBUS(B|W)irm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001132 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001133
1134def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1135 let Latency = 7;
1136 let NumMicroOps = 2;
1137 let ResourceCycles = [1,1];
1138}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001139def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1140 "(V?)PABSDrm",
1141 "(V?)PABSWrm",
1142 "(V?)PADDBrm",
1143 "(V?)PADDDrm",
1144 "(V?)PADDQrm",
1145 "(V?)PADDSBrm",
1146 "(V?)PADDSWrm",
1147 "(V?)PADDUSBrm",
1148 "(V?)PADDUSWrm",
1149 "(V?)PADDWrm",
1150 "(V?)PAVGBrm",
1151 "(V?)PAVGWrm",
1152 "(V?)PCMPEQBrm",
1153 "(V?)PCMPEQDrm",
1154 "(V?)PCMPEQQrm",
1155 "(V?)PCMPEQWrm",
1156 "(V?)PCMPGTBrm",
1157 "(V?)PCMPGTDrm",
1158 "(V?)PCMPGTWrm",
1159 "(V?)PMAXSBrm",
1160 "(V?)PMAXSDrm",
1161 "(V?)PMAXSWrm",
1162 "(V?)PMAXUBrm",
1163 "(V?)PMAXUDrm",
1164 "(V?)PMAXUWrm",
1165 "(V?)PMINSBrm",
1166 "(V?)PMINSDrm",
1167 "(V?)PMINSWrm",
1168 "(V?)PMINUBrm",
1169 "(V?)PMINUDrm",
1170 "(V?)PMINUWrm",
1171 "(V?)PSIGNBrm",
1172 "(V?)PSIGNDrm",
1173 "(V?)PSIGNWrm",
1174 "(V?)PSUBBrm",
1175 "(V?)PSUBDrm",
1176 "(V?)PSUBQrm",
1177 "(V?)PSUBSBrm",
1178 "(V?)PSUBSWrm",
1179 "(V?)PSUBUSBrm",
1180 "(V?)PSUBUSWrm",
1181 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001182
1183def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1184 let Latency = 8;
1185 let NumMicroOps = 2;
1186 let ResourceCycles = [1,1];
1187}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001188def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1189 "VPABSDYrm",
1190 "VPABSWYrm",
1191 "VPADDBYrm",
1192 "VPADDDYrm",
1193 "VPADDQYrm",
1194 "VPADDSBYrm",
1195 "VPADDSWYrm",
1196 "VPADDUSBYrm",
1197 "VPADDUSWYrm",
1198 "VPADDWYrm",
1199 "VPAVGBYrm",
1200 "VPAVGWYrm",
1201 "VPCMPEQBYrm",
1202 "VPCMPEQDYrm",
1203 "VPCMPEQQYrm",
1204 "VPCMPEQWYrm",
1205 "VPCMPGTBYrm",
1206 "VPCMPGTDYrm",
1207 "VPCMPGTWYrm",
1208 "VPMAXSBYrm",
1209 "VPMAXSDYrm",
1210 "VPMAXSWYrm",
1211 "VPMAXUBYrm",
1212 "VPMAXUDYrm",
1213 "VPMAXUWYrm",
1214 "VPMINSBYrm",
1215 "VPMINSDYrm",
1216 "VPMINSWYrm",
1217 "VPMINUBYrm",
1218 "VPMINUDYrm",
1219 "VPMINUWYrm",
1220 "VPSIGNBYrm",
1221 "VPSIGNDYrm",
1222 "VPSIGNWYrm",
1223 "VPSUBBYrm",
1224 "VPSUBDYrm",
1225 "VPSUBQYrm",
1226 "VPSUBSBYrm",
1227 "VPSUBSWYrm",
1228 "VPSUBUSBYrm",
1229 "VPSUBUSWYrm",
1230 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001231
1232def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001233 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001234 let NumMicroOps = 2;
1235 let ResourceCycles = [1,1];
1236}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001237def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1238 "(V?)BLENDPSrmi",
1239 "VINSERTF128rm",
1240 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001241 "VPBLENDDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001242
Gadi Haber2cf601f2017-12-08 09:48:44 +00001243def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1244 let Latency = 6;
1245 let NumMicroOps = 2;
1246 let ResourceCycles = [1,1];
1247}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001248def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1249 "MMX_PANDirm",
1250 "MMX_PORirm",
1251 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001252
1253def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1254 let Latency = 8;
1255 let NumMicroOps = 2;
1256 let ResourceCycles = [1,1];
1257}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001258def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1259 "VBLENDPSYrmi",
1260 "VPANDNYrm",
1261 "VPANDYrm",
1262 "VPBLENDDYrmi",
1263 "VPORYrm",
1264 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001265
Gadi Haberd76f7b82017-08-28 10:04:16 +00001266def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001267 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001268 let NumMicroOps = 2;
1269 let ResourceCycles = [1,1];
1270}
Craig Topper2d451e72018-03-18 08:38:06 +00001271def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001272def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001273
1274def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001275 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001276 let NumMicroOps = 2;
1277 let ResourceCycles = [1,1];
1278}
1279def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1280
1281def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001282 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001283 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001284 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001285}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001286def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1287 "(V?)PEXTRBmr",
1288 "(V?)PEXTRDmr",
1289 "(V?)PEXTRQmr",
1290 "(V?)PEXTRWmr",
1291 "(V?)STMXCSR")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001292
Gadi Haberd76f7b82017-08-28 10:04:16 +00001293def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001294 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001295 let NumMicroOps = 3;
1296 let ResourceCycles = [1,1,1];
1297}
1298def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001299
Gadi Haberd76f7b82017-08-28 10:04:16 +00001300def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001301 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001302 let NumMicroOps = 3;
1303 let ResourceCycles = [1,1,1];
1304}
1305def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1306
1307def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001308 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001309 let NumMicroOps = 3;
1310 let ResourceCycles = [1,1,1];
1311}
1312def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1313
1314def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001315 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001316 let NumMicroOps = 3;
1317 let ResourceCycles = [1,1,1];
1318}
Craig Topper2d451e72018-03-18 08:38:06 +00001319def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001320def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1321 "PUSH64i8",
1322 "STOSB",
1323 "STOSL",
1324 "STOSQ",
1325 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001326
1327def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001328 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001329 let NumMicroOps = 4;
1330 let ResourceCycles = [1,1,1,1];
1331}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001332def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1333 "BTR(16|32|64)mi8",
1334 "BTS(16|32|64)mi8",
1335 "SAR(8|16|32|64)m1",
1336 "SAR(8|16|32|64)mi",
1337 "SHL(8|16|32|64)m1",
1338 "SHL(8|16|32|64)mi",
1339 "SHR(8|16|32|64)m1",
1340 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001341
1342def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001343 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001344 let NumMicroOps = 4;
1345 let ResourceCycles = [1,1,1,1];
1346}
Craig Topperf0d04262018-04-06 16:16:48 +00001347def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1348 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001349
1350def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001351 let Latency = 2;
1352 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001353 let ResourceCycles = [2];
1354}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001355def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1356 "BLENDVPSrr0",
1357 "MMX_PINSRWrr",
1358 "PBLENDVBrr0",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001359 "VBLENDVPD(Y?)rr",
1360 "VBLENDVPS(Y?)rr",
1361 "VPBLENDVB(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001362 "(V?)PINSRBrr",
1363 "(V?)PINSRDrr",
1364 "(V?)PINSRQrr",
1365 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001366
Gadi Haberd76f7b82017-08-28 10:04:16 +00001367def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1368 let Latency = 2;
1369 let NumMicroOps = 2;
1370 let ResourceCycles = [2];
1371}
1372def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1373
1374def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1375 let Latency = 2;
1376 let NumMicroOps = 2;
1377 let ResourceCycles = [2];
1378}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001379def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1380 "ROL(8|16|32|64)ri",
1381 "ROR(8|16|32|64)r1",
1382 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001383
1384def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1385 let Latency = 2;
1386 let NumMicroOps = 2;
1387 let ResourceCycles = [2];
1388}
1389def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1390def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1391def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1392def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1393
1394def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1395 let Latency = 2;
1396 let NumMicroOps = 2;
1397 let ResourceCycles = [1,1];
1398}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001399def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1400 "VCVTPH2PSYrr",
1401 "VCVTPH2PSrr",
1402 "(V?)CVTPS2PDrr",
1403 "(V?)CVTSS2SDrr",
1404 "(V?)EXTRACTPSrr",
1405 "(V?)PEXTRBrr",
1406 "(V?)PEXTRDrr",
1407 "(V?)PEXTRQrr",
1408 "(V?)PEXTRWrr",
1409 "(V?)PSLLDrr",
1410 "(V?)PSLLQrr",
1411 "(V?)PSLLWrr",
1412 "(V?)PSRADrr",
1413 "(V?)PSRAWrr",
1414 "(V?)PSRLDrr",
1415 "(V?)PSRLQrr",
1416 "(V?)PSRLWrr",
1417 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001418
1419def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1420 let Latency = 2;
1421 let NumMicroOps = 2;
1422 let ResourceCycles = [1,1];
1423}
1424def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1425
1426def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1427 let Latency = 2;
1428 let NumMicroOps = 2;
1429 let ResourceCycles = [1,1];
1430}
1431def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1432
1433def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1434 let Latency = 2;
1435 let NumMicroOps = 2;
1436 let ResourceCycles = [1,1];
1437}
Craig Topper498875f2018-04-04 17:54:19 +00001438def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1439
1440def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1441 let Latency = 1;
1442 let NumMicroOps = 1;
1443 let ResourceCycles = [1];
1444}
1445def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001446
1447def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1448 let Latency = 2;
1449 let NumMicroOps = 2;
1450 let ResourceCycles = [1,1];
1451}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001452def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1453def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1454 "ADC(8|16|32|64)rr",
1455 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001456 "SBB(8|16|32|64)ri",
1457 "SBB(8|16|32|64)rr",
1458 "SBB(8|16|32|64)i",
1459 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001460
1461def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001462 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001463 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001464 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001465}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001466def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1467 "BLENDVPSrm0",
1468 "PBLENDVBrm0",
1469 "VBLENDVPDrm",
1470 "VBLENDVPSrm",
1471 "VMASKMOVPDrm",
1472 "VMASKMOVPSrm",
1473 "VPBLENDVBrm",
1474 "VPMASKMOVDrm",
1475 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001476
Gadi Haber2cf601f2017-12-08 09:48:44 +00001477def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1478 let Latency = 9;
1479 let NumMicroOps = 3;
1480 let ResourceCycles = [2,1];
1481}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001482def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1483 "VBLENDVPSYrm",
1484 "VMASKMOVPDYrm",
1485 "VMASKMOVPSYrm",
1486 "VPBLENDVBYrm",
1487 "VPMASKMOVDYrm",
1488 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001489
1490def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1491 let Latency = 7;
1492 let NumMicroOps = 3;
1493 let ResourceCycles = [2,1];
1494}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001495def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1496 "MMX_PACKSSWBirm",
1497 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001498
Gadi Haberd76f7b82017-08-28 10:04:16 +00001499def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001500 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001501 let NumMicroOps = 3;
1502 let ResourceCycles = [1,2];
1503}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001504def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1505 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001506
1507def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001508 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001509 let NumMicroOps = 3;
1510 let ResourceCycles = [1,1,1];
1511}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001512def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1513 "(V?)PSLLQrm",
1514 "(V?)PSLLWrm",
1515 "(V?)PSRADrm",
1516 "(V?)PSRAWrm",
1517 "(V?)PSRLDrm",
1518 "(V?)PSRLQrm",
1519 "(V?)PSRLWrm",
1520 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001521
1522def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001523 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001524 let NumMicroOps = 3;
1525 let ResourceCycles = [1,1,1];
1526}
1527def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1528
1529def HWWriteResGroup40 : SchedWriteRes<[HWPort0,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001530 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001531 let NumMicroOps = 3;
1532 let ResourceCycles = [1,1,1];
1533}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001534def: InstRW<[HWWriteResGroup40], (instregex "(V?)LDMXCSR")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001535
1536def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001537 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001538 let NumMicroOps = 3;
1539 let ResourceCycles = [1,1,1];
1540}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001541def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1542 "RETL",
1543 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001544
Gadi Haberd76f7b82017-08-28 10:04:16 +00001545def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001546 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001547 let NumMicroOps = 3;
1548 let ResourceCycles = [1,1,1];
1549}
Craig Topperc50570f2018-04-06 17:12:18 +00001550def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1551 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001552
1553def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001554 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001555 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001556 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001557}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001558def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001559
Gadi Haberd76f7b82017-08-28 10:04:16 +00001560def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001561 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001562 let NumMicroOps = 4;
1563 let ResourceCycles = [1,1,1,1];
1564}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001565def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1566 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001567
1568def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001569 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001570 let NumMicroOps = 5;
1571 let ResourceCycles = [1,1,1,2];
1572}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001573def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1574 "ROL(8|16|32|64)mi",
1575 "ROR(8|16|32|64)m1",
1576 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001577
1578def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001579 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001580 let NumMicroOps = 5;
1581 let ResourceCycles = [1,1,1,2];
1582}
Craig Topper13a16502018-03-19 00:56:09 +00001583def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001584
1585def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001586 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001587 let NumMicroOps = 5;
1588 let ResourceCycles = [1,1,1,1,1];
1589}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001590def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1591 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001592
Gadi Haberd76f7b82017-08-28 10:04:16 +00001593def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1594 let Latency = 3;
1595 let NumMicroOps = 1;
1596 let ResourceCycles = [1];
1597}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +00001598def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001599 "PDEP(32|64)rr",
1600 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001601 "SHLD(16|32|64)rri8",
1602 "SHRD(16|32|64)rri8",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001603 "(V?)ADDPD(Y?)rr",
1604 "(V?)ADDPS(Y?)rr",
1605 "(V?)ADDSDrr",
1606 "(V?)ADDSSrr",
1607 "(V?)ADDSUBPD(Y?)rr",
1608 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001609 "(V?)CVTDQ2PS(Y?)rr",
1610 "(V?)CVTPS2DQ(Y?)rr",
1611 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001612 "(V?)SUBPD(Y?)rr",
1613 "(V?)SUBPS(Y?)rr",
1614 "(V?)SUBSDrr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001615 "(V?)SUBSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001616
Clement Courbet327fac42018-03-07 08:14:02 +00001617def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001618 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001619 let NumMicroOps = 2;
1620 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001621}
Clement Courbet327fac42018-03-07 08:14:02 +00001622def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001623
1624def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1625 let Latency = 3;
1626 let NumMicroOps = 1;
1627 let ResourceCycles = [1];
1628}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001629def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
1630 "VBROADCASTSSYrr",
1631 "VEXTRACTF128rr",
1632 "VEXTRACTI128rr",
1633 "VINSERTF128rr",
1634 "VINSERTI128rr",
1635 "VPBROADCASTBYrr",
1636 "VPBROADCASTBrr",
1637 "VPBROADCASTDYrr",
1638 "VPBROADCASTQYrr",
1639 "VPBROADCASTWYrr",
1640 "VPBROADCASTWrr",
1641 "VPERM2F128rr",
1642 "VPERM2I128rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001643 "VPERMPDYri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001644 "VPERMQYri",
1645 "VPMOVSXBDYrr",
1646 "VPMOVSXBQYrr",
1647 "VPMOVSXBWYrr",
1648 "VPMOVSXDQYrr",
1649 "VPMOVSXWDYrr",
1650 "VPMOVSXWQYrr",
1651 "VPMOVZXBDYrr",
1652 "VPMOVZXBQYrr",
1653 "VPMOVZXBWYrr",
1654 "VPMOVZXDQYrr",
1655 "VPMOVZXWDYrr",
1656 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001657
1658def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001659 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001660 let NumMicroOps = 2;
1661 let ResourceCycles = [1,1];
1662}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001663def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1664 "(V?)ADDPSrm",
1665 "(V?)ADDSUBPDrm",
1666 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001667 "(V?)CVTDQ2PSrm",
1668 "(V?)CVTPS2DQrm",
1669 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001670 "(V?)SUBPDrm",
1671 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001672
Gadi Haber2cf601f2017-12-08 09:48:44 +00001673def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1674 let Latency = 10;
1675 let NumMicroOps = 2;
1676 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001677}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001678def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1679 "ADD_F64m",
1680 "ILD_F16m",
1681 "ILD_F32m",
1682 "ILD_F64m",
1683 "SUBR_F32m",
1684 "SUBR_F64m",
1685 "SUB_F32m",
1686 "SUB_F64m",
1687 "VADDPDYrm",
1688 "VADDPSYrm",
1689 "VADDSUBPDYrm",
1690 "VADDSUBPSYrm",
1691 "VCMPPDYrmi",
1692 "VCMPPSYrmi",
1693 "VCVTDQ2PSYrm",
1694 "VCVTPS2DQYrm",
1695 "VCVTTPS2DQYrm",
1696 "VMAX(C?)PDYrm",
1697 "VMAX(C?)PSYrm",
1698 "VMIN(C?)PDYrm",
1699 "VMIN(C?)PSYrm",
1700 "VSUBPDYrm",
1701 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001702
1703def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001704 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001705 let NumMicroOps = 2;
1706 let ResourceCycles = [1,1];
1707}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001708def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1709 "VPERM2I128rm",
1710 "VPERMDYrm",
1711 "VPERMPDYmi",
1712 "VPERMPSYrm",
1713 "VPERMQYmi",
1714 "VPMOVZXBDYrm",
1715 "VPMOVZXBQYrm",
1716 "VPMOVZXBWYrm",
1717 "VPMOVZXDQYrm",
1718 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001719
Gadi Haber2cf601f2017-12-08 09:48:44 +00001720def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1721 let Latency = 9;
1722 let NumMicroOps = 2;
1723 let ResourceCycles = [1,1];
1724}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001725def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1726 "VPMOVSXDQYrm",
1727 "VPMOVSXWDYrm",
1728 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001729
Gadi Haberd76f7b82017-08-28 10:04:16 +00001730def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +00001731 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001732 let NumMicroOps = 3;
1733 let ResourceCycles = [3];
1734}
Craig Topperb5f26592018-04-19 18:00:17 +00001735def: InstRW<[HWWriteResGroup54], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
1736 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
1737 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001738
1739def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1740 let Latency = 3;
1741 let NumMicroOps = 3;
1742 let ResourceCycles = [2,1];
1743}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001744def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1745 "VPSRAVD(Y?)rr",
1746 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001747
1748def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
1749 let Latency = 3;
1750 let NumMicroOps = 3;
1751 let ResourceCycles = [2,1];
1752}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001753def: InstRW<[HWWriteResGroup56], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001754 "(V?)PHADDD(Y?)rr",
1755 "(V?)PHADDSW(Y?)rr",
1756 "(V?)PHADDW(Y?)rr",
1757 "(V?)PHSUBD(Y?)rr",
1758 "(V?)PHSUBSW(Y?)rr",
1759 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001760
1761def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1762 let Latency = 3;
1763 let NumMicroOps = 3;
1764 let ResourceCycles = [2,1];
1765}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001766def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1767 "MMX_PACKSSWBirr",
1768 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001769
1770def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1771 let Latency = 3;
1772 let NumMicroOps = 3;
1773 let ResourceCycles = [1,2];
1774}
1775def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1776
1777def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1778 let Latency = 3;
1779 let NumMicroOps = 3;
1780 let ResourceCycles = [1,2];
1781}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001782def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1783 "RCL(8|16|32|64)r1",
1784 "RCL(8|16|32|64)ri",
1785 "RCR(8|16|32|64)r1",
1786 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001787
1788def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1789 let Latency = 3;
1790 let NumMicroOps = 3;
1791 let ResourceCycles = [2,1];
1792}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001793def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1794 "ROR(8|16|32|64)rCL",
1795 "SAR(8|16|32|64)rCL",
1796 "SHL(8|16|32|64)rCL",
1797 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001798
1799def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001800 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001801 let NumMicroOps = 3;
1802 let ResourceCycles = [1,1,1];
1803}
1804def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1805
1806def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001807 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001808 let NumMicroOps = 3;
1809 let ResourceCycles = [1,1,1];
1810}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001811def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1812 "ISTT_FP32m",
1813 "ISTT_FP64m",
1814 "IST_F16m",
1815 "IST_F32m",
1816 "IST_FP16m",
1817 "IST_FP32m",
1818 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001819
1820def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001821 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001822 let NumMicroOps = 4;
1823 let ResourceCycles = [2,1,1];
1824}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001825def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1826 "VPSRAVDYrm",
1827 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001828
1829def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1830 let Latency = 9;
1831 let NumMicroOps = 4;
1832 let ResourceCycles = [2,1,1];
1833}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001834def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1835 "VPSRAVDrm",
1836 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001837
1838def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001839 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001840 let NumMicroOps = 4;
1841 let ResourceCycles = [2,1,1];
1842}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001843def: InstRW<[HWWriteResGroup64], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001844
1845def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1846 let Latency = 10;
1847 let NumMicroOps = 4;
1848 let ResourceCycles = [2,1,1];
1849}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001850def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1851 "VPHADDSWYrm",
1852 "VPHADDWYrm",
1853 "VPHSUBDYrm",
1854 "VPHSUBSWYrm",
1855 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001856
1857def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1858 let Latency = 9;
1859 let NumMicroOps = 4;
1860 let ResourceCycles = [2,1,1];
1861}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001862def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
1863 "(V?)PHADDSWrm",
1864 "(V?)PHADDWrm",
1865 "(V?)PHSUBDrm",
1866 "(V?)PHSUBSWrm",
1867 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001868
1869def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001870 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001871 let NumMicroOps = 4;
1872 let ResourceCycles = [1,1,2];
1873}
Craig Topperf4cd9082018-01-19 05:47:32 +00001874def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001875
1876def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001877 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001878 let NumMicroOps = 5;
1879 let ResourceCycles = [1,1,1,2];
1880}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001881def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
1882 "RCL(8|16|32|64)mi",
1883 "RCR(8|16|32|64)m1",
1884 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001885
1886def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001887 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001888 let NumMicroOps = 5;
1889 let ResourceCycles = [1,1,2,1];
1890}
Craig Topper13a16502018-03-19 00:56:09 +00001891def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001892
1893def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001894 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001895 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001896 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001897}
Craig Topper9f834812018-04-01 21:54:24 +00001898def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001899
Gadi Haberd76f7b82017-08-28 10:04:16 +00001900def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001901 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001902 let NumMicroOps = 6;
1903 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001904}
Craig Topper9f834812018-04-01 21:54:24 +00001905def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001906 "CMPXCHG(8|16|32|64)rm",
1907 "ROL(8|16|32|64)mCL",
1908 "SAR(8|16|32|64)mCL",
1909 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001910 "SHL(8|16|32|64)mCL",
1911 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001912def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1913 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001914
Gadi Haberd76f7b82017-08-28 10:04:16 +00001915def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
1916 let Latency = 4;
1917 let NumMicroOps = 2;
1918 let ResourceCycles = [1,1];
1919}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001920def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1921 "(V?)CVTSD2SIrr",
1922 "(V?)CVTSS2SI64rr",
1923 "(V?)CVTSS2SIrr",
1924 "(V?)CVTTSD2SI64rr",
1925 "(V?)CVTTSD2SIrr",
1926 "(V?)CVTTSS2SI64rr",
1927 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001928
1929def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
1930 let Latency = 4;
1931 let NumMicroOps = 2;
1932 let ResourceCycles = [1,1];
1933}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001934def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
1935 "VPSLLDYrr",
1936 "VPSLLQYrr",
1937 "VPSLLWYrr",
1938 "VPSRADYrr",
1939 "VPSRAWYrr",
1940 "VPSRLDYrr",
1941 "VPSRLQYrr",
1942 "VPSRLWYrr",
1943 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001944
1945def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
1946 let Latency = 4;
1947 let NumMicroOps = 2;
1948 let ResourceCycles = [1,1];
1949}
1950def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
1951
1952def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
1953 let Latency = 4;
1954 let NumMicroOps = 2;
1955 let ResourceCycles = [1,1];
1956}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001957def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
1958 "MMX_CVTPI2PDirr",
1959 "MMX_CVTPS2PIirr",
1960 "MMX_CVTTPD2PIirr",
1961 "MMX_CVTTPS2PIirr",
1962 "(V?)CVTDQ2PDrr",
1963 "(V?)CVTPD2DQrr",
1964 "(V?)CVTPD2PSrr",
1965 "VCVTPS2PHrr",
1966 "(V?)CVTSD2SSrr",
1967 "(V?)CVTSI642SDrr",
1968 "(V?)CVTSI2SDrr",
1969 "(V?)CVTSI2SSrr",
1970 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001971
1972def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
1973 let Latency = 4;
1974 let NumMicroOps = 2;
1975 let ResourceCycles = [1,1];
1976}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001977def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001978
Craig Topperf846e2d2018-04-19 05:34:05 +00001979def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001980 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001981 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001982 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001983}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001984def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001985
Gadi Haberd76f7b82017-08-28 10:04:16 +00001986def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001987 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001988 let NumMicroOps = 3;
1989 let ResourceCycles = [2,1];
1990}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001991def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
1992 "FICOM32m",
1993 "FICOMP16m",
1994 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001995
1996def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001997 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001998 let NumMicroOps = 3;
1999 let ResourceCycles = [1,1,1];
2000}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002001def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
2002 "(V?)CVTSD2SIrm",
2003 "(V?)CVTSS2SI64rm",
2004 "(V?)CVTSS2SIrm",
2005 "(V?)CVTTSD2SI64rm",
2006 "(V?)CVTTSD2SIrm",
2007 "VCVTTSS2SI64rm",
2008 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002009
2010def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002011 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002012 let NumMicroOps = 3;
2013 let ResourceCycles = [1,1,1];
2014}
2015def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002016
2017def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2018 let Latency = 11;
2019 let NumMicroOps = 3;
2020 let ResourceCycles = [1,1,1];
2021}
2022def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002023
2024def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002025 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002026 let NumMicroOps = 3;
2027 let ResourceCycles = [1,1,1];
2028}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002029def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
2030 "CVTPD2PSrm",
2031 "CVTTPD2DQrm",
2032 "MMX_CVTPD2PIirm",
2033 "MMX_CVTTPD2PIirm",
2034 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002035
2036def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2037 let Latency = 9;
2038 let NumMicroOps = 3;
2039 let ResourceCycles = [1,1,1];
2040}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002041def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
2042 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002043
2044def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002045 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002046 let NumMicroOps = 3;
2047 let ResourceCycles = [1,1,1];
2048}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002049def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002050
2051def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002052 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002053 let NumMicroOps = 3;
2054 let ResourceCycles = [1,1,1];
2055}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002056def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
2057 "VPBROADCASTBrm",
2058 "VPBROADCASTWYrm",
2059 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002060
2061def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2062 let Latency = 4;
2063 let NumMicroOps = 4;
2064 let ResourceCycles = [4];
2065}
2066def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2067
2068def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2069 let Latency = 4;
2070 let NumMicroOps = 4;
2071 let ResourceCycles = [1,3];
2072}
2073def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2074
2075def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2076 let Latency = 4;
2077 let NumMicroOps = 4;
2078 let ResourceCycles = [1,1,2];
2079}
2080def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2081
2082def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002083 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002084 let NumMicroOps = 4;
2085 let ResourceCycles = [1,1,1,1];
2086}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00002087def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
2088 "VMASKMOVPS(Y?)mr",
2089 "VPMASKMOVD(Y?)mr",
2090 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002091
2092def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002093 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002094 let NumMicroOps = 4;
2095 let ResourceCycles = [1,1,1,1];
2096}
2097def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2098
2099def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002100 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002101 let NumMicroOps = 4;
2102 let ResourceCycles = [1,1,1,1];
2103}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002104def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
2105 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002106
2107def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002108 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002109 let NumMicroOps = 5;
2110 let ResourceCycles = [1,2,1,1];
2111}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002112def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
2113 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002114
2115def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002116 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002117 let NumMicroOps = 6;
2118 let ResourceCycles = [1,1,4];
2119}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002120def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
2121 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002122
2123def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002124 let Latency = 5;
2125 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002126 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002127}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00002128def: InstRW<[HWWriteResGroup89], (instregex "(V?)PCMPGTQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002129 "(V?)PHMINPOSUWrr",
2130 "(V?)PMADDUBSW(Y?)rr",
2131 "(V?)PMADDWD(Y?)rr",
2132 "(V?)PMULDQ(Y?)rr",
2133 "(V?)PMULHRSW(Y?)rr",
2134 "(V?)PMULHUW(Y?)rr",
2135 "(V?)PMULHW(Y?)rr",
2136 "(V?)PMULLW(Y?)rr",
2137 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002138 "(V?)RCPPSr",
2139 "(V?)RCPSSr",
2140 "(V?)RSQRTPSr",
2141 "(V?)RSQRTSSr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002142
Gadi Haberd76f7b82017-08-28 10:04:16 +00002143def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002144 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002145 let NumMicroOps = 1;
2146 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002147}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002148def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2149 "(V?)MULPS(Y?)rr",
2150 "(V?)MULSDrr",
Simon Pilgrim3c066172018-04-19 11:37:26 +00002151 "(V?)MULSSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002152
Gadi Haberd76f7b82017-08-28 10:04:16 +00002153def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002154 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002155 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002156 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002157}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002158def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2159 "MMX_PMADDWDirm",
2160 "MMX_PMULHRSWrm",
2161 "MMX_PMULHUWirm",
2162 "MMX_PMULHWirm",
2163 "MMX_PMULLWirm",
2164 "MMX_PMULUDQirm",
2165 "MMX_PSADBWirm",
2166 "(V?)RCPSSm",
2167 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002168
Craig Topper8104f262018-04-02 05:33:28 +00002169def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002170 let Latency = 16;
2171 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002172 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002173}
2174def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
2175
Craig Topper8104f262018-04-02 05:33:28 +00002176def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002177 let Latency = 18;
2178 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002179 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002180}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002181def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002182
2183def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2184 let Latency = 11;
2185 let NumMicroOps = 2;
2186 let ResourceCycles = [1,1];
2187}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002188def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2189 "(V?)PHMINPOSUWrm",
2190 "(V?)PMADDUBSWrm",
2191 "(V?)PMADDWDrm",
2192 "(V?)PMULDQrm",
2193 "(V?)PMULHRSWrm",
2194 "(V?)PMULHUWrm",
2195 "(V?)PMULHWrm",
2196 "(V?)PMULLWrm",
2197 "(V?)PMULUDQrm",
2198 "(V?)PSADBWrm",
2199 "(V?)RCPPSm",
2200 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002201
2202def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2203 let Latency = 12;
2204 let NumMicroOps = 2;
2205 let ResourceCycles = [1,1];
2206}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002207def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2208 "MUL_F64m",
2209 "VPCMPGTQYrm",
2210 "VPMADDUBSWYrm",
2211 "VPMADDWDYrm",
2212 "VPMULDQYrm",
2213 "VPMULHRSWYrm",
2214 "VPMULHUWYrm",
2215 "VPMULHWYrm",
2216 "VPMULLWYrm",
2217 "VPMULUDQYrm",
2218 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002219
Gadi Haberd76f7b82017-08-28 10:04:16 +00002220def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002221 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002222 let NumMicroOps = 2;
2223 let ResourceCycles = [1,1];
2224}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002225def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2226 "(V?)MULPSrm",
2227 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002228
2229def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2230 let Latency = 12;
2231 let NumMicroOps = 2;
2232 let ResourceCycles = [1,1];
2233}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002234def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2235 "VMULPSYrm",
2236 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002237
2238def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2239 let Latency = 10;
2240 let NumMicroOps = 2;
2241 let ResourceCycles = [1,1];
2242}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002243def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2244 "(V?)MULSSrm",
2245 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002246
2247def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2248 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002249 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002250 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002251}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002252def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr",
2253 "(V?)HADDPD(Y?)rr",
2254 "(V?)HADDPS(Y?)rr",
2255 "(V?)HSUBPD(Y?)rr",
2256 "(V?)HSUBPS(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002257
Gadi Haberd76f7b82017-08-28 10:04:16 +00002258def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2259 let Latency = 5;
2260 let NumMicroOps = 3;
2261 let ResourceCycles = [1,1,1];
2262}
2263def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2264
2265def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002266 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002267 let NumMicroOps = 3;
2268 let ResourceCycles = [1,1,1];
2269}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002270def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002271
2272def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002273 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002274 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002275 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002276}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002277def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2278 "(V?)HADDPSrm",
2279 "(V?)HSUBPDrm",
2280 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002281
Gadi Haber2cf601f2017-12-08 09:48:44 +00002282def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2283 let Latency = 12;
2284 let NumMicroOps = 4;
2285 let ResourceCycles = [1,2,1];
2286}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002287def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2288 "VHADDPSYrm",
2289 "VHSUBPDYrm",
2290 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002291
Gadi Haberd76f7b82017-08-28 10:04:16 +00002292def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002293 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002294 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002295 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002296}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002297def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002298
Gadi Haberd76f7b82017-08-28 10:04:16 +00002299def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002300 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002301 let NumMicroOps = 4;
2302 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002303}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002304def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002305
Gadi Haberd76f7b82017-08-28 10:04:16 +00002306def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2307 let Latency = 5;
2308 let NumMicroOps = 5;
2309 let ResourceCycles = [1,4];
2310}
2311def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2312
2313def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2314 let Latency = 5;
2315 let NumMicroOps = 5;
2316 let ResourceCycles = [1,4];
2317}
2318def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2319
2320def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2321 let Latency = 5;
2322 let NumMicroOps = 5;
2323 let ResourceCycles = [2,3];
2324}
Craig Topper13a16502018-03-19 00:56:09 +00002325def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002326
2327def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2328 let Latency = 6;
2329 let NumMicroOps = 2;
2330 let ResourceCycles = [1,1];
2331}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002332def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2333 "VCVTPD2DQYrr",
2334 "VCVTPD2PSYrr",
2335 "VCVTPS2PHYrr",
2336 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002337
2338def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002339 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002340 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002341 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002342}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002343def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2344 "ADD_FI32m",
2345 "SUBR_FI16m",
2346 "SUBR_FI32m",
2347 "SUB_FI16m",
2348 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002349 "VROUNDPDYm",
2350 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002351
Gadi Haber2cf601f2017-12-08 09:48:44 +00002352def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2353 let Latency = 12;
2354 let NumMicroOps = 3;
2355 let ResourceCycles = [2,1];
2356}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002357def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2358 "(V?)ROUNDPSm",
2359 "(V?)ROUNDSDm",
2360 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002361
Gadi Haberd76f7b82017-08-28 10:04:16 +00002362def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002363 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002364 let NumMicroOps = 3;
2365 let ResourceCycles = [1,1,1];
2366}
2367def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2368
2369def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2370 let Latency = 6;
2371 let NumMicroOps = 4;
2372 let ResourceCycles = [1,1,2];
2373}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002374def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2375 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002376
2377def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002378 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002379 let NumMicroOps = 4;
2380 let ResourceCycles = [1,1,1,1];
2381}
2382def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2383
2384def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2385 let Latency = 6;
2386 let NumMicroOps = 4;
2387 let ResourceCycles = [1,1,1,1];
2388}
2389def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2390
2391def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2392 let Latency = 6;
2393 let NumMicroOps = 6;
2394 let ResourceCycles = [1,5];
2395}
2396def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2397
2398def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002399 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002400 let NumMicroOps = 6;
2401 let ResourceCycles = [1,1,1,1,2];
2402}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002403def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2404 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002405
Gadi Haberd76f7b82017-08-28 10:04:16 +00002406def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2407 let Latency = 7;
2408 let NumMicroOps = 3;
2409 let ResourceCycles = [1,2];
2410}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002411def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002412
2413def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002414 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002415 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002416 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002417}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002418def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002419
Gadi Haber2cf601f2017-12-08 09:48:44 +00002420def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2421 let Latency = 14;
2422 let NumMicroOps = 4;
2423 let ResourceCycles = [1,2,1];
2424}
2425def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2426
Gadi Haberd76f7b82017-08-28 10:04:16 +00002427def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2428 let Latency = 7;
2429 let NumMicroOps = 7;
2430 let ResourceCycles = [2,2,1,2];
2431}
Craig Topper2d451e72018-03-18 08:38:06 +00002432def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002433
2434def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002435 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002436 let NumMicroOps = 3;
2437 let ResourceCycles = [1,1,1];
2438}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002439def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2440 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002441
2442def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2443 let Latency = 9;
2444 let NumMicroOps = 3;
2445 let ResourceCycles = [1,1,1];
2446}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002447def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002448
2449def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002450 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002451 let NumMicroOps = 4;
2452 let ResourceCycles = [1,1,1,1];
2453}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002454def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002455
Gadi Haber2cf601f2017-12-08 09:48:44 +00002456def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2457 let Latency = 17;
2458 let NumMicroOps = 3;
2459 let ResourceCycles = [2,1];
2460}
2461def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2462
Gadi Haberd76f7b82017-08-28 10:04:16 +00002463def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002464 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002465 let NumMicroOps = 10;
2466 let ResourceCycles = [1,1,1,4,1,2];
2467}
Craig Topper13a16502018-03-19 00:56:09 +00002468def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002469
Craig Topper8104f262018-04-02 05:33:28 +00002470def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002471 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002472 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002473 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002474}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002475def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2476 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002477
Gadi Haberd76f7b82017-08-28 10:04:16 +00002478def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2479 let Latency = 11;
2480 let NumMicroOps = 3;
2481 let ResourceCycles = [2,1];
2482}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002483def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2484 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002485
Gadi Haberd76f7b82017-08-28 10:04:16 +00002486def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002487 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002488 let NumMicroOps = 4;
2489 let ResourceCycles = [2,1,1];
2490}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002491def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2492 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002493
2494def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2495 let Latency = 11;
2496 let NumMicroOps = 7;
2497 let ResourceCycles = [2,2,3];
2498}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002499def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2500 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002501
2502def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2503 let Latency = 11;
2504 let NumMicroOps = 9;
2505 let ResourceCycles = [1,4,1,3];
2506}
2507def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2508
2509def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2510 let Latency = 11;
2511 let NumMicroOps = 11;
2512 let ResourceCycles = [2,9];
2513}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002514def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002515
2516def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002517 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002518 let NumMicroOps = 14;
2519 let ResourceCycles = [1,1,1,4,2,5];
2520}
2521def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2522
Craig Topper8104f262018-04-02 05:33:28 +00002523def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002524 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002525 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002526 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002527}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002528def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2529 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002530
Craig Topper8104f262018-04-02 05:33:28 +00002531def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002532 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002533 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002534 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002535}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002536def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002537
2538def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002539 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002540 let NumMicroOps = 11;
2541 let ResourceCycles = [2,1,1,3,1,3];
2542}
Craig Topper13a16502018-03-19 00:56:09 +00002543def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002544
Craig Topper8104f262018-04-02 05:33:28 +00002545def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002546 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002547 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002548 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002549}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002550def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002551
Gadi Haberd76f7b82017-08-28 10:04:16 +00002552def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2553 let Latency = 14;
2554 let NumMicroOps = 4;
2555 let ResourceCycles = [2,1,1];
2556}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002557def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002558
2559def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002560 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002561 let NumMicroOps = 5;
2562 let ResourceCycles = [2,1,1,1];
2563}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002564def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002565
Gadi Haber2cf601f2017-12-08 09:48:44 +00002566def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2567 let Latency = 21;
2568 let NumMicroOps = 5;
2569 let ResourceCycles = [2,1,1,1];
2570}
2571def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2572
Gadi Haberd76f7b82017-08-28 10:04:16 +00002573def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2574 let Latency = 14;
2575 let NumMicroOps = 10;
2576 let ResourceCycles = [2,3,1,4];
2577}
2578def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2579
2580def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002581 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002582 let NumMicroOps = 15;
2583 let ResourceCycles = [1,14];
2584}
2585def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2586
2587def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002588 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002589 let NumMicroOps = 8;
2590 let ResourceCycles = [1,1,1,1,1,1,2];
2591}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002592def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2593 "INSL",
2594 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002595
2596def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2597 let Latency = 16;
2598 let NumMicroOps = 16;
2599 let ResourceCycles = [16];
2600}
2601def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2602
2603def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002604 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002605 let NumMicroOps = 19;
2606 let ResourceCycles = [2,1,4,1,1,4,6];
2607}
2608def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2609
2610def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2611 let Latency = 17;
2612 let NumMicroOps = 15;
2613 let ResourceCycles = [2,1,2,4,2,4];
2614}
2615def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2616
Gadi Haberd76f7b82017-08-28 10:04:16 +00002617def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2618 let Latency = 18;
2619 let NumMicroOps = 8;
2620 let ResourceCycles = [1,1,1,5];
2621}
2622def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002623def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002624
Gadi Haberd76f7b82017-08-28 10:04:16 +00002625def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002626 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002627 let NumMicroOps = 19;
2628 let ResourceCycles = [3,1,15];
2629}
Craig Topper391c6f92017-12-10 01:24:08 +00002630def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002631
Gadi Haberd76f7b82017-08-28 10:04:16 +00002632def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2633 let Latency = 20;
2634 let NumMicroOps = 1;
2635 let ResourceCycles = [1];
2636}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002637def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2638 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002639 "DIV_FrST0")>;
2640
2641def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2642 let Latency = 20;
2643 let NumMicroOps = 1;
2644 let ResourceCycles = [1,14];
2645}
2646def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2647 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002648
2649def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002650 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002651 let NumMicroOps = 2;
2652 let ResourceCycles = [1,1];
2653}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002654def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002655 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002656
Craig Topper8104f262018-04-02 05:33:28 +00002657def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002658 let Latency = 26;
2659 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002660 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002661}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002662def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002663
Craig Topper8104f262018-04-02 05:33:28 +00002664def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002665 let Latency = 21;
2666 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002667 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002668}
2669def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2670
Craig Topper8104f262018-04-02 05:33:28 +00002671def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002672 let Latency = 22;
2673 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002674 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002675}
2676def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2677
Craig Topper8104f262018-04-02 05:33:28 +00002678def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002679 let Latency = 25;
2680 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002681 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002682}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002683def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002684
2685def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2686 let Latency = 20;
2687 let NumMicroOps = 10;
2688 let ResourceCycles = [1,2,7];
2689}
2690def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2691
Craig Topper8104f262018-04-02 05:33:28 +00002692def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002693 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002694 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002695 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002696}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002697def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2698 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002699
Craig Topper8104f262018-04-02 05:33:28 +00002700def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002701 let Latency = 21;
2702 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002703 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002704}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002705def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2706 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002707
Craig Topper8104f262018-04-02 05:33:28 +00002708def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002709 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002710 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002711 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002712}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002713def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2714 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002715
2716def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002717 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002718 let NumMicroOps = 3;
2719 let ResourceCycles = [1,1,1];
2720}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002721def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2722 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002723
2724def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2725 let Latency = 24;
2726 let NumMicroOps = 1;
2727 let ResourceCycles = [1];
2728}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002729def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2730 "DIVR_FST0r",
2731 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002732
2733def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002734 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002735 let NumMicroOps = 2;
2736 let ResourceCycles = [1,1];
2737}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002738def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2739 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002740
2741def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002742 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002743 let NumMicroOps = 27;
2744 let ResourceCycles = [1,5,1,1,19];
2745}
2746def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2747
2748def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002749 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002750 let NumMicroOps = 28;
2751 let ResourceCycles = [1,6,1,1,19];
2752}
Craig Topper2d451e72018-03-18 08:38:06 +00002753def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002754
2755def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002756 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002757 let NumMicroOps = 3;
2758 let ResourceCycles = [1,1,1];
2759}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002760def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2761 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002762
Gadi Haberd76f7b82017-08-28 10:04:16 +00002763def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002764 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002765 let NumMicroOps = 23;
2766 let ResourceCycles = [1,5,3,4,10];
2767}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002768def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2769 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002770
2771def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002772 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002773 let NumMicroOps = 23;
2774 let ResourceCycles = [1,5,2,1,4,10];
2775}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002776def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2777 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002778
2779def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2780 let Latency = 31;
2781 let NumMicroOps = 31;
2782 let ResourceCycles = [8,1,21,1];
2783}
2784def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2785
Craig Topper8104f262018-04-02 05:33:28 +00002786def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002787 let Latency = 35;
2788 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002789 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002790}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002791def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2792 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002793
Craig Topper8104f262018-04-02 05:33:28 +00002794def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002795 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002796 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002797 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002798}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002799def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2800 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002801
2802def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002803 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002804 let NumMicroOps = 18;
2805 let ResourceCycles = [1,1,2,3,1,1,1,8];
2806}
2807def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2808
2809def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2810 let Latency = 42;
2811 let NumMicroOps = 22;
2812 let ResourceCycles = [2,20];
2813}
Craig Topper2d451e72018-03-18 08:38:06 +00002814def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002815
2816def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002817 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002818 let NumMicroOps = 64;
2819 let ResourceCycles = [2,2,8,1,10,2,39];
2820}
2821def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002822
2823def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002824 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002825 let NumMicroOps = 88;
2826 let ResourceCycles = [4,4,31,1,2,1,45];
2827}
Craig Topper2d451e72018-03-18 08:38:06 +00002828def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002829
2830def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002831 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002832 let NumMicroOps = 90;
2833 let ResourceCycles = [4,2,33,1,2,1,47];
2834}
Craig Topper2d451e72018-03-18 08:38:06 +00002835def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002836
2837def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2838 let Latency = 75;
2839 let NumMicroOps = 15;
2840 let ResourceCycles = [6,3,6];
2841}
2842def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
2843
2844def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2845 let Latency = 98;
2846 let NumMicroOps = 32;
2847 let ResourceCycles = [7,7,3,3,1,11];
2848}
2849def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2850
2851def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2852 let Latency = 112;
2853 let NumMicroOps = 66;
2854 let ResourceCycles = [4,2,4,8,14,34];
2855}
2856def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2857
2858def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002859 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002860 let NumMicroOps = 100;
2861 let ResourceCycles = [9,9,11,8,1,11,21,30];
2862}
2863def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00002864
Gadi Haber2cf601f2017-12-08 09:48:44 +00002865def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
2866 let Latency = 26;
2867 let NumMicroOps = 12;
2868 let ResourceCycles = [2,2,1,3,2,2];
2869}
Craig Topper17a31182017-12-16 18:35:29 +00002870def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
2871 VPGATHERDQrm,
2872 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002873
2874def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2875 let Latency = 24;
2876 let NumMicroOps = 22;
2877 let ResourceCycles = [5,3,4,1,5,4];
2878}
Craig Topper17a31182017-12-16 18:35:29 +00002879def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
2880 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002881
2882def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2883 let Latency = 28;
2884 let NumMicroOps = 22;
2885 let ResourceCycles = [5,3,4,1,5,4];
2886}
Craig Topper17a31182017-12-16 18:35:29 +00002887def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002888
2889def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2890 let Latency = 25;
2891 let NumMicroOps = 22;
2892 let ResourceCycles = [5,3,4,1,5,4];
2893}
Craig Topper17a31182017-12-16 18:35:29 +00002894def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002895
2896def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2897 let Latency = 27;
2898 let NumMicroOps = 20;
2899 let ResourceCycles = [3,3,4,1,5,4];
2900}
Craig Topper17a31182017-12-16 18:35:29 +00002901def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
2902 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002903
2904def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2905 let Latency = 27;
2906 let NumMicroOps = 34;
2907 let ResourceCycles = [5,3,8,1,9,8];
2908}
Craig Topper17a31182017-12-16 18:35:29 +00002909def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
2910 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002911
2912def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2913 let Latency = 23;
2914 let NumMicroOps = 14;
2915 let ResourceCycles = [3,3,2,1,3,2];
2916}
Craig Topper17a31182017-12-16 18:35:29 +00002917def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
2918 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002919
2920def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2921 let Latency = 28;
2922 let NumMicroOps = 15;
2923 let ResourceCycles = [3,3,2,1,4,2];
2924}
Craig Topper17a31182017-12-16 18:35:29 +00002925def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002926
2927def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2928 let Latency = 25;
2929 let NumMicroOps = 15;
2930 let ResourceCycles = [3,3,2,1,4,2];
2931}
Craig Topper17a31182017-12-16 18:35:29 +00002932def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
2933 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002934
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00002935} // SchedModel