blob: 3e5a41dcd365455aee5d4f3c4672501b51a225b7 [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
Craig Topper05242bf2018-04-21 18:07:36 +0000293// Load/store MXCSR.
294def : WriteRes<WriteLDMXCSR, [HWPort0,HWPort23,HWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
295def : WriteRes<WriteSTMXCSR, [HWPort4,HWPort5,HWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
296
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000297def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
298def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000299def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
300def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000301
Michael Zuckermanf6684002017-06-28 11:23:31 +0000302//================ Exceptions ================//
303
304//-- Specific Scheduling Models --//
305
306// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000307def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000308
Craig Topper02daec02018-04-02 01:12:32 +0000309def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000310
Craig Topper02daec02018-04-02 01:12:32 +0000311def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000312 let NumMicroOps = 2;
313}
Craig Topper02daec02018-04-02 01:12:32 +0000314def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000315 let NumMicroOps = 3;
316}
317
Craig Topper02daec02018-04-02 01:12:32 +0000318def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000319 let NumMicroOps = 2;
320}
321
Craig Topper02daec02018-04-02 01:12:32 +0000322def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323 let NumMicroOps = 3;
324 let ResourceCycles = [2, 1];
325}
326
Michael Zuckermanf6684002017-06-28 11:23:31 +0000327// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000328def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000329
Michael Zuckermanf6684002017-06-28 11:23:31 +0000330
Craig Topper02daec02018-04-02 01:12:32 +0000331def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000332 let NumMicroOps = 2;
333 let ResourceCycles = [2];
334}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000335
336// Notation:
337// - r: register.
338// - mm: 64 bit mmx register.
339// - x = 128 bit xmm register.
340// - (x)mm = mmx or xmm register.
341// - y = 256 bit ymm register.
342// - v = any vector register.
343// - m = memory.
344
345//=== Integer Instructions ===//
346//-- Move instructions --//
347
Michael Zuckermanf6684002017-06-28 11:23:31 +0000348// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000349def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000350 let Latency = 7;
351 let NumMicroOps = 3;
352}
Craig Topper02daec02018-04-02 01:12:32 +0000353def : InstRW<[HWWriteXLAT], (instregex "XLAT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000354
Michael Zuckermanf6684002017-06-28 11:23:31 +0000355// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000356def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000357 let NumMicroOps = 19;
358}
Craig Topper02daec02018-04-02 01:12:32 +0000359def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000360
Michael Zuckermanf6684002017-06-28 11:23:31 +0000361// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000362def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000363 let NumMicroOps = 18;
364}
Craig Topper02daec02018-04-02 01:12:32 +0000365def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000366
Michael Zuckermanf6684002017-06-28 11:23:31 +0000367//-- Arithmetic instructions --//
368
Michael Zuckermanf6684002017-06-28 11:23:31 +0000369// DIV.
370// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000371def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000372 let Latency = 22;
373 let NumMicroOps = 9;
374}
Craig Topper02daec02018-04-02 01:12:32 +0000375def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000376
Michael Zuckermanf6684002017-06-28 11:23:31 +0000377// IDIV.
378// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000379def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000380 let Latency = 23;
381 let NumMicroOps = 9;
382}
Craig Topper02daec02018-04-02 01:12:32 +0000383def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000384
Michael Zuckermanf6684002017-06-28 11:23:31 +0000385// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000386// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000387def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000388 let NumMicroOps = 10;
389}
Craig Topper02daec02018-04-02 01:12:32 +0000390def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000391
Michael Zuckermanf6684002017-06-28 11:23:31 +0000392// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000393// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000394def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395 let NumMicroOps = 11;
396}
Craig Topper02daec02018-04-02 01:12:32 +0000397def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000398
Michael Zuckermanf6684002017-06-28 11:23:31 +0000399//-- Control transfer instructions --//
400
Michael Zuckermanf6684002017-06-28 11:23:31 +0000401// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000402// i.
Craig Topper02daec02018-04-02 01:12:32 +0000403def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000404 let NumMicroOps = 4;
405 let ResourceCycles = [1, 2, 1];
406}
Craig Topper02daec02018-04-02 01:12:32 +0000407def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000408
409// BOUND.
410// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000411def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000412 let NumMicroOps = 15;
413}
Craig Topper02daec02018-04-02 01:12:32 +0000414def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000415
416// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000417def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000418 let NumMicroOps = 4;
419}
Craig Topper02daec02018-04-02 01:12:32 +0000420def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000421
422//-- String instructions --//
423
424// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000425def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000426
427// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000428def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000429
Michael Zuckermanf6684002017-06-28 11:23:31 +0000430// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000431def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000432 let Latency = 4;
433 let NumMicroOps = 5;
434 let ResourceCycles = [2, 1, 2];
435}
Craig Topper02daec02018-04-02 01:12:32 +0000436def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000437
Michael Zuckermanf6684002017-06-28 11:23:31 +0000438// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000439def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000440 let Latency = 4;
441 let NumMicroOps = 5;
442 let ResourceCycles = [2, 3];
443}
Craig Topper02daec02018-04-02 01:12:32 +0000444def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000445
Michael Zuckermanf6684002017-06-28 11:23:31 +0000446//-- Other --//
447
Gadi Haberd76f7b82017-08-28 10:04:16 +0000448// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000449def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000450 let NumMicroOps = 34;
451}
Craig Topper02daec02018-04-02 01:12:32 +0000452def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000453
454// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000455def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000456 let NumMicroOps = 17;
457 let ResourceCycles = [1, 16];
458}
Craig Topper02daec02018-04-02 01:12:32 +0000459def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000460
461//=== Floating Point x87 Instructions ===//
462//-- Move instructions --//
463
464// FLD.
465// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000466def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000467
Michael Zuckermanf6684002017-06-28 11:23:31 +0000468// FBLD.
469// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000470def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000471 let Latency = 47;
472 let NumMicroOps = 43;
473}
Craig Topper02daec02018-04-02 01:12:32 +0000474def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000475
476// FST(P).
477// r.
Craig Topper02daec02018-04-02 01:12:32 +0000478def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000479
Michael Zuckermanf6684002017-06-28 11:23:31 +0000480// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000481def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000482
Michael Zuckermanf6684002017-06-28 11:23:31 +0000483// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000484def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000485
Michael Zuckermanf6684002017-06-28 11:23:31 +0000486// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000487def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000488
489// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000490def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000491 let NumMicroOps = 147;
492}
Craig Topper02daec02018-04-02 01:12:32 +0000493def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000494
495// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000496def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000497 let NumMicroOps = 90;
498}
Craig Topper02daec02018-04-02 01:12:32 +0000499def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000500
501//-- Arithmetic instructions --//
502
Michael Zuckermanf6684002017-06-28 11:23:31 +0000503// FCOMPP FUCOMPP.
504// r.
Craig Topper02daec02018-04-02 01:12:32 +0000505def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000506
507// FCOMI(P) FUCOMI(P).
508// m.
Craig Topper02daec02018-04-02 01:12:32 +0000509def : InstRW<[HWWrite3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
510 "UCOM_FIPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000511
Michael Zuckermanf6684002017-06-28 11:23:31 +0000512// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000513def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000514
515// FXAM.
Craig Topper02daec02018-04-02 01:12:32 +0000516def : InstRW<[HWWrite2P1], (instregex "FXAM")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000517
518// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000519def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000520 let Latency = 19;
521 let NumMicroOps = 28;
522}
Craig Topper02daec02018-04-02 01:12:32 +0000523def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000524
525// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000526def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000527 let Latency = 27;
528 let NumMicroOps = 41;
529}
Craig Topper02daec02018-04-02 01:12:32 +0000530def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000531
532// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000533def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000534 let Latency = 11;
535 let NumMicroOps = 17;
536}
Craig Topper02daec02018-04-02 01:12:32 +0000537def : InstRW<[HWWriteFRNDINT], (instregex "FRNDINT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000538
539//-- Math instructions --//
540
541// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000542def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000543 let Latency = 75; // 49-125
544 let NumMicroOps = 50; // 25-75
545}
Craig Topper02daec02018-04-02 01:12:32 +0000546def : InstRW<[HWWriteFSCALE], (instregex "FSCALE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000547
548// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000549def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000550 let Latency = 15;
551 let NumMicroOps = 17;
552}
Craig Topper02daec02018-04-02 01:12:32 +0000553def : InstRW<[HWWriteFXTRACT], (instregex "FXTRACT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000554
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000555////////////////////////////////////////////////////////////////////////////////
556// Horizontal add/sub instructions.
557////////////////////////////////////////////////////////////////////////////////
558
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000559defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1, 2], 3>;
560defm : HWWriteResPair<WritePHAdd, [HWPort1, HWPort5], 3, [1, 2], 3>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000561
Michael Zuckermanf6684002017-06-28 11:23:31 +0000562//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000563
Gadi Haberd76f7b82017-08-28 10:04:16 +0000564// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000565
Gadi Haberd76f7b82017-08-28 10:04:16 +0000566def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000567 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000568 let NumMicroOps = 1;
569 let ResourceCycles = [1];
570}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000571def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
572 "(V?)LDDQUrm",
573 "(V?)MOVAPDrm",
574 "(V?)MOVAPSrm",
575 "(V?)MOVDQArm",
576 "(V?)MOVDQUrm",
577 "(V?)MOVNTDQArm",
578 "(V?)MOVSHDUPrm",
579 "(V?)MOVSLDUPrm",
580 "(V?)MOVUPDrm",
581 "(V?)MOVUPSrm",
582 "VPBROADCASTDrm",
583 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000584 "(V?)ROUNDPD(Y?)r",
585 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000586 "(V?)ROUNDSDr",
587 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000588
589def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
590 let Latency = 7;
591 let NumMicroOps = 1;
592 let ResourceCycles = [1];
593}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000594def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
595 "LD_F64m",
596 "LD_F80m",
597 "VBROADCASTF128",
598 "VBROADCASTI128",
599 "VBROADCASTSDYrm",
600 "VBROADCASTSSYrm",
601 "VLDDQUYrm",
602 "VMOVAPDYrm",
603 "VMOVAPSYrm",
604 "VMOVDDUPYrm",
605 "VMOVDQAYrm",
606 "VMOVDQUYrm",
607 "VMOVNTDQAYrm",
608 "VMOVSHDUPYrm",
609 "VMOVSLDUPYrm",
610 "VMOVUPDYrm",
611 "VMOVUPSYrm",
612 "VPBROADCASTDYrm",
613 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000614
615def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
616 let Latency = 5;
617 let NumMicroOps = 1;
618 let ResourceCycles = [1];
619}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000620def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm16",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000621 "MOVSX(16|32|64)rm32",
622 "MOVSX(16|32|64)rm8",
623 "MOVZX(16|32|64)rm16",
624 "MOVZX(16|32|64)rm8",
625 "PREFETCHNTA",
626 "PREFETCHT0",
627 "PREFETCHT1",
628 "PREFETCHT2",
629 "(V?)MOV64toPQIrm",
630 "(V?)MOVDDUPrm",
631 "(V?)MOVDI2PDIrm",
632 "(V?)MOVQI2PQIrm",
633 "(V?)MOVSDrm",
634 "(V?)MOVSSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000635
Gadi Haberd76f7b82017-08-28 10:04:16 +0000636def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
637 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000638 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000639 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000640}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000641def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
642 "MMX_MOVD64from64rm",
643 "MMX_MOVD64mr",
644 "MMX_MOVNTQmr",
645 "MMX_MOVQ64mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000646 "MOVNTI_64mr",
647 "MOVNTImr",
648 "ST_FP32m",
649 "ST_FP64m",
650 "ST_FP80m",
651 "VEXTRACTF128mr",
652 "VEXTRACTI128mr",
653 "(V?)MOVAPD(Y?)mr",
654 "(V?)MOVAPS(V?)mr",
655 "(V?)MOVDQA(Y?)mr",
656 "(V?)MOVDQU(Y?)mr",
657 "(V?)MOVHPDmr",
658 "(V?)MOVHPSmr",
659 "(V?)MOVLPDmr",
660 "(V?)MOVLPSmr",
661 "(V?)MOVNTDQ(Y?)mr",
662 "(V?)MOVNTPD(Y?)mr",
663 "(V?)MOVNTPS(Y?)mr",
664 "(V?)MOVPDI2DImr",
665 "(V?)MOVPQI2QImr",
666 "(V?)MOVPQIto64mr",
667 "(V?)MOVSDmr",
668 "(V?)MOVSSmr",
669 "(V?)MOVUPD(Y?)mr",
670 "(V?)MOVUPS(Y?)mr",
671 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000672
Gadi Haberd76f7b82017-08-28 10:04:16 +0000673def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
674 let Latency = 1;
675 let NumMicroOps = 1;
676 let ResourceCycles = [1];
677}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000678def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
679 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000680 "(V?)MOVPDI2DIrr",
681 "(V?)MOVPQIto64rr",
682 "(V?)PSLLD(Y?)ri",
683 "(V?)PSLLQ(Y?)ri",
684 "VPSLLVQ(Y?)rr",
685 "(V?)PSLLW(Y?)ri",
686 "(V?)PSRAD(Y?)ri",
687 "(V?)PSRAW(Y?)ri",
688 "(V?)PSRLD(Y?)ri",
689 "(V?)PSRLQ(Y?)ri",
690 "VPSRLVQ(Y?)rr",
691 "(V?)PSRLW(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000692 "VTESTPD(Y?)rr",
693 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000694
695def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
696 let Latency = 1;
697 let NumMicroOps = 1;
698 let ResourceCycles = [1];
699}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000700def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
701 "COM_FST0r",
702 "UCOM_FPr",
703 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000704
705def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
706 let Latency = 1;
707 let NumMicroOps = 1;
708 let ResourceCycles = [1];
709}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000710def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000711 "MMX_MOVD64to64rr",
712 "MMX_MOVQ2DQrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000713 "VBROADCASTSSrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000714 "(V?)MOV64toPQIrr",
715 "(V?)MOVAPD(Y?)rr",
716 "(V?)MOVAPS(Y?)rr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000717 "(V?)MOVDI2PDIrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000718 "(V?)MOVUPD(Y?)rr",
719 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000720 "(V?)PACKSSDW(Y?)rr",
721 "(V?)PACKSSWB(Y?)rr",
722 "(V?)PACKUSDW(Y?)rr",
723 "(V?)PACKUSWB(Y?)rr",
724 "(V?)PALIGNR(Y?)rri",
725 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000726 "VPBROADCASTDrr",
727 "VPBROADCASTQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000728 "(V?)PMOVSXBDrr",
729 "(V?)PMOVSXBQrr",
730 "(V?)PMOVSXBWrr",
731 "(V?)PMOVSXDQrr",
732 "(V?)PMOVSXWDrr",
733 "(V?)PMOVSXWQrr",
734 "(V?)PMOVZXBDrr",
735 "(V?)PMOVZXBQrr",
736 "(V?)PMOVZXBWrr",
737 "(V?)PMOVZXDQrr",
738 "(V?)PMOVZXWDrr",
739 "(V?)PMOVZXWQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000740 "(V?)PSHUFD(Y?)ri",
741 "(V?)PSHUFHW(Y?)ri",
742 "(V?)PSHUFLW(Y?)ri",
743 "(V?)PSLLDQ(Y?)ri",
744 "(V?)PSRLDQ(Y?)ri",
745 "(V?)PUNPCKHBW(Y?)rr",
746 "(V?)PUNPCKHDQ(Y?)rr",
747 "(V?)PUNPCKHQDQ(Y?)rr",
748 "(V?)PUNPCKHWD(Y?)rr",
749 "(V?)PUNPCKLBW(Y?)rr",
750 "(V?)PUNPCKLDQ(Y?)rr",
751 "(V?)PUNPCKLQDQ(Y?)rr",
Simon Pilgrim21935242018-04-21 14:56:56 +0000752 "(V?)PUNPCKLWD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000753
754def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
755 let Latency = 1;
756 let NumMicroOps = 1;
757 let ResourceCycles = [1];
758}
759def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
760
761def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
762 let Latency = 1;
763 let NumMicroOps = 1;
764 let ResourceCycles = [1];
765}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000766def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP",
767 "FNOP")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000768
769def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
770 let Latency = 1;
771 let NumMicroOps = 1;
772 let ResourceCycles = [1];
773}
Craig Topperfbe31322018-04-05 21:56:19 +0000774def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000775def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
776 "BT(16|32|64)rr",
777 "BTC(16|32|64)ri8",
778 "BTC(16|32|64)rr",
779 "BTR(16|32|64)ri8",
780 "BTR(16|32|64)rr",
781 "BTS(16|32|64)ri8",
782 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000783 "RORX(32|64)ri",
784 "SAR(8|16|32|64)r1",
785 "SAR(8|16|32|64)ri",
786 "SARX(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000787 "SHL(8|16|32|64)r1",
788 "SHL(8|16|32|64)ri",
789 "SHLX(32|64)rr",
790 "SHR(8|16|32|64)r1",
791 "SHR(8|16|32|64)ri",
792 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000793
794def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
795 let Latency = 1;
796 let NumMicroOps = 1;
797 let ResourceCycles = [1];
798}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000799def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
800 "BLSI(32|64)rr",
801 "BLSMSK(32|64)rr",
802 "BLSR(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000803 "LEA(16|32|64)(_32)?r",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000804 "(V?)PABSB(Y?)rr",
805 "(V?)PABSD(Y?)rr",
806 "(V?)PABSW(Y?)rr",
807 "(V?)PADDB(Y?)rr",
808 "(V?)PADDD(Y?)rr",
809 "(V?)PADDQ(Y?)rr",
810 "(V?)PADDSB(Y?)rr",
811 "(V?)PADDSW(Y?)rr",
812 "(V?)PADDUSB(Y?)rr",
813 "(V?)PADDUSW(Y?)rr",
814 "(V?)PADDW(Y?)rr",
815 "(V?)PAVGB(Y?)rr",
816 "(V?)PAVGW(Y?)rr",
817 "(V?)PCMPEQB(Y?)rr",
818 "(V?)PCMPEQD(Y?)rr",
819 "(V?)PCMPEQQ(Y?)rr",
820 "(V?)PCMPEQW(Y?)rr",
821 "(V?)PCMPGTB(Y?)rr",
822 "(V?)PCMPGTD(Y?)rr",
823 "(V?)PCMPGTW(Y?)rr",
824 "(V?)PMAXSB(Y?)rr",
825 "(V?)PMAXSD(Y?)rr",
826 "(V?)PMAXSW(Y?)rr",
827 "(V?)PMAXUB(Y?)rr",
828 "(V?)PMAXUD(Y?)rr",
829 "(V?)PMAXUW(Y?)rr",
830 "(V?)PMINSB(Y?)rr",
831 "(V?)PMINSD(Y?)rr",
832 "(V?)PMINSW(Y?)rr",
833 "(V?)PMINUB(Y?)rr",
834 "(V?)PMINUD(Y?)rr",
835 "(V?)PMINUW(Y?)rr",
836 "(V?)PSIGNB(Y?)rr",
837 "(V?)PSIGND(Y?)rr",
838 "(V?)PSIGNW(Y?)rr",
839 "(V?)PSUBB(Y?)rr",
840 "(V?)PSUBD(Y?)rr",
841 "(V?)PSUBQ(Y?)rr",
842 "(V?)PSUBSB(Y?)rr",
843 "(V?)PSUBSW(Y?)rr",
844 "(V?)PSUBUSB(Y?)rr",
845 "(V?)PSUBUSW(Y?)rr",
846 "(V?)PSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000847
848def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
849 let Latency = 1;
850 let NumMicroOps = 1;
851 let ResourceCycles = [1];
852}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000853def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000854 "(V?)MOVDQA(Y?)rr",
855 "(V?)MOVDQU(Y?)rr",
856 "(V?)MOVPQI2QIrr",
857 "VMOVZPQILo2PQIrr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000858 "VPBLENDD(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000859
860def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
861 let Latency = 1;
862 let NumMicroOps = 1;
863 let ResourceCycles = [1];
864}
Craig Topperfbe31322018-04-05 21:56:19 +0000865def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000866def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000867 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000868 "LAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000869 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000870 "SAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000871 "SGDT64m",
872 "SIDT64m",
873 "SLDT64m",
874 "SMSW16m",
875 "STC",
876 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000877 "SYSCALL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000878
879def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000880 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000881 let NumMicroOps = 2;
882 let ResourceCycles = [1,1];
883}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000884def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
885 "MMX_PSLLQrm",
886 "MMX_PSLLWrm",
887 "MMX_PSRADrm",
888 "MMX_PSRAWrm",
889 "MMX_PSRLDrm",
890 "MMX_PSRLQrm",
891 "MMX_PSRLWrm",
892 "VCVTPH2PSrm",
893 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000894
Gadi Haber2cf601f2017-12-08 09:48:44 +0000895def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
896 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000897 let NumMicroOps = 2;
898 let ResourceCycles = [1,1];
899}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000900def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
901 "(V?)CVTSS2SDrm",
902 "VPSLLVQrm",
903 "VPSRLVQrm",
904 "VTESTPDrm",
905 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000906
907def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
908 let Latency = 8;
909 let NumMicroOps = 2;
910 let ResourceCycles = [1,1];
911}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000912def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
913 "VPSLLQYrm",
914 "VPSLLVQYrm",
915 "VPSLLWYrm",
916 "VPSRADYrm",
917 "VPSRAWYrm",
918 "VPSRLDYrm",
919 "VPSRLQYrm",
920 "VPSRLVQYrm",
921 "VPSRLWYrm",
922 "VTESTPDYrm",
923 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000924
925def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
926 let Latency = 8;
927 let NumMicroOps = 2;
928 let ResourceCycles = [1,1];
929}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000930def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000931 "FCOM64m",
932 "FCOMP32m",
933 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000934 "MMX_CVTPI2PSirm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000935 "PDEP(32|64)rm",
936 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000937 "(V?)ADDSDrm",
938 "(V?)ADDSSrm",
939 "(V?)CMPSDrm",
940 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000941 "(V?)MAX(C?)SDrm",
942 "(V?)MAX(C?)SSrm",
943 "(V?)MIN(C?)SDrm",
944 "(V?)MIN(C?)SSrm",
945 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000946 "(V?)SUBSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000947
Craig Topperf846e2d2018-04-19 05:34:05 +0000948def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
949 let Latency = 8;
950 let NumMicroOps = 3;
951 let ResourceCycles = [1,1,1];
952}
953def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
954
955def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
956 let Latency = 9;
957 let NumMicroOps = 5;
958 let ResourceCycles = [1,1,2,1];
959}
960def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
961
Gadi Haberd76f7b82017-08-28 10:04:16 +0000962def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000963 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000964 let NumMicroOps = 2;
965 let ResourceCycles = [1,1];
966}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000967def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000968 "(V?)INSERTPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000969 "(V?)PACKSSDWrm",
970 "(V?)PACKSSWBrm",
971 "(V?)PACKUSDWrm",
972 "(V?)PACKUSWBrm",
973 "(V?)PALIGNRrmi",
974 "(V?)PBLENDWrmi",
975 "VPERMILPDmi",
976 "VPERMILPDrm",
977 "VPERMILPSmi",
978 "VPERMILPSrm",
979 "(V?)PSHUFBrm",
980 "(V?)PSHUFDmi",
981 "(V?)PSHUFHWmi",
982 "(V?)PSHUFLWmi",
983 "(V?)PUNPCKHBWrm",
984 "(V?)PUNPCKHDQrm",
985 "(V?)PUNPCKHQDQrm",
986 "(V?)PUNPCKHWDrm",
987 "(V?)PUNPCKLBWrm",
988 "(V?)PUNPCKLDQrm",
989 "(V?)PUNPCKLQDQrm",
990 "(V?)PUNPCKLWDrm",
991 "(V?)SHUFPDrmi",
992 "(V?)SHUFPSrmi",
993 "(V?)UNPCKHPDrm",
994 "(V?)UNPCKHPSrm",
995 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000996 "(V?)UNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000997
Gadi Haber2cf601f2017-12-08 09:48:44 +0000998def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
999 let Latency = 8;
1000 let NumMicroOps = 2;
1001 let ResourceCycles = [1,1];
1002}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001003def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
1004 "VANDNPSYrm",
1005 "VANDPDYrm",
1006 "VANDPSYrm",
1007 "VORPDYrm",
1008 "VORPSYrm",
1009 "VPACKSSDWYrm",
1010 "VPACKSSWBYrm",
1011 "VPACKUSDWYrm",
1012 "VPACKUSWBYrm",
1013 "VPALIGNRYrmi",
1014 "VPBLENDWYrmi",
1015 "VPERMILPDYmi",
1016 "VPERMILPDYrm",
1017 "VPERMILPSYmi",
1018 "VPERMILPSYrm",
1019 "VPMOVSXBDYrm",
1020 "VPMOVSXBQYrm",
1021 "VPMOVSXWQYrm",
1022 "VPSHUFBYrm",
1023 "VPSHUFDYmi",
1024 "VPSHUFHWYmi",
1025 "VPSHUFLWYmi",
1026 "VPUNPCKHBWYrm",
1027 "VPUNPCKHDQYrm",
1028 "VPUNPCKHQDQYrm",
1029 "VPUNPCKHWDYrm",
1030 "VPUNPCKLBWYrm",
1031 "VPUNPCKLDQYrm",
1032 "VPUNPCKLQDQYrm",
1033 "VPUNPCKLWDYrm",
1034 "VSHUFPDYrmi",
1035 "VSHUFPSYrmi",
1036 "VUNPCKHPDYrm",
1037 "VUNPCKHPSYrm",
1038 "VUNPCKLPDYrm",
1039 "VUNPCKLPSYrm",
1040 "VXORPDYrm",
1041 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001042
1043def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1044 let Latency = 6;
1045 let NumMicroOps = 2;
1046 let ResourceCycles = [1,1];
1047}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001048def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
1049 "MMX_PINSRWrm",
1050 "MMX_PSHUFBrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001051 "MMX_PUNPCKHBWirm",
1052 "MMX_PUNPCKHDQirm",
1053 "MMX_PUNPCKHWDirm",
1054 "MMX_PUNPCKLBWirm",
1055 "MMX_PUNPCKLDQirm",
1056 "MMX_PUNPCKLWDirm",
1057 "(V?)MOVHPDrm",
1058 "(V?)MOVHPSrm",
1059 "(V?)MOVLPDrm",
1060 "(V?)MOVLPSrm",
1061 "(V?)PINSRBrm",
1062 "(V?)PINSRDrm",
1063 "(V?)PINSRQrm",
1064 "(V?)PINSRWrm",
1065 "(V?)PMOVSXBDrm",
1066 "(V?)PMOVSXBQrm",
1067 "(V?)PMOVSXBWrm",
1068 "(V?)PMOVSXDQrm",
1069 "(V?)PMOVSXWDrm",
1070 "(V?)PMOVSXWQrm",
1071 "(V?)PMOVZXBDrm",
1072 "(V?)PMOVZXBQrm",
1073 "(V?)PMOVZXBWrm",
1074 "(V?)PMOVZXDQrm",
1075 "(V?)PMOVZXWDrm",
1076 "(V?)PMOVZXWQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001077
Gadi Haberd76f7b82017-08-28 10:04:16 +00001078def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001079 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001080 let NumMicroOps = 2;
1081 let ResourceCycles = [1,1];
1082}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001083def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
1084 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001085
1086def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001087 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001088 let NumMicroOps = 2;
1089 let ResourceCycles = [1,1];
1090}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001091def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1092 "RORX(32|64)mi",
1093 "SARX(32|64)rm",
1094 "SHLX(32|64)rm",
1095 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001096
1097def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001098 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001099 let NumMicroOps = 2;
1100 let ResourceCycles = [1,1];
1101}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001102def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1103 "BLSI(32|64)rm",
1104 "BLSMSK(32|64)rm",
1105 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001106 "MMX_PADD(B|D|Q|W)irm",
1107 "MMX_PADDS(B|W)irm",
1108 "MMX_PADDUS(B|W)irm",
1109 "MMX_PAVG(B|W)irm",
1110 "MMX_PCMPEQ(B|D|W)irm",
1111 "MMX_PCMPGT(B|D|W)irm",
1112 "MMX_P(MAX|MIN)SWirm",
1113 "MMX_P(MAX|MIN)UBirm",
1114 "MMX_PSIGN(B|D|W)rm",
1115 "MMX_PSUB(B|D|Q|W)irm",
1116 "MMX_PSUBS(B|W)irm",
1117 "MMX_PSUBUS(B|W)irm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001118 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001119
1120def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1121 let Latency = 7;
1122 let NumMicroOps = 2;
1123 let ResourceCycles = [1,1];
1124}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001125def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1126 "(V?)PABSDrm",
1127 "(V?)PABSWrm",
1128 "(V?)PADDBrm",
1129 "(V?)PADDDrm",
1130 "(V?)PADDQrm",
1131 "(V?)PADDSBrm",
1132 "(V?)PADDSWrm",
1133 "(V?)PADDUSBrm",
1134 "(V?)PADDUSWrm",
1135 "(V?)PADDWrm",
1136 "(V?)PAVGBrm",
1137 "(V?)PAVGWrm",
1138 "(V?)PCMPEQBrm",
1139 "(V?)PCMPEQDrm",
1140 "(V?)PCMPEQQrm",
1141 "(V?)PCMPEQWrm",
1142 "(V?)PCMPGTBrm",
1143 "(V?)PCMPGTDrm",
1144 "(V?)PCMPGTWrm",
1145 "(V?)PMAXSBrm",
1146 "(V?)PMAXSDrm",
1147 "(V?)PMAXSWrm",
1148 "(V?)PMAXUBrm",
1149 "(V?)PMAXUDrm",
1150 "(V?)PMAXUWrm",
1151 "(V?)PMINSBrm",
1152 "(V?)PMINSDrm",
1153 "(V?)PMINSWrm",
1154 "(V?)PMINUBrm",
1155 "(V?)PMINUDrm",
1156 "(V?)PMINUWrm",
1157 "(V?)PSIGNBrm",
1158 "(V?)PSIGNDrm",
1159 "(V?)PSIGNWrm",
1160 "(V?)PSUBBrm",
1161 "(V?)PSUBDrm",
1162 "(V?)PSUBQrm",
1163 "(V?)PSUBSBrm",
1164 "(V?)PSUBSWrm",
1165 "(V?)PSUBUSBrm",
1166 "(V?)PSUBUSWrm",
1167 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001168
1169def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1170 let Latency = 8;
1171 let NumMicroOps = 2;
1172 let ResourceCycles = [1,1];
1173}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001174def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1175 "VPABSDYrm",
1176 "VPABSWYrm",
1177 "VPADDBYrm",
1178 "VPADDDYrm",
1179 "VPADDQYrm",
1180 "VPADDSBYrm",
1181 "VPADDSWYrm",
1182 "VPADDUSBYrm",
1183 "VPADDUSWYrm",
1184 "VPADDWYrm",
1185 "VPAVGBYrm",
1186 "VPAVGWYrm",
1187 "VPCMPEQBYrm",
1188 "VPCMPEQDYrm",
1189 "VPCMPEQQYrm",
1190 "VPCMPEQWYrm",
1191 "VPCMPGTBYrm",
1192 "VPCMPGTDYrm",
1193 "VPCMPGTWYrm",
1194 "VPMAXSBYrm",
1195 "VPMAXSDYrm",
1196 "VPMAXSWYrm",
1197 "VPMAXUBYrm",
1198 "VPMAXUDYrm",
1199 "VPMAXUWYrm",
1200 "VPMINSBYrm",
1201 "VPMINSDYrm",
1202 "VPMINSWYrm",
1203 "VPMINUBYrm",
1204 "VPMINUDYrm",
1205 "VPMINUWYrm",
1206 "VPSIGNBYrm",
1207 "VPSIGNDYrm",
1208 "VPSIGNWYrm",
1209 "VPSUBBYrm",
1210 "VPSUBDYrm",
1211 "VPSUBQYrm",
1212 "VPSUBSBYrm",
1213 "VPSUBSWYrm",
1214 "VPSUBUSBYrm",
1215 "VPSUBUSWYrm",
1216 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001217
1218def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001219 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001220 let NumMicroOps = 2;
1221 let ResourceCycles = [1,1];
1222}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001223def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1224 "(V?)BLENDPSrmi",
1225 "VINSERTF128rm",
1226 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001227 "VPBLENDDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001228
Gadi Haber2cf601f2017-12-08 09:48:44 +00001229def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1230 let Latency = 6;
1231 let NumMicroOps = 2;
1232 let ResourceCycles = [1,1];
1233}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001234def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1235 "MMX_PANDirm",
1236 "MMX_PORirm",
1237 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001238
1239def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1240 let Latency = 8;
1241 let NumMicroOps = 2;
1242 let ResourceCycles = [1,1];
1243}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001244def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1245 "VBLENDPSYrmi",
1246 "VPANDNYrm",
1247 "VPANDYrm",
1248 "VPBLENDDYrmi",
1249 "VPORYrm",
1250 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001251
Gadi Haberd76f7b82017-08-28 10:04:16 +00001252def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001253 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001254 let NumMicroOps = 2;
1255 let ResourceCycles = [1,1];
1256}
Craig Topper2d451e72018-03-18 08:38:06 +00001257def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001258def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001259
1260def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001261 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001262 let NumMicroOps = 2;
1263 let ResourceCycles = [1,1];
1264}
1265def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1266
1267def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001268 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001269 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001270 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001271}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001272def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1273 "(V?)PEXTRBmr",
1274 "(V?)PEXTRDmr",
1275 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +00001276 "(V?)PEXTRWmr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001277
Gadi Haberd76f7b82017-08-28 10:04:16 +00001278def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001279 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001280 let NumMicroOps = 3;
1281 let ResourceCycles = [1,1,1];
1282}
1283def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001284
Gadi Haberd76f7b82017-08-28 10:04:16 +00001285def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001286 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001287 let NumMicroOps = 3;
1288 let ResourceCycles = [1,1,1];
1289}
1290def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1291
1292def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001293 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001294 let NumMicroOps = 3;
1295 let ResourceCycles = [1,1,1];
1296}
1297def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1298
1299def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001300 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001301 let NumMicroOps = 3;
1302 let ResourceCycles = [1,1,1];
1303}
Craig Topper2d451e72018-03-18 08:38:06 +00001304def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001305def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1306 "PUSH64i8",
1307 "STOSB",
1308 "STOSL",
1309 "STOSQ",
1310 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001311
1312def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001313 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001314 let NumMicroOps = 4;
1315 let ResourceCycles = [1,1,1,1];
1316}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001317def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1318 "BTR(16|32|64)mi8",
1319 "BTS(16|32|64)mi8",
1320 "SAR(8|16|32|64)m1",
1321 "SAR(8|16|32|64)mi",
1322 "SHL(8|16|32|64)m1",
1323 "SHL(8|16|32|64)mi",
1324 "SHR(8|16|32|64)m1",
1325 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001326
1327def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
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}
Craig Topperf0d04262018-04-06 16:16:48 +00001332def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1333 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001334
1335def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001336 let Latency = 2;
1337 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001338 let ResourceCycles = [2];
1339}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001340def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1341 "BLENDVPSrr0",
1342 "MMX_PINSRWrr",
1343 "PBLENDVBrr0",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001344 "VBLENDVPD(Y?)rr",
1345 "VBLENDVPS(Y?)rr",
1346 "VPBLENDVB(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001347 "(V?)PINSRBrr",
1348 "(V?)PINSRDrr",
1349 "(V?)PINSRQrr",
1350 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001351
Gadi Haberd76f7b82017-08-28 10:04:16 +00001352def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1353 let Latency = 2;
1354 let NumMicroOps = 2;
1355 let ResourceCycles = [2];
1356}
1357def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1358
1359def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1360 let Latency = 2;
1361 let NumMicroOps = 2;
1362 let ResourceCycles = [2];
1363}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001364def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1365 "ROL(8|16|32|64)ri",
1366 "ROR(8|16|32|64)r1",
1367 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001368
1369def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1370 let Latency = 2;
1371 let NumMicroOps = 2;
1372 let ResourceCycles = [2];
1373}
1374def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1375def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1376def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1377def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1378
1379def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1380 let Latency = 2;
1381 let NumMicroOps = 2;
1382 let ResourceCycles = [1,1];
1383}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001384def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1385 "VCVTPH2PSYrr",
1386 "VCVTPH2PSrr",
1387 "(V?)CVTPS2PDrr",
1388 "(V?)CVTSS2SDrr",
1389 "(V?)EXTRACTPSrr",
1390 "(V?)PEXTRBrr",
1391 "(V?)PEXTRDrr",
1392 "(V?)PEXTRQrr",
1393 "(V?)PEXTRWrr",
1394 "(V?)PSLLDrr",
1395 "(V?)PSLLQrr",
1396 "(V?)PSLLWrr",
1397 "(V?)PSRADrr",
1398 "(V?)PSRAWrr",
1399 "(V?)PSRLDrr",
1400 "(V?)PSRLQrr",
1401 "(V?)PSRLWrr",
1402 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001403
1404def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1405 let Latency = 2;
1406 let NumMicroOps = 2;
1407 let ResourceCycles = [1,1];
1408}
1409def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1410
1411def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1412 let Latency = 2;
1413 let NumMicroOps = 2;
1414 let ResourceCycles = [1,1];
1415}
1416def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1417
1418def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1419 let Latency = 2;
1420 let NumMicroOps = 2;
1421 let ResourceCycles = [1,1];
1422}
Craig Topper498875f2018-04-04 17:54:19 +00001423def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1424
1425def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1426 let Latency = 1;
1427 let NumMicroOps = 1;
1428 let ResourceCycles = [1];
1429}
1430def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001431
1432def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1433 let Latency = 2;
1434 let NumMicroOps = 2;
1435 let ResourceCycles = [1,1];
1436}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001437def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1438def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1439 "ADC(8|16|32|64)rr",
1440 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001441 "SBB(8|16|32|64)ri",
1442 "SBB(8|16|32|64)rr",
1443 "SBB(8|16|32|64)i",
1444 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001445
1446def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001447 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001448 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001449 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001450}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001451def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1452 "BLENDVPSrm0",
1453 "PBLENDVBrm0",
1454 "VBLENDVPDrm",
1455 "VBLENDVPSrm",
1456 "VMASKMOVPDrm",
1457 "VMASKMOVPSrm",
1458 "VPBLENDVBrm",
1459 "VPMASKMOVDrm",
1460 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001461
Gadi Haber2cf601f2017-12-08 09:48:44 +00001462def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1463 let Latency = 9;
1464 let NumMicroOps = 3;
1465 let ResourceCycles = [2,1];
1466}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001467def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1468 "VBLENDVPSYrm",
1469 "VMASKMOVPDYrm",
1470 "VMASKMOVPSYrm",
1471 "VPBLENDVBYrm",
1472 "VPMASKMOVDYrm",
1473 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001474
1475def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1476 let Latency = 7;
1477 let NumMicroOps = 3;
1478 let ResourceCycles = [2,1];
1479}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001480def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1481 "MMX_PACKSSWBirm",
1482 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001483
Gadi Haberd76f7b82017-08-28 10:04:16 +00001484def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001485 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001486 let NumMicroOps = 3;
1487 let ResourceCycles = [1,2];
1488}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001489def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1490 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001491
1492def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001493 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001494 let NumMicroOps = 3;
1495 let ResourceCycles = [1,1,1];
1496}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001497def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1498 "(V?)PSLLQrm",
1499 "(V?)PSLLWrm",
1500 "(V?)PSRADrm",
1501 "(V?)PSRAWrm",
1502 "(V?)PSRLDrm",
1503 "(V?)PSRLQrm",
1504 "(V?)PSRLWrm",
1505 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001506
1507def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001508 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001509 let NumMicroOps = 3;
1510 let ResourceCycles = [1,1,1];
1511}
1512def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1513
Gadi Haberd76f7b82017-08-28 10:04:16 +00001514def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001515 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001516 let NumMicroOps = 3;
1517 let ResourceCycles = [1,1,1];
1518}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001519def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1520 "RETL",
1521 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001522
Gadi Haberd76f7b82017-08-28 10:04:16 +00001523def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001524 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001525 let NumMicroOps = 3;
1526 let ResourceCycles = [1,1,1];
1527}
Craig Topperc50570f2018-04-06 17:12:18 +00001528def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1529 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001530
1531def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001532 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001533 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001534 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001535}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001536def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001537
Gadi Haberd76f7b82017-08-28 10:04:16 +00001538def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001539 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001540 let NumMicroOps = 4;
1541 let ResourceCycles = [1,1,1,1];
1542}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001543def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1544 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001545
1546def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001547 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001548 let NumMicroOps = 5;
1549 let ResourceCycles = [1,1,1,2];
1550}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001551def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1552 "ROL(8|16|32|64)mi",
1553 "ROR(8|16|32|64)m1",
1554 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001555
1556def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001557 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001558 let NumMicroOps = 5;
1559 let ResourceCycles = [1,1,1,2];
1560}
Craig Topper13a16502018-03-19 00:56:09 +00001561def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001562
1563def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001564 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001565 let NumMicroOps = 5;
1566 let ResourceCycles = [1,1,1,1,1];
1567}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001568def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1569 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001570
Gadi Haberd76f7b82017-08-28 10:04:16 +00001571def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1572 let Latency = 3;
1573 let NumMicroOps = 1;
1574 let ResourceCycles = [1];
1575}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +00001576def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001577 "PDEP(32|64)rr",
1578 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001579 "SHLD(16|32|64)rri8",
1580 "SHRD(16|32|64)rri8",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001581 "(V?)CVTDQ2PS(Y?)rr",
1582 "(V?)CVTPS2DQ(Y?)rr",
Simon Pilgrim44278f62018-04-21 16:20:28 +00001583 "(V?)CVTTPS2DQ(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001584
Clement Courbet327fac42018-03-07 08:14:02 +00001585def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001586 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001587 let NumMicroOps = 2;
1588 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001589}
Clement Courbet327fac42018-03-07 08:14:02 +00001590def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001591
1592def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1593 let Latency = 3;
1594 let NumMicroOps = 1;
1595 let ResourceCycles = [1];
1596}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001597def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
1598 "VBROADCASTSSYrr",
1599 "VEXTRACTF128rr",
1600 "VEXTRACTI128rr",
1601 "VINSERTF128rr",
1602 "VINSERTI128rr",
1603 "VPBROADCASTBYrr",
1604 "VPBROADCASTBrr",
1605 "VPBROADCASTDYrr",
1606 "VPBROADCASTQYrr",
1607 "VPBROADCASTWYrr",
1608 "VPBROADCASTWrr",
1609 "VPERM2F128rr",
1610 "VPERM2I128rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001611 "VPERMPDYri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001612 "VPERMQYri",
1613 "VPMOVSXBDYrr",
1614 "VPMOVSXBQYrr",
1615 "VPMOVSXBWYrr",
1616 "VPMOVSXDQYrr",
1617 "VPMOVSXWDYrr",
1618 "VPMOVSXWQYrr",
1619 "VPMOVZXBDYrr",
1620 "VPMOVZXBQYrr",
1621 "VPMOVZXBWYrr",
1622 "VPMOVZXDQYrr",
1623 "VPMOVZXWDYrr",
1624 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001625
1626def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001627 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001628 let NumMicroOps = 2;
1629 let ResourceCycles = [1,1];
1630}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001631def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1632 "(V?)ADDPSrm",
1633 "(V?)ADDSUBPDrm",
1634 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001635 "(V?)CVTDQ2PSrm",
1636 "(V?)CVTPS2DQrm",
1637 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001638 "(V?)SUBPDrm",
1639 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001640
Gadi Haber2cf601f2017-12-08 09:48:44 +00001641def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1642 let Latency = 10;
1643 let NumMicroOps = 2;
1644 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001645}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001646def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1647 "ADD_F64m",
1648 "ILD_F16m",
1649 "ILD_F32m",
1650 "ILD_F64m",
1651 "SUBR_F32m",
1652 "SUBR_F64m",
1653 "SUB_F32m",
1654 "SUB_F64m",
1655 "VADDPDYrm",
1656 "VADDPSYrm",
1657 "VADDSUBPDYrm",
1658 "VADDSUBPSYrm",
1659 "VCMPPDYrmi",
1660 "VCMPPSYrmi",
1661 "VCVTDQ2PSYrm",
1662 "VCVTPS2DQYrm",
1663 "VCVTTPS2DQYrm",
1664 "VMAX(C?)PDYrm",
1665 "VMAX(C?)PSYrm",
1666 "VMIN(C?)PDYrm",
1667 "VMIN(C?)PSYrm",
1668 "VSUBPDYrm",
1669 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001670
1671def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001672 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001673 let NumMicroOps = 2;
1674 let ResourceCycles = [1,1];
1675}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001676def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1677 "VPERM2I128rm",
1678 "VPERMDYrm",
1679 "VPERMPDYmi",
1680 "VPERMPSYrm",
1681 "VPERMQYmi",
1682 "VPMOVZXBDYrm",
1683 "VPMOVZXBQYrm",
1684 "VPMOVZXBWYrm",
1685 "VPMOVZXDQYrm",
1686 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001687
Gadi Haber2cf601f2017-12-08 09:48:44 +00001688def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1689 let Latency = 9;
1690 let NumMicroOps = 2;
1691 let ResourceCycles = [1,1];
1692}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001693def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1694 "VPMOVSXDQYrm",
1695 "VPMOVSXWDYrm",
1696 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001697
Gadi Haberd76f7b82017-08-28 10:04:16 +00001698def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +00001699 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001700 let NumMicroOps = 3;
1701 let ResourceCycles = [3];
1702}
Craig Topperb5f26592018-04-19 18:00:17 +00001703def: InstRW<[HWWriteResGroup54], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
1704 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
1705 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001706
1707def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1708 let Latency = 3;
1709 let NumMicroOps = 3;
1710 let ResourceCycles = [2,1];
1711}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001712def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1713 "VPSRAVD(Y?)rr",
1714 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001715
1716def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
1717 let Latency = 3;
1718 let NumMicroOps = 3;
1719 let ResourceCycles = [2,1];
1720}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001721def: InstRW<[HWWriteResGroup56], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001722 "(V?)PHADDD(Y?)rr",
1723 "(V?)PHADDSW(Y?)rr",
1724 "(V?)PHADDW(Y?)rr",
1725 "(V?)PHSUBD(Y?)rr",
1726 "(V?)PHSUBSW(Y?)rr",
1727 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001728
1729def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1730 let Latency = 3;
1731 let NumMicroOps = 3;
1732 let ResourceCycles = [2,1];
1733}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001734def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1735 "MMX_PACKSSWBirr",
1736 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001737
1738def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1739 let Latency = 3;
1740 let NumMicroOps = 3;
1741 let ResourceCycles = [1,2];
1742}
1743def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1744
1745def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1746 let Latency = 3;
1747 let NumMicroOps = 3;
1748 let ResourceCycles = [1,2];
1749}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001750def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1751 "RCL(8|16|32|64)r1",
1752 "RCL(8|16|32|64)ri",
1753 "RCR(8|16|32|64)r1",
1754 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001755
1756def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1757 let Latency = 3;
1758 let NumMicroOps = 3;
1759 let ResourceCycles = [2,1];
1760}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001761def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1762 "ROR(8|16|32|64)rCL",
1763 "SAR(8|16|32|64)rCL",
1764 "SHL(8|16|32|64)rCL",
1765 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001766
1767def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001768 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001769 let NumMicroOps = 3;
1770 let ResourceCycles = [1,1,1];
1771}
1772def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1773
1774def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001775 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001776 let NumMicroOps = 3;
1777 let ResourceCycles = [1,1,1];
1778}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001779def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1780 "ISTT_FP32m",
1781 "ISTT_FP64m",
1782 "IST_F16m",
1783 "IST_F32m",
1784 "IST_FP16m",
1785 "IST_FP32m",
1786 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001787
1788def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001789 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001790 let NumMicroOps = 4;
1791 let ResourceCycles = [2,1,1];
1792}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001793def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1794 "VPSRAVDYrm",
1795 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001796
1797def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1798 let Latency = 9;
1799 let NumMicroOps = 4;
1800 let ResourceCycles = [2,1,1];
1801}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001802def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1803 "VPSRAVDrm",
1804 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001805
1806def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001807 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001808 let NumMicroOps = 4;
1809 let ResourceCycles = [2,1,1];
1810}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001811def: InstRW<[HWWriteResGroup64], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001812
1813def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1814 let Latency = 10;
1815 let NumMicroOps = 4;
1816 let ResourceCycles = [2,1,1];
1817}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001818def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1819 "VPHADDSWYrm",
1820 "VPHADDWYrm",
1821 "VPHSUBDYrm",
1822 "VPHSUBSWYrm",
1823 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001824
1825def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1826 let Latency = 9;
1827 let NumMicroOps = 4;
1828 let ResourceCycles = [2,1,1];
1829}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001830def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
1831 "(V?)PHADDSWrm",
1832 "(V?)PHADDWrm",
1833 "(V?)PHSUBDrm",
1834 "(V?)PHSUBSWrm",
1835 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001836
1837def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001838 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001839 let NumMicroOps = 4;
1840 let ResourceCycles = [1,1,2];
1841}
Craig Topperf4cd9082018-01-19 05:47:32 +00001842def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001843
1844def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001845 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001846 let NumMicroOps = 5;
1847 let ResourceCycles = [1,1,1,2];
1848}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001849def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
1850 "RCL(8|16|32|64)mi",
1851 "RCR(8|16|32|64)m1",
1852 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001853
1854def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001855 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001856 let NumMicroOps = 5;
1857 let ResourceCycles = [1,1,2,1];
1858}
Craig Topper13a16502018-03-19 00:56:09 +00001859def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001860
1861def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001862 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001863 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001864 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001865}
Craig Topper9f834812018-04-01 21:54:24 +00001866def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001867
Gadi Haberd76f7b82017-08-28 10:04:16 +00001868def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001869 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001870 let NumMicroOps = 6;
1871 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001872}
Craig Topper9f834812018-04-01 21:54:24 +00001873def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001874 "CMPXCHG(8|16|32|64)rm",
1875 "ROL(8|16|32|64)mCL",
1876 "SAR(8|16|32|64)mCL",
1877 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001878 "SHL(8|16|32|64)mCL",
1879 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001880def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1881 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001882
Gadi Haberd76f7b82017-08-28 10:04:16 +00001883def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
1884 let Latency = 4;
1885 let NumMicroOps = 2;
1886 let ResourceCycles = [1,1];
1887}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001888def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1889 "(V?)CVTSD2SIrr",
1890 "(V?)CVTSS2SI64rr",
1891 "(V?)CVTSS2SIrr",
1892 "(V?)CVTTSD2SI64rr",
1893 "(V?)CVTTSD2SIrr",
1894 "(V?)CVTTSS2SI64rr",
1895 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001896
1897def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
1898 let Latency = 4;
1899 let NumMicroOps = 2;
1900 let ResourceCycles = [1,1];
1901}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001902def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
1903 "VPSLLDYrr",
1904 "VPSLLQYrr",
1905 "VPSLLWYrr",
1906 "VPSRADYrr",
1907 "VPSRAWYrr",
1908 "VPSRLDYrr",
1909 "VPSRLQYrr",
1910 "VPSRLWYrr",
1911 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001912
1913def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
1914 let Latency = 4;
1915 let NumMicroOps = 2;
1916 let ResourceCycles = [1,1];
1917}
1918def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
1919
1920def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
1921 let Latency = 4;
1922 let NumMicroOps = 2;
1923 let ResourceCycles = [1,1];
1924}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001925def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
1926 "MMX_CVTPI2PDirr",
1927 "MMX_CVTPS2PIirr",
1928 "MMX_CVTTPD2PIirr",
1929 "MMX_CVTTPS2PIirr",
1930 "(V?)CVTDQ2PDrr",
1931 "(V?)CVTPD2DQrr",
1932 "(V?)CVTPD2PSrr",
1933 "VCVTPS2PHrr",
1934 "(V?)CVTSD2SSrr",
1935 "(V?)CVTSI642SDrr",
1936 "(V?)CVTSI2SDrr",
1937 "(V?)CVTSI2SSrr",
1938 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001939
1940def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
1941 let Latency = 4;
1942 let NumMicroOps = 2;
1943 let ResourceCycles = [1,1];
1944}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001945def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001946
Craig Topperf846e2d2018-04-19 05:34:05 +00001947def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001948 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001949 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001950 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001951}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001952def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001953
Gadi Haberd76f7b82017-08-28 10:04:16 +00001954def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001955 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001956 let NumMicroOps = 3;
1957 let ResourceCycles = [2,1];
1958}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001959def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
1960 "FICOM32m",
1961 "FICOMP16m",
1962 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001963
1964def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001965 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001966 let NumMicroOps = 3;
1967 let ResourceCycles = [1,1,1];
1968}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001969def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
1970 "(V?)CVTSD2SIrm",
1971 "(V?)CVTSS2SI64rm",
1972 "(V?)CVTSS2SIrm",
1973 "(V?)CVTTSD2SI64rm",
1974 "(V?)CVTTSD2SIrm",
1975 "VCVTTSS2SI64rm",
1976 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001977
1978def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001979 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001980 let NumMicroOps = 3;
1981 let ResourceCycles = [1,1,1];
1982}
1983def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001984
1985def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1986 let Latency = 11;
1987 let NumMicroOps = 3;
1988 let ResourceCycles = [1,1,1];
1989}
1990def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001991
1992def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001993 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001994 let NumMicroOps = 3;
1995 let ResourceCycles = [1,1,1];
1996}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001997def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
1998 "CVTPD2PSrm",
1999 "CVTTPD2DQrm",
2000 "MMX_CVTPD2PIirm",
2001 "MMX_CVTTPD2PIirm",
2002 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002003
2004def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2005 let Latency = 9;
2006 let NumMicroOps = 3;
2007 let ResourceCycles = [1,1,1];
2008}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002009def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
2010 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002011
2012def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002013 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002014 let NumMicroOps = 3;
2015 let ResourceCycles = [1,1,1];
2016}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002017def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002018
2019def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002020 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002021 let NumMicroOps = 3;
2022 let ResourceCycles = [1,1,1];
2023}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002024def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
2025 "VPBROADCASTBrm",
2026 "VPBROADCASTWYrm",
2027 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002028
2029def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2030 let Latency = 4;
2031 let NumMicroOps = 4;
2032 let ResourceCycles = [4];
2033}
2034def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2035
2036def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2037 let Latency = 4;
2038 let NumMicroOps = 4;
2039 let ResourceCycles = [1,3];
2040}
2041def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2042
2043def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2044 let Latency = 4;
2045 let NumMicroOps = 4;
2046 let ResourceCycles = [1,1,2];
2047}
2048def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2049
2050def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002051 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002052 let NumMicroOps = 4;
2053 let ResourceCycles = [1,1,1,1];
2054}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00002055def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
2056 "VMASKMOVPS(Y?)mr",
2057 "VPMASKMOVD(Y?)mr",
2058 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002059
2060def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002061 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002062 let NumMicroOps = 4;
2063 let ResourceCycles = [1,1,1,1];
2064}
2065def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2066
2067def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002068 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002069 let NumMicroOps = 4;
2070 let ResourceCycles = [1,1,1,1];
2071}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002072def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
2073 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002074
2075def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002076 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002077 let NumMicroOps = 5;
2078 let ResourceCycles = [1,2,1,1];
2079}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002080def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
2081 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002082
2083def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002084 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002085 let NumMicroOps = 6;
2086 let ResourceCycles = [1,1,4];
2087}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002088def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
2089 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002090
2091def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002092 let Latency = 5;
2093 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002094 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002095}
Simon Pilgrim02fc3752018-04-21 12:15:42 +00002096def: InstRW<[HWWriteResGroup89], (instregex "(V?)PCMPGTQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002097 "(V?)PHMINPOSUWrr",
2098 "(V?)PMADDUBSW(Y?)rr",
2099 "(V?)PMADDWD(Y?)rr",
2100 "(V?)PMULDQ(Y?)rr",
2101 "(V?)PMULHRSW(Y?)rr",
2102 "(V?)PMULHUW(Y?)rr",
2103 "(V?)PMULHW(Y?)rr",
2104 "(V?)PMULLW(Y?)rr",
Simon Pilgrim93b102c2018-04-21 15:16:59 +00002105 "(V?)PMULUDQ(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002106
Gadi Haberd76f7b82017-08-28 10:04:16 +00002107def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002108 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002109 let NumMicroOps = 1;
2110 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002111}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002112def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2113 "(V?)MULPS(Y?)rr",
2114 "(V?)MULSDrr",
Simon Pilgrim3c066172018-04-19 11:37:26 +00002115 "(V?)MULSSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002116
Gadi Haberd76f7b82017-08-28 10:04:16 +00002117def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002118 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002119 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002120 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002121}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002122def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2123 "MMX_PMADDWDirm",
2124 "MMX_PMULHRSWrm",
2125 "MMX_PMULHUWirm",
2126 "MMX_PMULHWirm",
2127 "MMX_PMULLWirm",
2128 "MMX_PMULUDQirm",
2129 "MMX_PSADBWirm",
2130 "(V?)RCPSSm",
2131 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002132
Craig Topper8104f262018-04-02 05:33:28 +00002133def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002134 let Latency = 16;
2135 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002136 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002137}
2138def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
2139
Craig Topper8104f262018-04-02 05:33:28 +00002140def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002141 let Latency = 18;
2142 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002143 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002144}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002145def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002146
2147def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2148 let Latency = 11;
2149 let NumMicroOps = 2;
2150 let ResourceCycles = [1,1];
2151}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002152def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2153 "(V?)PHMINPOSUWrm",
2154 "(V?)PMADDUBSWrm",
2155 "(V?)PMADDWDrm",
2156 "(V?)PMULDQrm",
2157 "(V?)PMULHRSWrm",
2158 "(V?)PMULHUWrm",
2159 "(V?)PMULHWrm",
2160 "(V?)PMULLWrm",
2161 "(V?)PMULUDQrm",
2162 "(V?)PSADBWrm",
2163 "(V?)RCPPSm",
2164 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002165
2166def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2167 let Latency = 12;
2168 let NumMicroOps = 2;
2169 let ResourceCycles = [1,1];
2170}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002171def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2172 "MUL_F64m",
2173 "VPCMPGTQYrm",
2174 "VPMADDUBSWYrm",
2175 "VPMADDWDYrm",
2176 "VPMULDQYrm",
2177 "VPMULHRSWYrm",
2178 "VPMULHUWYrm",
2179 "VPMULHWYrm",
2180 "VPMULLWYrm",
2181 "VPMULUDQYrm",
2182 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002183
Gadi Haberd76f7b82017-08-28 10:04:16 +00002184def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002185 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002186 let NumMicroOps = 2;
2187 let ResourceCycles = [1,1];
2188}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002189def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2190 "(V?)MULPSrm",
2191 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002192
2193def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2194 let Latency = 12;
2195 let NumMicroOps = 2;
2196 let ResourceCycles = [1,1];
2197}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002198def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2199 "VMULPSYrm",
2200 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002201
2202def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2203 let Latency = 10;
2204 let NumMicroOps = 2;
2205 let ResourceCycles = [1,1];
2206}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002207def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2208 "(V?)MULSSrm",
2209 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002210
2211def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2212 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002213 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002214 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002215}
Simon Pilgrim44278f62018-04-21 16:20:28 +00002216def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002217
Gadi Haberd76f7b82017-08-28 10:04:16 +00002218def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2219 let Latency = 5;
2220 let NumMicroOps = 3;
2221 let ResourceCycles = [1,1,1];
2222}
2223def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2224
2225def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002226 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002227 let NumMicroOps = 3;
2228 let ResourceCycles = [1,1,1];
2229}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002230def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002231
2232def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002233 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002234 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002235 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002236}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002237def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2238 "(V?)HADDPSrm",
2239 "(V?)HSUBPDrm",
2240 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002241
Gadi Haber2cf601f2017-12-08 09:48:44 +00002242def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2243 let Latency = 12;
2244 let NumMicroOps = 4;
2245 let ResourceCycles = [1,2,1];
2246}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002247def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2248 "VHADDPSYrm",
2249 "VHSUBPDYrm",
2250 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002251
Gadi Haberd76f7b82017-08-28 10:04:16 +00002252def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002253 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002254 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002255 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002256}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002257def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002258
Gadi Haberd76f7b82017-08-28 10:04:16 +00002259def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002260 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002261 let NumMicroOps = 4;
2262 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002263}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002264def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002265
Gadi Haberd76f7b82017-08-28 10:04:16 +00002266def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2267 let Latency = 5;
2268 let NumMicroOps = 5;
2269 let ResourceCycles = [1,4];
2270}
2271def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2272
2273def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2274 let Latency = 5;
2275 let NumMicroOps = 5;
2276 let ResourceCycles = [1,4];
2277}
2278def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2279
2280def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2281 let Latency = 5;
2282 let NumMicroOps = 5;
2283 let ResourceCycles = [2,3];
2284}
Craig Topper13a16502018-03-19 00:56:09 +00002285def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002286
2287def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2288 let Latency = 6;
2289 let NumMicroOps = 2;
2290 let ResourceCycles = [1,1];
2291}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002292def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2293 "VCVTPD2DQYrr",
2294 "VCVTPD2PSYrr",
2295 "VCVTPS2PHYrr",
2296 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002297
2298def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002299 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002300 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002301 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002302}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002303def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2304 "ADD_FI32m",
2305 "SUBR_FI16m",
2306 "SUBR_FI32m",
2307 "SUB_FI16m",
2308 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002309 "VROUNDPDYm",
2310 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002311
Gadi Haber2cf601f2017-12-08 09:48:44 +00002312def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2313 let Latency = 12;
2314 let NumMicroOps = 3;
2315 let ResourceCycles = [2,1];
2316}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002317def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2318 "(V?)ROUNDPSm",
2319 "(V?)ROUNDSDm",
2320 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002321
Gadi Haberd76f7b82017-08-28 10:04:16 +00002322def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002323 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002324 let NumMicroOps = 3;
2325 let ResourceCycles = [1,1,1];
2326}
2327def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2328
2329def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2330 let Latency = 6;
2331 let NumMicroOps = 4;
2332 let ResourceCycles = [1,1,2];
2333}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002334def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2335 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002336
2337def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002338 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002339 let NumMicroOps = 4;
2340 let ResourceCycles = [1,1,1,1];
2341}
2342def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2343
2344def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2345 let Latency = 6;
2346 let NumMicroOps = 4;
2347 let ResourceCycles = [1,1,1,1];
2348}
2349def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2350
2351def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2352 let Latency = 6;
2353 let NumMicroOps = 6;
2354 let ResourceCycles = [1,5];
2355}
2356def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2357
2358def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002359 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002360 let NumMicroOps = 6;
2361 let ResourceCycles = [1,1,1,1,2];
2362}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002363def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2364 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002365
Gadi Haberd76f7b82017-08-28 10:04:16 +00002366def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2367 let Latency = 7;
2368 let NumMicroOps = 3;
2369 let ResourceCycles = [1,2];
2370}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002371def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002372
2373def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002374 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002375 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002376 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002377}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002378def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002379
Gadi Haber2cf601f2017-12-08 09:48:44 +00002380def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2381 let Latency = 14;
2382 let NumMicroOps = 4;
2383 let ResourceCycles = [1,2,1];
2384}
2385def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2386
Gadi Haberd76f7b82017-08-28 10:04:16 +00002387def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2388 let Latency = 7;
2389 let NumMicroOps = 7;
2390 let ResourceCycles = [2,2,1,2];
2391}
Craig Topper2d451e72018-03-18 08:38:06 +00002392def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002393
2394def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002395 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002396 let NumMicroOps = 3;
2397 let ResourceCycles = [1,1,1];
2398}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002399def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2400 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002401
2402def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2403 let Latency = 9;
2404 let NumMicroOps = 3;
2405 let ResourceCycles = [1,1,1];
2406}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002407def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002408
2409def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002410 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002411 let NumMicroOps = 4;
2412 let ResourceCycles = [1,1,1,1];
2413}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002414def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002415
Gadi Haber2cf601f2017-12-08 09:48:44 +00002416def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2417 let Latency = 17;
2418 let NumMicroOps = 3;
2419 let ResourceCycles = [2,1];
2420}
2421def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2422
Gadi Haberd76f7b82017-08-28 10:04:16 +00002423def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002424 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002425 let NumMicroOps = 10;
2426 let ResourceCycles = [1,1,1,4,1,2];
2427}
Craig Topper13a16502018-03-19 00:56:09 +00002428def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002429
Craig Topper8104f262018-04-02 05:33:28 +00002430def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002431 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002432 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002433 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002434}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002435def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2436 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002437
Gadi Haberd76f7b82017-08-28 10:04:16 +00002438def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2439 let Latency = 11;
2440 let NumMicroOps = 3;
2441 let ResourceCycles = [2,1];
2442}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002443def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2444 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002445
Gadi Haberd76f7b82017-08-28 10:04:16 +00002446def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002447 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002448 let NumMicroOps = 4;
2449 let ResourceCycles = [2,1,1];
2450}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002451def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2452 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002453
2454def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2455 let Latency = 11;
2456 let NumMicroOps = 7;
2457 let ResourceCycles = [2,2,3];
2458}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002459def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2460 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002461
2462def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2463 let Latency = 11;
2464 let NumMicroOps = 9;
2465 let ResourceCycles = [1,4,1,3];
2466}
2467def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2468
2469def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2470 let Latency = 11;
2471 let NumMicroOps = 11;
2472 let ResourceCycles = [2,9];
2473}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002474def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002475
2476def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002477 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002478 let NumMicroOps = 14;
2479 let ResourceCycles = [1,1,1,4,2,5];
2480}
2481def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2482
Craig Topper8104f262018-04-02 05:33:28 +00002483def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002484 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002485 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002486 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002487}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002488def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2489 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002490
Craig Topper8104f262018-04-02 05:33:28 +00002491def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002492 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002493 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002494 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002495}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002496def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002497
2498def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002499 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002500 let NumMicroOps = 11;
2501 let ResourceCycles = [2,1,1,3,1,3];
2502}
Craig Topper13a16502018-03-19 00:56:09 +00002503def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002504
Craig Topper8104f262018-04-02 05:33:28 +00002505def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002506 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002507 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002508 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002509}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002510def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002511
Gadi Haberd76f7b82017-08-28 10:04:16 +00002512def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2513 let Latency = 14;
2514 let NumMicroOps = 4;
2515 let ResourceCycles = [2,1,1];
2516}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002517def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002518
2519def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002520 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002521 let NumMicroOps = 5;
2522 let ResourceCycles = [2,1,1,1];
2523}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002524def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002525
Gadi Haber2cf601f2017-12-08 09:48:44 +00002526def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2527 let Latency = 21;
2528 let NumMicroOps = 5;
2529 let ResourceCycles = [2,1,1,1];
2530}
2531def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2532
Gadi Haberd76f7b82017-08-28 10:04:16 +00002533def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2534 let Latency = 14;
2535 let NumMicroOps = 10;
2536 let ResourceCycles = [2,3,1,4];
2537}
2538def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2539
2540def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002541 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002542 let NumMicroOps = 15;
2543 let ResourceCycles = [1,14];
2544}
2545def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2546
2547def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002548 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002549 let NumMicroOps = 8;
2550 let ResourceCycles = [1,1,1,1,1,1,2];
2551}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002552def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2553 "INSL",
2554 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002555
2556def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2557 let Latency = 16;
2558 let NumMicroOps = 16;
2559 let ResourceCycles = [16];
2560}
2561def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2562
2563def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002564 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002565 let NumMicroOps = 19;
2566 let ResourceCycles = [2,1,4,1,1,4,6];
2567}
2568def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2569
2570def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2571 let Latency = 17;
2572 let NumMicroOps = 15;
2573 let ResourceCycles = [2,1,2,4,2,4];
2574}
2575def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2576
Gadi Haberd76f7b82017-08-28 10:04:16 +00002577def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2578 let Latency = 18;
2579 let NumMicroOps = 8;
2580 let ResourceCycles = [1,1,1,5];
2581}
2582def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002583def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002584
Gadi Haberd76f7b82017-08-28 10:04:16 +00002585def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002586 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002587 let NumMicroOps = 19;
2588 let ResourceCycles = [3,1,15];
2589}
Craig Topper391c6f92017-12-10 01:24:08 +00002590def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002591
Gadi Haberd76f7b82017-08-28 10:04:16 +00002592def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2593 let Latency = 20;
2594 let NumMicroOps = 1;
2595 let ResourceCycles = [1];
2596}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002597def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2598 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002599 "DIV_FrST0")>;
2600
2601def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2602 let Latency = 20;
2603 let NumMicroOps = 1;
2604 let ResourceCycles = [1,14];
2605}
2606def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2607 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002608
2609def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002610 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002611 let NumMicroOps = 2;
2612 let ResourceCycles = [1,1];
2613}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002614def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002615 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002616
Craig Topper8104f262018-04-02 05:33:28 +00002617def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002618 let Latency = 26;
2619 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002620 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002621}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002622def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002623
Craig Topper8104f262018-04-02 05:33:28 +00002624def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002625 let Latency = 21;
2626 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002627 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002628}
2629def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2630
Craig Topper8104f262018-04-02 05:33:28 +00002631def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002632 let Latency = 22;
2633 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002634 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002635}
2636def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2637
Craig Topper8104f262018-04-02 05:33:28 +00002638def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002639 let Latency = 25;
2640 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002641 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002642}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002643def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002644
2645def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2646 let Latency = 20;
2647 let NumMicroOps = 10;
2648 let ResourceCycles = [1,2,7];
2649}
2650def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2651
Craig Topper8104f262018-04-02 05:33:28 +00002652def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002653 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002654 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002655 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002656}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002657def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2658 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002659
Craig Topper8104f262018-04-02 05:33:28 +00002660def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002661 let Latency = 21;
2662 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002663 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002664}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002665def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2666 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002667
Craig Topper8104f262018-04-02 05:33:28 +00002668def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002669 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002670 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002671 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002672}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002673def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2674 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002675
2676def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002677 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002678 let NumMicroOps = 3;
2679 let ResourceCycles = [1,1,1];
2680}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002681def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2682 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002683
2684def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2685 let Latency = 24;
2686 let NumMicroOps = 1;
2687 let ResourceCycles = [1];
2688}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002689def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2690 "DIVR_FST0r",
2691 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002692
2693def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002694 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002695 let NumMicroOps = 2;
2696 let ResourceCycles = [1,1];
2697}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002698def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2699 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002700
2701def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002702 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002703 let NumMicroOps = 27;
2704 let ResourceCycles = [1,5,1,1,19];
2705}
2706def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2707
2708def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002709 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002710 let NumMicroOps = 28;
2711 let ResourceCycles = [1,6,1,1,19];
2712}
Craig Topper2d451e72018-03-18 08:38:06 +00002713def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002714
2715def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002716 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002717 let NumMicroOps = 3;
2718 let ResourceCycles = [1,1,1];
2719}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002720def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2721 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002722
Gadi Haberd76f7b82017-08-28 10:04:16 +00002723def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002724 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002725 let NumMicroOps = 23;
2726 let ResourceCycles = [1,5,3,4,10];
2727}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002728def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2729 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002730
2731def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002732 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002733 let NumMicroOps = 23;
2734 let ResourceCycles = [1,5,2,1,4,10];
2735}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002736def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2737 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002738
2739def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2740 let Latency = 31;
2741 let NumMicroOps = 31;
2742 let ResourceCycles = [8,1,21,1];
2743}
2744def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2745
Craig Topper8104f262018-04-02 05:33:28 +00002746def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002747 let Latency = 35;
2748 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002749 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002750}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002751def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2752 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002753
Craig Topper8104f262018-04-02 05:33:28 +00002754def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002755 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002756 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002757 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002758}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002759def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2760 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002761
2762def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002763 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002764 let NumMicroOps = 18;
2765 let ResourceCycles = [1,1,2,3,1,1,1,8];
2766}
2767def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2768
2769def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2770 let Latency = 42;
2771 let NumMicroOps = 22;
2772 let ResourceCycles = [2,20];
2773}
Craig Topper2d451e72018-03-18 08:38:06 +00002774def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002775
2776def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002777 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002778 let NumMicroOps = 64;
2779 let ResourceCycles = [2,2,8,1,10,2,39];
2780}
2781def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002782
2783def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002784 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002785 let NumMicroOps = 88;
2786 let ResourceCycles = [4,4,31,1,2,1,45];
2787}
Craig Topper2d451e72018-03-18 08:38:06 +00002788def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002789
2790def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002791 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002792 let NumMicroOps = 90;
2793 let ResourceCycles = [4,2,33,1,2,1,47];
2794}
Craig Topper2d451e72018-03-18 08:38:06 +00002795def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002796
2797def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2798 let Latency = 75;
2799 let NumMicroOps = 15;
2800 let ResourceCycles = [6,3,6];
2801}
2802def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
2803
2804def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2805 let Latency = 98;
2806 let NumMicroOps = 32;
2807 let ResourceCycles = [7,7,3,3,1,11];
2808}
2809def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2810
2811def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2812 let Latency = 112;
2813 let NumMicroOps = 66;
2814 let ResourceCycles = [4,2,4,8,14,34];
2815}
2816def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2817
2818def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002819 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002820 let NumMicroOps = 100;
2821 let ResourceCycles = [9,9,11,8,1,11,21,30];
2822}
2823def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00002824
Gadi Haber2cf601f2017-12-08 09:48:44 +00002825def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
2826 let Latency = 26;
2827 let NumMicroOps = 12;
2828 let ResourceCycles = [2,2,1,3,2,2];
2829}
Craig Topper17a31182017-12-16 18:35:29 +00002830def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
2831 VPGATHERDQrm,
2832 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002833
2834def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2835 let Latency = 24;
2836 let NumMicroOps = 22;
2837 let ResourceCycles = [5,3,4,1,5,4];
2838}
Craig Topper17a31182017-12-16 18:35:29 +00002839def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
2840 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002841
2842def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2843 let Latency = 28;
2844 let NumMicroOps = 22;
2845 let ResourceCycles = [5,3,4,1,5,4];
2846}
Craig Topper17a31182017-12-16 18:35:29 +00002847def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002848
2849def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2850 let Latency = 25;
2851 let NumMicroOps = 22;
2852 let ResourceCycles = [5,3,4,1,5,4];
2853}
Craig Topper17a31182017-12-16 18:35:29 +00002854def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002855
2856def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2857 let Latency = 27;
2858 let NumMicroOps = 20;
2859 let ResourceCycles = [3,3,4,1,5,4];
2860}
Craig Topper17a31182017-12-16 18:35:29 +00002861def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
2862 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002863
2864def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2865 let Latency = 27;
2866 let NumMicroOps = 34;
2867 let ResourceCycles = [5,3,8,1,9,8];
2868}
Craig Topper17a31182017-12-16 18:35:29 +00002869def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
2870 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002871
2872def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2873 let Latency = 23;
2874 let NumMicroOps = 14;
2875 let ResourceCycles = [3,3,2,1,3,2];
2876}
Craig Topper17a31182017-12-16 18:35:29 +00002877def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
2878 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002879
2880def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2881 let Latency = 28;
2882 let NumMicroOps = 15;
2883 let ResourceCycles = [3,3,2,1,4,2];
2884}
Craig Topper17a31182017-12-16 18:35:29 +00002885def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002886
2887def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2888 let Latency = 25;
2889 let NumMicroOps = 15;
2890 let ResourceCycles = [3,3,2,1,4,2];
2891}
Craig Topper17a31182017-12-16 18:35:29 +00002892def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
2893 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002894
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00002895} // SchedModel