blob: 0bc81166682898a7c568e7776641860cd347a2c6 [file] [log] [blame]
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00001//=- X86SchedHaswell.td - X86 Haswell Scheduling -------------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Haswell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def HaswellModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
17 // instructions per cycle.
18 let IssueWidth = 4;
Andrew Trick18dc3da2013-06-15 04:50:02 +000019 let MicroOpBufferSize = 192; // Based on the reorder buffer.
Gadi Haber2cf601f2017-12-08 09:48:44 +000020 let LoadLatency = 5;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000021 let MispredictPenalty = 16;
Andrew Trickb6854d82013-09-25 18:14:12 +000022
Hal Finkel6532c202014-05-08 09:14:44 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
Simon Pilgrim2b5967f2018-03-24 18:36:01 +000026 // This flag is set to allow the scheduler to assign a default model to
Gadi Haberd76f7b82017-08-28 10:04:16 +000027 // unrecognized opcodes.
Andrew Trickb6854d82013-09-25 18:14:12 +000028 let CompleteModel = 0;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000029}
30
31let SchedModel = HaswellModel in {
32
33// Haswell can issue micro-ops to 8 different ports in one cycle.
34
Quentin Colombet9e16c8a2014-01-29 18:26:59 +000035// Ports 0, 1, 5, and 6 handle all computation.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000036// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def HWPort0 : ProcResource<1>;
42def HWPort1 : ProcResource<1>;
43def HWPort2 : ProcResource<1>;
44def HWPort3 : ProcResource<1>;
45def HWPort4 : ProcResource<1>;
46def HWPort5 : ProcResource<1>;
47def HWPort6 : ProcResource<1>;
48def HWPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
Quentin Colombet0bc907e2014-08-18 17:55:26 +000051def HWPort01 : ProcResGroup<[HWPort0, HWPort1]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000052def HWPort23 : ProcResGroup<[HWPort2, HWPort3]>;
53def HWPort237 : ProcResGroup<[HWPort2, HWPort3, HWPort7]>;
Quentin Colombetf68e0942014-08-18 17:55:36 +000054def HWPort04 : ProcResGroup<[HWPort0, HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000055def HWPort05 : ProcResGroup<[HWPort0, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000056def HWPort06 : ProcResGroup<[HWPort0, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000057def HWPort15 : ProcResGroup<[HWPort1, HWPort5]>;
Quentin Colombetca498512014-02-24 19:33:51 +000058def HWPort16 : ProcResGroup<[HWPort1, HWPort6]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000059def HWPort56 : ProcResGroup<[HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000060def HWPort015 : ProcResGroup<[HWPort0, HWPort1, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000061def HWPort056 : ProcResGroup<[HWPort0, HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000062def HWPort0156: ProcResGroup<[HWPort0, HWPort1, HWPort5, HWPort6]>;
63
Andrew Trick40c4f382013-06-15 04:50:06 +000064// 60 Entry Unified Scheduler
65def HWPortAny : ProcResGroup<[HWPort0, HWPort1, HWPort2, HWPort3, HWPort4,
66 HWPort5, HWPort6, HWPort7]> {
67 let BufferSize=60;
68}
69
Andrew Tricke1d88cf2013-04-02 01:58:47 +000070// Integer division issued on port 0.
71def HWDivider : ProcResource<1>;
Craig Topper8104f262018-04-02 05:33:28 +000072// FP division and sqrt on port 0.
73def HWFPDivider : ProcResource<1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000074
Gadi Haber2cf601f2017-12-08 09:48:44 +000075// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000076// cycles after the memory operand.
Gadi Haber2cf601f2017-12-08 09:48:44 +000077def : ReadAdvance<ReadAfterLd, 5>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000078
79// Many SchedWrites are defined in pairs with and without a folded load.
80// Instructions with folded loads are usually micro-fused, so they only appear
81// as two micro-ops when queued in the reservation station.
82// This multiclass defines the resource usage for variants with and without
83// folded loads.
84multiclass HWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000085 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000086 int Lat, list<int> Res = [1], int UOps = 1,
87 int LoadLat = 5> {
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000088 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000089 def : WriteRes<SchedRW, ExePorts> {
90 let Latency = Lat;
91 let ResourceCycles = Res;
92 let NumMicroOps = UOps;
93 }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000094
Simon Pilgrime3547af2018-03-25 10:21:19 +000095 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
96 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000097 def : WriteRes<SchedRW.Folded, !listconcat([HWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000098 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000099 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +0000100 let NumMicroOps = !add(UOps, 1);
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000101 }
102}
103
Craig Topperf131b602018-04-06 16:16:46 +0000104// A folded store needs a cycle on port 4 for the store data, and an extra port
105// 2/3/7 cycle to recompute the address.
106def : WriteRes<WriteRMW, [HWPort237,HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000107
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000108// Store_addr on 237.
109// Store_data on 4.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000110def : WriteRes<WriteStore, [HWPort237, HWPort4]>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000111def : WriteRes<WriteLoad, [HWPort23]> { let Latency = 5; }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000112def : WriteRes<WriteMove, [HWPort0156]>;
113def : WriteRes<WriteZero, []>;
114
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000115defm : HWWriteResPair<WriteALU, [HWPort0156], 1>;
116defm : HWWriteResPair<WriteIMul, [HWPort1], 3>;
Andrew Trick7201f4f2013-06-21 18:33:04 +0000117def : WriteRes<WriteIMulH, []> { let Latency = 3; }
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000118defm : HWWriteResPair<WriteShift, [HWPort06], 1>;
119defm : HWWriteResPair<WriteJump, [HWPort06], 1>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000120defm : HWWriteResPair<WriteCRC32, [HWPort1], 3>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000121
Craig Topperb7baa352018-04-08 17:53:18 +0000122defm : HWWriteResPair<WriteCMOV, [HWPort06,HWPort0156], 2, [1,1], 2>; // Conditional move.
123def : WriteRes<WriteSETCC, [HWPort06]>; // Setcc.
124def : WriteRes<WriteSETCCStore, [HWPort06,HWPort4,HWPort237]> {
125 let Latency = 2;
126 let NumMicroOps = 3;
127}
128
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000129// This is for simple LEAs with one or two input operands.
130// The complex ones can only execute on port 1, and they require two cycles on
131// the port to read all inputs. We don't model that.
132def : WriteRes<WriteLEA, [HWPort15]>;
133
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000134// Bit counts.
135defm : HWWriteResPair<WriteBitScan, [HWPort1], 3>;
136defm : HWWriteResPair<WriteLZCNT, [HWPort1], 3>;
137defm : HWWriteResPair<WriteTZCNT, [HWPort1], 3>;
138defm : HWWriteResPair<WritePOPCNT, [HWPort1], 3>;
139
Craig Topper89310f52018-03-29 20:41:39 +0000140// BMI1 BEXTR, BMI2 BZHI
141defm : HWWriteResPair<WriteBEXTR, [HWPort06,HWPort15], 2, [1,1], 2>;
142defm : HWWriteResPair<WriteBZHI, [HWPort15], 1>;
143
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000144// This is quite rough, latency depends on the dividend.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000145defm : HWWriteResPair<WriteIDiv, [HWPort0, HWDivider], 25, [1,10], 1, 4>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000146// Scalar and vector floating point.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000147def : WriteRes<WriteFStore, [HWPort237, HWPort4]>;
148def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; }
149def : WriteRes<WriteFMove, [HWPort5]>;
150
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000151defm : HWWriteResPair<WriteFAdd, [HWPort1], 3>;
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000152defm : HWWriteResPair<WriteFCmp, [HWPort1], 3, [1], 1, 6>;
153defm : HWWriteResPair<WriteFCom, [HWPort1], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000154defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
155defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
156defm : HWWriteResPair<WriteFRcp, [HWPort0], 5>;
157defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5>;
158defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15>;
159defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
160defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
161defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
162defm : HWWriteResPair<WriteFMA, [HWPort01], 5>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : HWWriteResPair<WriteFSign, [HWPort0], 1>;
164defm : HWWriteResPair<WriteFLogic, [HWPort5], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : HWWriteResPair<WriteFVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000167defm : HWWriteResPair<WriteFBlend, [HWPort015], 1>;
168defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : HWWriteResPair<WriteFVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000170defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000171
172// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000173def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
174def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
175def : WriteRes<WriteVecMove, [HWPort015]>;
176
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000177defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000178defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000179defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
180defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
Craig Topper13a0f832018-03-31 04:54:32 +0000181defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000182defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000183defm : HWWriteResPair<WriteVarShuffle, [HWPort5], 1>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000184defm : HWWriteResPair<WriteBlend, [HWPort15], 1>;
185defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000186defm : HWWriteResPair<WriteVarShuffle256, [HWPort5], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000187defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2]>;
188defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
189defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 6, [1, 2]>;
Craig Toppere56a2fc2018-04-17 19:35:19 +0000190defm : HWWriteResPair<WritePSADBW, [HWPort0], 5>;
Quentin Colombetca498512014-02-24 19:33:51 +0000191
192// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000193
Quentin Colombetca498512014-02-24 19:33:51 +0000194// Packed Compare Implicit Length Strings, Return Mask
195def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196 let Latency = 11;
197 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000198 let ResourceCycles = [3];
199}
200def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000201 let Latency = 17;
202 let NumMicroOps = 4;
203 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000204}
205
206// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000207def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
208 let Latency = 19;
209 let NumMicroOps = 9;
210 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000211}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000212def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
213 let Latency = 25;
214 let NumMicroOps = 10;
215 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000216}
217
218// Packed Compare Implicit Length Strings, Return Index
219def : WriteRes<WritePCmpIStrI, [HWPort0]> {
220 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000221 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000222 let ResourceCycles = [3];
223}
224def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000225 let Latency = 17;
226 let NumMicroOps = 4;
227 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000228}
229
230// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
232 let Latency = 18;
233 let NumMicroOps = 8;
234 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000235}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000236def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
237 let Latency = 24;
238 let NumMicroOps = 9;
239 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000240}
241
Simon Pilgrima2f26782018-03-27 20:38:54 +0000242// MOVMSK Instructions.
243def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
244def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
245def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
246
Quentin Colombetca498512014-02-24 19:33:51 +0000247// AES Instructions.
248def : WriteRes<WriteAESDecEnc, [HWPort5]> {
249 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000250 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000251 let ResourceCycles = [1];
252}
253def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000254 let Latency = 13;
255 let NumMicroOps = 2;
256 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000257}
258
259def : WriteRes<WriteAESIMC, [HWPort5]> {
260 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000262 let ResourceCycles = [2];
263}
264def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000265 let Latency = 20;
266 let NumMicroOps = 3;
267 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000268}
269
Simon Pilgrim7684e052018-03-22 13:18:08 +0000270def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
271 let Latency = 29;
272 let NumMicroOps = 11;
273 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000274}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000275def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
276 let Latency = 34;
277 let NumMicroOps = 11;
278 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000279}
280
281// Carry-less multiplication instructions.
282def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000283 let Latency = 11;
284 let NumMicroOps = 3;
285 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000286}
287def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000288 let Latency = 17;
289 let NumMicroOps = 4;
290 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000291}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000292
293def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
294def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000295def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
296def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000297
Michael Zuckermanf6684002017-06-28 11:23:31 +0000298//================ Exceptions ================//
299
300//-- Specific Scheduling Models --//
301
302// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000303def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000304
Craig Topper02daec02018-04-02 01:12:32 +0000305def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000306
Craig Topper02daec02018-04-02 01:12:32 +0000307def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000308 let NumMicroOps = 2;
309}
Craig Topper02daec02018-04-02 01:12:32 +0000310def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000311 let NumMicroOps = 3;
312}
313
Craig Topper02daec02018-04-02 01:12:32 +0000314def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000315 let NumMicroOps = 2;
316}
317
Craig Topper02daec02018-04-02 01:12:32 +0000318def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000319 let NumMicroOps = 3;
320 let ResourceCycles = [2, 1];
321}
322
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000324def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000325
Michael Zuckermanf6684002017-06-28 11:23:31 +0000326
Craig Topper02daec02018-04-02 01:12:32 +0000327def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000328 let NumMicroOps = 2;
329 let ResourceCycles = [2];
330}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000331
332// Notation:
333// - r: register.
334// - mm: 64 bit mmx register.
335// - x = 128 bit xmm register.
336// - (x)mm = mmx or xmm register.
337// - y = 256 bit ymm register.
338// - v = any vector register.
339// - m = memory.
340
341//=== Integer Instructions ===//
342//-- Move instructions --//
343
Michael Zuckermanf6684002017-06-28 11:23:31 +0000344// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000345def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000346 let Latency = 7;
347 let NumMicroOps = 3;
348}
Craig Topper02daec02018-04-02 01:12:32 +0000349def : InstRW<[HWWriteXLAT], (instregex "XLAT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000350
Michael Zuckermanf6684002017-06-28 11:23:31 +0000351// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000352def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000353 let NumMicroOps = 19;
354}
Craig Topper02daec02018-04-02 01:12:32 +0000355def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000356
Michael Zuckermanf6684002017-06-28 11:23:31 +0000357// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000358def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000359 let NumMicroOps = 18;
360}
Craig Topper02daec02018-04-02 01:12:32 +0000361def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000362
Michael Zuckermanf6684002017-06-28 11:23:31 +0000363//-- Arithmetic instructions --//
364
Michael Zuckermanf6684002017-06-28 11:23:31 +0000365// DIV.
366// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000367def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000368 let Latency = 22;
369 let NumMicroOps = 9;
370}
Craig Topper02daec02018-04-02 01:12:32 +0000371def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000372
Michael Zuckermanf6684002017-06-28 11:23:31 +0000373// IDIV.
374// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000375def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000376 let Latency = 23;
377 let NumMicroOps = 9;
378}
Craig Topper02daec02018-04-02 01:12:32 +0000379def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000380
Michael Zuckermanf6684002017-06-28 11:23:31 +0000381// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000382// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000383def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000384 let NumMicroOps = 10;
385}
Craig Topper02daec02018-04-02 01:12:32 +0000386def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000387
Michael Zuckermanf6684002017-06-28 11:23:31 +0000388// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000389// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000390def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000391 let NumMicroOps = 11;
392}
Craig Topper02daec02018-04-02 01:12:32 +0000393def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000394
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395//-- Control transfer instructions --//
396
Michael Zuckermanf6684002017-06-28 11:23:31 +0000397// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000398// i.
Craig Topper02daec02018-04-02 01:12:32 +0000399def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000400 let NumMicroOps = 4;
401 let ResourceCycles = [1, 2, 1];
402}
Craig Topper02daec02018-04-02 01:12:32 +0000403def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000404
405// BOUND.
406// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000407def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000408 let NumMicroOps = 15;
409}
Craig Topper02daec02018-04-02 01:12:32 +0000410def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000411
412// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000413def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000414 let NumMicroOps = 4;
415}
Craig Topper02daec02018-04-02 01:12:32 +0000416def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000417
418//-- String instructions --//
419
420// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000421def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000422
423// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000424def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000425
Michael Zuckermanf6684002017-06-28 11:23:31 +0000426// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000427def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000428 let Latency = 4;
429 let NumMicroOps = 5;
430 let ResourceCycles = [2, 1, 2];
431}
Craig Topper02daec02018-04-02 01:12:32 +0000432def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000433
Michael Zuckermanf6684002017-06-28 11:23:31 +0000434// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000435def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000436 let Latency = 4;
437 let NumMicroOps = 5;
438 let ResourceCycles = [2, 3];
439}
Craig Topper02daec02018-04-02 01:12:32 +0000440def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000441
Michael Zuckermanf6684002017-06-28 11:23:31 +0000442//-- Other --//
443
Gadi Haberd76f7b82017-08-28 10:04:16 +0000444// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000445def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000446 let NumMicroOps = 34;
447}
Craig Topper02daec02018-04-02 01:12:32 +0000448def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000449
450// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000451def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000452 let NumMicroOps = 17;
453 let ResourceCycles = [1, 16];
454}
Craig Topper02daec02018-04-02 01:12:32 +0000455def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000456
457//=== Floating Point x87 Instructions ===//
458//-- Move instructions --//
459
460// FLD.
461// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000462def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000463
Michael Zuckermanf6684002017-06-28 11:23:31 +0000464// FBLD.
465// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000466def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000467 let Latency = 47;
468 let NumMicroOps = 43;
469}
Craig Topper02daec02018-04-02 01:12:32 +0000470def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000471
472// FST(P).
473// r.
Craig Topper02daec02018-04-02 01:12:32 +0000474def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000475
Michael Zuckermanf6684002017-06-28 11:23:31 +0000476// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000477def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000478
Michael Zuckermanf6684002017-06-28 11:23:31 +0000479// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000480def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000481
Michael Zuckermanf6684002017-06-28 11:23:31 +0000482// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000483def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000484
485// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000486def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000487 let NumMicroOps = 147;
488}
Craig Topper02daec02018-04-02 01:12:32 +0000489def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000490
491// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000492def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000493 let NumMicroOps = 90;
494}
Craig Topper02daec02018-04-02 01:12:32 +0000495def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000496
497//-- Arithmetic instructions --//
498
Michael Zuckermanf6684002017-06-28 11:23:31 +0000499// FCOMPP FUCOMPP.
500// r.
Craig Topper02daec02018-04-02 01:12:32 +0000501def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000502
503// FCOMI(P) FUCOMI(P).
504// m.
Craig Topper02daec02018-04-02 01:12:32 +0000505def : InstRW<[HWWrite3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
506 "UCOM_FIPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000507
Michael Zuckermanf6684002017-06-28 11:23:31 +0000508// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000509def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000510
511// FXAM.
Craig Topper02daec02018-04-02 01:12:32 +0000512def : InstRW<[HWWrite2P1], (instregex "FXAM")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000513
514// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000515def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000516 let Latency = 19;
517 let NumMicroOps = 28;
518}
Craig Topper02daec02018-04-02 01:12:32 +0000519def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000520
521// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000522def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000523 let Latency = 27;
524 let NumMicroOps = 41;
525}
Craig Topper02daec02018-04-02 01:12:32 +0000526def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000527
528// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000529def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000530 let Latency = 11;
531 let NumMicroOps = 17;
532}
Craig Topper02daec02018-04-02 01:12:32 +0000533def : InstRW<[HWWriteFRNDINT], (instregex "FRNDINT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000534
535//-- Math instructions --//
536
537// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000538def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000539 let Latency = 75; // 49-125
540 let NumMicroOps = 50; // 25-75
541}
Craig Topper02daec02018-04-02 01:12:32 +0000542def : InstRW<[HWWriteFSCALE], (instregex "FSCALE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000543
544// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000545def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000546 let Latency = 15;
547 let NumMicroOps = 17;
548}
Craig Topper02daec02018-04-02 01:12:32 +0000549def : InstRW<[HWWriteFXTRACT], (instregex "FXTRACT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000550
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000551////////////////////////////////////////////////////////////////////////////////
552// Horizontal add/sub instructions.
553////////////////////////////////////////////////////////////////////////////////
554
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000555defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1, 2], 3>;
556defm : HWWriteResPair<WritePHAdd, [HWPort1, HWPort5], 3, [1, 2], 3>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000557
Michael Zuckermanf6684002017-06-28 11:23:31 +0000558//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000559
Gadi Haberd76f7b82017-08-28 10:04:16 +0000560// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000561
Gadi Haberd76f7b82017-08-28 10:04:16 +0000562def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000563 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000564 let NumMicroOps = 1;
565 let ResourceCycles = [1];
566}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000567def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
568 "(V?)LDDQUrm",
569 "(V?)MOVAPDrm",
570 "(V?)MOVAPSrm",
571 "(V?)MOVDQArm",
572 "(V?)MOVDQUrm",
573 "(V?)MOVNTDQArm",
574 "(V?)MOVSHDUPrm",
575 "(V?)MOVSLDUPrm",
576 "(V?)MOVUPDrm",
577 "(V?)MOVUPSrm",
578 "VPBROADCASTDrm",
579 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000580 "(V?)ROUNDPD(Y?)r",
581 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000582 "(V?)ROUNDSDr",
583 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000584
585def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
586 let Latency = 7;
587 let NumMicroOps = 1;
588 let ResourceCycles = [1];
589}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000590def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
591 "LD_F64m",
592 "LD_F80m",
593 "VBROADCASTF128",
594 "VBROADCASTI128",
595 "VBROADCASTSDYrm",
596 "VBROADCASTSSYrm",
597 "VLDDQUYrm",
598 "VMOVAPDYrm",
599 "VMOVAPSYrm",
600 "VMOVDDUPYrm",
601 "VMOVDQAYrm",
602 "VMOVDQUYrm",
603 "VMOVNTDQAYrm",
604 "VMOVSHDUPYrm",
605 "VMOVSLDUPYrm",
606 "VMOVUPDYrm",
607 "VMOVUPSYrm",
608 "VPBROADCASTDYrm",
609 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000610
611def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
612 let Latency = 5;
613 let NumMicroOps = 1;
614 let ResourceCycles = [1];
615}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000616def: InstRW<[HWWriteResGroup0_2], (instregex "MMX_MOVD64rm",
617 "MMX_MOVD64to64rm",
618 "MMX_MOVQ64rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000619 "MOVSX(16|32|64)rm16",
620 "MOVSX(16|32|64)rm32",
621 "MOVSX(16|32|64)rm8",
622 "MOVZX(16|32|64)rm16",
623 "MOVZX(16|32|64)rm8",
624 "PREFETCHNTA",
625 "PREFETCHT0",
626 "PREFETCHT1",
627 "PREFETCHT2",
628 "(V?)MOV64toPQIrm",
629 "(V?)MOVDDUPrm",
630 "(V?)MOVDI2PDIrm",
631 "(V?)MOVQI2PQIrm",
632 "(V?)MOVSDrm",
633 "(V?)MOVSSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000634
Gadi Haberd76f7b82017-08-28 10:04:16 +0000635def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
636 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000637 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000638 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000639}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000640def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
641 "MMX_MOVD64from64rm",
642 "MMX_MOVD64mr",
643 "MMX_MOVNTQmr",
644 "MMX_MOVQ64mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000645 "MOVNTI_64mr",
646 "MOVNTImr",
647 "ST_FP32m",
648 "ST_FP64m",
649 "ST_FP80m",
650 "VEXTRACTF128mr",
651 "VEXTRACTI128mr",
652 "(V?)MOVAPD(Y?)mr",
653 "(V?)MOVAPS(V?)mr",
654 "(V?)MOVDQA(Y?)mr",
655 "(V?)MOVDQU(Y?)mr",
656 "(V?)MOVHPDmr",
657 "(V?)MOVHPSmr",
658 "(V?)MOVLPDmr",
659 "(V?)MOVLPSmr",
660 "(V?)MOVNTDQ(Y?)mr",
661 "(V?)MOVNTPD(Y?)mr",
662 "(V?)MOVNTPS(Y?)mr",
663 "(V?)MOVPDI2DImr",
664 "(V?)MOVPQI2QImr",
665 "(V?)MOVPQIto64mr",
666 "(V?)MOVSDmr",
667 "(V?)MOVSSmr",
668 "(V?)MOVUPD(Y?)mr",
669 "(V?)MOVUPS(Y?)mr",
670 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000671
Gadi Haberd76f7b82017-08-28 10:04:16 +0000672def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
673 let Latency = 1;
674 let NumMicroOps = 1;
675 let ResourceCycles = [1];
676}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000677def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
678 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000679 "MMX_PSLLDri",
680 "MMX_PSLLDrr",
681 "MMX_PSLLQri",
682 "MMX_PSLLQrr",
683 "MMX_PSLLWri",
684 "MMX_PSLLWrr",
685 "MMX_PSRADri",
686 "MMX_PSRADrr",
687 "MMX_PSRAWri",
688 "MMX_PSRAWrr",
689 "MMX_PSRLDri",
690 "MMX_PSRLDrr",
691 "MMX_PSRLQri",
692 "MMX_PSRLQrr",
693 "MMX_PSRLWri",
694 "MMX_PSRLWrr",
695 "(V?)MOVPDI2DIrr",
696 "(V?)MOVPQIto64rr",
697 "(V?)PSLLD(Y?)ri",
698 "(V?)PSLLQ(Y?)ri",
699 "VPSLLVQ(Y?)rr",
700 "(V?)PSLLW(Y?)ri",
701 "(V?)PSRAD(Y?)ri",
702 "(V?)PSRAW(Y?)ri",
703 "(V?)PSRLD(Y?)ri",
704 "(V?)PSRLQ(Y?)ri",
705 "VPSRLVQ(Y?)rr",
706 "(V?)PSRLW(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000707 "VTESTPD(Y?)rr",
708 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000709
710def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
711 let Latency = 1;
712 let NumMicroOps = 1;
713 let ResourceCycles = [1];
714}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000715def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
716 "COM_FST0r",
717 "UCOM_FPr",
718 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000719
720def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
721 let Latency = 1;
722 let NumMicroOps = 1;
723 let ResourceCycles = [1];
724}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000725def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000726 "MMX_MOVD64to64rr",
727 "MMX_MOVQ2DQrr",
728 "MMX_PALIGNRrri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000729 "MMX_PSHUFWri",
730 "MMX_PUNPCKHBWirr",
731 "MMX_PUNPCKHDQirr",
732 "MMX_PUNPCKHWDirr",
733 "MMX_PUNPCKLBWirr",
734 "MMX_PUNPCKLDQirr",
735 "MMX_PUNPCKLWDirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000736 "VBROADCASTSSrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000737 "(V?)INSERTPSrr",
738 "(V?)MOV64toPQIrr",
739 "(V?)MOVAPD(Y?)rr",
740 "(V?)MOVAPS(Y?)rr",
741 "(V?)MOVDDUP(Y?)rr",
742 "(V?)MOVDI2PDIrr",
743 "(V?)MOVHLPSrr",
744 "(V?)MOVLHPSrr",
745 "(V?)MOVSDrr",
746 "(V?)MOVSHDUP(Y?)rr",
747 "(V?)MOVSLDUP(Y?)rr",
748 "(V?)MOVSSrr",
749 "(V?)MOVUPD(Y?)rr",
750 "(V?)MOVUPS(Y?)rr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000751 "(V?)PACKSSDW(Y?)rr",
752 "(V?)PACKSSWB(Y?)rr",
753 "(V?)PACKUSDW(Y?)rr",
754 "(V?)PACKUSWB(Y?)rr",
755 "(V?)PALIGNR(Y?)rri",
756 "(V?)PBLENDW(Y?)rri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000757 "VPBROADCASTDrr",
758 "VPBROADCASTQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000759 "VPERMILPD(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000760 "VPERMILPS(Y?)ri",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000761 "(V?)PMOVSXBDrr",
762 "(V?)PMOVSXBQrr",
763 "(V?)PMOVSXBWrr",
764 "(V?)PMOVSXDQrr",
765 "(V?)PMOVSXWDrr",
766 "(V?)PMOVSXWQrr",
767 "(V?)PMOVZXBDrr",
768 "(V?)PMOVZXBQrr",
769 "(V?)PMOVZXBWrr",
770 "(V?)PMOVZXDQrr",
771 "(V?)PMOVZXWDrr",
772 "(V?)PMOVZXWQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000773 "(V?)PSHUFD(Y?)ri",
774 "(V?)PSHUFHW(Y?)ri",
775 "(V?)PSHUFLW(Y?)ri",
776 "(V?)PSLLDQ(Y?)ri",
777 "(V?)PSRLDQ(Y?)ri",
778 "(V?)PUNPCKHBW(Y?)rr",
779 "(V?)PUNPCKHDQ(Y?)rr",
780 "(V?)PUNPCKHQDQ(Y?)rr",
781 "(V?)PUNPCKHWD(Y?)rr",
782 "(V?)PUNPCKLBW(Y?)rr",
783 "(V?)PUNPCKLDQ(Y?)rr",
784 "(V?)PUNPCKLQDQ(Y?)rr",
785 "(V?)PUNPCKLWD(Y?)rr",
786 "(V?)SHUFPD(Y?)rri",
787 "(V?)SHUFPS(Y?)rri",
788 "(V?)UNPCKHPD(Y?)rr",
789 "(V?)UNPCKHPS(Y?)rr",
790 "(V?)UNPCKLPD(Y?)rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000791 "(V?)UNPCKLPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000792
793def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
794 let Latency = 1;
795 let NumMicroOps = 1;
796 let ResourceCycles = [1];
797}
798def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
799
800def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
801 let Latency = 1;
802 let NumMicroOps = 1;
803 let ResourceCycles = [1];
804}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000805def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP",
806 "FNOP")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000807
808def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
809 let Latency = 1;
810 let NumMicroOps = 1;
811 let ResourceCycles = [1];
812}
Craig Topperfbe31322018-04-05 21:56:19 +0000813def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000814def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
815 "BT(16|32|64)rr",
816 "BTC(16|32|64)ri8",
817 "BTC(16|32|64)rr",
818 "BTR(16|32|64)ri8",
819 "BTR(16|32|64)rr",
820 "BTS(16|32|64)ri8",
821 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000822 "RORX(32|64)ri",
823 "SAR(8|16|32|64)r1",
824 "SAR(8|16|32|64)ri",
825 "SARX(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000826 "SHL(8|16|32|64)r1",
827 "SHL(8|16|32|64)ri",
828 "SHLX(32|64)rr",
829 "SHR(8|16|32|64)r1",
830 "SHR(8|16|32|64)ri",
831 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000832
833def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
834 let Latency = 1;
835 let NumMicroOps = 1;
836 let ResourceCycles = [1];
837}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000838def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
839 "BLSI(32|64)rr",
840 "BLSMSK(32|64)rr",
841 "BLSR(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000842 "LEA(16|32|64)(_32)?r",
Simon Pilgrim5e492d22018-04-19 17:32:10 +0000843 "MMX_PABS(B|D|W)rr",
844 "MMX_PADD(B|D|Q|W)irr",
845 "MMX_PADDS(B|W)irr",
846 "MMX_PADDUS(B|W)irr",
847 "MMX_PAVG(B|W)irr",
848 "MMX_PCMPEQ(B|D|W)irr",
849 "MMX_PCMPGT(B|D|W)irr",
850 "MMX_P(MAX|MIN)SWirr",
851 "MMX_P(MAX|MIN)UBirr",
852 "MMX_PSIGN(B|D|W)rr",
853 "MMX_PSUB(B|D|Q|W)irr",
854 "MMX_PSUBS(B|W)irr",
855 "MMX_PSUBUS(B|W)irr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000856 "(V?)PABSB(Y?)rr",
857 "(V?)PABSD(Y?)rr",
858 "(V?)PABSW(Y?)rr",
859 "(V?)PADDB(Y?)rr",
860 "(V?)PADDD(Y?)rr",
861 "(V?)PADDQ(Y?)rr",
862 "(V?)PADDSB(Y?)rr",
863 "(V?)PADDSW(Y?)rr",
864 "(V?)PADDUSB(Y?)rr",
865 "(V?)PADDUSW(Y?)rr",
866 "(V?)PADDW(Y?)rr",
867 "(V?)PAVGB(Y?)rr",
868 "(V?)PAVGW(Y?)rr",
869 "(V?)PCMPEQB(Y?)rr",
870 "(V?)PCMPEQD(Y?)rr",
871 "(V?)PCMPEQQ(Y?)rr",
872 "(V?)PCMPEQW(Y?)rr",
873 "(V?)PCMPGTB(Y?)rr",
874 "(V?)PCMPGTD(Y?)rr",
875 "(V?)PCMPGTW(Y?)rr",
876 "(V?)PMAXSB(Y?)rr",
877 "(V?)PMAXSD(Y?)rr",
878 "(V?)PMAXSW(Y?)rr",
879 "(V?)PMAXUB(Y?)rr",
880 "(V?)PMAXUD(Y?)rr",
881 "(V?)PMAXUW(Y?)rr",
882 "(V?)PMINSB(Y?)rr",
883 "(V?)PMINSD(Y?)rr",
884 "(V?)PMINSW(Y?)rr",
885 "(V?)PMINUB(Y?)rr",
886 "(V?)PMINUD(Y?)rr",
887 "(V?)PMINUW(Y?)rr",
888 "(V?)PSIGNB(Y?)rr",
889 "(V?)PSIGND(Y?)rr",
890 "(V?)PSIGNW(Y?)rr",
891 "(V?)PSUBB(Y?)rr",
892 "(V?)PSUBD(Y?)rr",
893 "(V?)PSUBQ(Y?)rr",
894 "(V?)PSUBSB(Y?)rr",
895 "(V?)PSUBSW(Y?)rr",
896 "(V?)PSUBUSB(Y?)rr",
897 "(V?)PSUBUSW(Y?)rr",
898 "(V?)PSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000899
900def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
901 let Latency = 1;
902 let NumMicroOps = 1;
903 let ResourceCycles = [1];
904}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000905def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
906 "MMX_PANDNirr",
907 "MMX_PANDirr",
908 "MMX_PORirr",
909 "MMX_PXORirr",
910 "(V?)BLENDPD(Y?)rri",
911 "(V?)BLENDPS(Y?)rri",
912 "(V?)MOVDQA(Y?)rr",
913 "(V?)MOVDQU(Y?)rr",
914 "(V?)MOVPQI2QIrr",
915 "VMOVZPQILo2PQIrr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000916 "VPBLENDD(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000917
918def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
919 let Latency = 1;
920 let NumMicroOps = 1;
921 let ResourceCycles = [1];
922}
Craig Topperfbe31322018-04-05 21:56:19 +0000923def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000924def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000925 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000926 "LAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000927 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000928 "SAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000929 "SGDT64m",
930 "SIDT64m",
931 "SLDT64m",
932 "SMSW16m",
933 "STC",
934 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000935 "SYSCALL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000936
937def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000938 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000939 let NumMicroOps = 2;
940 let ResourceCycles = [1,1];
941}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000942def: InstRW<[HWWriteResGroup11], (instregex "MMX_PSLLDrm",
943 "MMX_PSLLQrm",
944 "MMX_PSLLWrm",
945 "MMX_PSRADrm",
946 "MMX_PSRAWrm",
947 "MMX_PSRLDrm",
948 "MMX_PSRLQrm",
949 "MMX_PSRLWrm",
950 "VCVTPH2PSrm",
951 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000952
Gadi Haber2cf601f2017-12-08 09:48:44 +0000953def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
954 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000955 let NumMicroOps = 2;
956 let ResourceCycles = [1,1];
957}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000958def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
959 "(V?)CVTSS2SDrm",
960 "VPSLLVQrm",
961 "VPSRLVQrm",
962 "VTESTPDrm",
963 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000964
965def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
966 let Latency = 8;
967 let NumMicroOps = 2;
968 let ResourceCycles = [1,1];
969}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000970def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
971 "VPSLLQYrm",
972 "VPSLLVQYrm",
973 "VPSLLWYrm",
974 "VPSRADYrm",
975 "VPSRAWYrm",
976 "VPSRLDYrm",
977 "VPSRLQYrm",
978 "VPSRLVQYrm",
979 "VPSRLWYrm",
980 "VTESTPDYrm",
981 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000982
983def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
984 let Latency = 8;
985 let NumMicroOps = 2;
986 let ResourceCycles = [1,1];
987}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000988def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000989 "FCOM64m",
990 "FCOMP32m",
991 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000992 "MMX_CVTPI2PSirm",
993 "MMX_CVTPS2PIirm",
994 "MMX_CVTTPS2PIirm",
995 "PDEP(32|64)rm",
996 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000997 "(V?)ADDSDrm",
998 "(V?)ADDSSrm",
999 "(V?)CMPSDrm",
1000 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001001 "(V?)MAX(C?)SDrm",
1002 "(V?)MAX(C?)SSrm",
1003 "(V?)MIN(C?)SDrm",
1004 "(V?)MIN(C?)SSrm",
1005 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001006 "(V?)SUBSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001007
Craig Topperf846e2d2018-04-19 05:34:05 +00001008def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
1009 let Latency = 8;
1010 let NumMicroOps = 3;
1011 let ResourceCycles = [1,1,1];
1012}
1013def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
1014
1015def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
1016 let Latency = 9;
1017 let NumMicroOps = 5;
1018 let ResourceCycles = [1,1,2,1];
1019}
1020def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
1021
Gadi Haberd76f7b82017-08-28 10:04:16 +00001022def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001023 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001024 let NumMicroOps = 2;
1025 let ResourceCycles = [1,1];
1026}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001027def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001028 "(V?)INSERTPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001029 "(V?)PACKSSDWrm",
1030 "(V?)PACKSSWBrm",
1031 "(V?)PACKUSDWrm",
1032 "(V?)PACKUSWBrm",
1033 "(V?)PALIGNRrmi",
1034 "(V?)PBLENDWrmi",
1035 "VPERMILPDmi",
1036 "VPERMILPDrm",
1037 "VPERMILPSmi",
1038 "VPERMILPSrm",
1039 "(V?)PSHUFBrm",
1040 "(V?)PSHUFDmi",
1041 "(V?)PSHUFHWmi",
1042 "(V?)PSHUFLWmi",
1043 "(V?)PUNPCKHBWrm",
1044 "(V?)PUNPCKHDQrm",
1045 "(V?)PUNPCKHQDQrm",
1046 "(V?)PUNPCKHWDrm",
1047 "(V?)PUNPCKLBWrm",
1048 "(V?)PUNPCKLDQrm",
1049 "(V?)PUNPCKLQDQrm",
1050 "(V?)PUNPCKLWDrm",
1051 "(V?)SHUFPDrmi",
1052 "(V?)SHUFPSrmi",
1053 "(V?)UNPCKHPDrm",
1054 "(V?)UNPCKHPSrm",
1055 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001056 "(V?)UNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001057
Gadi Haber2cf601f2017-12-08 09:48:44 +00001058def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1059 let Latency = 8;
1060 let NumMicroOps = 2;
1061 let ResourceCycles = [1,1];
1062}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001063def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
1064 "VANDNPSYrm",
1065 "VANDPDYrm",
1066 "VANDPSYrm",
1067 "VORPDYrm",
1068 "VORPSYrm",
1069 "VPACKSSDWYrm",
1070 "VPACKSSWBYrm",
1071 "VPACKUSDWYrm",
1072 "VPACKUSWBYrm",
1073 "VPALIGNRYrmi",
1074 "VPBLENDWYrmi",
1075 "VPERMILPDYmi",
1076 "VPERMILPDYrm",
1077 "VPERMILPSYmi",
1078 "VPERMILPSYrm",
1079 "VPMOVSXBDYrm",
1080 "VPMOVSXBQYrm",
1081 "VPMOVSXWQYrm",
1082 "VPSHUFBYrm",
1083 "VPSHUFDYmi",
1084 "VPSHUFHWYmi",
1085 "VPSHUFLWYmi",
1086 "VPUNPCKHBWYrm",
1087 "VPUNPCKHDQYrm",
1088 "VPUNPCKHQDQYrm",
1089 "VPUNPCKHWDYrm",
1090 "VPUNPCKLBWYrm",
1091 "VPUNPCKLDQYrm",
1092 "VPUNPCKLQDQYrm",
1093 "VPUNPCKLWDYrm",
1094 "VSHUFPDYrmi",
1095 "VSHUFPSYrmi",
1096 "VUNPCKHPDYrm",
1097 "VUNPCKHPSYrm",
1098 "VUNPCKLPDYrm",
1099 "VUNPCKLPSYrm",
1100 "VXORPDYrm",
1101 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001102
1103def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1104 let Latency = 6;
1105 let NumMicroOps = 2;
1106 let ResourceCycles = [1,1];
1107}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001108def: InstRW<[HWWriteResGroup13_2], (instregex "MMX_PALIGNRrmi",
1109 "MMX_PINSRWrm",
1110 "MMX_PSHUFBrm",
1111 "MMX_PSHUFWmi",
1112 "MMX_PUNPCKHBWirm",
1113 "MMX_PUNPCKHDQirm",
1114 "MMX_PUNPCKHWDirm",
1115 "MMX_PUNPCKLBWirm",
1116 "MMX_PUNPCKLDQirm",
1117 "MMX_PUNPCKLWDirm",
1118 "(V?)MOVHPDrm",
1119 "(V?)MOVHPSrm",
1120 "(V?)MOVLPDrm",
1121 "(V?)MOVLPSrm",
1122 "(V?)PINSRBrm",
1123 "(V?)PINSRDrm",
1124 "(V?)PINSRQrm",
1125 "(V?)PINSRWrm",
1126 "(V?)PMOVSXBDrm",
1127 "(V?)PMOVSXBQrm",
1128 "(V?)PMOVSXBWrm",
1129 "(V?)PMOVSXDQrm",
1130 "(V?)PMOVSXWDrm",
1131 "(V?)PMOVSXWQrm",
1132 "(V?)PMOVZXBDrm",
1133 "(V?)PMOVZXBQrm",
1134 "(V?)PMOVZXBWrm",
1135 "(V?)PMOVZXDQrm",
1136 "(V?)PMOVZXWDrm",
1137 "(V?)PMOVZXWQrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001138
Gadi Haberd76f7b82017-08-28 10:04:16 +00001139def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001140 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001141 let NumMicroOps = 2;
1142 let ResourceCycles = [1,1];
1143}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001144def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
1145 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001146
1147def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001148 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001149 let NumMicroOps = 2;
1150 let ResourceCycles = [1,1];
1151}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001152def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
1153 "RORX(32|64)mi",
1154 "SARX(32|64)rm",
1155 "SHLX(32|64)rm",
1156 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001157
1158def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001159 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001160 let NumMicroOps = 2;
1161 let ResourceCycles = [1,1];
1162}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001163def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
1164 "BLSI(32|64)rm",
1165 "BLSMSK(32|64)rm",
1166 "BLSR(32|64)rm",
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001167 "MMX_PABS(B|D|W)rm",
1168 "MMX_PADD(B|D|Q|W)irm",
1169 "MMX_PADDS(B|W)irm",
1170 "MMX_PADDUS(B|W)irm",
1171 "MMX_PAVG(B|W)irm",
1172 "MMX_PCMPEQ(B|D|W)irm",
1173 "MMX_PCMPGT(B|D|W)irm",
1174 "MMX_P(MAX|MIN)SWirm",
1175 "MMX_P(MAX|MIN)UBirm",
1176 "MMX_PSIGN(B|D|W)rm",
1177 "MMX_PSUB(B|D|Q|W)irm",
1178 "MMX_PSUBS(B|W)irm",
1179 "MMX_PSUBUS(B|W)irm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001180 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001181
1182def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
1183 let Latency = 7;
1184 let NumMicroOps = 2;
1185 let ResourceCycles = [1,1];
1186}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001187def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
1188 "(V?)PABSDrm",
1189 "(V?)PABSWrm",
1190 "(V?)PADDBrm",
1191 "(V?)PADDDrm",
1192 "(V?)PADDQrm",
1193 "(V?)PADDSBrm",
1194 "(V?)PADDSWrm",
1195 "(V?)PADDUSBrm",
1196 "(V?)PADDUSWrm",
1197 "(V?)PADDWrm",
1198 "(V?)PAVGBrm",
1199 "(V?)PAVGWrm",
1200 "(V?)PCMPEQBrm",
1201 "(V?)PCMPEQDrm",
1202 "(V?)PCMPEQQrm",
1203 "(V?)PCMPEQWrm",
1204 "(V?)PCMPGTBrm",
1205 "(V?)PCMPGTDrm",
1206 "(V?)PCMPGTWrm",
1207 "(V?)PMAXSBrm",
1208 "(V?)PMAXSDrm",
1209 "(V?)PMAXSWrm",
1210 "(V?)PMAXUBrm",
1211 "(V?)PMAXUDrm",
1212 "(V?)PMAXUWrm",
1213 "(V?)PMINSBrm",
1214 "(V?)PMINSDrm",
1215 "(V?)PMINSWrm",
1216 "(V?)PMINUBrm",
1217 "(V?)PMINUDrm",
1218 "(V?)PMINUWrm",
1219 "(V?)PSIGNBrm",
1220 "(V?)PSIGNDrm",
1221 "(V?)PSIGNWrm",
1222 "(V?)PSUBBrm",
1223 "(V?)PSUBDrm",
1224 "(V?)PSUBQrm",
1225 "(V?)PSUBSBrm",
1226 "(V?)PSUBSWrm",
1227 "(V?)PSUBUSBrm",
1228 "(V?)PSUBUSWrm",
1229 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001230
1231def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1232 let Latency = 8;
1233 let NumMicroOps = 2;
1234 let ResourceCycles = [1,1];
1235}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001236def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1237 "VPABSDYrm",
1238 "VPABSWYrm",
1239 "VPADDBYrm",
1240 "VPADDDYrm",
1241 "VPADDQYrm",
1242 "VPADDSBYrm",
1243 "VPADDSWYrm",
1244 "VPADDUSBYrm",
1245 "VPADDUSWYrm",
1246 "VPADDWYrm",
1247 "VPAVGBYrm",
1248 "VPAVGWYrm",
1249 "VPCMPEQBYrm",
1250 "VPCMPEQDYrm",
1251 "VPCMPEQQYrm",
1252 "VPCMPEQWYrm",
1253 "VPCMPGTBYrm",
1254 "VPCMPGTDYrm",
1255 "VPCMPGTWYrm",
1256 "VPMAXSBYrm",
1257 "VPMAXSDYrm",
1258 "VPMAXSWYrm",
1259 "VPMAXUBYrm",
1260 "VPMAXUDYrm",
1261 "VPMAXUWYrm",
1262 "VPMINSBYrm",
1263 "VPMINSDYrm",
1264 "VPMINSWYrm",
1265 "VPMINUBYrm",
1266 "VPMINUDYrm",
1267 "VPMINUWYrm",
1268 "VPSIGNBYrm",
1269 "VPSIGNDYrm",
1270 "VPSIGNWYrm",
1271 "VPSUBBYrm",
1272 "VPSUBDYrm",
1273 "VPSUBQYrm",
1274 "VPSUBSBYrm",
1275 "VPSUBSWYrm",
1276 "VPSUBUSBYrm",
1277 "VPSUBUSWYrm",
1278 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001279
1280def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001281 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001282 let NumMicroOps = 2;
1283 let ResourceCycles = [1,1];
1284}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001285def: InstRW<[HWWriteResGroup17], (instregex "(V?)BLENDPDrmi",
1286 "(V?)BLENDPSrmi",
1287 "VINSERTF128rm",
1288 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001289 "VPBLENDDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001290
Gadi Haber2cf601f2017-12-08 09:48:44 +00001291def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1292 let Latency = 6;
1293 let NumMicroOps = 2;
1294 let ResourceCycles = [1,1];
1295}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001296def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1297 "MMX_PANDirm",
1298 "MMX_PORirm",
1299 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001300
1301def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1302 let Latency = 8;
1303 let NumMicroOps = 2;
1304 let ResourceCycles = [1,1];
1305}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001306def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1307 "VBLENDPSYrmi",
1308 "VPANDNYrm",
1309 "VPANDYrm",
1310 "VPBLENDDYrmi",
1311 "VPORYrm",
1312 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001313
Gadi Haberd76f7b82017-08-28 10:04:16 +00001314def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001315 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001316 let NumMicroOps = 2;
1317 let ResourceCycles = [1,1];
1318}
Craig Topper2d451e72018-03-18 08:38:06 +00001319def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001320def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001321
1322def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001323 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001324 let NumMicroOps = 2;
1325 let ResourceCycles = [1,1];
1326}
1327def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1328
1329def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001330 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001331 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001332 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001333}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001334def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1335 "(V?)PEXTRBmr",
1336 "(V?)PEXTRDmr",
1337 "(V?)PEXTRQmr",
1338 "(V?)PEXTRWmr",
1339 "(V?)STMXCSR")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001340
Gadi Haberd76f7b82017-08-28 10:04:16 +00001341def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001342 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001343 let NumMicroOps = 3;
1344 let ResourceCycles = [1,1,1];
1345}
1346def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001347
Gadi Haberd76f7b82017-08-28 10:04:16 +00001348def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001349 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001350 let NumMicroOps = 3;
1351 let ResourceCycles = [1,1,1];
1352}
1353def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1354
1355def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001356 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001357 let NumMicroOps = 3;
1358 let ResourceCycles = [1,1,1];
1359}
1360def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1361
1362def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001363 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001364 let NumMicroOps = 3;
1365 let ResourceCycles = [1,1,1];
1366}
Craig Topper2d451e72018-03-18 08:38:06 +00001367def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001368def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1369 "PUSH64i8",
1370 "STOSB",
1371 "STOSL",
1372 "STOSQ",
1373 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001374
1375def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001376 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001377 let NumMicroOps = 4;
1378 let ResourceCycles = [1,1,1,1];
1379}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001380def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1381 "BTR(16|32|64)mi8",
1382 "BTS(16|32|64)mi8",
1383 "SAR(8|16|32|64)m1",
1384 "SAR(8|16|32|64)mi",
1385 "SHL(8|16|32|64)m1",
1386 "SHL(8|16|32|64)mi",
1387 "SHR(8|16|32|64)m1",
1388 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001389
1390def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001391 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001392 let NumMicroOps = 4;
1393 let ResourceCycles = [1,1,1,1];
1394}
Craig Topperf0d04262018-04-06 16:16:48 +00001395def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1396 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001397
1398def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001399 let Latency = 2;
1400 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001401 let ResourceCycles = [2];
1402}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001403def: InstRW<[HWWriteResGroup27], (instregex "BLENDVPDrr0",
1404 "BLENDVPSrr0",
1405 "MMX_PINSRWrr",
1406 "PBLENDVBrr0",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001407 "VBLENDVPD(Y?)rr",
1408 "VBLENDVPS(Y?)rr",
1409 "VPBLENDVB(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001410 "(V?)PINSRBrr",
1411 "(V?)PINSRDrr",
1412 "(V?)PINSRQrr",
1413 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001414
Gadi Haberd76f7b82017-08-28 10:04:16 +00001415def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1416 let Latency = 2;
1417 let NumMicroOps = 2;
1418 let ResourceCycles = [2];
1419}
1420def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1421
1422def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1423 let Latency = 2;
1424 let NumMicroOps = 2;
1425 let ResourceCycles = [2];
1426}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001427def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1428 "ROL(8|16|32|64)ri",
1429 "ROR(8|16|32|64)r1",
1430 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001431
1432def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1433 let Latency = 2;
1434 let NumMicroOps = 2;
1435 let ResourceCycles = [2];
1436}
1437def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1438def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1439def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1440def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1441
1442def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1443 let Latency = 2;
1444 let NumMicroOps = 2;
1445 let ResourceCycles = [1,1];
1446}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001447def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1448 "VCVTPH2PSYrr",
1449 "VCVTPH2PSrr",
1450 "(V?)CVTPS2PDrr",
1451 "(V?)CVTSS2SDrr",
1452 "(V?)EXTRACTPSrr",
1453 "(V?)PEXTRBrr",
1454 "(V?)PEXTRDrr",
1455 "(V?)PEXTRQrr",
1456 "(V?)PEXTRWrr",
1457 "(V?)PSLLDrr",
1458 "(V?)PSLLQrr",
1459 "(V?)PSLLWrr",
1460 "(V?)PSRADrr",
1461 "(V?)PSRAWrr",
1462 "(V?)PSRLDrr",
1463 "(V?)PSRLQrr",
1464 "(V?)PSRLWrr",
1465 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001466
1467def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1468 let Latency = 2;
1469 let NumMicroOps = 2;
1470 let ResourceCycles = [1,1];
1471}
1472def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1473
1474def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1475 let Latency = 2;
1476 let NumMicroOps = 2;
1477 let ResourceCycles = [1,1];
1478}
1479def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1480
1481def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1482 let Latency = 2;
1483 let NumMicroOps = 2;
1484 let ResourceCycles = [1,1];
1485}
Craig Topper498875f2018-04-04 17:54:19 +00001486def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1487
1488def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1489 let Latency = 1;
1490 let NumMicroOps = 1;
1491 let ResourceCycles = [1];
1492}
1493def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001494
1495def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1496 let Latency = 2;
1497 let NumMicroOps = 2;
1498 let ResourceCycles = [1,1];
1499}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001500def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1501def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1502 "ADC(8|16|32|64)rr",
1503 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001504 "SBB(8|16|32|64)ri",
1505 "SBB(8|16|32|64)rr",
1506 "SBB(8|16|32|64)i",
1507 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001508
1509def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001510 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001511 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001512 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001513}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001514def: InstRW<[HWWriteResGroup36], (instregex "BLENDVPDrm0",
1515 "BLENDVPSrm0",
1516 "PBLENDVBrm0",
1517 "VBLENDVPDrm",
1518 "VBLENDVPSrm",
1519 "VMASKMOVPDrm",
1520 "VMASKMOVPSrm",
1521 "VPBLENDVBrm",
1522 "VPMASKMOVDrm",
1523 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001524
Gadi Haber2cf601f2017-12-08 09:48:44 +00001525def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1526 let Latency = 9;
1527 let NumMicroOps = 3;
1528 let ResourceCycles = [2,1];
1529}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001530def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1531 "VBLENDVPSYrm",
1532 "VMASKMOVPDYrm",
1533 "VMASKMOVPSYrm",
1534 "VPBLENDVBYrm",
1535 "VPMASKMOVDYrm",
1536 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001537
1538def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1539 let Latency = 7;
1540 let NumMicroOps = 3;
1541 let ResourceCycles = [2,1];
1542}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001543def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1544 "MMX_PACKSSWBirm",
1545 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001546
Gadi Haberd76f7b82017-08-28 10:04:16 +00001547def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001548 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001549 let NumMicroOps = 3;
1550 let ResourceCycles = [1,2];
1551}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001552def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1553 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001554
1555def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001556 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001557 let NumMicroOps = 3;
1558 let ResourceCycles = [1,1,1];
1559}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001560def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1561 "(V?)PSLLQrm",
1562 "(V?)PSLLWrm",
1563 "(V?)PSRADrm",
1564 "(V?)PSRAWrm",
1565 "(V?)PSRLDrm",
1566 "(V?)PSRLQrm",
1567 "(V?)PSRLWrm",
1568 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001569
1570def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001571 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001572 let NumMicroOps = 3;
1573 let ResourceCycles = [1,1,1];
1574}
1575def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1576
1577def HWWriteResGroup40 : SchedWriteRes<[HWPort0,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001578 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001579 let NumMicroOps = 3;
1580 let ResourceCycles = [1,1,1];
1581}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001582def: InstRW<[HWWriteResGroup40], (instregex "(V?)LDMXCSR")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001583
1584def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001585 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001586 let NumMicroOps = 3;
1587 let ResourceCycles = [1,1,1];
1588}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001589def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1590 "RETL",
1591 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001592
Gadi Haberd76f7b82017-08-28 10:04:16 +00001593def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001594 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001595 let NumMicroOps = 3;
1596 let ResourceCycles = [1,1,1];
1597}
Craig Topperc50570f2018-04-06 17:12:18 +00001598def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1599 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001600
1601def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001602 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001603 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001604 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001605}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001606def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001607
Gadi Haberd76f7b82017-08-28 10:04:16 +00001608def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001609 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001610 let NumMicroOps = 4;
1611 let ResourceCycles = [1,1,1,1];
1612}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001613def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1614 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001615
1616def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001617 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001618 let NumMicroOps = 5;
1619 let ResourceCycles = [1,1,1,2];
1620}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001621def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1622 "ROL(8|16|32|64)mi",
1623 "ROR(8|16|32|64)m1",
1624 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001625
1626def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001627 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001628 let NumMicroOps = 5;
1629 let ResourceCycles = [1,1,1,2];
1630}
Craig Topper13a16502018-03-19 00:56:09 +00001631def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001632
1633def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001634 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001635 let NumMicroOps = 5;
1636 let ResourceCycles = [1,1,1,1,1];
1637}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001638def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1639 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001640
Gadi Haberd76f7b82017-08-28 10:04:16 +00001641def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1642 let Latency = 3;
1643 let NumMicroOps = 1;
1644 let ResourceCycles = [1];
1645}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +00001646def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001647 "PDEP(32|64)rr",
1648 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001649 "SHLD(16|32|64)rri8",
1650 "SHRD(16|32|64)rri8",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001651 "(V?)ADDPD(Y?)rr",
1652 "(V?)ADDPS(Y?)rr",
1653 "(V?)ADDSDrr",
1654 "(V?)ADDSSrr",
1655 "(V?)ADDSUBPD(Y?)rr",
1656 "(V?)ADDSUBPS(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001657 "(V?)CVTDQ2PS(Y?)rr",
1658 "(V?)CVTPS2DQ(Y?)rr",
1659 "(V?)CVTTPS2DQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001660 "(V?)SUBPD(Y?)rr",
1661 "(V?)SUBPS(Y?)rr",
1662 "(V?)SUBSDrr",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +00001663 "(V?)SUBSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001664
Clement Courbet327fac42018-03-07 08:14:02 +00001665def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001666 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001667 let NumMicroOps = 2;
1668 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001669}
Clement Courbet327fac42018-03-07 08:14:02 +00001670def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001671
1672def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1673 let Latency = 3;
1674 let NumMicroOps = 1;
1675 let ResourceCycles = [1];
1676}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001677def: InstRW<[HWWriteResGroup51], (instregex "VBROADCASTSDYrr",
1678 "VBROADCASTSSYrr",
1679 "VEXTRACTF128rr",
1680 "VEXTRACTI128rr",
1681 "VINSERTF128rr",
1682 "VINSERTI128rr",
1683 "VPBROADCASTBYrr",
1684 "VPBROADCASTBrr",
1685 "VPBROADCASTDYrr",
1686 "VPBROADCASTQYrr",
1687 "VPBROADCASTWYrr",
1688 "VPBROADCASTWrr",
1689 "VPERM2F128rr",
1690 "VPERM2I128rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001691 "VPERMPDYri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001692 "VPERMQYri",
1693 "VPMOVSXBDYrr",
1694 "VPMOVSXBQYrr",
1695 "VPMOVSXBWYrr",
1696 "VPMOVSXDQYrr",
1697 "VPMOVSXWDYrr",
1698 "VPMOVSXWQYrr",
1699 "VPMOVZXBDYrr",
1700 "VPMOVZXBQYrr",
1701 "VPMOVZXBWYrr",
1702 "VPMOVZXDQYrr",
1703 "VPMOVZXWDYrr",
1704 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001705
1706def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001707 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001708 let NumMicroOps = 2;
1709 let ResourceCycles = [1,1];
1710}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001711def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1712 "(V?)ADDPSrm",
1713 "(V?)ADDSUBPDrm",
1714 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001715 "(V?)CVTDQ2PSrm",
1716 "(V?)CVTPS2DQrm",
1717 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001718 "(V?)SUBPDrm",
1719 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001720
Gadi Haber2cf601f2017-12-08 09:48:44 +00001721def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1722 let Latency = 10;
1723 let NumMicroOps = 2;
1724 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001725}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001726def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1727 "ADD_F64m",
1728 "ILD_F16m",
1729 "ILD_F32m",
1730 "ILD_F64m",
1731 "SUBR_F32m",
1732 "SUBR_F64m",
1733 "SUB_F32m",
1734 "SUB_F64m",
1735 "VADDPDYrm",
1736 "VADDPSYrm",
1737 "VADDSUBPDYrm",
1738 "VADDSUBPSYrm",
1739 "VCMPPDYrmi",
1740 "VCMPPSYrmi",
1741 "VCVTDQ2PSYrm",
1742 "VCVTPS2DQYrm",
1743 "VCVTTPS2DQYrm",
1744 "VMAX(C?)PDYrm",
1745 "VMAX(C?)PSYrm",
1746 "VMIN(C?)PDYrm",
1747 "VMIN(C?)PSYrm",
1748 "VSUBPDYrm",
1749 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001750
1751def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001752 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001753 let NumMicroOps = 2;
1754 let ResourceCycles = [1,1];
1755}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001756def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1757 "VPERM2I128rm",
1758 "VPERMDYrm",
1759 "VPERMPDYmi",
1760 "VPERMPSYrm",
1761 "VPERMQYmi",
1762 "VPMOVZXBDYrm",
1763 "VPMOVZXBQYrm",
1764 "VPMOVZXBWYrm",
1765 "VPMOVZXDQYrm",
1766 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001767
Gadi Haber2cf601f2017-12-08 09:48:44 +00001768def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1769 let Latency = 9;
1770 let NumMicroOps = 2;
1771 let ResourceCycles = [1,1];
1772}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001773def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1774 "VPMOVSXDQYrm",
1775 "VPMOVSXWDYrm",
1776 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001777
Gadi Haberd76f7b82017-08-28 10:04:16 +00001778def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +00001779 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001780 let NumMicroOps = 3;
1781 let ResourceCycles = [3];
1782}
Craig Topperb5f26592018-04-19 18:00:17 +00001783def: InstRW<[HWWriteResGroup54], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
1784 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
1785 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001786
1787def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1788 let Latency = 3;
1789 let NumMicroOps = 3;
1790 let ResourceCycles = [2,1];
1791}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001792def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1793 "VPSRAVD(Y?)rr",
1794 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001795
1796def HWWriteResGroup56 : SchedWriteRes<[HWPort5,HWPort15]> {
1797 let Latency = 3;
1798 let NumMicroOps = 3;
1799 let ResourceCycles = [2,1];
1800}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001801def: InstRW<[HWWriteResGroup56], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001802 "(V?)PHADDD(Y?)rr",
1803 "(V?)PHADDSW(Y?)rr",
1804 "(V?)PHADDW(Y?)rr",
1805 "(V?)PHSUBD(Y?)rr",
1806 "(V?)PHSUBSW(Y?)rr",
1807 "(V?)PHSUBW(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001808
1809def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1810 let Latency = 3;
1811 let NumMicroOps = 3;
1812 let ResourceCycles = [2,1];
1813}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001814def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1815 "MMX_PACKSSWBirr",
1816 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001817
1818def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1819 let Latency = 3;
1820 let NumMicroOps = 3;
1821 let ResourceCycles = [1,2];
1822}
1823def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1824
1825def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1826 let Latency = 3;
1827 let NumMicroOps = 3;
1828 let ResourceCycles = [1,2];
1829}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001830def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1831 "RCL(8|16|32|64)r1",
1832 "RCL(8|16|32|64)ri",
1833 "RCR(8|16|32|64)r1",
1834 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001835
1836def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1837 let Latency = 3;
1838 let NumMicroOps = 3;
1839 let ResourceCycles = [2,1];
1840}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001841def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1842 "ROR(8|16|32|64)rCL",
1843 "SAR(8|16|32|64)rCL",
1844 "SHL(8|16|32|64)rCL",
1845 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001846
1847def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001848 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001849 let NumMicroOps = 3;
1850 let ResourceCycles = [1,1,1];
1851}
1852def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1853
1854def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001855 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001856 let NumMicroOps = 3;
1857 let ResourceCycles = [1,1,1];
1858}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001859def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1860 "ISTT_FP32m",
1861 "ISTT_FP64m",
1862 "IST_F16m",
1863 "IST_F32m",
1864 "IST_FP16m",
1865 "IST_FP32m",
1866 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001867
1868def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001869 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001870 let NumMicroOps = 4;
1871 let ResourceCycles = [2,1,1];
1872}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001873def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1874 "VPSRAVDYrm",
1875 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001876
1877def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1878 let Latency = 9;
1879 let NumMicroOps = 4;
1880 let ResourceCycles = [2,1,1];
1881}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001882def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1883 "VPSRAVDrm",
1884 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001885
1886def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001887 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001888 let NumMicroOps = 4;
1889 let ResourceCycles = [2,1,1];
1890}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001891def: InstRW<[HWWriteResGroup64], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001892
1893def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1894 let Latency = 10;
1895 let NumMicroOps = 4;
1896 let ResourceCycles = [2,1,1];
1897}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001898def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1899 "VPHADDSWYrm",
1900 "VPHADDWYrm",
1901 "VPHSUBDYrm",
1902 "VPHSUBSWYrm",
1903 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001904
1905def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1906 let Latency = 9;
1907 let NumMicroOps = 4;
1908 let ResourceCycles = [2,1,1];
1909}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001910def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
1911 "(V?)PHADDSWrm",
1912 "(V?)PHADDWrm",
1913 "(V?)PHSUBDrm",
1914 "(V?)PHSUBSWrm",
1915 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001916
1917def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001918 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001919 let NumMicroOps = 4;
1920 let ResourceCycles = [1,1,2];
1921}
Craig Topperf4cd9082018-01-19 05:47:32 +00001922def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001923
1924def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001925 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001926 let NumMicroOps = 5;
1927 let ResourceCycles = [1,1,1,2];
1928}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001929def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
1930 "RCL(8|16|32|64)mi",
1931 "RCR(8|16|32|64)m1",
1932 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001933
1934def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001935 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001936 let NumMicroOps = 5;
1937 let ResourceCycles = [1,1,2,1];
1938}
Craig Topper13a16502018-03-19 00:56:09 +00001939def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001940
1941def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001942 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001943 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001944 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001945}
Craig Topper9f834812018-04-01 21:54:24 +00001946def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001947
Gadi Haberd76f7b82017-08-28 10:04:16 +00001948def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001949 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001950 let NumMicroOps = 6;
1951 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001952}
Craig Topper9f834812018-04-01 21:54:24 +00001953def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001954 "CMPXCHG(8|16|32|64)rm",
1955 "ROL(8|16|32|64)mCL",
1956 "SAR(8|16|32|64)mCL",
1957 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001958 "SHL(8|16|32|64)mCL",
1959 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001960def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1961 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001962
Gadi Haberd76f7b82017-08-28 10:04:16 +00001963def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
1964 let Latency = 4;
1965 let NumMicroOps = 2;
1966 let ResourceCycles = [1,1];
1967}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001968def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1969 "(V?)CVTSD2SIrr",
1970 "(V?)CVTSS2SI64rr",
1971 "(V?)CVTSS2SIrr",
1972 "(V?)CVTTSD2SI64rr",
1973 "(V?)CVTTSD2SIrr",
1974 "(V?)CVTTSS2SI64rr",
1975 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001976
1977def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
1978 let Latency = 4;
1979 let NumMicroOps = 2;
1980 let ResourceCycles = [1,1];
1981}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001982def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
1983 "VPSLLDYrr",
1984 "VPSLLQYrr",
1985 "VPSLLWYrr",
1986 "VPSRADYrr",
1987 "VPSRAWYrr",
1988 "VPSRLDYrr",
1989 "VPSRLQYrr",
1990 "VPSRLWYrr",
1991 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001992
1993def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
1994 let Latency = 4;
1995 let NumMicroOps = 2;
1996 let ResourceCycles = [1,1];
1997}
1998def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
1999
2000def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
2001 let Latency = 4;
2002 let NumMicroOps = 2;
2003 let ResourceCycles = [1,1];
2004}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002005def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
2006 "MMX_CVTPI2PDirr",
2007 "MMX_CVTPS2PIirr",
2008 "MMX_CVTTPD2PIirr",
2009 "MMX_CVTTPS2PIirr",
2010 "(V?)CVTDQ2PDrr",
2011 "(V?)CVTPD2DQrr",
2012 "(V?)CVTPD2PSrr",
2013 "VCVTPS2PHrr",
2014 "(V?)CVTSD2SSrr",
2015 "(V?)CVTSI642SDrr",
2016 "(V?)CVTSI2SDrr",
2017 "(V?)CVTSI2SSrr",
2018 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002019
2020def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
2021 let Latency = 4;
2022 let NumMicroOps = 2;
2023 let ResourceCycles = [1,1];
2024}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002025def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002026
Craig Topperf846e2d2018-04-19 05:34:05 +00002027def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002028 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002029 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00002030 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002031}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002032def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002033
Gadi Haberd76f7b82017-08-28 10:04:16 +00002034def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002035 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002036 let NumMicroOps = 3;
2037 let ResourceCycles = [2,1];
2038}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002039def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
2040 "FICOM32m",
2041 "FICOMP16m",
2042 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002043
2044def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002045 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002046 let NumMicroOps = 3;
2047 let ResourceCycles = [1,1,1];
2048}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002049def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
2050 "(V?)CVTSD2SIrm",
2051 "(V?)CVTSS2SI64rm",
2052 "(V?)CVTSS2SIrm",
2053 "(V?)CVTTSD2SI64rm",
2054 "(V?)CVTTSD2SIrm",
2055 "VCVTTSS2SI64rm",
2056 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002057
2058def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002059 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002060 let NumMicroOps = 3;
2061 let ResourceCycles = [1,1,1];
2062}
2063def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002064
2065def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2066 let Latency = 11;
2067 let NumMicroOps = 3;
2068 let ResourceCycles = [1,1,1];
2069}
2070def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002071
2072def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002073 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002074 let NumMicroOps = 3;
2075 let ResourceCycles = [1,1,1];
2076}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002077def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
2078 "CVTPD2PSrm",
2079 "CVTTPD2DQrm",
2080 "MMX_CVTPD2PIirm",
2081 "MMX_CVTTPD2PIirm",
2082 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002083
2084def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2085 let Latency = 9;
2086 let NumMicroOps = 3;
2087 let ResourceCycles = [1,1,1];
2088}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002089def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
2090 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002091
2092def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002093 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002094 let NumMicroOps = 3;
2095 let ResourceCycles = [1,1,1];
2096}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002097def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002098
2099def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002100 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002101 let NumMicroOps = 3;
2102 let ResourceCycles = [1,1,1];
2103}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002104def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
2105 "VPBROADCASTBrm",
2106 "VPBROADCASTWYrm",
2107 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002108
2109def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
2110 let Latency = 4;
2111 let NumMicroOps = 4;
2112 let ResourceCycles = [4];
2113}
2114def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
2115
2116def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
2117 let Latency = 4;
2118 let NumMicroOps = 4;
2119 let ResourceCycles = [1,3];
2120}
2121def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
2122
2123def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
2124 let Latency = 4;
2125 let NumMicroOps = 4;
2126 let ResourceCycles = [1,1,2];
2127}
2128def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
2129
2130def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002131 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002132 let NumMicroOps = 4;
2133 let ResourceCycles = [1,1,1,1];
2134}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00002135def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
2136 "VMASKMOVPS(Y?)mr",
2137 "VPMASKMOVD(Y?)mr",
2138 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002139
2140def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002141 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002142 let NumMicroOps = 4;
2143 let ResourceCycles = [1,1,1,1];
2144}
2145def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
2146
2147def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002148 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002149 let NumMicroOps = 4;
2150 let ResourceCycles = [1,1,1,1];
2151}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002152def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
2153 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002154
2155def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002156 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002157 let NumMicroOps = 5;
2158 let ResourceCycles = [1,2,1,1];
2159}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002160def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
2161 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002162
2163def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002164 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002165 let NumMicroOps = 6;
2166 let ResourceCycles = [1,1,4];
2167}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002168def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
2169 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002170
2171def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002172 let Latency = 5;
2173 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002174 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002175}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002176def: InstRW<[HWWriteResGroup89], (instregex "MMX_PMADDUBSWrr",
2177 "MMX_PMADDWDirr",
2178 "MMX_PMULHRSWrr",
2179 "MMX_PMULHUWirr",
2180 "MMX_PMULHWirr",
2181 "MMX_PMULLWirr",
2182 "MMX_PMULUDQirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002183 "(V?)PCMPGTQ(Y?)rr",
2184 "(V?)PHMINPOSUWrr",
2185 "(V?)PMADDUBSW(Y?)rr",
2186 "(V?)PMADDWD(Y?)rr",
2187 "(V?)PMULDQ(Y?)rr",
2188 "(V?)PMULHRSW(Y?)rr",
2189 "(V?)PMULHUW(Y?)rr",
2190 "(V?)PMULHW(Y?)rr",
2191 "(V?)PMULLW(Y?)rr",
2192 "(V?)PMULUDQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002193 "(V?)RCPPSr",
2194 "(V?)RCPSSr",
2195 "(V?)RSQRTPSr",
2196 "(V?)RSQRTSSr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002197
Gadi Haberd76f7b82017-08-28 10:04:16 +00002198def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00002199 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002200 let NumMicroOps = 1;
2201 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002202}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002203def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
2204 "(V?)MULPS(Y?)rr",
2205 "(V?)MULSDrr",
Simon Pilgrim3c066172018-04-19 11:37:26 +00002206 "(V?)MULSSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002207
Gadi Haberd76f7b82017-08-28 10:04:16 +00002208def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002209 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002210 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002211 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002212}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002213def: InstRW<[HWWriteResGroup91], (instregex "MMX_PMADDUBSWrm",
2214 "MMX_PMADDWDirm",
2215 "MMX_PMULHRSWrm",
2216 "MMX_PMULHUWirm",
2217 "MMX_PMULHWirm",
2218 "MMX_PMULLWirm",
2219 "MMX_PMULUDQirm",
2220 "MMX_PSADBWirm",
2221 "(V?)RCPSSm",
2222 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002223
Craig Topper8104f262018-04-02 05:33:28 +00002224def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002225 let Latency = 16;
2226 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002227 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002228}
2229def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
2230
Craig Topper8104f262018-04-02 05:33:28 +00002231def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002232 let Latency = 18;
2233 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002234 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002235}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002236def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002237
2238def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
2239 let Latency = 11;
2240 let NumMicroOps = 2;
2241 let ResourceCycles = [1,1];
2242}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002243def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
2244 "(V?)PHMINPOSUWrm",
2245 "(V?)PMADDUBSWrm",
2246 "(V?)PMADDWDrm",
2247 "(V?)PMULDQrm",
2248 "(V?)PMULHRSWrm",
2249 "(V?)PMULHUWrm",
2250 "(V?)PMULHWrm",
2251 "(V?)PMULLWrm",
2252 "(V?)PMULUDQrm",
2253 "(V?)PSADBWrm",
2254 "(V?)RCPPSm",
2255 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002256
2257def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
2258 let Latency = 12;
2259 let NumMicroOps = 2;
2260 let ResourceCycles = [1,1];
2261}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002262def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
2263 "MUL_F64m",
2264 "VPCMPGTQYrm",
2265 "VPMADDUBSWYrm",
2266 "VPMADDWDYrm",
2267 "VPMULDQYrm",
2268 "VPMULHRSWYrm",
2269 "VPMULHUWYrm",
2270 "VPMULHWYrm",
2271 "VPMULLWYrm",
2272 "VPMULUDQYrm",
2273 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002274
Gadi Haberd76f7b82017-08-28 10:04:16 +00002275def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002276 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002277 let NumMicroOps = 2;
2278 let ResourceCycles = [1,1];
2279}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002280def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
2281 "(V?)MULPSrm",
2282 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002283
2284def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
2285 let Latency = 12;
2286 let NumMicroOps = 2;
2287 let ResourceCycles = [1,1];
2288}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002289def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
2290 "VMULPSYrm",
2291 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002292
2293def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2294 let Latency = 10;
2295 let NumMicroOps = 2;
2296 let ResourceCycles = [1,1];
2297}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002298def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2299 "(V?)MULSSrm",
2300 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002301
2302def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2303 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002304 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002305 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002306}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002307def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr",
2308 "(V?)HADDPD(Y?)rr",
2309 "(V?)HADDPS(Y?)rr",
2310 "(V?)HSUBPD(Y?)rr",
2311 "(V?)HSUBPS(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002312
Gadi Haberd76f7b82017-08-28 10:04:16 +00002313def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2314 let Latency = 5;
2315 let NumMicroOps = 3;
2316 let ResourceCycles = [1,1,1];
2317}
2318def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2319
2320def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002321 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002322 let NumMicroOps = 3;
2323 let ResourceCycles = [1,1,1];
2324}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002325def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002326
2327def HWWriteResGroup96 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002328 let Latency = 11;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002329 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002330 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002331}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002332def: InstRW<[HWWriteResGroup96], (instregex "(V?)HADDPDrm",
2333 "(V?)HADDPSrm",
2334 "(V?)HSUBPDrm",
2335 "(V?)HSUBPSrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002336
Gadi Haber2cf601f2017-12-08 09:48:44 +00002337def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2338 let Latency = 12;
2339 let NumMicroOps = 4;
2340 let ResourceCycles = [1,2,1];
2341}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002342def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2343 "VHADDPSYrm",
2344 "VHSUBPDYrm",
2345 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002346
Gadi Haberd76f7b82017-08-28 10:04:16 +00002347def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002348 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002349 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002350 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002351}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002352def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002353
Gadi Haberd76f7b82017-08-28 10:04:16 +00002354def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002355 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002356 let NumMicroOps = 4;
2357 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002358}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002359def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002360
Gadi Haberd76f7b82017-08-28 10:04:16 +00002361def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2362 let Latency = 5;
2363 let NumMicroOps = 5;
2364 let ResourceCycles = [1,4];
2365}
2366def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2367
2368def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2369 let Latency = 5;
2370 let NumMicroOps = 5;
2371 let ResourceCycles = [1,4];
2372}
2373def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2374
2375def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2376 let Latency = 5;
2377 let NumMicroOps = 5;
2378 let ResourceCycles = [2,3];
2379}
Craig Topper13a16502018-03-19 00:56:09 +00002380def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002381
2382def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2383 let Latency = 6;
2384 let NumMicroOps = 2;
2385 let ResourceCycles = [1,1];
2386}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002387def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2388 "VCVTPD2DQYrr",
2389 "VCVTPD2PSYrr",
2390 "VCVTPS2PHYrr",
2391 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002392
2393def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002394 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002395 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002396 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002397}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002398def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2399 "ADD_FI32m",
2400 "SUBR_FI16m",
2401 "SUBR_FI32m",
2402 "SUB_FI16m",
2403 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002404 "VROUNDPDYm",
2405 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002406
Gadi Haber2cf601f2017-12-08 09:48:44 +00002407def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2408 let Latency = 12;
2409 let NumMicroOps = 3;
2410 let ResourceCycles = [2,1];
2411}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002412def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2413 "(V?)ROUNDPSm",
2414 "(V?)ROUNDSDm",
2415 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002416
Gadi Haberd76f7b82017-08-28 10:04:16 +00002417def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002418 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002419 let NumMicroOps = 3;
2420 let ResourceCycles = [1,1,1];
2421}
2422def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2423
2424def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2425 let Latency = 6;
2426 let NumMicroOps = 4;
2427 let ResourceCycles = [1,1,2];
2428}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002429def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2430 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002431
2432def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002433 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002434 let NumMicroOps = 4;
2435 let ResourceCycles = [1,1,1,1];
2436}
2437def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2438
2439def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2440 let Latency = 6;
2441 let NumMicroOps = 4;
2442 let ResourceCycles = [1,1,1,1];
2443}
2444def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2445
2446def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2447 let Latency = 6;
2448 let NumMicroOps = 6;
2449 let ResourceCycles = [1,5];
2450}
2451def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2452
2453def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002454 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002455 let NumMicroOps = 6;
2456 let ResourceCycles = [1,1,1,1,2];
2457}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002458def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2459 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002460
Gadi Haberd76f7b82017-08-28 10:04:16 +00002461def HWWriteResGroup112 : SchedWriteRes<[HWPort0,HWPort5]> {
2462 let Latency = 7;
2463 let NumMicroOps = 3;
2464 let ResourceCycles = [1,2];
2465}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002466def: InstRW<[HWWriteResGroup112], (instregex "(V?)MPSADBW(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002467
2468def HWWriteResGroup113 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002469 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002470 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002471 let ResourceCycles = [1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002472}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002473def: InstRW<[HWWriteResGroup113], (instregex "(V?)MPSADBWrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002474
Gadi Haber2cf601f2017-12-08 09:48:44 +00002475def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2476 let Latency = 14;
2477 let NumMicroOps = 4;
2478 let ResourceCycles = [1,2,1];
2479}
2480def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2481
Gadi Haberd76f7b82017-08-28 10:04:16 +00002482def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2483 let Latency = 7;
2484 let NumMicroOps = 7;
2485 let ResourceCycles = [2,2,1,2];
2486}
Craig Topper2d451e72018-03-18 08:38:06 +00002487def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002488
2489def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002490 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002491 let NumMicroOps = 3;
2492 let ResourceCycles = [1,1,1];
2493}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002494def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2495 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002496
2497def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2498 let Latency = 9;
2499 let NumMicroOps = 3;
2500 let ResourceCycles = [1,1,1];
2501}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002502def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002503
2504def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002505 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002506 let NumMicroOps = 4;
2507 let ResourceCycles = [1,1,1,1];
2508}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002509def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002510
Gadi Haber2cf601f2017-12-08 09:48:44 +00002511def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2512 let Latency = 17;
2513 let NumMicroOps = 3;
2514 let ResourceCycles = [2,1];
2515}
2516def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2517
Gadi Haberd76f7b82017-08-28 10:04:16 +00002518def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002519 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002520 let NumMicroOps = 10;
2521 let ResourceCycles = [1,1,1,4,1,2];
2522}
Craig Topper13a16502018-03-19 00:56:09 +00002523def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002524
Craig Topper8104f262018-04-02 05:33:28 +00002525def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002526 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002527 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002528 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002529}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002530def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2531 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002532
Gadi Haberd76f7b82017-08-28 10:04:16 +00002533def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2534 let Latency = 11;
2535 let NumMicroOps = 3;
2536 let ResourceCycles = [2,1];
2537}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002538def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2539 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002540
Gadi Haberd76f7b82017-08-28 10:04:16 +00002541def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002542 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002543 let NumMicroOps = 4;
2544 let ResourceCycles = [2,1,1];
2545}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002546def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2547 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002548
2549def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2550 let Latency = 11;
2551 let NumMicroOps = 7;
2552 let ResourceCycles = [2,2,3];
2553}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002554def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2555 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002556
2557def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2558 let Latency = 11;
2559 let NumMicroOps = 9;
2560 let ResourceCycles = [1,4,1,3];
2561}
2562def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2563
2564def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2565 let Latency = 11;
2566 let NumMicroOps = 11;
2567 let ResourceCycles = [2,9];
2568}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002569def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002570
2571def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002572 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002573 let NumMicroOps = 14;
2574 let ResourceCycles = [1,1,1,4,2,5];
2575}
2576def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2577
Craig Topper8104f262018-04-02 05:33:28 +00002578def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002579 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002580 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002581 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002582}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002583def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2584 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002585
Craig Topper8104f262018-04-02 05:33:28 +00002586def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002587 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002588 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002589 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002590}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002591def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002592
2593def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002594 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002595 let NumMicroOps = 11;
2596 let ResourceCycles = [2,1,1,3,1,3];
2597}
Craig Topper13a16502018-03-19 00:56:09 +00002598def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002599
Craig Topper8104f262018-04-02 05:33:28 +00002600def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002601 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002602 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002603 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002604}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002605def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002606
Gadi Haberd76f7b82017-08-28 10:04:16 +00002607def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2608 let Latency = 14;
2609 let NumMicroOps = 4;
2610 let ResourceCycles = [2,1,1];
2611}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002612def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002613
2614def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002615 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002616 let NumMicroOps = 5;
2617 let ResourceCycles = [2,1,1,1];
2618}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002619def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002620
Gadi Haber2cf601f2017-12-08 09:48:44 +00002621def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2622 let Latency = 21;
2623 let NumMicroOps = 5;
2624 let ResourceCycles = [2,1,1,1];
2625}
2626def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2627
Gadi Haberd76f7b82017-08-28 10:04:16 +00002628def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2629 let Latency = 14;
2630 let NumMicroOps = 10;
2631 let ResourceCycles = [2,3,1,4];
2632}
2633def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2634
2635def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002636 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002637 let NumMicroOps = 15;
2638 let ResourceCycles = [1,14];
2639}
2640def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2641
2642def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002643 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002644 let NumMicroOps = 8;
2645 let ResourceCycles = [1,1,1,1,1,1,2];
2646}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002647def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2648 "INSL",
2649 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002650
2651def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2652 let Latency = 16;
2653 let NumMicroOps = 16;
2654 let ResourceCycles = [16];
2655}
2656def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2657
2658def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002659 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002660 let NumMicroOps = 19;
2661 let ResourceCycles = [2,1,4,1,1,4,6];
2662}
2663def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2664
2665def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2666 let Latency = 17;
2667 let NumMicroOps = 15;
2668 let ResourceCycles = [2,1,2,4,2,4];
2669}
2670def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2671
Gadi Haberd76f7b82017-08-28 10:04:16 +00002672def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2673 let Latency = 18;
2674 let NumMicroOps = 8;
2675 let ResourceCycles = [1,1,1,5];
2676}
2677def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002678def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002679
Gadi Haberd76f7b82017-08-28 10:04:16 +00002680def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002681 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002682 let NumMicroOps = 19;
2683 let ResourceCycles = [3,1,15];
2684}
Craig Topper391c6f92017-12-10 01:24:08 +00002685def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002686
Gadi Haberd76f7b82017-08-28 10:04:16 +00002687def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2688 let Latency = 20;
2689 let NumMicroOps = 1;
2690 let ResourceCycles = [1];
2691}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002692def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2693 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002694 "DIV_FrST0")>;
2695
2696def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2697 let Latency = 20;
2698 let NumMicroOps = 1;
2699 let ResourceCycles = [1,14];
2700}
2701def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2702 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002703
2704def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002705 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002706 let NumMicroOps = 2;
2707 let ResourceCycles = [1,1];
2708}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002709def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002710 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002711
Craig Topper8104f262018-04-02 05:33:28 +00002712def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002713 let Latency = 26;
2714 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002715 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002716}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002717def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002718
Craig Topper8104f262018-04-02 05:33:28 +00002719def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002720 let Latency = 21;
2721 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002722 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002723}
2724def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2725
Craig Topper8104f262018-04-02 05:33:28 +00002726def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002727 let Latency = 22;
2728 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002729 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002730}
2731def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2732
Craig Topper8104f262018-04-02 05:33:28 +00002733def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002734 let Latency = 25;
2735 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002736 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002737}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002738def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002739
2740def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2741 let Latency = 20;
2742 let NumMicroOps = 10;
2743 let ResourceCycles = [1,2,7];
2744}
2745def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2746
Craig Topper8104f262018-04-02 05:33:28 +00002747def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002748 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002749 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002750 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002751}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002752def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2753 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002754
Craig Topper8104f262018-04-02 05:33:28 +00002755def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002756 let Latency = 21;
2757 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002758 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002759}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002760def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2761 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002762
Craig Topper8104f262018-04-02 05:33:28 +00002763def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002764 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002765 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002766 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002767}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002768def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2769 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002770
2771def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002772 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002773 let NumMicroOps = 3;
2774 let ResourceCycles = [1,1,1];
2775}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002776def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2777 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002778
2779def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2780 let Latency = 24;
2781 let NumMicroOps = 1;
2782 let ResourceCycles = [1];
2783}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002784def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2785 "DIVR_FST0r",
2786 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002787
2788def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002789 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002790 let NumMicroOps = 2;
2791 let ResourceCycles = [1,1];
2792}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002793def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2794 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002795
2796def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002797 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002798 let NumMicroOps = 27;
2799 let ResourceCycles = [1,5,1,1,19];
2800}
2801def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2802
2803def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002804 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002805 let NumMicroOps = 28;
2806 let ResourceCycles = [1,6,1,1,19];
2807}
Craig Topper2d451e72018-03-18 08:38:06 +00002808def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002809
2810def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002811 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002812 let NumMicroOps = 3;
2813 let ResourceCycles = [1,1,1];
2814}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002815def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2816 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002817
Gadi Haberd76f7b82017-08-28 10:04:16 +00002818def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002819 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002820 let NumMicroOps = 23;
2821 let ResourceCycles = [1,5,3,4,10];
2822}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002823def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2824 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002825
2826def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002827 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002828 let NumMicroOps = 23;
2829 let ResourceCycles = [1,5,2,1,4,10];
2830}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002831def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2832 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002833
2834def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2835 let Latency = 31;
2836 let NumMicroOps = 31;
2837 let ResourceCycles = [8,1,21,1];
2838}
2839def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2840
Craig Topper8104f262018-04-02 05:33:28 +00002841def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002842 let Latency = 35;
2843 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002844 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002845}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002846def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2847 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002848
Craig Topper8104f262018-04-02 05:33:28 +00002849def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002850 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002851 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002852 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002853}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002854def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2855 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002856
2857def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002858 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002859 let NumMicroOps = 18;
2860 let ResourceCycles = [1,1,2,3,1,1,1,8];
2861}
2862def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2863
2864def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2865 let Latency = 42;
2866 let NumMicroOps = 22;
2867 let ResourceCycles = [2,20];
2868}
Craig Topper2d451e72018-03-18 08:38:06 +00002869def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002870
2871def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002872 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002873 let NumMicroOps = 64;
2874 let ResourceCycles = [2,2,8,1,10,2,39];
2875}
2876def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002877
2878def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002879 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002880 let NumMicroOps = 88;
2881 let ResourceCycles = [4,4,31,1,2,1,45];
2882}
Craig Topper2d451e72018-03-18 08:38:06 +00002883def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002884
2885def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002886 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002887 let NumMicroOps = 90;
2888 let ResourceCycles = [4,2,33,1,2,1,47];
2889}
Craig Topper2d451e72018-03-18 08:38:06 +00002890def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002891
2892def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2893 let Latency = 75;
2894 let NumMicroOps = 15;
2895 let ResourceCycles = [6,3,6];
2896}
2897def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
2898
2899def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2900 let Latency = 98;
2901 let NumMicroOps = 32;
2902 let ResourceCycles = [7,7,3,3,1,11];
2903}
2904def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2905
2906def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2907 let Latency = 112;
2908 let NumMicroOps = 66;
2909 let ResourceCycles = [4,2,4,8,14,34];
2910}
2911def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2912
2913def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002914 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002915 let NumMicroOps = 100;
2916 let ResourceCycles = [9,9,11,8,1,11,21,30];
2917}
2918def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00002919
Gadi Haber2cf601f2017-12-08 09:48:44 +00002920def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
2921 let Latency = 26;
2922 let NumMicroOps = 12;
2923 let ResourceCycles = [2,2,1,3,2,2];
2924}
Craig Topper17a31182017-12-16 18:35:29 +00002925def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
2926 VPGATHERDQrm,
2927 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002928
2929def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2930 let Latency = 24;
2931 let NumMicroOps = 22;
2932 let ResourceCycles = [5,3,4,1,5,4];
2933}
Craig Topper17a31182017-12-16 18:35:29 +00002934def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
2935 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002936
2937def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2938 let Latency = 28;
2939 let NumMicroOps = 22;
2940 let ResourceCycles = [5,3,4,1,5,4];
2941}
Craig Topper17a31182017-12-16 18:35:29 +00002942def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002943
2944def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2945 let Latency = 25;
2946 let NumMicroOps = 22;
2947 let ResourceCycles = [5,3,4,1,5,4];
2948}
Craig Topper17a31182017-12-16 18:35:29 +00002949def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002950
2951def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2952 let Latency = 27;
2953 let NumMicroOps = 20;
2954 let ResourceCycles = [3,3,4,1,5,4];
2955}
Craig Topper17a31182017-12-16 18:35:29 +00002956def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
2957 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002958
2959def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2960 let Latency = 27;
2961 let NumMicroOps = 34;
2962 let ResourceCycles = [5,3,8,1,9,8];
2963}
Craig Topper17a31182017-12-16 18:35:29 +00002964def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
2965 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002966
2967def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2968 let Latency = 23;
2969 let NumMicroOps = 14;
2970 let ResourceCycles = [3,3,2,1,3,2];
2971}
Craig Topper17a31182017-12-16 18:35:29 +00002972def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
2973 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002974
2975def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2976 let Latency = 28;
2977 let NumMicroOps = 15;
2978 let ResourceCycles = [3,3,2,1,4,2];
2979}
Craig Topper17a31182017-12-16 18:35:29 +00002980def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002981
2982def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2983 let Latency = 25;
2984 let NumMicroOps = 15;
2985 let ResourceCycles = [3,3,2,1,4,2];
2986}
Craig Topper17a31182017-12-16 18:35:29 +00002987def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
2988 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002989
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00002990} // SchedModel