blob: c7634fbba8b24a115231dbe88e00282acc0822dc [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 Pilgrim5269167f2018-05-01 16:13:42 +0000151defm : HWWriteResPair<WriteFAdd, [HWPort1], 3, [1], 1, 5>;
152defm : HWWriteResPair<WriteFAddY, [HWPort1], 3, [1], 1, 7>;
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000153defm : HWWriteResPair<WriteFCmp, [HWPort1], 3, [1], 1, 6>;
Simon Pilgrimc546f942018-05-01 16:50:16 +0000154defm : HWWriteResPair<WriteFCmpY, [HWPort1], 3, [1], 1, 7>;
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000155defm : HWWriteResPair<WriteFCom, [HWPort1], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000156defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
157defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
Simon Pilgrimc7088682018-05-01 18:06:07 +0000158defm : HWWriteResPair<WriteFRcp, [HWPort0], 5, [1], 1, 5>;
159defm : HWWriteResPair<WriteFRcpY, [HWPort0], 5, [1], 1, 7>;
160defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5, [1], 1, 5>;
161defm : HWWriteResPair<WriteFRsqrtY,[HWPort0], 5, [1], 1, 7>;
162defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15, [1], 1, 5>;
163defm : HWWriteResPair<WriteFSqrtY, [HWPort0], 15, [1], 1, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000164defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
165defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
166defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +0000167defm : HWWriteResPair<WriteFMA, [HWPort01], 5, [1], 1, 6>;
168defm : HWWriteResPair<WriteFMAS, [HWPort01], 5, [1], 1, 5>;
169defm : HWWriteResPair<WriteFMAY, [HWPort01], 5, [1], 1, 7>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000170defm : HWWriteResPair<WriteFSign, [HWPort0], 1>;
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000171defm : HWWriteResPair<WriteFLogic, [HWPort5], 1, [1], 1, 6>;
172defm : HWWriteResPair<WriteFLogicY, [HWPort5], 1, [1], 1, 7>;
Simon Pilgrimdd8eae12018-05-01 14:25:01 +0000173defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1, [1], 1, 5>;
174defm : HWWriteResPair<WriteFShuffleY, [HWPort5], 1, [1], 1, 7>;
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000175defm : HWWriteResPair<WriteFVarShuffle, [HWPort5], 1, [1], 1, 6>;
176defm : HWWriteResPair<WriteFVarShuffleY, [HWPort5], 1, [1], 1, 7>;
Simon Pilgrim06e16542018-04-22 18:35:53 +0000177defm : HWWriteResPair<WriteFBlend, [HWPort015], 1, [1], 1, 6>;
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000178defm : HWWriteResPair<WriteFBlendY, [HWPort015], 1, [1], 1, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000179defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000180defm : HWWriteResPair<WriteFVarShuffle256, [HWPort5], 3>;
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000181defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2], 2, 6>;
Simon Pilgrim8a937e02018-04-27 18:19:48 +0000182defm : HWWriteResPair<WriteFVarBlendY, [HWPort5], 2, [2], 2, 7>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000183
Simon Pilgrimf0945aa2018-04-24 16:43:07 +0000184def : WriteRes<WriteCvtF2FSt, [HWPort1,HWPort4,HWPort5,HWPort237]> {
185 let Latency = 5;
186 let NumMicroOps = 4;
187 let ResourceCycles = [1,1,1,1];
188}
189
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000190// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000191def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
192def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
193def : WriteRes<WriteVecMove, [HWPort015]>;
194
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000195defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000196defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1, [1], 1, 6>;
Simon Pilgrim57f2b182018-05-01 12:39:17 +0000197defm : HWWriteResPair<WriteVecLogicY,[HWPort015], 1, [1], 1, 7>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000198defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
199defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
Craig Topper13a0f832018-03-31 04:54:32 +0000200defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000201defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000202defm : HWWriteResPair<WriteVarShuffle, [HWPort5], 1>;
Simon Pilgrim06e16542018-04-22 18:35:53 +0000203defm : HWWriteResPair<WriteBlend, [HWPort5], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000204defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000205defm : HWWriteResPair<WriteVarShuffle256, [HWPort5], 3>;
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000206defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000207defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000208defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 7, [1, 2], 3, 6>;
Craig Toppere56a2fc2018-04-17 19:35:19 +0000209defm : HWWriteResPair<WritePSADBW, [HWPort0], 5>;
Simon Pilgrim27bc83e2018-04-24 18:49:25 +0000210defm : HWWriteResPair<WritePHMINPOS, [HWPort0], 5, [1], 1, 6>;
Quentin Colombetca498512014-02-24 19:33:51 +0000211
Simon Pilgrimf7d2a932018-04-24 13:21:41 +0000212// Vector insert/extract operations.
213def : WriteRes<WriteVecInsert, [HWPort5]> {
214 let Latency = 2;
215 let NumMicroOps = 2;
216 let ResourceCycles = [2];
217}
218def : WriteRes<WriteVecInsertLd, [HWPort5,HWPort23]> {
219 let Latency = 6;
220 let NumMicroOps = 2;
221}
222
223def : WriteRes<WriteVecExtract, [HWPort0,HWPort5]> {
224 let Latency = 2;
225 let NumMicroOps = 2;
226}
227def : WriteRes<WriteVecExtractSt, [HWPort4,HWPort5,HWPort237]> {
228 let Latency = 2;
229 let NumMicroOps = 3;
230}
231
Quentin Colombetca498512014-02-24 19:33:51 +0000232// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000233
Quentin Colombetca498512014-02-24 19:33:51 +0000234// Packed Compare Implicit Length Strings, Return Mask
235def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000236 let Latency = 11;
237 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000238 let ResourceCycles = [3];
239}
240def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000241 let Latency = 17;
242 let NumMicroOps = 4;
243 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000244}
245
246// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000247def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
248 let Latency = 19;
249 let NumMicroOps = 9;
250 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000251}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000252def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
253 let Latency = 25;
254 let NumMicroOps = 10;
255 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000256}
257
258// Packed Compare Implicit Length Strings, Return Index
259def : WriteRes<WritePCmpIStrI, [HWPort0]> {
260 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000261 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000262 let ResourceCycles = [3];
263}
264def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000265 let Latency = 17;
266 let NumMicroOps = 4;
267 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000268}
269
270// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000271def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
272 let Latency = 18;
273 let NumMicroOps = 8;
274 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000275}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000276def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
277 let Latency = 24;
278 let NumMicroOps = 9;
279 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000280}
281
Simon Pilgrima2f26782018-03-27 20:38:54 +0000282// MOVMSK Instructions.
283def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
284def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
285def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
286
Quentin Colombetca498512014-02-24 19:33:51 +0000287// AES Instructions.
288def : WriteRes<WriteAESDecEnc, [HWPort5]> {
289 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000290 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000291 let ResourceCycles = [1];
292}
293def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000294 let Latency = 13;
295 let NumMicroOps = 2;
296 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000297}
298
299def : WriteRes<WriteAESIMC, [HWPort5]> {
300 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000301 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000302 let ResourceCycles = [2];
303}
304def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000305 let Latency = 20;
306 let NumMicroOps = 3;
307 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000308}
309
Simon Pilgrim7684e052018-03-22 13:18:08 +0000310def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
311 let Latency = 29;
312 let NumMicroOps = 11;
313 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000314}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000315def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
316 let Latency = 34;
317 let NumMicroOps = 11;
318 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000319}
320
321// Carry-less multiplication instructions.
322def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000323 let Latency = 11;
324 let NumMicroOps = 3;
325 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000326}
327def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000328 let Latency = 17;
329 let NumMicroOps = 4;
330 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000331}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000332
Craig Topper05242bf2018-04-21 18:07:36 +0000333// Load/store MXCSR.
334def : WriteRes<WriteLDMXCSR, [HWPort0,HWPort23,HWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
335def : WriteRes<WriteSTMXCSR, [HWPort4,HWPort5,HWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
336
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000337def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
338def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000339def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
340def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000341
Michael Zuckermanf6684002017-06-28 11:23:31 +0000342//================ Exceptions ================//
343
344//-- Specific Scheduling Models --//
345
346// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000347def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000348
Craig Topper02daec02018-04-02 01:12:32 +0000349def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000350
Craig Topper02daec02018-04-02 01:12:32 +0000351def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000352 let NumMicroOps = 2;
353}
Craig Topper02daec02018-04-02 01:12:32 +0000354def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000355 let NumMicroOps = 3;
356}
357
Craig Topper02daec02018-04-02 01:12:32 +0000358def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000359 let NumMicroOps = 2;
360}
361
Craig Topper02daec02018-04-02 01:12:32 +0000362def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000363 let NumMicroOps = 3;
364 let ResourceCycles = [2, 1];
365}
366
Michael Zuckermanf6684002017-06-28 11:23:31 +0000367// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000368def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000369
Michael Zuckermanf6684002017-06-28 11:23:31 +0000370
Craig Topper02daec02018-04-02 01:12:32 +0000371def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000372 let NumMicroOps = 2;
373 let ResourceCycles = [2];
374}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000375
376// Notation:
377// - r: register.
378// - mm: 64 bit mmx register.
379// - x = 128 bit xmm register.
380// - (x)mm = mmx or xmm register.
381// - y = 256 bit ymm register.
382// - v = any vector register.
383// - m = memory.
384
385//=== Integer Instructions ===//
386//-- Move instructions --//
387
Michael Zuckermanf6684002017-06-28 11:23:31 +0000388// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000389def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000390 let Latency = 7;
391 let NumMicroOps = 3;
392}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +0000393def : InstRW<[HWWriteXLAT], (instrs XLAT)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000394
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000396def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000397 let NumMicroOps = 19;
398}
Craig Topper02daec02018-04-02 01:12:32 +0000399def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000400
Michael Zuckermanf6684002017-06-28 11:23:31 +0000401// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000402def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000403 let NumMicroOps = 18;
404}
Craig Topper02daec02018-04-02 01:12:32 +0000405def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000406
Michael Zuckermanf6684002017-06-28 11:23:31 +0000407//-- Arithmetic instructions --//
408
Michael Zuckermanf6684002017-06-28 11:23:31 +0000409// DIV.
410// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000411def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000412 let Latency = 22;
413 let NumMicroOps = 9;
414}
Craig Topper02daec02018-04-02 01:12:32 +0000415def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000416
Michael Zuckermanf6684002017-06-28 11:23:31 +0000417// IDIV.
418// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000419def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000420 let Latency = 23;
421 let NumMicroOps = 9;
422}
Craig Topper02daec02018-04-02 01:12:32 +0000423def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000424
Michael Zuckermanf6684002017-06-28 11:23:31 +0000425// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000426// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000427def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000428 let NumMicroOps = 10;
429}
Craig Topper02daec02018-04-02 01:12:32 +0000430def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000431
Michael Zuckermanf6684002017-06-28 11:23:31 +0000432// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000433// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000434def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000435 let NumMicroOps = 11;
436}
Craig Topper02daec02018-04-02 01:12:32 +0000437def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000438
Michael Zuckermanf6684002017-06-28 11:23:31 +0000439//-- Control transfer instructions --//
440
Michael Zuckermanf6684002017-06-28 11:23:31 +0000441// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000442// i.
Craig Topper02daec02018-04-02 01:12:32 +0000443def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000444 let NumMicroOps = 4;
445 let ResourceCycles = [1, 2, 1];
446}
Craig Topper02daec02018-04-02 01:12:32 +0000447def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000448
449// BOUND.
450// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000451def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000452 let NumMicroOps = 15;
453}
Craig Topper02daec02018-04-02 01:12:32 +0000454def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000455
456// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000457def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000458 let NumMicroOps = 4;
459}
Simon Pilgrimd5ada492018-04-29 15:33:15 +0000460def : InstRW<[HWWriteINTO], (instrs INTO)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000461
462//-- String instructions --//
463
464// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000465def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000466
467// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000468def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000469
Michael Zuckermanf6684002017-06-28 11:23:31 +0000470// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000471def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000472 let Latency = 4;
473 let NumMicroOps = 5;
474 let ResourceCycles = [2, 1, 2];
475}
Craig Topper02daec02018-04-02 01:12:32 +0000476def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000477
Michael Zuckermanf6684002017-06-28 11:23:31 +0000478// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000479def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000480 let Latency = 4;
481 let NumMicroOps = 5;
482 let ResourceCycles = [2, 3];
483}
Craig Topper02daec02018-04-02 01:12:32 +0000484def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000485
Michael Zuckermanf6684002017-06-28 11:23:31 +0000486//-- Other --//
487
Gadi Haberd76f7b82017-08-28 10:04:16 +0000488// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000489def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000490 let NumMicroOps = 34;
491}
Craig Topper02daec02018-04-02 01:12:32 +0000492def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000493
494// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000495def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000496 let NumMicroOps = 17;
497 let ResourceCycles = [1, 16];
498}
Craig Topper02daec02018-04-02 01:12:32 +0000499def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000500
501//=== Floating Point x87 Instructions ===//
502//-- Move instructions --//
503
504// FLD.
505// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000506def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000507
Michael Zuckermanf6684002017-06-28 11:23:31 +0000508// FBLD.
509// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000510def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000511 let Latency = 47;
512 let NumMicroOps = 43;
513}
Craig Topper02daec02018-04-02 01:12:32 +0000514def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000515
516// FST(P).
517// r.
Craig Topper02daec02018-04-02 01:12:32 +0000518def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000519
Michael Zuckermanf6684002017-06-28 11:23:31 +0000520// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000521def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000522
Michael Zuckermanf6684002017-06-28 11:23:31 +0000523// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000524def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000525
Michael Zuckermanf6684002017-06-28 11:23:31 +0000526// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000527def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000528
529// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000530def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000531 let NumMicroOps = 147;
532}
Craig Topper02daec02018-04-02 01:12:32 +0000533def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000534
535// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000536def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000537 let NumMicroOps = 90;
538}
Craig Topper02daec02018-04-02 01:12:32 +0000539def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000540
541//-- Arithmetic instructions --//
542
Michael Zuckermanf6684002017-06-28 11:23:31 +0000543// FCOMPP FUCOMPP.
544// r.
Craig Topper02daec02018-04-02 01:12:32 +0000545def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000546
547// FCOMI(P) FUCOMI(P).
548// m.
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000549def : InstRW<[HWWrite3P01], (instrs COM_FIPr, COM_FIr, UCOM_FIPr, UCOM_FIr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000550
Michael Zuckermanf6684002017-06-28 11:23:31 +0000551// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000552def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000553
554// FXAM.
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000555def : InstRW<[HWWrite2P1], (instrs FXAM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000556
557// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000558def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000559 let Latency = 19;
560 let NumMicroOps = 28;
561}
Craig Topper02daec02018-04-02 01:12:32 +0000562def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000563
564// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000565def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000566 let Latency = 27;
567 let NumMicroOps = 41;
568}
Craig Topper02daec02018-04-02 01:12:32 +0000569def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000570
571// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000572def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000573 let Latency = 11;
574 let NumMicroOps = 17;
575}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000576def : InstRW<[HWWriteFRNDINT], (instrs FRNDINT)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000577
578//-- Math instructions --//
579
580// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000581def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000582 let Latency = 75; // 49-125
583 let NumMicroOps = 50; // 25-75
584}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000585def : InstRW<[HWWriteFSCALE], (instrs FSCALE)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000586
587// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000588def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000589 let Latency = 15;
590 let NumMicroOps = 17;
591}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000592def : InstRW<[HWWriteFXTRACT], (instrs FXTRACT)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000593
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000594////////////////////////////////////////////////////////////////////////////////
595// Horizontal add/sub instructions.
596////////////////////////////////////////////////////////////////////////////////
597
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000598defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1,2], 3, 6>;
Simon Pilgrimc3c767b2018-04-27 16:11:57 +0000599defm : HWWriteResPair<WriteFHAddY, [HWPort1, HWPort5], 5, [1,2], 3, 7>;
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000600defm : HWWriteResPair<WritePHAdd, [HWPort5, HWPort15], 3, [2,1], 3, 6>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000601
Michael Zuckermanf6684002017-06-28 11:23:31 +0000602//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000603
Gadi Haberd76f7b82017-08-28 10:04:16 +0000604// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000605
Gadi Haberd76f7b82017-08-28 10:04:16 +0000606def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000607 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000608 let NumMicroOps = 1;
609 let ResourceCycles = [1];
610}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000611def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
612 "(V?)LDDQUrm",
613 "(V?)MOVAPDrm",
614 "(V?)MOVAPSrm",
615 "(V?)MOVDQArm",
616 "(V?)MOVDQUrm",
617 "(V?)MOVNTDQArm",
618 "(V?)MOVSHDUPrm",
619 "(V?)MOVSLDUPrm",
620 "(V?)MOVUPDrm",
621 "(V?)MOVUPSrm",
622 "VPBROADCASTDrm",
623 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000624 "(V?)ROUNDPD(Y?)r",
625 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000626 "(V?)ROUNDSDr",
627 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000628
629def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
630 let Latency = 7;
631 let NumMicroOps = 1;
632 let ResourceCycles = [1];
633}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000634def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F(32|64|80)m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000635 "VBROADCASTF128",
636 "VBROADCASTI128",
637 "VBROADCASTSDYrm",
638 "VBROADCASTSSYrm",
639 "VLDDQUYrm",
640 "VMOVAPDYrm",
641 "VMOVAPSYrm",
642 "VMOVDDUPYrm",
643 "VMOVDQAYrm",
644 "VMOVDQUYrm",
645 "VMOVNTDQAYrm",
646 "VMOVSHDUPYrm",
647 "VMOVSLDUPYrm",
648 "VMOVUPDYrm",
649 "VMOVUPSYrm",
650 "VPBROADCASTDYrm",
651 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000652
653def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
654 let Latency = 5;
655 let NumMicroOps = 1;
656 let ResourceCycles = [1];
657}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000658def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm16",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000659 "MOVSX(16|32|64)rm32",
660 "MOVSX(16|32|64)rm8",
661 "MOVZX(16|32|64)rm16",
662 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000663 "(V?)MOVDDUPrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000664
Gadi Haberd76f7b82017-08-28 10:04:16 +0000665def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
666 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000667 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000668 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000669}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000670def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
671 "MMX_MOVD64from64rm",
672 "MMX_MOVD64mr",
673 "MMX_MOVNTQmr",
674 "MMX_MOVQ64mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000675 "MOVNTI_64mr",
676 "MOVNTImr",
Simon Pilgrim8ee7d012018-04-27 21:14:19 +0000677 "ST_FP(32|64|80)m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000678 "VEXTRACTF128mr",
679 "VEXTRACTI128mr",
680 "(V?)MOVAPD(Y?)mr",
681 "(V?)MOVAPS(V?)mr",
682 "(V?)MOVDQA(Y?)mr",
683 "(V?)MOVDQU(Y?)mr",
684 "(V?)MOVHPDmr",
685 "(V?)MOVHPSmr",
686 "(V?)MOVLPDmr",
687 "(V?)MOVLPSmr",
688 "(V?)MOVNTDQ(Y?)mr",
689 "(V?)MOVNTPD(Y?)mr",
690 "(V?)MOVNTPS(Y?)mr",
691 "(V?)MOVPDI2DImr",
692 "(V?)MOVPQI2QImr",
693 "(V?)MOVPQIto64mr",
694 "(V?)MOVSDmr",
695 "(V?)MOVSSmr",
696 "(V?)MOVUPD(Y?)mr",
697 "(V?)MOVUPS(Y?)mr",
698 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000699
Gadi Haberd76f7b82017-08-28 10:04:16 +0000700def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
701 let Latency = 1;
702 let NumMicroOps = 1;
703 let ResourceCycles = [1];
704}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000705def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
706 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000707 "(V?)MOVPDI2DIrr",
708 "(V?)MOVPQIto64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000709 "VPSLLVQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000710 "VPSRLVQ(Y?)rr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000711 "VTESTPD(Y?)rr",
712 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000713
714def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
715 let Latency = 1;
716 let NumMicroOps = 1;
717 let ResourceCycles = [1];
718}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000719def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
720 "COM_FST0r",
721 "UCOM_FPr",
722 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000723
724def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
725 let Latency = 1;
726 let NumMicroOps = 1;
727 let ResourceCycles = [1];
728}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000729def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000730 "MMX_MOVD64to64rr",
731 "MMX_MOVQ2DQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000732 "(V?)MOV64toPQIrr",
Simon Pilgrimfc0c26f2018-05-01 11:05:42 +0000733 "(V?)MOVDI2PDIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000734
735def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
736 let Latency = 1;
737 let NumMicroOps = 1;
738 let ResourceCycles = [1];
739}
740def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
741
742def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
743 let Latency = 1;
744 let NumMicroOps = 1;
745 let ResourceCycles = [1];
746}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000747def: InstRW<[HWWriteResGroup6], (instrs FINCSTP, FNOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000748
749def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
750 let Latency = 1;
751 let NumMicroOps = 1;
752 let ResourceCycles = [1];
753}
Craig Topperfbe31322018-04-05 21:56:19 +0000754def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000755def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
756 "BT(16|32|64)rr",
757 "BTC(16|32|64)ri8",
758 "BTC(16|32|64)rr",
759 "BTR(16|32|64)ri8",
760 "BTR(16|32|64)rr",
761 "BTS(16|32|64)ri8",
Simon Pilgrim39d77202018-04-28 15:32:19 +0000762 "BTS(16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000763
764def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
765 let Latency = 1;
766 let NumMicroOps = 1;
767 let ResourceCycles = [1];
768}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000769def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
770 "BLSI(32|64)rr",
771 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000772 "BLSR(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000773
774def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
775 let Latency = 1;
776 let NumMicroOps = 1;
777 let ResourceCycles = [1];
778}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000779def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000780 "VPBLENDD(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000781
782def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
783 let Latency = 1;
784 let NumMicroOps = 1;
785 let ResourceCycles = [1];
786}
Craig Topperfbe31322018-04-05 21:56:19 +0000787def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Simon Pilgrimc2fa0562018-04-28 14:06:28 +0000788def: InstRW<[HWWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data
Craig Topperf0d04262018-04-06 16:16:48 +0000789def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000790 "CMC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000791 "NOOP",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000792 "SGDT64m",
793 "SIDT64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000794 "SMSW16m",
795 "STC",
796 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000797 "SYSCALL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000798
799def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000800 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000801 let NumMicroOps = 2;
802 let ResourceCycles = [1,1];
803}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000804def: InstRW<[HWWriteResGroup11], (instregex "VCVTPH2PSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000805 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000806
Gadi Haber2cf601f2017-12-08 09:48:44 +0000807def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
808 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000809 let NumMicroOps = 2;
810 let ResourceCycles = [1,1];
811}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000812def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
813 "(V?)CVTSS2SDrm",
814 "VPSLLVQrm",
815 "VPSRLVQrm",
816 "VTESTPDrm",
817 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000818
819def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
820 let Latency = 8;
821 let NumMicroOps = 2;
822 let ResourceCycles = [1,1];
823}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000824def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
825 "VPSLLQYrm",
826 "VPSLLVQYrm",
827 "VPSLLWYrm",
828 "VPSRADYrm",
829 "VPSRAWYrm",
830 "VPSRLDYrm",
831 "VPSRLQYrm",
832 "VPSRLVQYrm",
833 "VPSRLWYrm",
834 "VTESTPDYrm",
835 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000836
837def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
838 let Latency = 8;
839 let NumMicroOps = 2;
840 let ResourceCycles = [1,1];
841}
Simon Pilgrimc2fa0562018-04-28 14:06:28 +0000842def: InstRW<[HWWriteResGroup12], (instregex "MMX_CVTPI2PSirm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000843 "PDEP(32|64)rm",
844 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000845 "(V?)CMPSDrm",
846 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000847 "(V?)MAX(C?)SDrm",
848 "(V?)MAX(C?)SSrm",
849 "(V?)MIN(C?)SDrm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +0000850 "(V?)MIN(C?)SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000851
Craig Topperf846e2d2018-04-19 05:34:05 +0000852def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
853 let Latency = 8;
854 let NumMicroOps = 3;
855 let ResourceCycles = [1,1,1];
856}
857def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
858
859def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
860 let Latency = 9;
861 let NumMicroOps = 5;
862 let ResourceCycles = [1,1,2,1];
863}
864def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
865
Gadi Haberd76f7b82017-08-28 10:04:16 +0000866def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000867 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000868 let NumMicroOps = 2;
869 let ResourceCycles = [1,1];
870}
Simon Pilgrimc2fa0562018-04-28 14:06:28 +0000871def: InstRW<[HWWriteResGroup13], (instregex "(V?)INSERTPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000872 "(V?)PACKSSDWrm",
873 "(V?)PACKSSWBrm",
874 "(V?)PACKUSDWrm",
875 "(V?)PACKUSWBrm",
876 "(V?)PALIGNRrmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000877 "VPERMILPDmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000878 "VPERMILPSmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000879 "(V?)PSHUFBrm",
880 "(V?)PSHUFDmi",
881 "(V?)PSHUFHWmi",
882 "(V?)PSHUFLWmi",
883 "(V?)PUNPCKHBWrm",
884 "(V?)PUNPCKHDQrm",
885 "(V?)PUNPCKHQDQrm",
886 "(V?)PUNPCKHWDrm",
887 "(V?)PUNPCKLBWrm",
888 "(V?)PUNPCKLDQrm",
889 "(V?)PUNPCKLQDQrm",
890 "(V?)PUNPCKLWDrm",
891 "(V?)SHUFPDrmi",
892 "(V?)SHUFPSrmi",
893 "(V?)UNPCKHPDrm",
894 "(V?)UNPCKHPSrm",
895 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000896 "(V?)UNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000897
Gadi Haber2cf601f2017-12-08 09:48:44 +0000898def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
899 let Latency = 8;
900 let NumMicroOps = 2;
901 let ResourceCycles = [1,1];
902}
Simon Pilgrimb2aa89c2018-04-27 15:50:33 +0000903def: InstRW<[HWWriteResGroup13_1], (instregex "VPACKSSDWYrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000904 "VPACKSSWBYrm",
905 "VPACKUSDWYrm",
906 "VPACKUSWBYrm",
907 "VPALIGNRYrmi",
908 "VPBLENDWYrmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000909 "VPMOVSXBDYrm",
910 "VPMOVSXBQYrm",
911 "VPMOVSXWQYrm",
912 "VPSHUFBYrm",
913 "VPSHUFDYmi",
914 "VPSHUFHWYmi",
915 "VPSHUFLWYmi",
916 "VPUNPCKHBWYrm",
917 "VPUNPCKHDQYrm",
918 "VPUNPCKHQDQYrm",
919 "VPUNPCKHWDYrm",
920 "VPUNPCKLBWYrm",
921 "VPUNPCKLDQYrm",
922 "VPUNPCKLQDQYrm",
Simon Pilgrimdd8eae12018-05-01 14:25:01 +0000923 "VPUNPCKLWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000924
Gadi Haberd76f7b82017-08-28 10:04:16 +0000925def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000926 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000927 let NumMicroOps = 2;
928 let ResourceCycles = [1,1];
929}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000930def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
931 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000932
933def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000934 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000935 let NumMicroOps = 2;
936 let ResourceCycles = [1,1];
937}
Simon Pilgrimeb609092018-04-23 22:19:55 +0000938def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000939
940def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000941 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000942 let NumMicroOps = 2;
943 let ResourceCycles = [1,1];
944}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000945def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
946 "BLSI(32|64)rm",
947 "BLSMSK(32|64)rm",
948 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000949 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000950
951def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
952 let Latency = 7;
953 let NumMicroOps = 2;
954 let ResourceCycles = [1,1];
955}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000956def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
957 "(V?)PABSDrm",
958 "(V?)PABSWrm",
959 "(V?)PADDBrm",
960 "(V?)PADDDrm",
961 "(V?)PADDQrm",
962 "(V?)PADDSBrm",
963 "(V?)PADDSWrm",
964 "(V?)PADDUSBrm",
965 "(V?)PADDUSWrm",
966 "(V?)PADDWrm",
967 "(V?)PAVGBrm",
968 "(V?)PAVGWrm",
969 "(V?)PCMPEQBrm",
970 "(V?)PCMPEQDrm",
971 "(V?)PCMPEQQrm",
972 "(V?)PCMPEQWrm",
973 "(V?)PCMPGTBrm",
974 "(V?)PCMPGTDrm",
975 "(V?)PCMPGTWrm",
976 "(V?)PMAXSBrm",
977 "(V?)PMAXSDrm",
978 "(V?)PMAXSWrm",
979 "(V?)PMAXUBrm",
980 "(V?)PMAXUDrm",
981 "(V?)PMAXUWrm",
982 "(V?)PMINSBrm",
983 "(V?)PMINSDrm",
984 "(V?)PMINSWrm",
985 "(V?)PMINUBrm",
986 "(V?)PMINUDrm",
987 "(V?)PMINUWrm",
988 "(V?)PSIGNBrm",
989 "(V?)PSIGNDrm",
990 "(V?)PSIGNWrm",
991 "(V?)PSUBBrm",
992 "(V?)PSUBDrm",
993 "(V?)PSUBQrm",
994 "(V?)PSUBSBrm",
995 "(V?)PSUBSWrm",
996 "(V?)PSUBUSBrm",
997 "(V?)PSUBUSWrm",
998 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000999
1000def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1001 let Latency = 8;
1002 let NumMicroOps = 2;
1003 let ResourceCycles = [1,1];
1004}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001005def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1006 "VPABSDYrm",
1007 "VPABSWYrm",
1008 "VPADDBYrm",
1009 "VPADDDYrm",
1010 "VPADDQYrm",
1011 "VPADDSBYrm",
1012 "VPADDSWYrm",
1013 "VPADDUSBYrm",
1014 "VPADDUSWYrm",
1015 "VPADDWYrm",
1016 "VPAVGBYrm",
1017 "VPAVGWYrm",
1018 "VPCMPEQBYrm",
1019 "VPCMPEQDYrm",
1020 "VPCMPEQQYrm",
1021 "VPCMPEQWYrm",
1022 "VPCMPGTBYrm",
1023 "VPCMPGTDYrm",
1024 "VPCMPGTWYrm",
1025 "VPMAXSBYrm",
1026 "VPMAXSDYrm",
1027 "VPMAXSWYrm",
1028 "VPMAXUBYrm",
1029 "VPMAXUDYrm",
1030 "VPMAXUWYrm",
1031 "VPMINSBYrm",
1032 "VPMINSDYrm",
1033 "VPMINSWYrm",
1034 "VPMINUBYrm",
1035 "VPMINUDYrm",
1036 "VPMINUWYrm",
1037 "VPSIGNBYrm",
1038 "VPSIGNDYrm",
1039 "VPSIGNWYrm",
1040 "VPSUBBYrm",
1041 "VPSUBDYrm",
1042 "VPSUBQYrm",
1043 "VPSUBSBYrm",
1044 "VPSUBSWYrm",
1045 "VPSUBUSBYrm",
1046 "VPSUBUSWYrm",
1047 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001048
1049def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001050 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001051 let NumMicroOps = 2;
1052 let ResourceCycles = [1,1];
1053}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001054def: InstRW<[HWWriteResGroup17], (instregex "VINSERTF128rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001055 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001056 "VPBLENDDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001057
Gadi Haber2cf601f2017-12-08 09:48:44 +00001058def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1059 let Latency = 6;
1060 let NumMicroOps = 2;
1061 let ResourceCycles = [1,1];
1062}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001063def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1064 "MMX_PANDirm",
1065 "MMX_PORirm",
1066 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001067
1068def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1069 let Latency = 8;
1070 let NumMicroOps = 2;
1071 let ResourceCycles = [1,1];
1072}
Simon Pilgrim57f2b182018-05-01 12:39:17 +00001073def: InstRW<[HWWriteResGroup17_2], (instregex "VPBLENDDYrmi")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001074
Gadi Haberd76f7b82017-08-28 10:04:16 +00001075def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001076 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001077 let NumMicroOps = 2;
1078 let ResourceCycles = [1,1];
1079}
Craig Topper2d451e72018-03-18 08:38:06 +00001080def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001081def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001082
1083def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001084 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001085 let NumMicroOps = 2;
1086 let ResourceCycles = [1,1];
1087}
1088def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1089
Gadi Haberd76f7b82017-08-28 10:04:16 +00001090def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001091 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001092 let NumMicroOps = 3;
1093 let ResourceCycles = [1,1,1];
1094}
1095def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001096
Gadi Haberd76f7b82017-08-28 10:04:16 +00001097def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001098 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001099 let NumMicroOps = 3;
1100 let ResourceCycles = [1,1,1];
1101}
1102def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1103
1104def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001105 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001106 let NumMicroOps = 3;
1107 let ResourceCycles = [1,1,1];
1108}
1109def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1110
1111def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001112 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001113 let NumMicroOps = 3;
1114 let ResourceCycles = [1,1,1];
1115}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001116def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r,
1117 STOSB, STOSL, STOSQ, STOSW)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001118def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001119 "PUSH64i8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001120
1121def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001122 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001123 let NumMicroOps = 4;
1124 let ResourceCycles = [1,1,1,1];
1125}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001126def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1127 "BTR(16|32|64)mi8",
1128 "BTS(16|32|64)mi8",
1129 "SAR(8|16|32|64)m1",
1130 "SAR(8|16|32|64)mi",
1131 "SHL(8|16|32|64)m1",
1132 "SHL(8|16|32|64)mi",
1133 "SHR(8|16|32|64)m1",
1134 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001135
1136def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001137 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001138 let NumMicroOps = 4;
1139 let ResourceCycles = [1,1,1,1];
1140}
Craig Topperf0d04262018-04-06 16:16:48 +00001141def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1142 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001143
Gadi Haberd76f7b82017-08-28 10:04:16 +00001144def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1145 let Latency = 2;
1146 let NumMicroOps = 2;
1147 let ResourceCycles = [2];
1148}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001149def: InstRW<[HWWriteResGroup28], (instrs FDECSTP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001150
1151def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1152 let Latency = 2;
1153 let NumMicroOps = 2;
1154 let ResourceCycles = [2];
1155}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001156def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1157 "ROL(8|16|32|64)ri",
1158 "ROR(8|16|32|64)r1",
1159 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001160
1161def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1162 let Latency = 2;
1163 let NumMicroOps = 2;
1164 let ResourceCycles = [2];
1165}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001166def: InstRW<[HWWriteResGroup30], (instrs LFENCE,
1167 MFENCE,
1168 WAIT,
1169 XGETBV)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001170
1171def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1172 let Latency = 2;
1173 let NumMicroOps = 2;
1174 let ResourceCycles = [1,1];
1175}
Simon Pilgrimf7d2a932018-04-24 13:21:41 +00001176def: InstRW<[HWWriteResGroup31], (instregex "VCVTPH2PSYrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001177 "VCVTPH2PSrr",
1178 "(V?)CVTPS2PDrr",
1179 "(V?)CVTSS2SDrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001180 "(V?)PSLLDrr",
1181 "(V?)PSLLQrr",
1182 "(V?)PSLLWrr",
1183 "(V?)PSRADrr",
1184 "(V?)PSRAWrr",
1185 "(V?)PSRLDrr",
1186 "(V?)PSRLQrr",
1187 "(V?)PSRLWrr",
1188 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001189
1190def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1191 let Latency = 2;
1192 let NumMicroOps = 2;
1193 let ResourceCycles = [1,1];
1194}
1195def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1196
1197def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1198 let Latency = 2;
1199 let NumMicroOps = 2;
1200 let ResourceCycles = [1,1];
1201}
1202def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1203
1204def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1205 let Latency = 2;
1206 let NumMicroOps = 2;
1207 let ResourceCycles = [1,1];
1208}
Craig Topper498875f2018-04-04 17:54:19 +00001209def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1210
1211def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1212 let Latency = 1;
1213 let NumMicroOps = 1;
1214 let ResourceCycles = [1];
1215}
1216def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001217
1218def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1219 let Latency = 2;
1220 let NumMicroOps = 2;
1221 let ResourceCycles = [1,1];
1222}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001223def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1224def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1225 "ADC(8|16|32|64)rr",
1226 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001227 "SBB(8|16|32|64)ri",
1228 "SBB(8|16|32|64)rr",
1229 "SBB(8|16|32|64)i",
1230 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001231
1232def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001233 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001234 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001235 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001236}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001237def: InstRW<[HWWriteResGroup36], (instregex "VMASKMOVPDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001238 "VMASKMOVPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001239 "VPMASKMOVDrm",
1240 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001241
Gadi Haber2cf601f2017-12-08 09:48:44 +00001242def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1243 let Latency = 9;
1244 let NumMicroOps = 3;
1245 let ResourceCycles = [2,1];
1246}
Simon Pilgrim8a937e02018-04-27 18:19:48 +00001247def: InstRW<[HWWriteResGroup36_1], (instregex "VMASKMOVPDYrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001248 "VMASKMOVPSYrm",
1249 "VPBLENDVBYrm",
1250 "VPMASKMOVDYrm",
1251 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001252
1253def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1254 let Latency = 7;
1255 let NumMicroOps = 3;
1256 let ResourceCycles = [2,1];
1257}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001258def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1259 "MMX_PACKSSWBirm",
1260 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001261
Gadi Haberd76f7b82017-08-28 10:04:16 +00001262def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001263 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001264 let NumMicroOps = 3;
1265 let ResourceCycles = [1,2];
1266}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001267def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1268 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001269
1270def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001271 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001272 let NumMicroOps = 3;
1273 let ResourceCycles = [1,1,1];
1274}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001275def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1276 "(V?)PSLLQrm",
1277 "(V?)PSLLWrm",
1278 "(V?)PSRADrm",
1279 "(V?)PSRAWrm",
1280 "(V?)PSRLDrm",
1281 "(V?)PSRLQrm",
1282 "(V?)PSRLWrm",
1283 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001284
1285def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001286 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001287 let NumMicroOps = 3;
1288 let ResourceCycles = [1,1,1];
1289}
1290def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1291
Gadi Haberd76f7b82017-08-28 10:04:16 +00001292def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001293 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001294 let NumMicroOps = 3;
1295 let ResourceCycles = [1,1,1];
1296}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001297def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1298 "RETL",
1299 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001300
Gadi Haberd76f7b82017-08-28 10:04:16 +00001301def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001302 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001303 let NumMicroOps = 3;
1304 let ResourceCycles = [1,1,1];
1305}
Craig Topperc50570f2018-04-06 17:12:18 +00001306def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1307 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001308
1309def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001310 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001311 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001312 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001313}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001314def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001315
Gadi Haberd76f7b82017-08-28 10:04:16 +00001316def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001317 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001318 let NumMicroOps = 4;
1319 let ResourceCycles = [1,1,1,1];
1320}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001321def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1322 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001323
1324def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001325 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001326 let NumMicroOps = 5;
1327 let ResourceCycles = [1,1,1,2];
1328}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001329def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1330 "ROL(8|16|32|64)mi",
1331 "ROR(8|16|32|64)m1",
1332 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001333
1334def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001335 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001336 let NumMicroOps = 5;
1337 let ResourceCycles = [1,1,1,2];
1338}
Craig Topper13a16502018-03-19 00:56:09 +00001339def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001340
1341def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001342 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001343 let NumMicroOps = 5;
1344 let ResourceCycles = [1,1,1,1,1];
1345}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001346def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1347 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001348
Gadi Haberd76f7b82017-08-28 10:04:16 +00001349def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1350 let Latency = 3;
1351 let NumMicroOps = 1;
1352 let ResourceCycles = [1];
1353}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +00001354def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001355 "PDEP(32|64)rr",
1356 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001357 "SHLD(16|32|64)rri8",
1358 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +00001359 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001360
Clement Courbet327fac42018-03-07 08:14:02 +00001361def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001362 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001363 let NumMicroOps = 2;
1364 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001365}
Clement Courbet327fac42018-03-07 08:14:02 +00001366def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001367
1368def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1369 let Latency = 3;
1370 let NumMicroOps = 1;
1371 let ResourceCycles = [1];
1372}
Simon Pilgrim825ead92018-04-21 20:45:12 +00001373def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTBrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001374 "VPBROADCASTWrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001375 "VPMOVSXBDYrr",
1376 "VPMOVSXBQYrr",
1377 "VPMOVSXBWYrr",
1378 "VPMOVSXDQYrr",
1379 "VPMOVSXWDYrr",
1380 "VPMOVSXWQYrr",
1381 "VPMOVZXBDYrr",
1382 "VPMOVZXBQYrr",
1383 "VPMOVZXBWYrr",
1384 "VPMOVZXDQYrr",
1385 "VPMOVZXWDYrr",
1386 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001387
1388def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001389 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001390 let NumMicroOps = 2;
1391 let ResourceCycles = [1,1];
1392}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001393def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1394 "(V?)ADDPSrm",
1395 "(V?)ADDSUBPDrm",
1396 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001397 "(V?)CVTPS2DQrm",
1398 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001399 "(V?)SUBPDrm",
1400 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001401
Gadi Haber2cf601f2017-12-08 09:48:44 +00001402def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1403 let Latency = 10;
1404 let NumMicroOps = 2;
1405 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001406}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001407def: InstRW<[HWWriteResGroup52_1], (instregex "(ADD|SUB|SUBR)_F(32|64)m",
1408 "ILD_F(16|32|64)m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001409 "VCVTDQ2PSYrm",
1410 "VCVTPS2DQYrm",
Simon Pilgrimc546f942018-05-01 16:50:16 +00001411 "VCVTTPS2DQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001412
1413def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001414 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001415 let NumMicroOps = 2;
1416 let ResourceCycles = [1,1];
1417}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001418def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1419 "VPERM2I128rm",
1420 "VPERMDYrm",
1421 "VPERMPDYmi",
1422 "VPERMPSYrm",
1423 "VPERMQYmi",
1424 "VPMOVZXBDYrm",
1425 "VPMOVZXBQYrm",
1426 "VPMOVZXBWYrm",
1427 "VPMOVZXDQYrm",
1428 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001429
Gadi Haber2cf601f2017-12-08 09:48:44 +00001430def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1431 let Latency = 9;
1432 let NumMicroOps = 2;
1433 let ResourceCycles = [1,1];
1434}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001435def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1436 "VPMOVSXDQYrm",
1437 "VPMOVSXWDYrm",
1438 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001439
Gadi Haberd76f7b82017-08-28 10:04:16 +00001440def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +00001441 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001442 let NumMicroOps = 3;
1443 let ResourceCycles = [3];
1444}
Craig Topperb5f26592018-04-19 18:00:17 +00001445def: InstRW<[HWWriteResGroup54], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
1446 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
1447 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001448
1449def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1450 let Latency = 3;
1451 let NumMicroOps = 3;
1452 let ResourceCycles = [2,1];
1453}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001454def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1455 "VPSRAVD(Y?)rr",
1456 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001457
Gadi Haberd76f7b82017-08-28 10:04:16 +00001458def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1459 let Latency = 3;
1460 let NumMicroOps = 3;
1461 let ResourceCycles = [2,1];
1462}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001463def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1464 "MMX_PACKSSWBirr",
1465 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001466
1467def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1468 let Latency = 3;
1469 let NumMicroOps = 3;
1470 let ResourceCycles = [1,2];
1471}
1472def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1473
1474def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1475 let Latency = 3;
1476 let NumMicroOps = 3;
1477 let ResourceCycles = [1,2];
1478}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001479def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1480 "RCL(8|16|32|64)r1",
1481 "RCL(8|16|32|64)ri",
1482 "RCR(8|16|32|64)r1",
1483 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001484
1485def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1486 let Latency = 3;
1487 let NumMicroOps = 3;
1488 let ResourceCycles = [2,1];
1489}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001490def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1491 "ROR(8|16|32|64)rCL",
1492 "SAR(8|16|32|64)rCL",
1493 "SHL(8|16|32|64)rCL",
1494 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001495
1496def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001497 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001498 let NumMicroOps = 3;
1499 let ResourceCycles = [1,1,1];
1500}
1501def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1502
1503def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001504 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001505 let NumMicroOps = 3;
1506 let ResourceCycles = [1,1,1];
1507}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001508def: InstRW<[HWWriteResGroup62], (instregex "IST(T?)_FP(16|32|64)m",
1509 "IST_F(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001510
1511def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001512 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001513 let NumMicroOps = 4;
1514 let ResourceCycles = [2,1,1];
1515}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001516def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1517 "VPSRAVDYrm",
1518 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001519
1520def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1521 let Latency = 9;
1522 let NumMicroOps = 4;
1523 let ResourceCycles = [2,1,1];
1524}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001525def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1526 "VPSRAVDrm",
1527 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001528
1529def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001530 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001531 let NumMicroOps = 4;
1532 let ResourceCycles = [2,1,1];
1533}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001534def: InstRW<[HWWriteResGroup64], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001535
1536def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1537 let Latency = 10;
1538 let NumMicroOps = 4;
1539 let ResourceCycles = [2,1,1];
1540}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001541def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1542 "VPHADDSWYrm",
1543 "VPHADDWYrm",
1544 "VPHSUBDYrm",
1545 "VPHSUBSWYrm",
1546 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001547
Gadi Haberd76f7b82017-08-28 10:04:16 +00001548def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001549 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001550 let NumMicroOps = 4;
1551 let ResourceCycles = [1,1,2];
1552}
Craig Topperf4cd9082018-01-19 05:47:32 +00001553def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001554
1555def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001556 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001557 let NumMicroOps = 5;
1558 let ResourceCycles = [1,1,1,2];
1559}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001560def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
1561 "RCL(8|16|32|64)mi",
1562 "RCR(8|16|32|64)m1",
1563 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001564
1565def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001566 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001567 let NumMicroOps = 5;
1568 let ResourceCycles = [1,1,2,1];
1569}
Craig Topper13a16502018-03-19 00:56:09 +00001570def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001571
1572def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001573 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001574 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001575 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001576}
Craig Topper9f834812018-04-01 21:54:24 +00001577def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001578
Gadi Haberd76f7b82017-08-28 10:04:16 +00001579def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001580 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001581 let NumMicroOps = 6;
1582 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001583}
Craig Topper9f834812018-04-01 21:54:24 +00001584def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001585 "CMPXCHG(8|16|32|64)rm",
1586 "ROL(8|16|32|64)mCL",
1587 "SAR(8|16|32|64)mCL",
1588 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001589 "SHL(8|16|32|64)mCL",
1590 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001591def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1592 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001593
Gadi Haberd76f7b82017-08-28 10:04:16 +00001594def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
1595 let Latency = 4;
1596 let NumMicroOps = 2;
1597 let ResourceCycles = [1,1];
1598}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001599def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1600 "(V?)CVTSD2SIrr",
1601 "(V?)CVTSS2SI64rr",
1602 "(V?)CVTSS2SIrr",
1603 "(V?)CVTTSD2SI64rr",
1604 "(V?)CVTTSD2SIrr",
1605 "(V?)CVTTSS2SI64rr",
1606 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001607
1608def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
1609 let Latency = 4;
1610 let NumMicroOps = 2;
1611 let ResourceCycles = [1,1];
1612}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001613def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
1614 "VPSLLDYrr",
1615 "VPSLLQYrr",
1616 "VPSLLWYrr",
1617 "VPSRADYrr",
1618 "VPSRAWYrr",
1619 "VPSRLDYrr",
1620 "VPSRLQYrr",
1621 "VPSRLWYrr",
1622 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001623
1624def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
1625 let Latency = 4;
1626 let NumMicroOps = 2;
1627 let ResourceCycles = [1,1];
1628}
1629def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
1630
1631def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
1632 let Latency = 4;
1633 let NumMicroOps = 2;
1634 let ResourceCycles = [1,1];
1635}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001636def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
1637 "MMX_CVTPI2PDirr",
1638 "MMX_CVTPS2PIirr",
1639 "MMX_CVTTPD2PIirr",
1640 "MMX_CVTTPS2PIirr",
1641 "(V?)CVTDQ2PDrr",
1642 "(V?)CVTPD2DQrr",
1643 "(V?)CVTPD2PSrr",
1644 "VCVTPS2PHrr",
1645 "(V?)CVTSD2SSrr",
1646 "(V?)CVTSI642SDrr",
1647 "(V?)CVTSI2SDrr",
1648 "(V?)CVTSI2SSrr",
1649 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001650
1651def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
1652 let Latency = 4;
1653 let NumMicroOps = 2;
1654 let ResourceCycles = [1,1];
1655}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001656def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001657
Craig Topperf846e2d2018-04-19 05:34:05 +00001658def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001659 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001660 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001661 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001662}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001663def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001664
Gadi Haberd76f7b82017-08-28 10:04:16 +00001665def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001666 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001667 let NumMicroOps = 3;
1668 let ResourceCycles = [2,1];
1669}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001670def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
1671 "FICOM32m",
1672 "FICOMP16m",
1673 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001674
1675def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001676 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001677 let NumMicroOps = 3;
1678 let ResourceCycles = [1,1,1];
1679}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001680def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
1681 "(V?)CVTSD2SIrm",
1682 "(V?)CVTSS2SI64rm",
1683 "(V?)CVTSS2SIrm",
1684 "(V?)CVTTSD2SI64rm",
1685 "(V?)CVTTSD2SIrm",
1686 "VCVTTSS2SI64rm",
1687 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001688
1689def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001690 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001691 let NumMicroOps = 3;
1692 let ResourceCycles = [1,1,1];
1693}
1694def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001695
1696def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1697 let Latency = 11;
1698 let NumMicroOps = 3;
1699 let ResourceCycles = [1,1,1];
1700}
1701def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001702
1703def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001704 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001705 let NumMicroOps = 3;
1706 let ResourceCycles = [1,1,1];
1707}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001708def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
1709 "CVTPD2PSrm",
1710 "CVTTPD2DQrm",
1711 "MMX_CVTPD2PIirm",
1712 "MMX_CVTTPD2PIirm",
1713 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001714
1715def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
1716 let Latency = 9;
1717 let NumMicroOps = 3;
1718 let ResourceCycles = [1,1,1];
1719}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001720def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
1721 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001722
1723def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001724 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001725 let NumMicroOps = 3;
1726 let ResourceCycles = [1,1,1];
1727}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001728def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001729
1730def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001731 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001732 let NumMicroOps = 3;
1733 let ResourceCycles = [1,1,1];
1734}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001735def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
1736 "VPBROADCASTBrm",
1737 "VPBROADCASTWYrm",
1738 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001739
1740def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
1741 let Latency = 4;
1742 let NumMicroOps = 4;
1743 let ResourceCycles = [4];
1744}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001745def: InstRW<[HWWriteResGroup81], (instrs FNCLEX)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001746
1747def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
1748 let Latency = 4;
1749 let NumMicroOps = 4;
1750 let ResourceCycles = [1,3];
1751}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00001752def: InstRW<[HWWriteResGroup82], (instrs VZEROUPPER)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001753
1754def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
1755 let Latency = 4;
1756 let NumMicroOps = 4;
1757 let ResourceCycles = [1,1,2];
1758}
1759def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
1760
1761def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001762 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001763 let NumMicroOps = 4;
1764 let ResourceCycles = [1,1,1,1];
1765}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001766def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
1767 "VMASKMOVPS(Y?)mr",
1768 "VPMASKMOVD(Y?)mr",
1769 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001770
Gadi Haberd76f7b82017-08-28 10:04:16 +00001771def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001772 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001773 let NumMicroOps = 4;
1774 let ResourceCycles = [1,1,1,1];
1775}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001776def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
1777 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001778
1779def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001780 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001781 let NumMicroOps = 5;
1782 let ResourceCycles = [1,2,1,1];
1783}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001784def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
1785 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001786
1787def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001788 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001789 let NumMicroOps = 6;
1790 let ResourceCycles = [1,1,4];
1791}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001792def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
1793 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001794
1795def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001796 let Latency = 5;
1797 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001798 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001799}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001800def: InstRW<[HWWriteResGroup89], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001801
Gadi Haberd76f7b82017-08-28 10:04:16 +00001802def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001803 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001804 let NumMicroOps = 1;
1805 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001806}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001807def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
1808 "(V?)MULPS(Y?)rr",
1809 "(V?)MULSDrr",
Simon Pilgrim3c066172018-04-19 11:37:26 +00001810 "(V?)MULSSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001811
Craig Topper8104f262018-04-02 05:33:28 +00001812def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001813 let Latency = 16;
1814 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001815 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001816}
1817def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
1818
Craig Topper8104f262018-04-02 05:33:28 +00001819def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001820 let Latency = 18;
1821 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001822 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00001823}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001824def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001825
1826def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1827 let Latency = 11;
1828 let NumMicroOps = 2;
1829 let ResourceCycles = [1,1];
1830}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001831def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001832 "(V?)PMADDUBSWrm",
1833 "(V?)PMADDWDrm",
1834 "(V?)PMULDQrm",
1835 "(V?)PMULHRSWrm",
1836 "(V?)PMULHUWrm",
1837 "(V?)PMULHWrm",
1838 "(V?)PMULLWrm",
1839 "(V?)PMULUDQrm",
1840 "(V?)PSADBWrm",
1841 "(V?)RCPPSm",
1842 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001843
1844def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
1845 let Latency = 12;
1846 let NumMicroOps = 2;
1847 let ResourceCycles = [1,1];
1848}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001849def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F(32|64)m",
1850 "VPCMPGTQYrm",
1851 "VPMADDUBSWYrm",
1852 "VPMADDWDYrm",
1853 "VPMULDQYrm",
1854 "VPMULHRSWYrm",
1855 "VPMULHUWYrm",
1856 "VPMULHWYrm",
1857 "VPMULLWYrm",
1858 "VPMULUDQYrm",
1859 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001860
Gadi Haberd76f7b82017-08-28 10:04:16 +00001861def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001862 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001863 let NumMicroOps = 2;
1864 let ResourceCycles = [1,1];
1865}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001866def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +00001867 "(V?)MULPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001868
1869def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
1870 let Latency = 12;
1871 let NumMicroOps = 2;
1872 let ResourceCycles = [1,1];
1873}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001874def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
Simon Pilgrimdbd1ae72018-04-25 13:07:58 +00001875 "VMULPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001876
1877def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
1878 let Latency = 10;
1879 let NumMicroOps = 2;
1880 let ResourceCycles = [1,1];
1881}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001882def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
Simon Pilgrim16299272018-04-24 14:47:11 +00001883 "(V?)MULSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001884
1885def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
1886 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001887 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001888 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001889}
Simon Pilgrim44278f62018-04-21 16:20:28 +00001890def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001891
Gadi Haberd76f7b82017-08-28 10:04:16 +00001892def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
1893 let Latency = 5;
1894 let NumMicroOps = 3;
1895 let ResourceCycles = [1,1,1];
1896}
1897def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
1898
1899def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001900 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001901 let NumMicroOps = 3;
1902 let ResourceCycles = [1,1,1];
1903}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001904def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001905
Gadi Haberd76f7b82017-08-28 10:04:16 +00001906def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001907 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001908 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001909 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001910}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001911def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001912
Gadi Haberd76f7b82017-08-28 10:04:16 +00001913def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001914 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001915 let NumMicroOps = 4;
1916 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001917}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001918def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001919
Gadi Haberd76f7b82017-08-28 10:04:16 +00001920def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
1921 let Latency = 5;
1922 let NumMicroOps = 5;
1923 let ResourceCycles = [1,4];
1924}
Simon Pilgrimd5ada492018-04-29 15:33:15 +00001925def: InstRW<[HWWriteResGroup99], (instrs PAUSE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001926
1927def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
1928 let Latency = 5;
1929 let NumMicroOps = 5;
1930 let ResourceCycles = [1,4];
1931}
1932def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
1933
1934def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
1935 let Latency = 5;
1936 let NumMicroOps = 5;
1937 let ResourceCycles = [2,3];
1938}
Craig Topper13a16502018-03-19 00:56:09 +00001939def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001940
1941def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
1942 let Latency = 6;
1943 let NumMicroOps = 2;
1944 let ResourceCycles = [1,1];
1945}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001946def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
1947 "VCVTPD2DQYrr",
1948 "VCVTPD2PSYrr",
1949 "VCVTPS2PHYrr",
1950 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001951
1952def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001953 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001954 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001955 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001956}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00001957def: InstRW<[HWWriteResGroup103], (instregex "(ADD|SUB|SUBR)_FI(16|32)m",
Craig Topper40d3b322018-03-22 21:55:20 +00001958 "VROUNDPDYm",
1959 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001960
Gadi Haber2cf601f2017-12-08 09:48:44 +00001961def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1962 let Latency = 12;
1963 let NumMicroOps = 3;
1964 let ResourceCycles = [2,1];
1965}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001966def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
1967 "(V?)ROUNDPSm",
1968 "(V?)ROUNDSDm",
1969 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001970
Gadi Haberd76f7b82017-08-28 10:04:16 +00001971def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001972 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001973 let NumMicroOps = 3;
1974 let ResourceCycles = [1,1,1];
1975}
1976def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
1977
1978def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
1979 let Latency = 6;
1980 let NumMicroOps = 4;
1981 let ResourceCycles = [1,1,2];
1982}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001983def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
1984 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001985
1986def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001987 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001988 let NumMicroOps = 4;
1989 let ResourceCycles = [1,1,1,1];
1990}
1991def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
1992
1993def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
1994 let Latency = 6;
1995 let NumMicroOps = 4;
1996 let ResourceCycles = [1,1,1,1];
1997}
1998def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
1999
2000def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2001 let Latency = 6;
2002 let NumMicroOps = 6;
2003 let ResourceCycles = [1,5];
2004}
2005def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2006
2007def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002008 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002009 let NumMicroOps = 6;
2010 let ResourceCycles = [1,1,1,1,2];
2011}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002012def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2013 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002014
Gadi Haber2cf601f2017-12-08 09:48:44 +00002015def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2016 let Latency = 14;
2017 let NumMicroOps = 4;
2018 let ResourceCycles = [1,2,1];
2019}
2020def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2021
Gadi Haberd76f7b82017-08-28 10:04:16 +00002022def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2023 let Latency = 7;
2024 let NumMicroOps = 7;
2025 let ResourceCycles = [2,2,1,2];
2026}
Craig Topper2d451e72018-03-18 08:38:06 +00002027def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002028
2029def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002030 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002031 let NumMicroOps = 3;
2032 let ResourceCycles = [1,1,1];
2033}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002034def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002035
2036def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2037 let Latency = 9;
2038 let NumMicroOps = 3;
2039 let ResourceCycles = [1,1,1];
2040}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002041def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002042
2043def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002044 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002045 let NumMicroOps = 4;
2046 let ResourceCycles = [1,1,1,1];
2047}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002048def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002049
Gadi Haber2cf601f2017-12-08 09:48:44 +00002050def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2051 let Latency = 17;
2052 let NumMicroOps = 3;
2053 let ResourceCycles = [2,1];
2054}
2055def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2056
Gadi Haberd76f7b82017-08-28 10:04:16 +00002057def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002058 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002059 let NumMicroOps = 10;
2060 let ResourceCycles = [1,1,1,4,1,2];
2061}
Craig Topper13a16502018-03-19 00:56:09 +00002062def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002063
Craig Topper8104f262018-04-02 05:33:28 +00002064def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002065 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002066 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002067 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002068}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002069def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2070 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002071
Gadi Haberd76f7b82017-08-28 10:04:16 +00002072def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2073 let Latency = 11;
2074 let NumMicroOps = 3;
2075 let ResourceCycles = [2,1];
2076}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002077def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2078 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002079
Gadi Haberd76f7b82017-08-28 10:04:16 +00002080def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002081 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002082 let NumMicroOps = 4;
2083 let ResourceCycles = [2,1,1];
2084}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002085def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2086 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002087
2088def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2089 let Latency = 11;
2090 let NumMicroOps = 7;
2091 let ResourceCycles = [2,2,3];
2092}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002093def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2094 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002095
2096def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2097 let Latency = 11;
2098 let NumMicroOps = 9;
2099 let ResourceCycles = [1,4,1,3];
2100}
2101def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2102
2103def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2104 let Latency = 11;
2105 let NumMicroOps = 11;
2106 let ResourceCycles = [2,9];
2107}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002108def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002109
2110def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002111 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002112 let NumMicroOps = 14;
2113 let ResourceCycles = [1,1,1,4,2,5];
2114}
2115def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2116
Craig Topper8104f262018-04-02 05:33:28 +00002117def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002118 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002119 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002120 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002121}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002122def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2123 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002124
Craig Topper8104f262018-04-02 05:33:28 +00002125def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002126 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002127 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002128 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002129}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002130def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002131
2132def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002133 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002134 let NumMicroOps = 11;
2135 let ResourceCycles = [2,1,1,3,1,3];
2136}
Craig Topper13a16502018-03-19 00:56:09 +00002137def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002138
Craig Topper8104f262018-04-02 05:33:28 +00002139def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002140 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002141 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002142 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002143}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002144def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002145
Gadi Haberd76f7b82017-08-28 10:04:16 +00002146def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2147 let Latency = 14;
2148 let NumMicroOps = 4;
2149 let ResourceCycles = [2,1,1];
2150}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002151def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002152
2153def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002154 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002155 let NumMicroOps = 5;
2156 let ResourceCycles = [2,1,1,1];
2157}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002158def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002159
Gadi Haber2cf601f2017-12-08 09:48:44 +00002160def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2161 let Latency = 21;
2162 let NumMicroOps = 5;
2163 let ResourceCycles = [2,1,1,1];
2164}
2165def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2166
Gadi Haberd76f7b82017-08-28 10:04:16 +00002167def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2168 let Latency = 14;
2169 let NumMicroOps = 10;
2170 let ResourceCycles = [2,3,1,4];
2171}
2172def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2173
2174def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002175 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002176 let NumMicroOps = 15;
2177 let ResourceCycles = [1,14];
2178}
2179def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2180
2181def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002182 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002183 let NumMicroOps = 8;
2184 let ResourceCycles = [1,1,1,1,1,1,2];
2185}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002186def: InstRW<[HWWriteResGroup144], (instrs INSB, INSL, INSW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002187
2188def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2189 let Latency = 16;
2190 let NumMicroOps = 16;
2191 let ResourceCycles = [16];
2192}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002193def: InstRW<[HWWriteResGroup145], (instrs VZEROALL)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002194
2195def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002196 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002197 let NumMicroOps = 19;
2198 let ResourceCycles = [2,1,4,1,1,4,6];
2199}
2200def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2201
2202def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2203 let Latency = 17;
2204 let NumMicroOps = 15;
2205 let ResourceCycles = [2,1,2,4,2,4];
2206}
Simon Pilgrimaef5ca72018-04-27 13:32:42 +00002207def: InstRW<[HWWriteResGroup147], (instrs XCH_F)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002208
Gadi Haberd76f7b82017-08-28 10:04:16 +00002209def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2210 let Latency = 18;
2211 let NumMicroOps = 8;
2212 let ResourceCycles = [1,1,1,5];
2213}
2214def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002215def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002216
Gadi Haberd76f7b82017-08-28 10:04:16 +00002217def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002218 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002219 let NumMicroOps = 19;
2220 let ResourceCycles = [3,1,15];
2221}
Craig Topper391c6f92017-12-10 01:24:08 +00002222def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002223
Gadi Haberd76f7b82017-08-28 10:04:16 +00002224def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2225 let Latency = 20;
2226 let NumMicroOps = 1;
2227 let ResourceCycles = [1];
2228}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002229def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2230 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002231 "DIV_FrST0")>;
2232
2233def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2234 let Latency = 20;
2235 let NumMicroOps = 1;
2236 let ResourceCycles = [1,14];
2237}
2238def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2239 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002240
2241def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002242 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002243 let NumMicroOps = 2;
2244 let ResourceCycles = [1,1];
2245}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002246def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F(32|64)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002247
Craig Topper8104f262018-04-02 05:33:28 +00002248def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002249 let Latency = 26;
2250 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002251 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002252}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002253def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002254
Craig Topper8104f262018-04-02 05:33:28 +00002255def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002256 let Latency = 21;
2257 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002258 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002259}
2260def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2261
Craig Topper8104f262018-04-02 05:33:28 +00002262def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002263 let Latency = 22;
2264 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002265 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002266}
2267def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2268
Craig Topper8104f262018-04-02 05:33:28 +00002269def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002270 let Latency = 25;
2271 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002272 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002273}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002274def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002275
2276def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2277 let Latency = 20;
2278 let NumMicroOps = 10;
2279 let ResourceCycles = [1,2,7];
2280}
2281def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2282
Craig Topper8104f262018-04-02 05:33:28 +00002283def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002284 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002285 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002286 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002287}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002288def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2289 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002290
Craig Topper8104f262018-04-02 05:33:28 +00002291def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002292 let Latency = 21;
2293 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002294 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002295}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002296def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2297 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002298
Craig Topper8104f262018-04-02 05:33:28 +00002299def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002300 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002301 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002302 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002303}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002304def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2305 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002306
2307def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002308 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002309 let NumMicroOps = 3;
2310 let ResourceCycles = [1,1,1];
2311}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002312def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002313
2314def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2315 let Latency = 24;
2316 let NumMicroOps = 1;
2317 let ResourceCycles = [1];
2318}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002319def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2320 "DIVR_FST0r",
2321 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002322
2323def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002324 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002325 let NumMicroOps = 2;
2326 let ResourceCycles = [1,1];
2327}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002328def: InstRW<[HWWriteResGroup163], (instregex "DIV_F(32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002329
2330def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002331 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002332 let NumMicroOps = 27;
2333 let ResourceCycles = [1,5,1,1,19];
2334}
2335def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2336
2337def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002338 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002339 let NumMicroOps = 28;
2340 let ResourceCycles = [1,6,1,1,19];
2341}
Craig Topper2d451e72018-03-18 08:38:06 +00002342def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002343
2344def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002345 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002346 let NumMicroOps = 3;
2347 let ResourceCycles = [1,1,1];
2348}
Simon Pilgrim8ee7d012018-04-27 21:14:19 +00002349def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI(16|32)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002350
Gadi Haberd76f7b82017-08-28 10:04:16 +00002351def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002352 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002353 let NumMicroOps = 23;
2354 let ResourceCycles = [1,5,3,4,10];
2355}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002356def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2357 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002358
2359def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002360 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002361 let NumMicroOps = 23;
2362 let ResourceCycles = [1,5,2,1,4,10];
2363}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002364def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2365 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002366
2367def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2368 let Latency = 31;
2369 let NumMicroOps = 31;
2370 let ResourceCycles = [8,1,21,1];
2371}
2372def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2373
Craig Topper8104f262018-04-02 05:33:28 +00002374def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002375 let Latency = 35;
2376 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002377 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002378}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002379def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2380 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002381
Craig Topper8104f262018-04-02 05:33:28 +00002382def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002383 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002384 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002385 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002386}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002387def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2388 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002389
2390def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002391 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002392 let NumMicroOps = 18;
2393 let ResourceCycles = [1,1,2,3,1,1,1,8];
2394}
2395def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2396
2397def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2398 let Latency = 42;
2399 let NumMicroOps = 22;
2400 let ResourceCycles = [2,20];
2401}
Craig Topper2d451e72018-03-18 08:38:06 +00002402def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002403
2404def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002405 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002406 let NumMicroOps = 64;
2407 let ResourceCycles = [2,2,8,1,10,2,39];
2408}
2409def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002410
2411def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002412 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002413 let NumMicroOps = 88;
2414 let ResourceCycles = [4,4,31,1,2,1,45];
2415}
Craig Topper2d451e72018-03-18 08:38:06 +00002416def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002417
2418def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002419 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002420 let NumMicroOps = 90;
2421 let ResourceCycles = [4,2,33,1,2,1,47];
2422}
Craig Topper2d451e72018-03-18 08:38:06 +00002423def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002424
2425def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2426 let Latency = 75;
2427 let NumMicroOps = 15;
2428 let ResourceCycles = [6,3,6];
2429}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002430def: InstRW<[HWWriteResGroup180], (instrs FNINIT)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002431
2432def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2433 let Latency = 98;
2434 let NumMicroOps = 32;
2435 let ResourceCycles = [7,7,3,3,1,11];
2436}
2437def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2438
2439def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2440 let Latency = 112;
2441 let NumMicroOps = 66;
2442 let ResourceCycles = [4,2,4,8,14,34];
2443}
2444def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2445
2446def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002447 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002448 let NumMicroOps = 100;
2449 let ResourceCycles = [9,9,11,8,1,11,21,30];
2450}
2451def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00002452
Gadi Haber2cf601f2017-12-08 09:48:44 +00002453def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
2454 let Latency = 26;
2455 let NumMicroOps = 12;
2456 let ResourceCycles = [2,2,1,3,2,2];
2457}
Craig Topper17a31182017-12-16 18:35:29 +00002458def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
2459 VPGATHERDQrm,
2460 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002461
2462def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2463 let Latency = 24;
2464 let NumMicroOps = 22;
2465 let ResourceCycles = [5,3,4,1,5,4];
2466}
Craig Topper17a31182017-12-16 18:35:29 +00002467def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
2468 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002469
2470def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2471 let Latency = 28;
2472 let NumMicroOps = 22;
2473 let ResourceCycles = [5,3,4,1,5,4];
2474}
Craig Topper17a31182017-12-16 18:35:29 +00002475def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002476
2477def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2478 let Latency = 25;
2479 let NumMicroOps = 22;
2480 let ResourceCycles = [5,3,4,1,5,4];
2481}
Craig Topper17a31182017-12-16 18:35:29 +00002482def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002483
2484def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2485 let Latency = 27;
2486 let NumMicroOps = 20;
2487 let ResourceCycles = [3,3,4,1,5,4];
2488}
Craig Topper17a31182017-12-16 18:35:29 +00002489def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
2490 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002491
2492def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2493 let Latency = 27;
2494 let NumMicroOps = 34;
2495 let ResourceCycles = [5,3,8,1,9,8];
2496}
Craig Topper17a31182017-12-16 18:35:29 +00002497def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
2498 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002499
2500def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2501 let Latency = 23;
2502 let NumMicroOps = 14;
2503 let ResourceCycles = [3,3,2,1,3,2];
2504}
Craig Topper17a31182017-12-16 18:35:29 +00002505def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
2506 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002507
2508def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2509 let Latency = 28;
2510 let NumMicroOps = 15;
2511 let ResourceCycles = [3,3,2,1,4,2];
2512}
Craig Topper17a31182017-12-16 18:35:29 +00002513def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002514
2515def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2516 let Latency = 25;
2517 let NumMicroOps = 15;
2518 let ResourceCycles = [3,3,2,1,4,2];
2519}
Craig Topper17a31182017-12-16 18:35:29 +00002520def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
2521 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002522
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00002523} // SchedModel