blob: 5ab18d344d688f0c0cca30b5db2e867d94f27605 [file] [log] [blame]
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00001//=- X86SchedHaswell.td - X86 Haswell Scheduling -------------*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the machine model for Haswell to support instruction
11// scheduling and other instruction cost heuristics.
12//
13//===----------------------------------------------------------------------===//
14
15def HaswellModel : SchedMachineModel {
16 // All x86 instructions are modeled as a single micro-op, and HW can decode 4
17 // instructions per cycle.
18 let IssueWidth = 4;
Andrew Trick18dc3da2013-06-15 04:50:02 +000019 let MicroOpBufferSize = 192; // Based on the reorder buffer.
Gadi Haber2cf601f2017-12-08 09:48:44 +000020 let LoadLatency = 5;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000021 let MispredictPenalty = 16;
Andrew Trickb6854d82013-09-25 18:14:12 +000022
Hal Finkel6532c202014-05-08 09:14:44 +000023 // Based on the LSD (loop-stream detector) queue size and benchmarking data.
24 let LoopMicroOpBufferSize = 50;
25
Simon Pilgrim2b5967f2018-03-24 18:36:01 +000026 // This flag is set to allow the scheduler to assign a default model to
Gadi Haberd76f7b82017-08-28 10:04:16 +000027 // unrecognized opcodes.
Andrew Trickb6854d82013-09-25 18:14:12 +000028 let CompleteModel = 0;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000029}
30
31let SchedModel = HaswellModel in {
32
33// Haswell can issue micro-ops to 8 different ports in one cycle.
34
Quentin Colombet9e16c8a2014-01-29 18:26:59 +000035// Ports 0, 1, 5, and 6 handle all computation.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000036// Port 4 gets the data half of stores. Store data can be available later than
37// the store address, but since we don't model the latency of stores, we can
38// ignore that.
39// Ports 2 and 3 are identical. They handle loads and the address half of
40// stores. Port 7 can handle address calculations.
41def HWPort0 : ProcResource<1>;
42def HWPort1 : ProcResource<1>;
43def HWPort2 : ProcResource<1>;
44def HWPort3 : ProcResource<1>;
45def HWPort4 : ProcResource<1>;
46def HWPort5 : ProcResource<1>;
47def HWPort6 : ProcResource<1>;
48def HWPort7 : ProcResource<1>;
49
50// Many micro-ops are capable of issuing on multiple ports.
Quentin Colombet0bc907e2014-08-18 17:55:26 +000051def HWPort01 : ProcResGroup<[HWPort0, HWPort1]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000052def HWPort23 : ProcResGroup<[HWPort2, HWPort3]>;
53def HWPort237 : ProcResGroup<[HWPort2, HWPort3, HWPort7]>;
Quentin Colombetf68e0942014-08-18 17:55:36 +000054def HWPort04 : ProcResGroup<[HWPort0, HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000055def HWPort05 : ProcResGroup<[HWPort0, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000056def HWPort06 : ProcResGroup<[HWPort0, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000057def HWPort15 : ProcResGroup<[HWPort1, HWPort5]>;
Quentin Colombetca498512014-02-24 19:33:51 +000058def HWPort16 : ProcResGroup<[HWPort1, HWPort6]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000059def HWPort56 : ProcResGroup<[HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000060def HWPort015 : ProcResGroup<[HWPort0, HWPort1, HWPort5]>;
Quentin Colombet7e939fb42014-08-18 17:56:01 +000061def HWPort056 : ProcResGroup<[HWPort0, HWPort5, HWPort6]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000062def HWPort0156: ProcResGroup<[HWPort0, HWPort1, HWPort5, HWPort6]>;
63
Andrew Trick40c4f382013-06-15 04:50:06 +000064// 60 Entry Unified Scheduler
65def HWPortAny : ProcResGroup<[HWPort0, HWPort1, HWPort2, HWPort3, HWPort4,
66 HWPort5, HWPort6, HWPort7]> {
67 let BufferSize=60;
68}
69
Andrew Tricke1d88cf2013-04-02 01:58:47 +000070// Integer division issued on port 0.
71def HWDivider : ProcResource<1>;
Craig Topper8104f262018-04-02 05:33:28 +000072// FP division and sqrt on port 0.
73def HWFPDivider : ProcResource<1>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000074
Gadi Haber2cf601f2017-12-08 09:48:44 +000075// Loads are 5 cycles, so ReadAfterLd registers needn't be available until 5
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000076// cycles after the memory operand.
Gadi Haber2cf601f2017-12-08 09:48:44 +000077def : ReadAdvance<ReadAfterLd, 5>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000078
79// Many SchedWrites are defined in pairs with and without a folded load.
80// Instructions with folded loads are usually micro-fused, so they only appear
81// as two micro-ops when queued in the reservation station.
82// This multiclass defines the resource usage for variants with and without
83// folded loads.
84multiclass HWWriteResPair<X86FoldableSchedWrite SchedRW,
Simon Pilgrim30c38c32018-03-19 14:46:07 +000085 list<ProcResourceKind> ExePorts,
Simon Pilgrime3547af2018-03-25 10:21:19 +000086 int Lat, list<int> Res = [1], int UOps = 1,
87 int LoadLat = 5> {
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000088 // Register variant is using a single cycle on ExePort.
Simon Pilgrim30c38c32018-03-19 14:46:07 +000089 def : WriteRes<SchedRW, ExePorts> {
90 let Latency = Lat;
91 let ResourceCycles = Res;
92 let NumMicroOps = UOps;
93 }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +000094
Simon Pilgrime3547af2018-03-25 10:21:19 +000095 // Memory variant also uses a cycle on port 2/3 and adds LoadLat cycles to
96 // the latency (default = 5).
Simon Pilgrim30c38c32018-03-19 14:46:07 +000097 def : WriteRes<SchedRW.Folded, !listconcat([HWPort23], ExePorts)> {
Simon Pilgrime3547af2018-03-25 10:21:19 +000098 let Latency = !add(Lat, LoadLat);
Simon Pilgrim30c38c32018-03-19 14:46:07 +000099 let ResourceCycles = !listconcat([1], Res);
Simon Pilgrime3547af2018-03-25 10:21:19 +0000100 let NumMicroOps = !add(UOps, 1);
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000101 }
102}
103
Craig Topperf131b602018-04-06 16:16:46 +0000104// A folded store needs a cycle on port 4 for the store data, and an extra port
105// 2/3/7 cycle to recompute the address.
106def : WriteRes<WriteRMW, [HWPort237,HWPort4]>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000107
Quentin Colombet9e16c8a2014-01-29 18:26:59 +0000108// Store_addr on 237.
109// Store_data on 4.
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000110def : WriteRes<WriteStore, [HWPort237, HWPort4]>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000111def : WriteRes<WriteLoad, [HWPort23]> { let Latency = 5; }
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000112def : WriteRes<WriteMove, [HWPort0156]>;
113def : WriteRes<WriteZero, []>;
114
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000115defm : HWWriteResPair<WriteALU, [HWPort0156], 1>;
116defm : HWWriteResPair<WriteIMul, [HWPort1], 3>;
Andrew Trick7201f4f2013-06-21 18:33:04 +0000117def : WriteRes<WriteIMulH, []> { let Latency = 3; }
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000118defm : HWWriteResPair<WriteShift, [HWPort06], 1>;
119defm : HWWriteResPair<WriteJump, [HWPort06], 1>;
Simon Pilgrim28e7bcb2018-03-26 21:06:14 +0000120defm : HWWriteResPair<WriteCRC32, [HWPort1], 3>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000121
Craig Topperb7baa352018-04-08 17:53:18 +0000122defm : HWWriteResPair<WriteCMOV, [HWPort06,HWPort0156], 2, [1,1], 2>; // Conditional move.
123def : WriteRes<WriteSETCC, [HWPort06]>; // Setcc.
124def : WriteRes<WriteSETCCStore, [HWPort06,HWPort4,HWPort237]> {
125 let Latency = 2;
126 let NumMicroOps = 3;
127}
128
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000129// This is for simple LEAs with one or two input operands.
130// The complex ones can only execute on port 1, and they require two cycles on
131// the port to read all inputs. We don't model that.
132def : WriteRes<WriteLEA, [HWPort15]>;
133
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000134// Bit counts.
135defm : HWWriteResPair<WriteBitScan, [HWPort1], 3>;
136defm : HWWriteResPair<WriteLZCNT, [HWPort1], 3>;
137defm : HWWriteResPair<WriteTZCNT, [HWPort1], 3>;
138defm : HWWriteResPair<WritePOPCNT, [HWPort1], 3>;
139
Craig Topper89310f52018-03-29 20:41:39 +0000140// BMI1 BEXTR, BMI2 BZHI
141defm : HWWriteResPair<WriteBEXTR, [HWPort06,HWPort15], 2, [1,1], 2>;
142defm : HWWriteResPair<WriteBZHI, [HWPort15], 1>;
143
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000144// This is quite rough, latency depends on the dividend.
Simon Pilgrim68a8fbc2018-03-25 20:16:53 +0000145defm : HWWriteResPair<WriteIDiv, [HWPort0, HWDivider], 25, [1,10], 1, 4>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000146// Scalar and vector floating point.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000147def : WriteRes<WriteFStore, [HWPort237, HWPort4]>;
148def : WriteRes<WriteFLoad, [HWPort23]> { let Latency = 5; }
149def : WriteRes<WriteFMove, [HWPort5]>;
150
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000151defm : HWWriteResPair<WriteFAdd, [HWPort1], 3>;
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000152defm : HWWriteResPair<WriteFCmp, [HWPort1], 3, [1], 1, 6>;
153defm : HWWriteResPair<WriteFCom, [HWPort1], 3>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000154defm : HWWriteResPair<WriteFMul, [HWPort0], 5>;
155defm : HWWriteResPair<WriteFDiv, [HWPort0], 12>; // 10-14 cycles.
156defm : HWWriteResPair<WriteFRcp, [HWPort0], 5>;
157defm : HWWriteResPair<WriteFRsqrt, [HWPort0], 5>;
158defm : HWWriteResPair<WriteFSqrt, [HWPort0], 15>;
159defm : HWWriteResPair<WriteCvtF2I, [HWPort1], 3>;
160defm : HWWriteResPair<WriteCvtI2F, [HWPort1], 4>;
161defm : HWWriteResPair<WriteCvtF2F, [HWPort1], 3>;
162defm : HWWriteResPair<WriteFMA, [HWPort01], 5>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000163defm : HWWriteResPair<WriteFSign, [HWPort0], 1>;
164defm : HWWriteResPair<WriteFLogic, [HWPort5], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000165defm : HWWriteResPair<WriteFShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000166defm : HWWriteResPair<WriteFVarShuffle, [HWPort5], 1>;
Simon Pilgrim06e16542018-04-22 18:35:53 +0000167defm : HWWriteResPair<WriteFBlend, [HWPort015], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000168defm : HWWriteResPair<WriteFShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000169defm : HWWriteResPair<WriteFVarShuffle256, [HWPort5], 3>;
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000170defm : HWWriteResPair<WriteFVarBlend, [HWPort5], 2, [2], 2, 6>;
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000171
172// Vector integer operations.
Simon Pilgrimfb7aa572018-03-15 14:45:30 +0000173def : WriteRes<WriteVecStore, [HWPort237, HWPort4]>;
174def : WriteRes<WriteVecLoad, [HWPort23]> { let Latency = 5; }
175def : WriteRes<WriteVecMove, [HWPort015]>;
176
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000177defm : HWWriteResPair<WriteVecShift, [HWPort0], 1>;
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000178defm : HWWriteResPair<WriteVecLogic, [HWPort015], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000179defm : HWWriteResPair<WriteVecALU, [HWPort15], 1>;
180defm : HWWriteResPair<WriteVecIMul, [HWPort0], 5>;
Craig Topper13a0f832018-03-31 04:54:32 +0000181defm : HWWriteResPair<WritePMULLD, [HWPort0], 10, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000182defm : HWWriteResPair<WriteShuffle, [HWPort5], 1>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000183defm : HWWriteResPair<WriteVarShuffle, [HWPort5], 1>;
Simon Pilgrim06e16542018-04-22 18:35:53 +0000184defm : HWWriteResPair<WriteBlend, [HWPort5], 1, [1], 1, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000185defm : HWWriteResPair<WriteShuffle256, [HWPort5], 3>;
Simon Pilgrim89c8a102018-04-11 13:49:19 +0000186defm : HWWriteResPair<WriteVarShuffle256, [HWPort5], 3>;
Simon Pilgrim96855ec2018-04-22 14:43:12 +0000187defm : HWWriteResPair<WriteVarBlend, [HWPort5], 2, [2], 2, 6>;
Simon Pilgrim30c38c32018-03-19 14:46:07 +0000188defm : HWWriteResPair<WriteVarVecShift, [HWPort0, HWPort5], 2, [2, 1]>;
Simon Pilgrima41ae2f2018-04-22 10:39:16 +0000189defm : HWWriteResPair<WriteMPSAD, [HWPort0, HWPort5], 7, [1, 2], 3, 6>;
Craig Toppere56a2fc2018-04-17 19:35:19 +0000190defm : HWWriteResPair<WritePSADBW, [HWPort0], 5>;
Quentin Colombetca498512014-02-24 19:33:51 +0000191
192// String instructions.
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000193
Quentin Colombetca498512014-02-24 19:33:51 +0000194// Packed Compare Implicit Length Strings, Return Mask
195def : WriteRes<WritePCmpIStrM, [HWPort0]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000196 let Latency = 11;
197 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000198 let ResourceCycles = [3];
199}
200def : WriteRes<WritePCmpIStrMLd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000201 let Latency = 17;
202 let NumMicroOps = 4;
203 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000204}
205
206// Packed Compare Explicit Length Strings, Return Mask
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000207def : WriteRes<WritePCmpEStrM, [HWPort0, HWPort5, HWPort015, HWPort0156]> {
208 let Latency = 19;
209 let NumMicroOps = 9;
210 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000211}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000212def : WriteRes<WritePCmpEStrMLd, [HWPort0, HWPort5, HWPort23, HWPort015, HWPort0156]> {
213 let Latency = 25;
214 let NumMicroOps = 10;
215 let ResourceCycles = [4,3,1,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000216}
217
218// Packed Compare Implicit Length Strings, Return Index
219def : WriteRes<WritePCmpIStrI, [HWPort0]> {
220 let Latency = 11;
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000221 let NumMicroOps = 3;
Quentin Colombetca498512014-02-24 19:33:51 +0000222 let ResourceCycles = [3];
223}
224def : WriteRes<WritePCmpIStrILd, [HWPort0, HWPort23]> {
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000225 let Latency = 17;
226 let NumMicroOps = 4;
227 let ResourceCycles = [3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000228}
229
230// Packed Compare Explicit Length Strings, Return Index
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000231def : WriteRes<WritePCmpEStrI, [HWPort0, HWPort5, HWPort0156]> {
232 let Latency = 18;
233 let NumMicroOps = 8;
234 let ResourceCycles = [4,3,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000235}
Simon Pilgrim53b2c332018-03-22 14:56:18 +0000236def : WriteRes<WritePCmpEStrILd, [HWPort0, HWPort5, HWPort23, HWPort0156]> {
237 let Latency = 24;
238 let NumMicroOps = 9;
239 let ResourceCycles = [4,3,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000240}
241
Simon Pilgrima2f26782018-03-27 20:38:54 +0000242// MOVMSK Instructions.
243def : WriteRes<WriteFMOVMSK, [HWPort0]> { let Latency = 3; }
244def : WriteRes<WriteVecMOVMSK, [HWPort0]> { let Latency = 3; }
245def : WriteRes<WriteMMXMOVMSK, [HWPort0]> { let Latency = 1; }
246
Quentin Colombetca498512014-02-24 19:33:51 +0000247// AES Instructions.
248def : WriteRes<WriteAESDecEnc, [HWPort5]> {
249 let Latency = 7;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000250 let NumMicroOps = 1;
Quentin Colombetca498512014-02-24 19:33:51 +0000251 let ResourceCycles = [1];
252}
253def : WriteRes<WriteAESDecEncLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000254 let Latency = 13;
255 let NumMicroOps = 2;
256 let ResourceCycles = [1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000257}
258
259def : WriteRes<WriteAESIMC, [HWPort5]> {
260 let Latency = 14;
Simon Pilgrim7684e052018-03-22 13:18:08 +0000261 let NumMicroOps = 2;
Quentin Colombetca498512014-02-24 19:33:51 +0000262 let ResourceCycles = [2];
263}
264def : WriteRes<WriteAESIMCLd, [HWPort5, HWPort23]> {
Simon Pilgrim7684e052018-03-22 13:18:08 +0000265 let Latency = 20;
266 let NumMicroOps = 3;
267 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000268}
269
Simon Pilgrim7684e052018-03-22 13:18:08 +0000270def : WriteRes<WriteAESKeyGen, [HWPort0,HWPort5,HWPort015]> {
271 let Latency = 29;
272 let NumMicroOps = 11;
273 let ResourceCycles = [2,7,2];
Quentin Colombetca498512014-02-24 19:33:51 +0000274}
Simon Pilgrim7684e052018-03-22 13:18:08 +0000275def : WriteRes<WriteAESKeyGenLd, [HWPort0,HWPort5,HWPort23,HWPort015]> {
276 let Latency = 34;
277 let NumMicroOps = 11;
278 let ResourceCycles = [2,7,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000279}
280
281// Carry-less multiplication instructions.
282def : WriteRes<WriteCLMul, [HWPort0, HWPort5]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000283 let Latency = 11;
284 let NumMicroOps = 3;
285 let ResourceCycles = [2,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000286}
287def : WriteRes<WriteCLMulLd, [HWPort0, HWPort5, HWPort23]> {
Simon Pilgrim3b2ff1f2018-03-22 13:37:30 +0000288 let Latency = 17;
289 let NumMicroOps = 4;
290 let ResourceCycles = [2,1,1];
Quentin Colombetca498512014-02-24 19:33:51 +0000291}
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000292
Craig Topper05242bf2018-04-21 18:07:36 +0000293// Load/store MXCSR.
294def : WriteRes<WriteLDMXCSR, [HWPort0,HWPort23,HWPort0156]> { let Latency = 7; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
295def : WriteRes<WriteSTMXCSR, [HWPort4,HWPort5,HWPort237]> { let Latency = 2; let NumMicroOps = 3; let ResourceCycles = [1,1,1]; }
296
Nadav Roteme7b6a8a2013-03-28 22:34:46 +0000297def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
298def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
Quentin Colombetca498512014-02-24 19:33:51 +0000299def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
300def : WriteRes<WriteNop, []>;
Quentin Colombet35d37b72014-08-18 17:55:08 +0000301
Michael Zuckermanf6684002017-06-28 11:23:31 +0000302//================ Exceptions ================//
303
304//-- Specific Scheduling Models --//
305
306// Starting with P0.
Craig Topper02daec02018-04-02 01:12:32 +0000307def HWWriteP0 : SchedWriteRes<[HWPort0]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000308
Craig Topper02daec02018-04-02 01:12:32 +0000309def HWWriteP01 : SchedWriteRes<[HWPort01]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000310
Craig Topper02daec02018-04-02 01:12:32 +0000311def HWWrite2P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000312 let NumMicroOps = 2;
313}
Craig Topper02daec02018-04-02 01:12:32 +0000314def HWWrite3P01 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000315 let NumMicroOps = 3;
316}
317
Craig Topper02daec02018-04-02 01:12:32 +0000318def HWWriteP0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000319 let NumMicroOps = 2;
320}
321
Craig Topper02daec02018-04-02 01:12:32 +0000322def HWWrite2P0156_P23 : SchedWriteRes<[HWPort0156, HWPort23]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323 let NumMicroOps = 3;
324 let ResourceCycles = [2, 1];
325}
326
Michael Zuckermanf6684002017-06-28 11:23:31 +0000327// Starting with P1.
Craig Topper02daec02018-04-02 01:12:32 +0000328def HWWriteP1 : SchedWriteRes<[HWPort1]>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000329
Michael Zuckermanf6684002017-06-28 11:23:31 +0000330
Craig Topper02daec02018-04-02 01:12:32 +0000331def HWWrite2P1 : SchedWriteRes<[HWPort1]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000332 let NumMicroOps = 2;
333 let ResourceCycles = [2];
334}
Michael Zuckermanf6684002017-06-28 11:23:31 +0000335
336// Notation:
337// - r: register.
338// - mm: 64 bit mmx register.
339// - x = 128 bit xmm register.
340// - (x)mm = mmx or xmm register.
341// - y = 256 bit ymm register.
342// - v = any vector register.
343// - m = memory.
344
345//=== Integer Instructions ===//
346//-- Move instructions --//
347
Michael Zuckermanf6684002017-06-28 11:23:31 +0000348// XLAT.
Craig Topper02daec02018-04-02 01:12:32 +0000349def HWWriteXLAT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000350 let Latency = 7;
351 let NumMicroOps = 3;
352}
Craig Topper02daec02018-04-02 01:12:32 +0000353def : InstRW<[HWWriteXLAT], (instregex "XLAT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000354
Michael Zuckermanf6684002017-06-28 11:23:31 +0000355// PUSHA.
Craig Topper02daec02018-04-02 01:12:32 +0000356def HWWritePushA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000357 let NumMicroOps = 19;
358}
Craig Topper02daec02018-04-02 01:12:32 +0000359def : InstRW<[HWWritePushA], (instregex "PUSHA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000360
Michael Zuckermanf6684002017-06-28 11:23:31 +0000361// POPA.
Craig Topper02daec02018-04-02 01:12:32 +0000362def HWWritePopA : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000363 let NumMicroOps = 18;
364}
Craig Topper02daec02018-04-02 01:12:32 +0000365def : InstRW<[HWWritePopA], (instregex "POPA(16|32)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000366
Michael Zuckermanf6684002017-06-28 11:23:31 +0000367//-- Arithmetic instructions --//
368
Michael Zuckermanf6684002017-06-28 11:23:31 +0000369// DIV.
370// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000371def HWWriteDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000372 let Latency = 22;
373 let NumMicroOps = 9;
374}
Craig Topper02daec02018-04-02 01:12:32 +0000375def : InstRW<[HWWriteDiv8], (instregex "DIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000376
Michael Zuckermanf6684002017-06-28 11:23:31 +0000377// IDIV.
378// r8.
Craig Topper02daec02018-04-02 01:12:32 +0000379def HWWriteIDiv8 : SchedWriteRes<[HWPort0, HWPort1, HWPort5, HWPort6]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000380 let Latency = 23;
381 let NumMicroOps = 9;
382}
Craig Topper02daec02018-04-02 01:12:32 +0000383def : InstRW<[HWWriteIDiv8], (instregex "IDIV8r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000384
Michael Zuckermanf6684002017-06-28 11:23:31 +0000385// BT.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000386// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000387def HWWriteBTmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000388 let NumMicroOps = 10;
389}
Craig Topper02daec02018-04-02 01:12:32 +0000390def : InstRW<[HWWriteBTmr], (instregex "BT(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000391
Michael Zuckermanf6684002017-06-28 11:23:31 +0000392// BTR BTS BTC.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000393// m,r.
Craig Topper02daec02018-04-02 01:12:32 +0000394def HWWriteBTRSCmr : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000395 let NumMicroOps = 11;
396}
Craig Topper02daec02018-04-02 01:12:32 +0000397def : InstRW<[HWWriteBTRSCmr], (instregex "BT(R|S|C)(16|32|64)mr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000398
Michael Zuckermanf6684002017-06-28 11:23:31 +0000399//-- Control transfer instructions --//
400
Michael Zuckermanf6684002017-06-28 11:23:31 +0000401// CALL.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000402// i.
Craig Topper02daec02018-04-02 01:12:32 +0000403def HWWriteRETI : SchedWriteRes<[HWPort23, HWPort6, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000404 let NumMicroOps = 4;
405 let ResourceCycles = [1, 2, 1];
406}
Craig Topper02daec02018-04-02 01:12:32 +0000407def : InstRW<[HWWriteRETI], (instregex "RETI(L|Q|W)", "LRETI(L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000408
409// BOUND.
410// r,m.
Craig Topper02daec02018-04-02 01:12:32 +0000411def HWWriteBOUND : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000412 let NumMicroOps = 15;
413}
Craig Topper02daec02018-04-02 01:12:32 +0000414def : InstRW<[HWWriteBOUND], (instregex "BOUNDS(16|32)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000415
416// INTO.
Craig Topper02daec02018-04-02 01:12:32 +0000417def HWWriteINTO : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000418 let NumMicroOps = 4;
419}
Craig Topper02daec02018-04-02 01:12:32 +0000420def : InstRW<[HWWriteINTO], (instregex "INTO")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000421
422//-- String instructions --//
423
424// LODSB/W.
Craig Topper02daec02018-04-02 01:12:32 +0000425def : InstRW<[HWWrite2P0156_P23], (instregex "LODS(B|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000426
427// LODSD/Q.
Craig Topper02daec02018-04-02 01:12:32 +0000428def : InstRW<[HWWriteP0156_P23], (instregex "LODS(L|Q)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000429
Michael Zuckermanf6684002017-06-28 11:23:31 +0000430// MOVS.
Craig Topper02daec02018-04-02 01:12:32 +0000431def HWWriteMOVS : SchedWriteRes<[HWPort23, HWPort4, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000432 let Latency = 4;
433 let NumMicroOps = 5;
434 let ResourceCycles = [2, 1, 2];
435}
Craig Topper02daec02018-04-02 01:12:32 +0000436def : InstRW<[HWWriteMOVS], (instrs MOVSB, MOVSL, MOVSQ, MOVSW)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000437
Michael Zuckermanf6684002017-06-28 11:23:31 +0000438// CMPS.
Craig Topper02daec02018-04-02 01:12:32 +0000439def HWWriteCMPS : SchedWriteRes<[HWPort23, HWPort0156]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000440 let Latency = 4;
441 let NumMicroOps = 5;
442 let ResourceCycles = [2, 3];
443}
Craig Topper02daec02018-04-02 01:12:32 +0000444def : InstRW<[HWWriteCMPS], (instregex "CMPS(B|L|Q|W)")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000445
Michael Zuckermanf6684002017-06-28 11:23:31 +0000446//-- Other --//
447
Gadi Haberd76f7b82017-08-28 10:04:16 +0000448// RDPMC.f
Craig Topper02daec02018-04-02 01:12:32 +0000449def HWWriteRDPMC : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000450 let NumMicroOps = 34;
451}
Craig Topper02daec02018-04-02 01:12:32 +0000452def : InstRW<[HWWriteRDPMC], (instregex "RDPMC")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000453
454// RDRAND.
Craig Topper02daec02018-04-02 01:12:32 +0000455def HWWriteRDRAND : SchedWriteRes<[HWPort23, HWPort015]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000456 let NumMicroOps = 17;
457 let ResourceCycles = [1, 16];
458}
Craig Topper02daec02018-04-02 01:12:32 +0000459def : InstRW<[HWWriteRDRAND], (instregex "RDRAND(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000460
461//=== Floating Point x87 Instructions ===//
462//-- Move instructions --//
463
464// FLD.
465// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000466def : InstRW<[HWWriteP01], (instregex "LD_Frr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000467
Michael Zuckermanf6684002017-06-28 11:23:31 +0000468// FBLD.
469// m80.
Craig Topper02daec02018-04-02 01:12:32 +0000470def HWWriteFBLD : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000471 let Latency = 47;
472 let NumMicroOps = 43;
473}
Craig Topper02daec02018-04-02 01:12:32 +0000474def : InstRW<[HWWriteFBLD], (instregex "FBLDm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000475
476// FST(P).
477// r.
Craig Topper02daec02018-04-02 01:12:32 +0000478def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000479
Michael Zuckermanf6684002017-06-28 11:23:31 +0000480// FLDZ.
Craig Topper02daec02018-04-02 01:12:32 +0000481def : InstRW<[HWWriteP01], (instregex "LD_F0")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000482
Michael Zuckermanf6684002017-06-28 11:23:31 +0000483// FLDPI FLDL2E etc.
Craig Topper02daec02018-04-02 01:12:32 +0000484def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000485
Michael Zuckermanf6684002017-06-28 11:23:31 +0000486// FFREE.
Craig Topper02daec02018-04-02 01:12:32 +0000487def : InstRW<[HWWriteP01], (instregex "FFREE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000488
489// FNSAVE.
Craig Topper02daec02018-04-02 01:12:32 +0000490def HWWriteFNSAVE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000491 let NumMicroOps = 147;
492}
Craig Topper02daec02018-04-02 01:12:32 +0000493def : InstRW<[HWWriteFNSAVE], (instregex "FSAVEm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000494
495// FRSTOR.
Craig Topper02daec02018-04-02 01:12:32 +0000496def HWWriteFRSTOR : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000497 let NumMicroOps = 90;
498}
Craig Topper02daec02018-04-02 01:12:32 +0000499def : InstRW<[HWWriteFRSTOR], (instregex "FRSTORm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000500
501//-- Arithmetic instructions --//
502
Michael Zuckermanf6684002017-06-28 11:23:31 +0000503// FCOMPP FUCOMPP.
504// r.
Craig Topper02daec02018-04-02 01:12:32 +0000505def : InstRW<[HWWrite2P01], (instregex "FCOMPP", "UCOM_FPPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000506
507// FCOMI(P) FUCOMI(P).
508// m.
Craig Topper02daec02018-04-02 01:12:32 +0000509def : InstRW<[HWWrite3P01], (instregex "COM_FIr", "COM_FIPr", "UCOM_FIr",
510 "UCOM_FIPr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000511
Michael Zuckermanf6684002017-06-28 11:23:31 +0000512// FTST.
Craig Topper02daec02018-04-02 01:12:32 +0000513def : InstRW<[HWWriteP1], (instregex "TST_F")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000514
515// FXAM.
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000516def : InstRW<[HWWrite2P1], (instrs FXAM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000517
518// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000519def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000520 let Latency = 19;
521 let NumMicroOps = 28;
522}
Craig Topper02daec02018-04-02 01:12:32 +0000523def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000524
525// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000526def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000527 let Latency = 27;
528 let NumMicroOps = 41;
529}
Craig Topper02daec02018-04-02 01:12:32 +0000530def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000531
532// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000533def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000534 let Latency = 11;
535 let NumMicroOps = 17;
536}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000537def : InstRW<[HWWriteFRNDINT], (instrs FRNDINT)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000538
539//-- Math instructions --//
540
541// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000542def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000543 let Latency = 75; // 49-125
544 let NumMicroOps = 50; // 25-75
545}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000546def : InstRW<[HWWriteFSCALE], (instrs FSCALE)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000547
548// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000549def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000550 let Latency = 15;
551 let NumMicroOps = 17;
552}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000553def : InstRW<[HWWriteFXTRACT], (instrs FXTRACT)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000554
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000555////////////////////////////////////////////////////////////////////////////////
556// Horizontal add/sub instructions.
557////////////////////////////////////////////////////////////////////////////////
558
Simon Pilgrimef8d3ae2018-04-22 15:25:59 +0000559defm : HWWriteResPair<WriteFHAdd, [HWPort1, HWPort5], 5, [1,2], 3, 6>;
560defm : HWWriteResPair<WritePHAdd, [HWPort5, HWPort15], 3, [2,1], 3, 6>;
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000561
Michael Zuckermanf6684002017-06-28 11:23:31 +0000562//=== Floating Point XMM and YMM Instructions ===//
Gadi Haber13759a72017-06-27 15:05:13 +0000563
Gadi Haberd76f7b82017-08-28 10:04:16 +0000564// Remaining instrs.
Michael Zuckermanf6684002017-06-28 11:23:31 +0000565
Gadi Haberd76f7b82017-08-28 10:04:16 +0000566def HWWriteResGroup0 : SchedWriteRes<[HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000567 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000568 let NumMicroOps = 1;
569 let ResourceCycles = [1];
570}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000571def: InstRW<[HWWriteResGroup0], (instregex "VBROADCASTSSrm",
572 "(V?)LDDQUrm",
573 "(V?)MOVAPDrm",
574 "(V?)MOVAPSrm",
575 "(V?)MOVDQArm",
576 "(V?)MOVDQUrm",
577 "(V?)MOVNTDQArm",
578 "(V?)MOVSHDUPrm",
579 "(V?)MOVSLDUPrm",
580 "(V?)MOVUPDrm",
581 "(V?)MOVUPSrm",
582 "VPBROADCASTDrm",
583 "VPBROADCASTQrm",
Craig Topper40d3b322018-03-22 21:55:20 +0000584 "(V?)ROUNDPD(Y?)r",
585 "(V?)ROUNDPS(Y?)r",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000586 "(V?)ROUNDSDr",
587 "(V?)ROUNDSSr")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000588
589def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
590 let Latency = 7;
591 let NumMicroOps = 1;
592 let ResourceCycles = [1];
593}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000594def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F32m",
595 "LD_F64m",
596 "LD_F80m",
597 "VBROADCASTF128",
598 "VBROADCASTI128",
599 "VBROADCASTSDYrm",
600 "VBROADCASTSSYrm",
601 "VLDDQUYrm",
602 "VMOVAPDYrm",
603 "VMOVAPSYrm",
604 "VMOVDDUPYrm",
605 "VMOVDQAYrm",
606 "VMOVDQUYrm",
607 "VMOVNTDQAYrm",
608 "VMOVSHDUPYrm",
609 "VMOVSLDUPYrm",
610 "VMOVUPDYrm",
611 "VMOVUPSYrm",
612 "VPBROADCASTDYrm",
613 "VPBROADCASTQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000614
615def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
616 let Latency = 5;
617 let NumMicroOps = 1;
618 let ResourceCycles = [1];
619}
Simon Pilgrim02fc3752018-04-21 12:15:42 +0000620def: InstRW<[HWWriteResGroup0_2], (instregex "MOVSX(16|32|64)rm16",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000621 "MOVSX(16|32|64)rm32",
622 "MOVSX(16|32|64)rm8",
623 "MOVZX(16|32|64)rm16",
624 "MOVZX(16|32|64)rm8",
Simon Pilgrim37334ea2018-04-21 21:59:36 +0000625 "(V?)MOVDDUPrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000626
Gadi Haberd76f7b82017-08-28 10:04:16 +0000627def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
628 let Latency = 1;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000629 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000630 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +0000631}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000632def: InstRW<[HWWriteResGroup1], (instregex "FBSTPm",
633 "MMX_MOVD64from64rm",
634 "MMX_MOVD64mr",
635 "MMX_MOVNTQmr",
636 "MMX_MOVQ64mr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000637 "MOVNTI_64mr",
638 "MOVNTImr",
639 "ST_FP32m",
640 "ST_FP64m",
641 "ST_FP80m",
642 "VEXTRACTF128mr",
643 "VEXTRACTI128mr",
644 "(V?)MOVAPD(Y?)mr",
645 "(V?)MOVAPS(V?)mr",
646 "(V?)MOVDQA(Y?)mr",
647 "(V?)MOVDQU(Y?)mr",
648 "(V?)MOVHPDmr",
649 "(V?)MOVHPSmr",
650 "(V?)MOVLPDmr",
651 "(V?)MOVLPSmr",
652 "(V?)MOVNTDQ(Y?)mr",
653 "(V?)MOVNTPD(Y?)mr",
654 "(V?)MOVNTPS(Y?)mr",
655 "(V?)MOVPDI2DImr",
656 "(V?)MOVPQI2QImr",
657 "(V?)MOVPQIto64mr",
658 "(V?)MOVSDmr",
659 "(V?)MOVSSmr",
660 "(V?)MOVUPD(Y?)mr",
661 "(V?)MOVUPS(Y?)mr",
662 "VMPTRSTm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000663
Gadi Haberd76f7b82017-08-28 10:04:16 +0000664def HWWriteResGroup2 : SchedWriteRes<[HWPort0]> {
665 let Latency = 1;
666 let NumMicroOps = 1;
667 let ResourceCycles = [1];
668}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000669def: InstRW<[HWWriteResGroup2], (instregex "MMX_MOVD64from64rr",
670 "MMX_MOVD64grr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000671 "(V?)MOVPDI2DIrr",
672 "(V?)MOVPQIto64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000673 "VPSLLVQ(Y?)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000674 "VPSRLVQ(Y?)rr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000675 "VTESTPD(Y?)rr",
676 "VTESTPS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000677
678def HWWriteResGroup3 : SchedWriteRes<[HWPort1]> {
679 let Latency = 1;
680 let NumMicroOps = 1;
681 let ResourceCycles = [1];
682}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000683def: InstRW<[HWWriteResGroup3], (instregex "COMP_FST0r",
684 "COM_FST0r",
685 "UCOM_FPr",
686 "UCOM_Fr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000687
688def HWWriteResGroup4 : SchedWriteRes<[HWPort5]> {
689 let Latency = 1;
690 let NumMicroOps = 1;
691 let ResourceCycles = [1];
692}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000693def: InstRW<[HWWriteResGroup4], (instregex "MMX_MOVD64rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000694 "MMX_MOVD64to64rr",
695 "MMX_MOVQ2DQrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000696 "(V?)MOV64toPQIrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000697 "(V?)MOVDI2PDIrr",
Simon Pilgrim2b5967f2018-03-24 18:36:01 +0000698 "(V?)PSLLDQ(Y?)ri",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000699 "(V?)PSRLDQ(Y?)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000700
701def HWWriteResGroup5 : SchedWriteRes<[HWPort6]> {
702 let Latency = 1;
703 let NumMicroOps = 1;
704 let ResourceCycles = [1];
705}
706def: InstRW<[HWWriteResGroup5], (instregex "JMP(16|32|64)r")>;
707
708def HWWriteResGroup6 : SchedWriteRes<[HWPort01]> {
709 let Latency = 1;
710 let NumMicroOps = 1;
711 let ResourceCycles = [1];
712}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +0000713def: InstRW<[HWWriteResGroup6], (instrs FINCSTP, FNOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000714
715def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
716 let Latency = 1;
717 let NumMicroOps = 1;
718 let ResourceCycles = [1];
719}
Craig Topperfbe31322018-04-05 21:56:19 +0000720def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000721def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
722 "BT(16|32|64)rr",
723 "BTC(16|32|64)ri8",
724 "BTC(16|32|64)rr",
725 "BTR(16|32|64)ri8",
726 "BTR(16|32|64)rr",
727 "BTS(16|32|64)ri8",
728 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000729 "SAR(8|16|32|64)r1",
730 "SAR(8|16|32|64)ri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000731 "SHL(8|16|32|64)r1",
732 "SHL(8|16|32|64)ri",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000733 "SHR(8|16|32|64)r1",
Simon Pilgrimeb609092018-04-23 22:19:55 +0000734 "SHR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000735
736def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
737 let Latency = 1;
738 let NumMicroOps = 1;
739 let ResourceCycles = [1];
740}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000741def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
742 "BLSI(32|64)rr",
743 "BLSMSK(32|64)rr",
Simon Pilgrimed09ebb2018-04-23 21:04:23 +0000744 "BLSR(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000745
746def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
747 let Latency = 1;
748 let NumMicroOps = 1;
749 let ResourceCycles = [1];
750}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000751def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000752 "VPBLENDD(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000753
754def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
755 let Latency = 1;
756 let NumMicroOps = 1;
757 let ResourceCycles = [1];
758}
Craig Topperfbe31322018-04-05 21:56:19 +0000759def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000760def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000761 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000762 "LAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000763 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000764 "SAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000765 "SGDT64m",
766 "SIDT64m",
767 "SLDT64m",
768 "SMSW16m",
769 "STC",
770 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000771 "SYSCALL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000772
773def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000774 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000775 let NumMicroOps = 2;
776 let ResourceCycles = [1,1];
777}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000778def: InstRW<[HWWriteResGroup11], (instregex "VCVTPH2PSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000779 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000780
Gadi Haber2cf601f2017-12-08 09:48:44 +0000781def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
782 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000783 let NumMicroOps = 2;
784 let ResourceCycles = [1,1];
785}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000786def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
787 "(V?)CVTSS2SDrm",
788 "VPSLLVQrm",
789 "VPSRLVQrm",
790 "VTESTPDrm",
791 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000792
793def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
794 let Latency = 8;
795 let NumMicroOps = 2;
796 let ResourceCycles = [1,1];
797}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000798def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
799 "VPSLLQYrm",
800 "VPSLLVQYrm",
801 "VPSLLWYrm",
802 "VPSRADYrm",
803 "VPSRAWYrm",
804 "VPSRLDYrm",
805 "VPSRLQYrm",
806 "VPSRLVQYrm",
807 "VPSRLWYrm",
808 "VTESTPDYrm",
809 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000810
811def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
812 let Latency = 8;
813 let NumMicroOps = 2;
814 let ResourceCycles = [1,1];
815}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000816def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000817 "FCOM64m",
818 "FCOMP32m",
819 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000820 "MMX_CVTPI2PSirm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000821 "PDEP(32|64)rm",
822 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000823 "(V?)CMPSDrm",
824 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000825 "(V?)MAX(C?)SDrm",
826 "(V?)MAX(C?)SSrm",
827 "(V?)MIN(C?)SDrm",
Simon Pilgrime5e4bf02018-04-23 22:45:04 +0000828 "(V?)MIN(C?)SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000829
Craig Topperf846e2d2018-04-19 05:34:05 +0000830def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
831 let Latency = 8;
832 let NumMicroOps = 3;
833 let ResourceCycles = [1,1,1];
834}
835def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
836
837def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
838 let Latency = 9;
839 let NumMicroOps = 5;
840 let ResourceCycles = [1,1,2,1];
841}
842def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
843
Gadi Haberd76f7b82017-08-28 10:04:16 +0000844def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000845 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000846 let NumMicroOps = 2;
847 let ResourceCycles = [1,1];
848}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000849def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000850 "(V?)INSERTPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000851 "(V?)PACKSSDWrm",
852 "(V?)PACKSSWBrm",
853 "(V?)PACKUSDWrm",
854 "(V?)PACKUSWBrm",
855 "(V?)PALIGNRrmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000856 "VPERMILPDmi",
857 "VPERMILPDrm",
858 "VPERMILPSmi",
859 "VPERMILPSrm",
860 "(V?)PSHUFBrm",
861 "(V?)PSHUFDmi",
862 "(V?)PSHUFHWmi",
863 "(V?)PSHUFLWmi",
864 "(V?)PUNPCKHBWrm",
865 "(V?)PUNPCKHDQrm",
866 "(V?)PUNPCKHQDQrm",
867 "(V?)PUNPCKHWDrm",
868 "(V?)PUNPCKLBWrm",
869 "(V?)PUNPCKLDQrm",
870 "(V?)PUNPCKLQDQrm",
871 "(V?)PUNPCKLWDrm",
872 "(V?)SHUFPDrmi",
873 "(V?)SHUFPSrmi",
874 "(V?)UNPCKHPDrm",
875 "(V?)UNPCKHPSrm",
876 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000877 "(V?)UNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000878
Gadi Haber2cf601f2017-12-08 09:48:44 +0000879def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
880 let Latency = 8;
881 let NumMicroOps = 2;
882 let ResourceCycles = [1,1];
883}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000884def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
885 "VANDNPSYrm",
886 "VANDPDYrm",
887 "VANDPSYrm",
888 "VORPDYrm",
889 "VORPSYrm",
890 "VPACKSSDWYrm",
891 "VPACKSSWBYrm",
892 "VPACKUSDWYrm",
893 "VPACKUSWBYrm",
894 "VPALIGNRYrmi",
895 "VPBLENDWYrmi",
896 "VPERMILPDYmi",
897 "VPERMILPDYrm",
898 "VPERMILPSYmi",
899 "VPERMILPSYrm",
900 "VPMOVSXBDYrm",
901 "VPMOVSXBQYrm",
902 "VPMOVSXWQYrm",
903 "VPSHUFBYrm",
904 "VPSHUFDYmi",
905 "VPSHUFHWYmi",
906 "VPSHUFLWYmi",
907 "VPUNPCKHBWYrm",
908 "VPUNPCKHDQYrm",
909 "VPUNPCKHQDQYrm",
910 "VPUNPCKHWDYrm",
911 "VPUNPCKLBWYrm",
912 "VPUNPCKLDQYrm",
913 "VPUNPCKLQDQYrm",
914 "VPUNPCKLWDYrm",
915 "VSHUFPDYrmi",
916 "VSHUFPSYrmi",
917 "VUNPCKHPDYrm",
918 "VUNPCKHPSYrm",
919 "VUNPCKLPDYrm",
920 "VUNPCKLPSYrm",
921 "VXORPDYrm",
922 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000923
Gadi Haberd76f7b82017-08-28 10:04:16 +0000924def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000925 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000926 let NumMicroOps = 2;
927 let ResourceCycles = [1,1];
928}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000929def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
930 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000931
932def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000933 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000934 let NumMicroOps = 2;
935 let ResourceCycles = [1,1];
936}
Simon Pilgrimeb609092018-04-23 22:19:55 +0000937def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000938
939def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000940 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000941 let NumMicroOps = 2;
942 let ResourceCycles = [1,1];
943}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000944def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
945 "BLSI(32|64)rm",
946 "BLSMSK(32|64)rm",
947 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000948 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000949
950def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
951 let Latency = 7;
952 let NumMicroOps = 2;
953 let ResourceCycles = [1,1];
954}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000955def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
956 "(V?)PABSDrm",
957 "(V?)PABSWrm",
958 "(V?)PADDBrm",
959 "(V?)PADDDrm",
960 "(V?)PADDQrm",
961 "(V?)PADDSBrm",
962 "(V?)PADDSWrm",
963 "(V?)PADDUSBrm",
964 "(V?)PADDUSWrm",
965 "(V?)PADDWrm",
966 "(V?)PAVGBrm",
967 "(V?)PAVGWrm",
968 "(V?)PCMPEQBrm",
969 "(V?)PCMPEQDrm",
970 "(V?)PCMPEQQrm",
971 "(V?)PCMPEQWrm",
972 "(V?)PCMPGTBrm",
973 "(V?)PCMPGTDrm",
974 "(V?)PCMPGTWrm",
975 "(V?)PMAXSBrm",
976 "(V?)PMAXSDrm",
977 "(V?)PMAXSWrm",
978 "(V?)PMAXUBrm",
979 "(V?)PMAXUDrm",
980 "(V?)PMAXUWrm",
981 "(V?)PMINSBrm",
982 "(V?)PMINSDrm",
983 "(V?)PMINSWrm",
984 "(V?)PMINUBrm",
985 "(V?)PMINUDrm",
986 "(V?)PMINUWrm",
987 "(V?)PSIGNBrm",
988 "(V?)PSIGNDrm",
989 "(V?)PSIGNWrm",
990 "(V?)PSUBBrm",
991 "(V?)PSUBDrm",
992 "(V?)PSUBQrm",
993 "(V?)PSUBSBrm",
994 "(V?)PSUBSWrm",
995 "(V?)PSUBUSBrm",
996 "(V?)PSUBUSWrm",
997 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000998
999def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1000 let Latency = 8;
1001 let NumMicroOps = 2;
1002 let ResourceCycles = [1,1];
1003}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001004def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1005 "VPABSDYrm",
1006 "VPABSWYrm",
1007 "VPADDBYrm",
1008 "VPADDDYrm",
1009 "VPADDQYrm",
1010 "VPADDSBYrm",
1011 "VPADDSWYrm",
1012 "VPADDUSBYrm",
1013 "VPADDUSWYrm",
1014 "VPADDWYrm",
1015 "VPAVGBYrm",
1016 "VPAVGWYrm",
1017 "VPCMPEQBYrm",
1018 "VPCMPEQDYrm",
1019 "VPCMPEQQYrm",
1020 "VPCMPEQWYrm",
1021 "VPCMPGTBYrm",
1022 "VPCMPGTDYrm",
1023 "VPCMPGTWYrm",
1024 "VPMAXSBYrm",
1025 "VPMAXSDYrm",
1026 "VPMAXSWYrm",
1027 "VPMAXUBYrm",
1028 "VPMAXUDYrm",
1029 "VPMAXUWYrm",
1030 "VPMINSBYrm",
1031 "VPMINSDYrm",
1032 "VPMINSWYrm",
1033 "VPMINUBYrm",
1034 "VPMINUDYrm",
1035 "VPMINUWYrm",
1036 "VPSIGNBYrm",
1037 "VPSIGNDYrm",
1038 "VPSIGNWYrm",
1039 "VPSUBBYrm",
1040 "VPSUBDYrm",
1041 "VPSUBQYrm",
1042 "VPSUBSBYrm",
1043 "VPSUBSWYrm",
1044 "VPSUBUSBYrm",
1045 "VPSUBUSWYrm",
1046 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001047
1048def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001049 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001050 let NumMicroOps = 2;
1051 let ResourceCycles = [1,1];
1052}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001053def: InstRW<[HWWriteResGroup17], (instregex "VINSERTF128rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001054 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001055 "VPBLENDDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001056
Gadi Haber2cf601f2017-12-08 09:48:44 +00001057def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1058 let Latency = 6;
1059 let NumMicroOps = 2;
1060 let ResourceCycles = [1,1];
1061}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001062def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1063 "MMX_PANDirm",
1064 "MMX_PORirm",
1065 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001066
1067def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1068 let Latency = 8;
1069 let NumMicroOps = 2;
1070 let ResourceCycles = [1,1];
1071}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001072def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1073 "VBLENDPSYrmi",
1074 "VPANDNYrm",
1075 "VPANDYrm",
1076 "VPBLENDDYrmi",
1077 "VPORYrm",
1078 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001079
Gadi Haberd76f7b82017-08-28 10:04:16 +00001080def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001081 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001082 let NumMicroOps = 2;
1083 let ResourceCycles = [1,1];
1084}
Craig Topper2d451e72018-03-18 08:38:06 +00001085def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001086def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001087
1088def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001089 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001090 let NumMicroOps = 2;
1091 let ResourceCycles = [1,1];
1092}
1093def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1094
1095def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001096 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001097 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001098 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001099}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001100def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1101 "(V?)PEXTRBmr",
1102 "(V?)PEXTRDmr",
1103 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +00001104 "(V?)PEXTRWmr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001105
Gadi Haberd76f7b82017-08-28 10:04:16 +00001106def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001107 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001108 let NumMicroOps = 3;
1109 let ResourceCycles = [1,1,1];
1110}
1111def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001112
Gadi Haberd76f7b82017-08-28 10:04:16 +00001113def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001114 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001115 let NumMicroOps = 3;
1116 let ResourceCycles = [1,1,1];
1117}
1118def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1119
1120def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001121 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001122 let NumMicroOps = 3;
1123 let ResourceCycles = [1,1,1];
1124}
1125def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1126
1127def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001128 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001129 let NumMicroOps = 3;
1130 let ResourceCycles = [1,1,1];
1131}
Craig Topper2d451e72018-03-18 08:38:06 +00001132def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001133def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1134 "PUSH64i8",
1135 "STOSB",
1136 "STOSL",
1137 "STOSQ",
1138 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001139
1140def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001141 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001142 let NumMicroOps = 4;
1143 let ResourceCycles = [1,1,1,1];
1144}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001145def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1146 "BTR(16|32|64)mi8",
1147 "BTS(16|32|64)mi8",
1148 "SAR(8|16|32|64)m1",
1149 "SAR(8|16|32|64)mi",
1150 "SHL(8|16|32|64)m1",
1151 "SHL(8|16|32|64)mi",
1152 "SHR(8|16|32|64)m1",
1153 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001154
1155def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001156 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001157 let NumMicroOps = 4;
1158 let ResourceCycles = [1,1,1,1];
1159}
Craig Topperf0d04262018-04-06 16:16:48 +00001160def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1161 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001162
1163def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001164 let Latency = 2;
1165 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001166 let ResourceCycles = [2];
1167}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001168def: InstRW<[HWWriteResGroup27], (instregex "MMX_PINSRWrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001169 "(V?)PINSRBrr",
1170 "(V?)PINSRDrr",
1171 "(V?)PINSRQrr",
1172 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001173
Gadi Haberd76f7b82017-08-28 10:04:16 +00001174def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1175 let Latency = 2;
1176 let NumMicroOps = 2;
1177 let ResourceCycles = [2];
1178}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001179def: InstRW<[HWWriteResGroup28], (instrs FDECSTP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001180
1181def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1182 let Latency = 2;
1183 let NumMicroOps = 2;
1184 let ResourceCycles = [2];
1185}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001186def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1187 "ROL(8|16|32|64)ri",
1188 "ROR(8|16|32|64)r1",
1189 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001190
1191def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1192 let Latency = 2;
1193 let NumMicroOps = 2;
1194 let ResourceCycles = [2];
1195}
1196def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1197def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001198def: InstRW<[HWWriteResGroup30], (instrs WAIT)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001199def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1200
1201def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1202 let Latency = 2;
1203 let NumMicroOps = 2;
1204 let ResourceCycles = [1,1];
1205}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001206def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1207 "VCVTPH2PSYrr",
1208 "VCVTPH2PSrr",
1209 "(V?)CVTPS2PDrr",
1210 "(V?)CVTSS2SDrr",
1211 "(V?)EXTRACTPSrr",
1212 "(V?)PEXTRBrr",
1213 "(V?)PEXTRDrr",
1214 "(V?)PEXTRQrr",
1215 "(V?)PEXTRWrr",
1216 "(V?)PSLLDrr",
1217 "(V?)PSLLQrr",
1218 "(V?)PSLLWrr",
1219 "(V?)PSRADrr",
1220 "(V?)PSRAWrr",
1221 "(V?)PSRLDrr",
1222 "(V?)PSRLQrr",
1223 "(V?)PSRLWrr",
1224 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001225
1226def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1227 let Latency = 2;
1228 let NumMicroOps = 2;
1229 let ResourceCycles = [1,1];
1230}
1231def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1232
1233def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1234 let Latency = 2;
1235 let NumMicroOps = 2;
1236 let ResourceCycles = [1,1];
1237}
1238def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1239
1240def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1241 let Latency = 2;
1242 let NumMicroOps = 2;
1243 let ResourceCycles = [1,1];
1244}
Craig Topper498875f2018-04-04 17:54:19 +00001245def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1246
1247def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1248 let Latency = 1;
1249 let NumMicroOps = 1;
1250 let ResourceCycles = [1];
1251}
1252def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001253
1254def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1255 let Latency = 2;
1256 let NumMicroOps = 2;
1257 let ResourceCycles = [1,1];
1258}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001259def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1260def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1261 "ADC(8|16|32|64)rr",
1262 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001263 "SBB(8|16|32|64)ri",
1264 "SBB(8|16|32|64)rr",
1265 "SBB(8|16|32|64)i",
1266 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001267
1268def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001269 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001270 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001271 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001272}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001273def: InstRW<[HWWriteResGroup36], (instregex "VMASKMOVPDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001274 "VMASKMOVPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001275 "VPMASKMOVDrm",
1276 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001277
Gadi Haber2cf601f2017-12-08 09:48:44 +00001278def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1279 let Latency = 9;
1280 let NumMicroOps = 3;
1281 let ResourceCycles = [2,1];
1282}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001283def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1284 "VBLENDVPSYrm",
1285 "VMASKMOVPDYrm",
1286 "VMASKMOVPSYrm",
1287 "VPBLENDVBYrm",
1288 "VPMASKMOVDYrm",
1289 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001290
1291def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1292 let Latency = 7;
1293 let NumMicroOps = 3;
1294 let ResourceCycles = [2,1];
1295}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001296def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1297 "MMX_PACKSSWBirm",
1298 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001299
Gadi Haberd76f7b82017-08-28 10:04:16 +00001300def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001301 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001302 let NumMicroOps = 3;
1303 let ResourceCycles = [1,2];
1304}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001305def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1306 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001307
1308def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001309 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001310 let NumMicroOps = 3;
1311 let ResourceCycles = [1,1,1];
1312}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001313def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1314 "(V?)PSLLQrm",
1315 "(V?)PSLLWrm",
1316 "(V?)PSRADrm",
1317 "(V?)PSRAWrm",
1318 "(V?)PSRLDrm",
1319 "(V?)PSRLQrm",
1320 "(V?)PSRLWrm",
1321 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001322
1323def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001324 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001325 let NumMicroOps = 3;
1326 let ResourceCycles = [1,1,1];
1327}
1328def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1329
Gadi Haberd76f7b82017-08-28 10:04:16 +00001330def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001331 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001332 let NumMicroOps = 3;
1333 let ResourceCycles = [1,1,1];
1334}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001335def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1336 "RETL",
1337 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001338
Gadi Haberd76f7b82017-08-28 10:04:16 +00001339def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001340 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001341 let NumMicroOps = 3;
1342 let ResourceCycles = [1,1,1];
1343}
Craig Topperc50570f2018-04-06 17:12:18 +00001344def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1345 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001346
1347def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001348 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001349 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001350 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001351}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001352def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001353
Gadi Haberd76f7b82017-08-28 10:04:16 +00001354def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001355 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001356 let NumMicroOps = 4;
1357 let ResourceCycles = [1,1,1,1];
1358}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001359def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1360 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001361
1362def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001363 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001364 let NumMicroOps = 5;
1365 let ResourceCycles = [1,1,1,2];
1366}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001367def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1368 "ROL(8|16|32|64)mi",
1369 "ROR(8|16|32|64)m1",
1370 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001371
1372def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001373 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001374 let NumMicroOps = 5;
1375 let ResourceCycles = [1,1,1,2];
1376}
Craig Topper13a16502018-03-19 00:56:09 +00001377def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001378
1379def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001380 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001381 let NumMicroOps = 5;
1382 let ResourceCycles = [1,1,1,1,1];
1383}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001384def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1385 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001386
Gadi Haberd76f7b82017-08-28 10:04:16 +00001387def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1388 let Latency = 3;
1389 let NumMicroOps = 1;
1390 let ResourceCycles = [1];
1391}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +00001392def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001393 "PDEP(32|64)rr",
1394 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001395 "SHLD(16|32|64)rri8",
1396 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +00001397 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001398
Clement Courbet327fac42018-03-07 08:14:02 +00001399def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001400 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001401 let NumMicroOps = 2;
1402 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001403}
Clement Courbet327fac42018-03-07 08:14:02 +00001404def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001405
1406def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1407 let Latency = 3;
1408 let NumMicroOps = 1;
1409 let ResourceCycles = [1];
1410}
Simon Pilgrim825ead92018-04-21 20:45:12 +00001411def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTBrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001412 "VPBROADCASTWrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001413 "VPMOVSXBDYrr",
1414 "VPMOVSXBQYrr",
1415 "VPMOVSXBWYrr",
1416 "VPMOVSXDQYrr",
1417 "VPMOVSXWDYrr",
1418 "VPMOVSXWQYrr",
1419 "VPMOVZXBDYrr",
1420 "VPMOVZXBQYrr",
1421 "VPMOVZXBWYrr",
1422 "VPMOVZXDQYrr",
1423 "VPMOVZXWDYrr",
1424 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001425
1426def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001427 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001428 let NumMicroOps = 2;
1429 let ResourceCycles = [1,1];
1430}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001431def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1432 "(V?)ADDPSrm",
1433 "(V?)ADDSUBPDrm",
1434 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001435 "(V?)CVTPS2DQrm",
1436 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001437 "(V?)SUBPDrm",
1438 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001439
Gadi Haber2cf601f2017-12-08 09:48:44 +00001440def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1441 let Latency = 10;
1442 let NumMicroOps = 2;
1443 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001444}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001445def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1446 "ADD_F64m",
1447 "ILD_F16m",
1448 "ILD_F32m",
1449 "ILD_F64m",
1450 "SUBR_F32m",
1451 "SUBR_F64m",
1452 "SUB_F32m",
1453 "SUB_F64m",
1454 "VADDPDYrm",
1455 "VADDPSYrm",
1456 "VADDSUBPDYrm",
1457 "VADDSUBPSYrm",
1458 "VCMPPDYrmi",
1459 "VCMPPSYrmi",
1460 "VCVTDQ2PSYrm",
1461 "VCVTPS2DQYrm",
1462 "VCVTTPS2DQYrm",
1463 "VMAX(C?)PDYrm",
1464 "VMAX(C?)PSYrm",
1465 "VMIN(C?)PDYrm",
1466 "VMIN(C?)PSYrm",
1467 "VSUBPDYrm",
1468 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001469
1470def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001471 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001472 let NumMicroOps = 2;
1473 let ResourceCycles = [1,1];
1474}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001475def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1476 "VPERM2I128rm",
1477 "VPERMDYrm",
1478 "VPERMPDYmi",
1479 "VPERMPSYrm",
1480 "VPERMQYmi",
1481 "VPMOVZXBDYrm",
1482 "VPMOVZXBQYrm",
1483 "VPMOVZXBWYrm",
1484 "VPMOVZXDQYrm",
1485 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001486
Gadi Haber2cf601f2017-12-08 09:48:44 +00001487def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1488 let Latency = 9;
1489 let NumMicroOps = 2;
1490 let ResourceCycles = [1,1];
1491}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001492def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1493 "VPMOVSXDQYrm",
1494 "VPMOVSXWDYrm",
1495 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001496
Gadi Haberd76f7b82017-08-28 10:04:16 +00001497def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +00001498 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001499 let NumMicroOps = 3;
1500 let ResourceCycles = [3];
1501}
Craig Topperb5f26592018-04-19 18:00:17 +00001502def: InstRW<[HWWriteResGroup54], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
1503 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
1504 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001505
1506def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1507 let Latency = 3;
1508 let NumMicroOps = 3;
1509 let ResourceCycles = [2,1];
1510}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001511def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1512 "VPSRAVD(Y?)rr",
1513 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001514
Gadi Haberd76f7b82017-08-28 10:04:16 +00001515def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1516 let Latency = 3;
1517 let NumMicroOps = 3;
1518 let ResourceCycles = [2,1];
1519}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001520def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1521 "MMX_PACKSSWBirr",
1522 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001523
1524def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1525 let Latency = 3;
1526 let NumMicroOps = 3;
1527 let ResourceCycles = [1,2];
1528}
1529def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1530
1531def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1532 let Latency = 3;
1533 let NumMicroOps = 3;
1534 let ResourceCycles = [1,2];
1535}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001536def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1537 "RCL(8|16|32|64)r1",
1538 "RCL(8|16|32|64)ri",
1539 "RCR(8|16|32|64)r1",
1540 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001541
1542def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1543 let Latency = 3;
1544 let NumMicroOps = 3;
1545 let ResourceCycles = [2,1];
1546}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001547def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1548 "ROR(8|16|32|64)rCL",
1549 "SAR(8|16|32|64)rCL",
1550 "SHL(8|16|32|64)rCL",
1551 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001552
1553def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001554 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001555 let NumMicroOps = 3;
1556 let ResourceCycles = [1,1,1];
1557}
1558def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1559
1560def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001561 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001562 let NumMicroOps = 3;
1563 let ResourceCycles = [1,1,1];
1564}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001565def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1566 "ISTT_FP32m",
1567 "ISTT_FP64m",
1568 "IST_F16m",
1569 "IST_F32m",
1570 "IST_FP16m",
1571 "IST_FP32m",
1572 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001573
1574def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001575 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001576 let NumMicroOps = 4;
1577 let ResourceCycles = [2,1,1];
1578}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001579def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1580 "VPSRAVDYrm",
1581 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001582
1583def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1584 let Latency = 9;
1585 let NumMicroOps = 4;
1586 let ResourceCycles = [2,1,1];
1587}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001588def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1589 "VPSRAVDrm",
1590 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001591
1592def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001593 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001594 let NumMicroOps = 4;
1595 let ResourceCycles = [2,1,1];
1596}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001597def: InstRW<[HWWriteResGroup64], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001598
1599def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1600 let Latency = 10;
1601 let NumMicroOps = 4;
1602 let ResourceCycles = [2,1,1];
1603}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001604def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1605 "VPHADDSWYrm",
1606 "VPHADDWYrm",
1607 "VPHSUBDYrm",
1608 "VPHSUBSWYrm",
1609 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001610
Gadi Haberd76f7b82017-08-28 10:04:16 +00001611def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001612 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001613 let NumMicroOps = 4;
1614 let ResourceCycles = [1,1,2];
1615}
Craig Topperf4cd9082018-01-19 05:47:32 +00001616def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001617
1618def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001619 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001620 let NumMicroOps = 5;
1621 let ResourceCycles = [1,1,1,2];
1622}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001623def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
1624 "RCL(8|16|32|64)mi",
1625 "RCR(8|16|32|64)m1",
1626 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001627
1628def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001629 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001630 let NumMicroOps = 5;
1631 let ResourceCycles = [1,1,2,1];
1632}
Craig Topper13a16502018-03-19 00:56:09 +00001633def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001634
1635def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001636 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001637 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001638 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001639}
Craig Topper9f834812018-04-01 21:54:24 +00001640def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001641
Gadi Haberd76f7b82017-08-28 10:04:16 +00001642def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001643 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001644 let NumMicroOps = 6;
1645 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001646}
Craig Topper9f834812018-04-01 21:54:24 +00001647def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001648 "CMPXCHG(8|16|32|64)rm",
1649 "ROL(8|16|32|64)mCL",
1650 "SAR(8|16|32|64)mCL",
1651 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001652 "SHL(8|16|32|64)mCL",
1653 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001654def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1655 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001656
Gadi Haberd76f7b82017-08-28 10:04:16 +00001657def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
1658 let Latency = 4;
1659 let NumMicroOps = 2;
1660 let ResourceCycles = [1,1];
1661}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001662def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1663 "(V?)CVTSD2SIrr",
1664 "(V?)CVTSS2SI64rr",
1665 "(V?)CVTSS2SIrr",
1666 "(V?)CVTTSD2SI64rr",
1667 "(V?)CVTTSD2SIrr",
1668 "(V?)CVTTSS2SI64rr",
1669 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001670
1671def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
1672 let Latency = 4;
1673 let NumMicroOps = 2;
1674 let ResourceCycles = [1,1];
1675}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001676def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
1677 "VPSLLDYrr",
1678 "VPSLLQYrr",
1679 "VPSLLWYrr",
1680 "VPSRADYrr",
1681 "VPSRAWYrr",
1682 "VPSRLDYrr",
1683 "VPSRLQYrr",
1684 "VPSRLWYrr",
1685 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001686
1687def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
1688 let Latency = 4;
1689 let NumMicroOps = 2;
1690 let ResourceCycles = [1,1];
1691}
1692def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
1693
1694def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
1695 let Latency = 4;
1696 let NumMicroOps = 2;
1697 let ResourceCycles = [1,1];
1698}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001699def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
1700 "MMX_CVTPI2PDirr",
1701 "MMX_CVTPS2PIirr",
1702 "MMX_CVTTPD2PIirr",
1703 "MMX_CVTTPS2PIirr",
1704 "(V?)CVTDQ2PDrr",
1705 "(V?)CVTPD2DQrr",
1706 "(V?)CVTPD2PSrr",
1707 "VCVTPS2PHrr",
1708 "(V?)CVTSD2SSrr",
1709 "(V?)CVTSI642SDrr",
1710 "(V?)CVTSI2SDrr",
1711 "(V?)CVTSI2SSrr",
1712 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001713
1714def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
1715 let Latency = 4;
1716 let NumMicroOps = 2;
1717 let ResourceCycles = [1,1];
1718}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001719def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001720
Craig Topperf846e2d2018-04-19 05:34:05 +00001721def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001722 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001723 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001724 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001725}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001726def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001727
Gadi Haberd76f7b82017-08-28 10:04:16 +00001728def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001729 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001730 let NumMicroOps = 3;
1731 let ResourceCycles = [2,1];
1732}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001733def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
1734 "FICOM32m",
1735 "FICOMP16m",
1736 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001737
1738def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001739 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001740 let NumMicroOps = 3;
1741 let ResourceCycles = [1,1,1];
1742}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001743def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
1744 "(V?)CVTSD2SIrm",
1745 "(V?)CVTSS2SI64rm",
1746 "(V?)CVTSS2SIrm",
1747 "(V?)CVTTSD2SI64rm",
1748 "(V?)CVTTSD2SIrm",
1749 "VCVTTSS2SI64rm",
1750 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001751
1752def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001753 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001754 let NumMicroOps = 3;
1755 let ResourceCycles = [1,1,1];
1756}
1757def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001758
1759def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1760 let Latency = 11;
1761 let NumMicroOps = 3;
1762 let ResourceCycles = [1,1,1];
1763}
1764def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001765
1766def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001767 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001768 let NumMicroOps = 3;
1769 let ResourceCycles = [1,1,1];
1770}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001771def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
1772 "CVTPD2PSrm",
1773 "CVTTPD2DQrm",
1774 "MMX_CVTPD2PIirm",
1775 "MMX_CVTTPD2PIirm",
1776 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001777
1778def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
1779 let Latency = 9;
1780 let NumMicroOps = 3;
1781 let ResourceCycles = [1,1,1];
1782}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001783def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
1784 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001785
1786def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001787 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001788 let NumMicroOps = 3;
1789 let ResourceCycles = [1,1,1];
1790}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001791def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001792
1793def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001794 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001795 let NumMicroOps = 3;
1796 let ResourceCycles = [1,1,1];
1797}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001798def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
1799 "VPBROADCASTBrm",
1800 "VPBROADCASTWYrm",
1801 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001802
1803def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
1804 let Latency = 4;
1805 let NumMicroOps = 4;
1806 let ResourceCycles = [4];
1807}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00001808def: InstRW<[HWWriteResGroup81], (instrs FNCLEX)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001809
1810def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
1811 let Latency = 4;
1812 let NumMicroOps = 4;
1813 let ResourceCycles = [1,3];
1814}
1815def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
1816
1817def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
1818 let Latency = 4;
1819 let NumMicroOps = 4;
1820 let ResourceCycles = [1,1,2];
1821}
1822def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
1823
1824def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001825 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001826 let NumMicroOps = 4;
1827 let ResourceCycles = [1,1,1,1];
1828}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001829def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
1830 "VMASKMOVPS(Y?)mr",
1831 "VPMASKMOVD(Y?)mr",
1832 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001833
1834def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001835 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001836 let NumMicroOps = 4;
1837 let ResourceCycles = [1,1,1,1];
1838}
1839def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
1840
1841def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001842 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001843 let NumMicroOps = 4;
1844 let ResourceCycles = [1,1,1,1];
1845}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001846def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
1847 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001848
1849def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001850 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001851 let NumMicroOps = 5;
1852 let ResourceCycles = [1,2,1,1];
1853}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001854def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
1855 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001856
1857def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001858 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001859 let NumMicroOps = 6;
1860 let ResourceCycles = [1,1,4];
1861}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001862def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
1863 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001864
1865def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001866 let Latency = 5;
1867 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001868 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001869}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001870def: InstRW<[HWWriteResGroup89], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001871
Gadi Haberd76f7b82017-08-28 10:04:16 +00001872def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001873 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001874 let NumMicroOps = 1;
1875 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001876}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001877def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
1878 "(V?)MULPS(Y?)rr",
1879 "(V?)MULSDrr",
Simon Pilgrim3c066172018-04-19 11:37:26 +00001880 "(V?)MULSSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001881
Craig Topper8104f262018-04-02 05:33:28 +00001882def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001883 let Latency = 16;
1884 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001885 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001886}
1887def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
1888
Craig Topper8104f262018-04-02 05:33:28 +00001889def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001890 let Latency = 18;
1891 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001892 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00001893}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001894def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001895
1896def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1897 let Latency = 11;
1898 let NumMicroOps = 2;
1899 let ResourceCycles = [1,1];
1900}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001901def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
1902 "(V?)PHMINPOSUWrm",
1903 "(V?)PMADDUBSWrm",
1904 "(V?)PMADDWDrm",
1905 "(V?)PMULDQrm",
1906 "(V?)PMULHRSWrm",
1907 "(V?)PMULHUWrm",
1908 "(V?)PMULHWrm",
1909 "(V?)PMULLWrm",
1910 "(V?)PMULUDQrm",
1911 "(V?)PSADBWrm",
1912 "(V?)RCPPSm",
1913 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001914
1915def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
1916 let Latency = 12;
1917 let NumMicroOps = 2;
1918 let ResourceCycles = [1,1];
1919}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001920def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
1921 "MUL_F64m",
1922 "VPCMPGTQYrm",
1923 "VPMADDUBSWYrm",
1924 "VPMADDWDYrm",
1925 "VPMULDQYrm",
1926 "VPMULHRSWYrm",
1927 "VPMULHUWYrm",
1928 "VPMULHWYrm",
1929 "VPMULLWYrm",
1930 "VPMULUDQYrm",
1931 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001932
Gadi Haberd76f7b82017-08-28 10:04:16 +00001933def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001934 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001935 let NumMicroOps = 2;
1936 let ResourceCycles = [1,1];
1937}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001938def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
1939 "(V?)MULPSrm",
1940 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001941
1942def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
1943 let Latency = 12;
1944 let NumMicroOps = 2;
1945 let ResourceCycles = [1,1];
1946}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001947def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
1948 "VMULPSYrm",
1949 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001950
1951def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
1952 let Latency = 10;
1953 let NumMicroOps = 2;
1954 let ResourceCycles = [1,1];
1955}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001956def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
1957 "(V?)MULSSrm",
1958 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001959
1960def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
1961 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001962 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001963 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001964}
Simon Pilgrim44278f62018-04-21 16:20:28 +00001965def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001966
Gadi Haberd76f7b82017-08-28 10:04:16 +00001967def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
1968 let Latency = 5;
1969 let NumMicroOps = 3;
1970 let ResourceCycles = [1,1,1];
1971}
1972def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
1973
1974def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001975 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001976 let NumMicroOps = 3;
1977 let ResourceCycles = [1,1,1];
1978}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001979def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001980
Gadi Haber2cf601f2017-12-08 09:48:44 +00001981def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
1982 let Latency = 12;
1983 let NumMicroOps = 4;
1984 let ResourceCycles = [1,2,1];
1985}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001986def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
1987 "VHADDPSYrm",
1988 "VHSUBPDYrm",
1989 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001990
Gadi Haberd76f7b82017-08-28 10:04:16 +00001991def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001992 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001993 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001994 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001995}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001996def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001997
Gadi Haberd76f7b82017-08-28 10:04:16 +00001998def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00001999 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002000 let NumMicroOps = 4;
2001 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002002}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002003def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002004
Gadi Haberd76f7b82017-08-28 10:04:16 +00002005def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2006 let Latency = 5;
2007 let NumMicroOps = 5;
2008 let ResourceCycles = [1,4];
2009}
2010def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2011
2012def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2013 let Latency = 5;
2014 let NumMicroOps = 5;
2015 let ResourceCycles = [1,4];
2016}
2017def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2018
2019def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2020 let Latency = 5;
2021 let NumMicroOps = 5;
2022 let ResourceCycles = [2,3];
2023}
Craig Topper13a16502018-03-19 00:56:09 +00002024def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002025
2026def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2027 let Latency = 6;
2028 let NumMicroOps = 2;
2029 let ResourceCycles = [1,1];
2030}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002031def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2032 "VCVTPD2DQYrr",
2033 "VCVTPD2PSYrr",
2034 "VCVTPS2PHYrr",
2035 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002036
2037def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002038 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002039 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002040 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002041}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002042def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2043 "ADD_FI32m",
2044 "SUBR_FI16m",
2045 "SUBR_FI32m",
2046 "SUB_FI16m",
2047 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002048 "VROUNDPDYm",
2049 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002050
Gadi Haber2cf601f2017-12-08 09:48:44 +00002051def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2052 let Latency = 12;
2053 let NumMicroOps = 3;
2054 let ResourceCycles = [2,1];
2055}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002056def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2057 "(V?)ROUNDPSm",
2058 "(V?)ROUNDSDm",
2059 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002060
Gadi Haberd76f7b82017-08-28 10:04:16 +00002061def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002062 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002063 let NumMicroOps = 3;
2064 let ResourceCycles = [1,1,1];
2065}
2066def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2067
2068def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2069 let Latency = 6;
2070 let NumMicroOps = 4;
2071 let ResourceCycles = [1,1,2];
2072}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002073def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2074 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002075
2076def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002077 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002078 let NumMicroOps = 4;
2079 let ResourceCycles = [1,1,1,1];
2080}
2081def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2082
2083def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2084 let Latency = 6;
2085 let NumMicroOps = 4;
2086 let ResourceCycles = [1,1,1,1];
2087}
2088def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2089
2090def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2091 let Latency = 6;
2092 let NumMicroOps = 6;
2093 let ResourceCycles = [1,5];
2094}
2095def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2096
2097def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002098 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002099 let NumMicroOps = 6;
2100 let ResourceCycles = [1,1,1,1,2];
2101}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002102def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2103 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002104
Gadi Haber2cf601f2017-12-08 09:48:44 +00002105def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2106 let Latency = 14;
2107 let NumMicroOps = 4;
2108 let ResourceCycles = [1,2,1];
2109}
2110def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2111
Gadi Haberd76f7b82017-08-28 10:04:16 +00002112def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2113 let Latency = 7;
2114 let NumMicroOps = 7;
2115 let ResourceCycles = [2,2,1,2];
2116}
Craig Topper2d451e72018-03-18 08:38:06 +00002117def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002118
2119def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002120 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002121 let NumMicroOps = 3;
2122 let ResourceCycles = [1,1,1];
2123}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002124def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2125 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002126
2127def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2128 let Latency = 9;
2129 let NumMicroOps = 3;
2130 let ResourceCycles = [1,1,1];
2131}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002132def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002133
2134def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002135 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002136 let NumMicroOps = 4;
2137 let ResourceCycles = [1,1,1,1];
2138}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002139def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002140
Gadi Haber2cf601f2017-12-08 09:48:44 +00002141def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2142 let Latency = 17;
2143 let NumMicroOps = 3;
2144 let ResourceCycles = [2,1];
2145}
2146def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2147
Gadi Haberd76f7b82017-08-28 10:04:16 +00002148def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002149 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002150 let NumMicroOps = 10;
2151 let ResourceCycles = [1,1,1,4,1,2];
2152}
Craig Topper13a16502018-03-19 00:56:09 +00002153def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002154
Craig Topper8104f262018-04-02 05:33:28 +00002155def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002156 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002157 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002158 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002159}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002160def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2161 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002162
Gadi Haberd76f7b82017-08-28 10:04:16 +00002163def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2164 let Latency = 11;
2165 let NumMicroOps = 3;
2166 let ResourceCycles = [2,1];
2167}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002168def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2169 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002170
Gadi Haberd76f7b82017-08-28 10:04:16 +00002171def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002172 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002173 let NumMicroOps = 4;
2174 let ResourceCycles = [2,1,1];
2175}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002176def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2177 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002178
2179def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2180 let Latency = 11;
2181 let NumMicroOps = 7;
2182 let ResourceCycles = [2,2,3];
2183}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002184def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2185 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002186
2187def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2188 let Latency = 11;
2189 let NumMicroOps = 9;
2190 let ResourceCycles = [1,4,1,3];
2191}
2192def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2193
2194def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2195 let Latency = 11;
2196 let NumMicroOps = 11;
2197 let ResourceCycles = [2,9];
2198}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002199def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002200
2201def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002202 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002203 let NumMicroOps = 14;
2204 let ResourceCycles = [1,1,1,4,2,5];
2205}
2206def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2207
Craig Topper8104f262018-04-02 05:33:28 +00002208def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002209 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002210 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002211 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002212}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002213def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2214 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002215
Craig Topper8104f262018-04-02 05:33:28 +00002216def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002217 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002218 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002219 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002220}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002221def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002222
2223def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002224 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002225 let NumMicroOps = 11;
2226 let ResourceCycles = [2,1,1,3,1,3];
2227}
Craig Topper13a16502018-03-19 00:56:09 +00002228def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002229
Craig Topper8104f262018-04-02 05:33:28 +00002230def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002231 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002232 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002233 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002234}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002235def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002236
Gadi Haberd76f7b82017-08-28 10:04:16 +00002237def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2238 let Latency = 14;
2239 let NumMicroOps = 4;
2240 let ResourceCycles = [2,1,1];
2241}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002242def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002243
2244def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002245 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002246 let NumMicroOps = 5;
2247 let ResourceCycles = [2,1,1,1];
2248}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002249def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002250
Gadi Haber2cf601f2017-12-08 09:48:44 +00002251def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2252 let Latency = 21;
2253 let NumMicroOps = 5;
2254 let ResourceCycles = [2,1,1,1];
2255}
2256def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2257
Gadi Haberd76f7b82017-08-28 10:04:16 +00002258def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2259 let Latency = 14;
2260 let NumMicroOps = 10;
2261 let ResourceCycles = [2,3,1,4];
2262}
2263def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2264
2265def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002266 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002267 let NumMicroOps = 15;
2268 let ResourceCycles = [1,14];
2269}
2270def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2271
2272def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002273 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002274 let NumMicroOps = 8;
2275 let ResourceCycles = [1,1,1,1,1,1,2];
2276}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002277def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2278 "INSL",
2279 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002280
2281def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2282 let Latency = 16;
2283 let NumMicroOps = 16;
2284 let ResourceCycles = [16];
2285}
2286def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2287
2288def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002289 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002290 let NumMicroOps = 19;
2291 let ResourceCycles = [2,1,4,1,1,4,6];
2292}
2293def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2294
2295def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2296 let Latency = 17;
2297 let NumMicroOps = 15;
2298 let ResourceCycles = [2,1,2,4,2,4];
2299}
2300def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2301
Gadi Haberd76f7b82017-08-28 10:04:16 +00002302def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2303 let Latency = 18;
2304 let NumMicroOps = 8;
2305 let ResourceCycles = [1,1,1,5];
2306}
2307def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002308def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002309
Gadi Haberd76f7b82017-08-28 10:04:16 +00002310def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002311 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002312 let NumMicroOps = 19;
2313 let ResourceCycles = [3,1,15];
2314}
Craig Topper391c6f92017-12-10 01:24:08 +00002315def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002316
Gadi Haberd76f7b82017-08-28 10:04:16 +00002317def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2318 let Latency = 20;
2319 let NumMicroOps = 1;
2320 let ResourceCycles = [1];
2321}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002322def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2323 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002324 "DIV_FrST0")>;
2325
2326def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2327 let Latency = 20;
2328 let NumMicroOps = 1;
2329 let ResourceCycles = [1,14];
2330}
2331def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2332 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002333
2334def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002335 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002336 let NumMicroOps = 2;
2337 let ResourceCycles = [1,1];
2338}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002339def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002340 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002341
Craig Topper8104f262018-04-02 05:33:28 +00002342def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002343 let Latency = 26;
2344 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002345 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002346}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002347def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002348
Craig Topper8104f262018-04-02 05:33:28 +00002349def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002350 let Latency = 21;
2351 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002352 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002353}
2354def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2355
Craig Topper8104f262018-04-02 05:33:28 +00002356def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002357 let Latency = 22;
2358 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002359 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002360}
2361def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2362
Craig Topper8104f262018-04-02 05:33:28 +00002363def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002364 let Latency = 25;
2365 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002366 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002367}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002368def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002369
2370def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2371 let Latency = 20;
2372 let NumMicroOps = 10;
2373 let ResourceCycles = [1,2,7];
2374}
2375def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2376
Craig Topper8104f262018-04-02 05:33:28 +00002377def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002378 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002379 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002380 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002381}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002382def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2383 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002384
Craig Topper8104f262018-04-02 05:33:28 +00002385def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002386 let Latency = 21;
2387 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002388 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002389}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002390def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2391 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002392
Craig Topper8104f262018-04-02 05:33:28 +00002393def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002394 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002395 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002396 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002397}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002398def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2399 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002400
2401def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002402 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002403 let NumMicroOps = 3;
2404 let ResourceCycles = [1,1,1];
2405}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002406def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2407 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002408
2409def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2410 let Latency = 24;
2411 let NumMicroOps = 1;
2412 let ResourceCycles = [1];
2413}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002414def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2415 "DIVR_FST0r",
2416 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002417
2418def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002419 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002420 let NumMicroOps = 2;
2421 let ResourceCycles = [1,1];
2422}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002423def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2424 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002425
2426def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002427 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002428 let NumMicroOps = 27;
2429 let ResourceCycles = [1,5,1,1,19];
2430}
2431def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2432
2433def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002434 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002435 let NumMicroOps = 28;
2436 let ResourceCycles = [1,6,1,1,19];
2437}
Craig Topper2d451e72018-03-18 08:38:06 +00002438def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002439
2440def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002441 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002442 let NumMicroOps = 3;
2443 let ResourceCycles = [1,1,1];
2444}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002445def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2446 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002447
Gadi Haberd76f7b82017-08-28 10:04:16 +00002448def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002449 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002450 let NumMicroOps = 23;
2451 let ResourceCycles = [1,5,3,4,10];
2452}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002453def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2454 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002455
2456def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002457 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002458 let NumMicroOps = 23;
2459 let ResourceCycles = [1,5,2,1,4,10];
2460}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002461def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2462 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002463
2464def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2465 let Latency = 31;
2466 let NumMicroOps = 31;
2467 let ResourceCycles = [8,1,21,1];
2468}
2469def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2470
Craig Topper8104f262018-04-02 05:33:28 +00002471def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002472 let Latency = 35;
2473 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002474 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002475}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002476def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2477 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002478
Craig Topper8104f262018-04-02 05:33:28 +00002479def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002480 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002481 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002482 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002483}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002484def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2485 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002486
2487def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002488 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002489 let NumMicroOps = 18;
2490 let ResourceCycles = [1,1,2,3,1,1,1,8];
2491}
2492def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2493
2494def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2495 let Latency = 42;
2496 let NumMicroOps = 22;
2497 let ResourceCycles = [2,20];
2498}
Craig Topper2d451e72018-03-18 08:38:06 +00002499def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002500
2501def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002502 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002503 let NumMicroOps = 64;
2504 let ResourceCycles = [2,2,8,1,10,2,39];
2505}
2506def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002507
2508def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002509 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002510 let NumMicroOps = 88;
2511 let ResourceCycles = [4,4,31,1,2,1,45];
2512}
Craig Topper2d451e72018-03-18 08:38:06 +00002513def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002514
2515def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002516 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002517 let NumMicroOps = 90;
2518 let ResourceCycles = [4,2,33,1,2,1,47];
2519}
Craig Topper2d451e72018-03-18 08:38:06 +00002520def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002521
2522def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2523 let Latency = 75;
2524 let NumMicroOps = 15;
2525 let ResourceCycles = [6,3,6];
2526}
Simon Pilgrim8cd01aa2018-04-23 16:10:50 +00002527def: InstRW<[HWWriteResGroup180], (instrs FNINIT)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002528
2529def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2530 let Latency = 98;
2531 let NumMicroOps = 32;
2532 let ResourceCycles = [7,7,3,3,1,11];
2533}
2534def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2535
2536def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2537 let Latency = 112;
2538 let NumMicroOps = 66;
2539 let ResourceCycles = [4,2,4,8,14,34];
2540}
2541def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2542
2543def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002544 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002545 let NumMicroOps = 100;
2546 let ResourceCycles = [9,9,11,8,1,11,21,30];
2547}
2548def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00002549
Gadi Haber2cf601f2017-12-08 09:48:44 +00002550def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
2551 let Latency = 26;
2552 let NumMicroOps = 12;
2553 let ResourceCycles = [2,2,1,3,2,2];
2554}
Craig Topper17a31182017-12-16 18:35:29 +00002555def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
2556 VPGATHERDQrm,
2557 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002558
2559def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2560 let Latency = 24;
2561 let NumMicroOps = 22;
2562 let ResourceCycles = [5,3,4,1,5,4];
2563}
Craig Topper17a31182017-12-16 18:35:29 +00002564def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
2565 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002566
2567def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2568 let Latency = 28;
2569 let NumMicroOps = 22;
2570 let ResourceCycles = [5,3,4,1,5,4];
2571}
Craig Topper17a31182017-12-16 18:35:29 +00002572def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002573
2574def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2575 let Latency = 25;
2576 let NumMicroOps = 22;
2577 let ResourceCycles = [5,3,4,1,5,4];
2578}
Craig Topper17a31182017-12-16 18:35:29 +00002579def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002580
2581def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2582 let Latency = 27;
2583 let NumMicroOps = 20;
2584 let ResourceCycles = [3,3,4,1,5,4];
2585}
Craig Topper17a31182017-12-16 18:35:29 +00002586def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
2587 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002588
2589def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2590 let Latency = 27;
2591 let NumMicroOps = 34;
2592 let ResourceCycles = [5,3,8,1,9,8];
2593}
Craig Topper17a31182017-12-16 18:35:29 +00002594def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
2595 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002596
2597def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2598 let Latency = 23;
2599 let NumMicroOps = 14;
2600 let ResourceCycles = [3,3,2,1,3,2];
2601}
Craig Topper17a31182017-12-16 18:35:29 +00002602def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
2603 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002604
2605def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2606 let Latency = 28;
2607 let NumMicroOps = 15;
2608 let ResourceCycles = [3,3,2,1,4,2];
2609}
Craig Topper17a31182017-12-16 18:35:29 +00002610def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002611
2612def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2613 let Latency = 25;
2614 let NumMicroOps = 15;
2615 let ResourceCycles = [3,3,2,1,4,2];
2616}
Craig Topper17a31182017-12-16 18:35:29 +00002617def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
2618 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002619
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00002620} // SchedModel