blob: 4f09cfeb84c8d3fdccf16eecea018676dbcf0cea [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.
Craig Topper02daec02018-04-02 01:12:32 +0000516def : InstRW<[HWWrite2P1], (instregex "FXAM")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000517
518// FPREM.
Craig Topper02daec02018-04-02 01:12:32 +0000519def HWWriteFPREM : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000520 let Latency = 19;
521 let NumMicroOps = 28;
522}
Craig Topper02daec02018-04-02 01:12:32 +0000523def : InstRW<[HWWriteFPREM], (instrs FPREM)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000524
525// FPREM1.
Craig Topper02daec02018-04-02 01:12:32 +0000526def HWWriteFPREM1 : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000527 let Latency = 27;
528 let NumMicroOps = 41;
529}
Craig Topper02daec02018-04-02 01:12:32 +0000530def : InstRW<[HWWriteFPREM1], (instrs FPREM1)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000531
532// FRNDINT.
Craig Topper02daec02018-04-02 01:12:32 +0000533def HWWriteFRNDINT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000534 let Latency = 11;
535 let NumMicroOps = 17;
536}
Craig Topper02daec02018-04-02 01:12:32 +0000537def : InstRW<[HWWriteFRNDINT], (instregex "FRNDINT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000538
539//-- Math instructions --//
540
541// FSCALE.
Craig Topper02daec02018-04-02 01:12:32 +0000542def HWWriteFSCALE : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000543 let Latency = 75; // 49-125
544 let NumMicroOps = 50; // 25-75
545}
Craig Topper02daec02018-04-02 01:12:32 +0000546def : InstRW<[HWWriteFSCALE], (instregex "FSCALE")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000547
548// FXTRACT.
Craig Topper02daec02018-04-02 01:12:32 +0000549def HWWriteFXTRACT : SchedWriteRes<[]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +0000550 let Latency = 15;
551 let NumMicroOps = 17;
552}
Craig Topper02daec02018-04-02 01:12:32 +0000553def : InstRW<[HWWriteFXTRACT], (instregex "FXTRACT")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +0000554
Andrew V. Tischenko8cb1d092017-06-08 16:44:13 +0000555////////////////////////////////////////////////////////////////////////////////
556// Horizontal add/sub instructions.
557////////////////////////////////////////////////////////////////////////////////
558
Simon 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 Pilgrimec2f8782018-03-21 16:19:03 +0000713def: InstRW<[HWWriteResGroup6], (instregex "FINCSTP",
714 "FNOP")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000715
716def HWWriteResGroup7 : SchedWriteRes<[HWPort06]> {
717 let Latency = 1;
718 let NumMicroOps = 1;
719 let ResourceCycles = [1];
720}
Craig Topperfbe31322018-04-05 21:56:19 +0000721def: InstRW<[HWWriteResGroup7], (instrs CDQ, CQO)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000722def: InstRW<[HWWriteResGroup7], (instregex "BT(16|32|64)ri8",
723 "BT(16|32|64)rr",
724 "BTC(16|32|64)ri8",
725 "BTC(16|32|64)rr",
726 "BTR(16|32|64)ri8",
727 "BTR(16|32|64)rr",
728 "BTS(16|32|64)ri8",
729 "BTS(16|32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000730 "RORX(32|64)ri",
731 "SAR(8|16|32|64)r1",
732 "SAR(8|16|32|64)ri",
733 "SARX(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000734 "SHL(8|16|32|64)r1",
735 "SHL(8|16|32|64)ri",
736 "SHLX(32|64)rr",
737 "SHR(8|16|32|64)r1",
738 "SHR(8|16|32|64)ri",
739 "SHRX(32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000740
741def HWWriteResGroup8 : SchedWriteRes<[HWPort15]> {
742 let Latency = 1;
743 let NumMicroOps = 1;
744 let ResourceCycles = [1];
745}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000746def: InstRW<[HWWriteResGroup8], (instregex "ANDN(32|64)rr",
747 "BLSI(32|64)rr",
748 "BLSMSK(32|64)rr",
749 "BLSR(32|64)rr",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000750 "LEA(16|32|64)(_32)?r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000751
752def HWWriteResGroup9 : SchedWriteRes<[HWPort015]> {
753 let Latency = 1;
754 let NumMicroOps = 1;
755 let ResourceCycles = [1];
756}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000757def: InstRW<[HWWriteResGroup9], (instregex "MMX_MOVQ64rr",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000758 "VPBLENDD(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000759
760def HWWriteResGroup10 : SchedWriteRes<[HWPort0156]> {
761 let Latency = 1;
762 let NumMicroOps = 1;
763 let ResourceCycles = [1];
764}
Craig Topperfbe31322018-04-05 21:56:19 +0000765def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE)>;
Craig Topperf0d04262018-04-06 16:16:48 +0000766def: InstRW<[HWWriteResGroup10], (instregex "CLC",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000767 "CMC",
Craig Topper655e1db2018-04-17 19:35:14 +0000768 "LAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000769 "NOOP",
Craig Topper655e1db2018-04-17 19:35:14 +0000770 "SAHF", // TODO: This doesn't match Agner's data
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000771 "SGDT64m",
772 "SIDT64m",
773 "SLDT64m",
774 "SMSW16m",
775 "STC",
776 "STRm",
Craig Topperb5f26592018-04-19 18:00:17 +0000777 "SYSCALL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000778
779def HWWriteResGroup11 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000780 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000781 let NumMicroOps = 2;
782 let ResourceCycles = [1,1];
783}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000784def: InstRW<[HWWriteResGroup11], (instregex "VCVTPH2PSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000785 "(V?)CVTPS2PDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000786
Gadi Haber2cf601f2017-12-08 09:48:44 +0000787def HWWriteResGroup11_1 : SchedWriteRes<[HWPort0,HWPort23]> {
788 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000789 let NumMicroOps = 2;
790 let ResourceCycles = [1,1];
791}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000792def: InstRW<[HWWriteResGroup11_1], (instregex "VCVTPH2PSYrm",
793 "(V?)CVTSS2SDrm",
794 "VPSLLVQrm",
795 "VPSRLVQrm",
796 "VTESTPDrm",
797 "VTESTPSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000798
799def HWWriteResGroup11_2 : SchedWriteRes<[HWPort0,HWPort23]> {
800 let Latency = 8;
801 let NumMicroOps = 2;
802 let ResourceCycles = [1,1];
803}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000804def: InstRW<[HWWriteResGroup11_2], (instregex "VPSLLDYrm",
805 "VPSLLQYrm",
806 "VPSLLVQYrm",
807 "VPSLLWYrm",
808 "VPSRADYrm",
809 "VPSRAWYrm",
810 "VPSRLDYrm",
811 "VPSRLQYrm",
812 "VPSRLVQYrm",
813 "VPSRLWYrm",
814 "VTESTPDYrm",
815 "VTESTPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000816
817def HWWriteResGroup12 : SchedWriteRes<[HWPort1,HWPort23]> {
818 let Latency = 8;
819 let NumMicroOps = 2;
820 let ResourceCycles = [1,1];
821}
Simon Pilgrimf33d9052018-03-26 18:19:28 +0000822def: InstRW<[HWWriteResGroup12], (instregex "FCOM32m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000823 "FCOM64m",
824 "FCOMP32m",
825 "FCOMP64m",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000826 "MMX_CVTPI2PSirm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000827 "PDEP(32|64)rm",
828 "PEXT(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000829 "(V?)ADDSDrm",
830 "(V?)ADDSSrm",
831 "(V?)CMPSDrm",
832 "(V?)CMPSSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000833 "(V?)MAX(C?)SDrm",
834 "(V?)MAX(C?)SSrm",
835 "(V?)MIN(C?)SDrm",
836 "(V?)MIN(C?)SSrm",
837 "(V?)SUBSDrm",
Simon Pilgrim86e3c2692018-04-17 07:22:44 +0000838 "(V?)SUBSSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000839
Craig Topperf846e2d2018-04-19 05:34:05 +0000840def HWWriteResGroup12_1 : SchedWriteRes<[HWPort1,HWPort0156,HWPort23]> {
841 let Latency = 8;
842 let NumMicroOps = 3;
843 let ResourceCycles = [1,1,1];
844}
845def: InstRW<[HWWriteResGroup12_1], (instrs IMUL16rmi, IMUL16rmi8)>;
846
847def HWWriteResGroup12_2 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156,HWPort23]> {
848 let Latency = 9;
849 let NumMicroOps = 5;
850 let ResourceCycles = [1,1,2,1];
851}
852def: InstRW<[HWWriteResGroup12_2], (instrs IMUL16m, MUL16m)>;
853
Gadi Haberd76f7b82017-08-28 10:04:16 +0000854def HWWriteResGroup13 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000855 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000856 let NumMicroOps = 2;
857 let ResourceCycles = [1,1];
858}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000859def: InstRW<[HWWriteResGroup13], (instregex "PUNPCKLWDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000860 "(V?)INSERTPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000861 "(V?)PACKSSDWrm",
862 "(V?)PACKSSWBrm",
863 "(V?)PACKUSDWrm",
864 "(V?)PACKUSWBrm",
865 "(V?)PALIGNRrmi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000866 "VPERMILPDmi",
867 "VPERMILPDrm",
868 "VPERMILPSmi",
869 "VPERMILPSrm",
870 "(V?)PSHUFBrm",
871 "(V?)PSHUFDmi",
872 "(V?)PSHUFHWmi",
873 "(V?)PSHUFLWmi",
874 "(V?)PUNPCKHBWrm",
875 "(V?)PUNPCKHDQrm",
876 "(V?)PUNPCKHQDQrm",
877 "(V?)PUNPCKHWDrm",
878 "(V?)PUNPCKLBWrm",
879 "(V?)PUNPCKLDQrm",
880 "(V?)PUNPCKLQDQrm",
881 "(V?)PUNPCKLWDrm",
882 "(V?)SHUFPDrmi",
883 "(V?)SHUFPSrmi",
884 "(V?)UNPCKHPDrm",
885 "(V?)UNPCKHPSrm",
886 "(V?)UNPCKLPDrm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +0000887 "(V?)UNPCKLPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000888
Gadi Haber2cf601f2017-12-08 09:48:44 +0000889def HWWriteResGroup13_1 : SchedWriteRes<[HWPort5,HWPort23]> {
890 let Latency = 8;
891 let NumMicroOps = 2;
892 let ResourceCycles = [1,1];
893}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000894def: InstRW<[HWWriteResGroup13_1], (instregex "VANDNPDYrm",
895 "VANDNPSYrm",
896 "VANDPDYrm",
897 "VANDPSYrm",
898 "VORPDYrm",
899 "VORPSYrm",
900 "VPACKSSDWYrm",
901 "VPACKSSWBYrm",
902 "VPACKUSDWYrm",
903 "VPACKUSWBYrm",
904 "VPALIGNRYrmi",
905 "VPBLENDWYrmi",
906 "VPERMILPDYmi",
907 "VPERMILPDYrm",
908 "VPERMILPSYmi",
909 "VPERMILPSYrm",
910 "VPMOVSXBDYrm",
911 "VPMOVSXBQYrm",
912 "VPMOVSXWQYrm",
913 "VPSHUFBYrm",
914 "VPSHUFDYmi",
915 "VPSHUFHWYmi",
916 "VPSHUFLWYmi",
917 "VPUNPCKHBWYrm",
918 "VPUNPCKHDQYrm",
919 "VPUNPCKHQDQYrm",
920 "VPUNPCKHWDYrm",
921 "VPUNPCKLBWYrm",
922 "VPUNPCKLDQYrm",
923 "VPUNPCKLQDQYrm",
924 "VPUNPCKLWDYrm",
925 "VSHUFPDYrmi",
926 "VSHUFPSYrmi",
927 "VUNPCKHPDYrm",
928 "VUNPCKHPSYrm",
929 "VUNPCKLPDYrm",
930 "VUNPCKLPSYrm",
931 "VXORPDYrm",
932 "VXORPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000933
934def HWWriteResGroup13_2 : SchedWriteRes<[HWPort5,HWPort23]> {
935 let Latency = 6;
936 let NumMicroOps = 2;
937 let ResourceCycles = [1,1];
938}
Simon Pilgrim0a334a82018-04-23 11:57:15 +0000939def: InstRW<[HWWriteResGroup13_2], (instregex "(V?)MOVHPDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000940 "(V?)MOVHPSrm",
941 "(V?)MOVLPDrm",
942 "(V?)MOVLPSrm",
943 "(V?)PINSRBrm",
944 "(V?)PINSRDrm",
945 "(V?)PINSRQrm",
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +0000946 "(V?)PINSRWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000947
Gadi Haberd76f7b82017-08-28 10:04:16 +0000948def HWWriteResGroup14 : SchedWriteRes<[HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000949 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000950 let NumMicroOps = 2;
951 let ResourceCycles = [1,1];
952}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000953def: InstRW<[HWWriteResGroup14], (instregex "FARJMP64",
954 "JMP(16|32|64)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000955
956def HWWriteResGroup15 : SchedWriteRes<[HWPort23,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000957 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000958 let NumMicroOps = 2;
959 let ResourceCycles = [1,1];
960}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000961def: InstRW<[HWWriteResGroup15], (instregex "BT(16|32|64)mi8",
962 "RORX(32|64)mi",
963 "SARX(32|64)rm",
964 "SHLX(32|64)rm",
965 "SHRX(32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000966
967def HWWriteResGroup16 : SchedWriteRes<[HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +0000968 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +0000969 let NumMicroOps = 2;
970 let ResourceCycles = [1,1];
971}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000972def: InstRW<[HWWriteResGroup16], (instregex "ANDN(32|64)rm",
973 "BLSI(32|64)rm",
974 "BLSMSK(32|64)rm",
975 "BLSR(32|64)rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000976 "MOVBE(16|32|64)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +0000977
978def HWWriteResGroup16_1 : SchedWriteRes<[HWPort23,HWPort15]> {
979 let Latency = 7;
980 let NumMicroOps = 2;
981 let ResourceCycles = [1,1];
982}
Simon Pilgrimec2f8782018-03-21 16:19:03 +0000983def: InstRW<[HWWriteResGroup16_1], (instregex "(V?)PABSBrm",
984 "(V?)PABSDrm",
985 "(V?)PABSWrm",
986 "(V?)PADDBrm",
987 "(V?)PADDDrm",
988 "(V?)PADDQrm",
989 "(V?)PADDSBrm",
990 "(V?)PADDSWrm",
991 "(V?)PADDUSBrm",
992 "(V?)PADDUSWrm",
993 "(V?)PADDWrm",
994 "(V?)PAVGBrm",
995 "(V?)PAVGWrm",
996 "(V?)PCMPEQBrm",
997 "(V?)PCMPEQDrm",
998 "(V?)PCMPEQQrm",
999 "(V?)PCMPEQWrm",
1000 "(V?)PCMPGTBrm",
1001 "(V?)PCMPGTDrm",
1002 "(V?)PCMPGTWrm",
1003 "(V?)PMAXSBrm",
1004 "(V?)PMAXSDrm",
1005 "(V?)PMAXSWrm",
1006 "(V?)PMAXUBrm",
1007 "(V?)PMAXUDrm",
1008 "(V?)PMAXUWrm",
1009 "(V?)PMINSBrm",
1010 "(V?)PMINSDrm",
1011 "(V?)PMINSWrm",
1012 "(V?)PMINUBrm",
1013 "(V?)PMINUDrm",
1014 "(V?)PMINUWrm",
1015 "(V?)PSIGNBrm",
1016 "(V?)PSIGNDrm",
1017 "(V?)PSIGNWrm",
1018 "(V?)PSUBBrm",
1019 "(V?)PSUBDrm",
1020 "(V?)PSUBQrm",
1021 "(V?)PSUBSBrm",
1022 "(V?)PSUBSWrm",
1023 "(V?)PSUBUSBrm",
1024 "(V?)PSUBUSWrm",
1025 "(V?)PSUBWrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001026
1027def HWWriteResGroup16_2 : SchedWriteRes<[HWPort23,HWPort15]> {
1028 let Latency = 8;
1029 let NumMicroOps = 2;
1030 let ResourceCycles = [1,1];
1031}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001032def: InstRW<[HWWriteResGroup16_2], (instregex "VPABSBYrm",
1033 "VPABSDYrm",
1034 "VPABSWYrm",
1035 "VPADDBYrm",
1036 "VPADDDYrm",
1037 "VPADDQYrm",
1038 "VPADDSBYrm",
1039 "VPADDSWYrm",
1040 "VPADDUSBYrm",
1041 "VPADDUSWYrm",
1042 "VPADDWYrm",
1043 "VPAVGBYrm",
1044 "VPAVGWYrm",
1045 "VPCMPEQBYrm",
1046 "VPCMPEQDYrm",
1047 "VPCMPEQQYrm",
1048 "VPCMPEQWYrm",
1049 "VPCMPGTBYrm",
1050 "VPCMPGTDYrm",
1051 "VPCMPGTWYrm",
1052 "VPMAXSBYrm",
1053 "VPMAXSDYrm",
1054 "VPMAXSWYrm",
1055 "VPMAXUBYrm",
1056 "VPMAXUDYrm",
1057 "VPMAXUWYrm",
1058 "VPMINSBYrm",
1059 "VPMINSDYrm",
1060 "VPMINSWYrm",
1061 "VPMINUBYrm",
1062 "VPMINUDYrm",
1063 "VPMINUWYrm",
1064 "VPSIGNBYrm",
1065 "VPSIGNDYrm",
1066 "VPSIGNWYrm",
1067 "VPSUBBYrm",
1068 "VPSUBDYrm",
1069 "VPSUBQYrm",
1070 "VPSUBSBYrm",
1071 "VPSUBSWYrm",
1072 "VPSUBUSBYrm",
1073 "VPSUBUSWYrm",
1074 "VPSUBWYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001075
1076def HWWriteResGroup17 : SchedWriteRes<[HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001077 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001078 let NumMicroOps = 2;
1079 let ResourceCycles = [1,1];
1080}
Simon Pilgrim06e16542018-04-22 18:35:53 +00001081def: InstRW<[HWWriteResGroup17], (instregex "VINSERTF128rm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001082 "VINSERTI128rm",
Simon Pilgrimd14d2e72018-04-20 21:16:05 +00001083 "VPBLENDDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001084
Gadi Haber2cf601f2017-12-08 09:48:44 +00001085def HWWriteResGroup17_1 : SchedWriteRes<[HWPort23,HWPort015]> {
1086 let Latency = 6;
1087 let NumMicroOps = 2;
1088 let ResourceCycles = [1,1];
1089}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001090def: InstRW<[HWWriteResGroup17_1], (instregex "MMX_PANDNirm",
1091 "MMX_PANDirm",
1092 "MMX_PORirm",
1093 "MMX_PXORirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001094
1095def HWWriteResGroup17_2 : SchedWriteRes<[HWPort23,HWPort015]> {
1096 let Latency = 8;
1097 let NumMicroOps = 2;
1098 let ResourceCycles = [1,1];
1099}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001100def: InstRW<[HWWriteResGroup17_2], (instregex "VBLENDPDYrmi",
1101 "VBLENDPSYrmi",
1102 "VPANDNYrm",
1103 "VPANDYrm",
1104 "VPBLENDDYrmi",
1105 "VPORYrm",
1106 "VPXORYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001107
Gadi Haberd76f7b82017-08-28 10:04:16 +00001108def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001109 let Latency = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001110 let NumMicroOps = 2;
1111 let ResourceCycles = [1,1];
1112}
Craig Topper2d451e72018-03-18 08:38:06 +00001113def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
Craig Topperf0d04262018-04-06 16:16:48 +00001114def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001115
1116def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001117 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001118 let NumMicroOps = 2;
1119 let ResourceCycles = [1,1];
1120}
1121def: InstRW<[HWWriteResGroup19], (instregex "SFENCE")>;
1122
1123def HWWriteResGroup20 : SchedWriteRes<[HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001124 let Latency = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001125 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001126 let ResourceCycles = [1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001127}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001128def: InstRW<[HWWriteResGroup20], (instregex "(V?)EXTRACTPSmr",
1129 "(V?)PEXTRBmr",
1130 "(V?)PEXTRDmr",
1131 "(V?)PEXTRQmr",
Craig Topper05242bf2018-04-21 18:07:36 +00001132 "(V?)PEXTRWmr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001133
Gadi Haberd76f7b82017-08-28 10:04:16 +00001134def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001135 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001136 let NumMicroOps = 3;
1137 let ResourceCycles = [1,1,1];
1138}
1139def: InstRW<[HWWriteResGroup21], (instregex "FNSTCW16m")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001140
Gadi Haberd76f7b82017-08-28 10:04:16 +00001141def HWWriteResGroup23 : SchedWriteRes<[HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001142 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001143 let NumMicroOps = 3;
1144 let ResourceCycles = [1,1,1];
1145}
1146def: InstRW<[HWWriteResGroup23], (instregex "MOVBE(32|64)mr")>;
1147
1148def HWWriteResGroup23_16 : SchedWriteRes<[HWPort06, HWPort237, HWPort4]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001149 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001150 let NumMicroOps = 3;
1151 let ResourceCycles = [1,1,1];
1152}
1153def: InstRW<[HWWriteResGroup23_16], (instregex "MOVBE16mr")>;
1154
1155def HWWriteResGroup24 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001156 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001157 let NumMicroOps = 3;
1158 let ResourceCycles = [1,1,1];
1159}
Craig Topper2d451e72018-03-18 08:38:06 +00001160def: InstRW<[HWWriteResGroup24], (instrs PUSH16r, PUSH32r, PUSH64r)>;
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001161def: InstRW<[HWWriteResGroup24], (instregex "PUSH(16|32|64)rmr",
1162 "PUSH64i8",
1163 "STOSB",
1164 "STOSL",
1165 "STOSQ",
1166 "STOSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001167
1168def HWWriteResGroup25 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001169 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001170 let NumMicroOps = 4;
1171 let ResourceCycles = [1,1,1,1];
1172}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001173def: InstRW<[HWWriteResGroup25], (instregex "BTC(16|32|64)mi8",
1174 "BTR(16|32|64)mi8",
1175 "BTS(16|32|64)mi8",
1176 "SAR(8|16|32|64)m1",
1177 "SAR(8|16|32|64)mi",
1178 "SHL(8|16|32|64)m1",
1179 "SHL(8|16|32|64)mi",
1180 "SHR(8|16|32|64)m1",
1181 "SHR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001182
1183def HWWriteResGroup26 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001184 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001185 let NumMicroOps = 4;
1186 let ResourceCycles = [1,1,1,1];
1187}
Craig Topperf0d04262018-04-06 16:16:48 +00001188def: InstRW<[HWWriteResGroup26], (instregex "POP(16|32|64)rmm",
1189 "PUSH(16|32|64)rmm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001190
1191def HWWriteResGroup27 : SchedWriteRes<[HWPort5]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001192 let Latency = 2;
1193 let NumMicroOps = 2;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001194 let ResourceCycles = [2];
1195}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001196def: InstRW<[HWWriteResGroup27], (instregex "MMX_PINSRWrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001197 "(V?)PINSRBrr",
1198 "(V?)PINSRDrr",
1199 "(V?)PINSRQrr",
1200 "(V?)PINSRWrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001201
Gadi Haberd76f7b82017-08-28 10:04:16 +00001202def HWWriteResGroup28 : SchedWriteRes<[HWPort01]> {
1203 let Latency = 2;
1204 let NumMicroOps = 2;
1205 let ResourceCycles = [2];
1206}
1207def: InstRW<[HWWriteResGroup28], (instregex "FDECSTP")>;
1208
1209def HWWriteResGroup29 : SchedWriteRes<[HWPort06]> {
1210 let Latency = 2;
1211 let NumMicroOps = 2;
1212 let ResourceCycles = [2];
1213}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001214def: InstRW<[HWWriteResGroup29], (instregex "ROL(8|16|32|64)r1",
1215 "ROL(8|16|32|64)ri",
1216 "ROR(8|16|32|64)r1",
1217 "ROR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001218
1219def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
1220 let Latency = 2;
1221 let NumMicroOps = 2;
1222 let ResourceCycles = [2];
1223}
1224def: InstRW<[HWWriteResGroup30], (instregex "LFENCE")>;
1225def: InstRW<[HWWriteResGroup30], (instregex "MFENCE")>;
1226def: InstRW<[HWWriteResGroup30], (instregex "WAIT")>;
1227def: InstRW<[HWWriteResGroup30], (instregex "XGETBV")>;
1228
1229def HWWriteResGroup31 : SchedWriteRes<[HWPort0,HWPort5]> {
1230 let Latency = 2;
1231 let NumMicroOps = 2;
1232 let ResourceCycles = [1,1];
1233}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001234def: InstRW<[HWWriteResGroup31], (instregex "MMX_PEXTRWrr",
1235 "VCVTPH2PSYrr",
1236 "VCVTPH2PSrr",
1237 "(V?)CVTPS2PDrr",
1238 "(V?)CVTSS2SDrr",
1239 "(V?)EXTRACTPSrr",
1240 "(V?)PEXTRBrr",
1241 "(V?)PEXTRDrr",
1242 "(V?)PEXTRQrr",
1243 "(V?)PEXTRWrr",
1244 "(V?)PSLLDrr",
1245 "(V?)PSLLQrr",
1246 "(V?)PSLLWrr",
1247 "(V?)PSRADrr",
1248 "(V?)PSRAWrr",
1249 "(V?)PSRLDrr",
1250 "(V?)PSRLQrr",
1251 "(V?)PSRLWrr",
1252 "(V?)PTESTrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001253
1254def HWWriteResGroup32 : SchedWriteRes<[HWPort6,HWPort0156]> {
1255 let Latency = 2;
1256 let NumMicroOps = 2;
1257 let ResourceCycles = [1,1];
1258}
1259def: InstRW<[HWWriteResGroup32], (instregex "CLFLUSH")>;
1260
1261def HWWriteResGroup33 : SchedWriteRes<[HWPort01,HWPort015]> {
1262 let Latency = 2;
1263 let NumMicroOps = 2;
1264 let ResourceCycles = [1,1];
1265}
1266def: InstRW<[HWWriteResGroup33], (instregex "MMX_MOVDQ2Qrr")>;
1267
1268def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> {
1269 let Latency = 2;
1270 let NumMicroOps = 2;
1271 let ResourceCycles = [1,1];
1272}
Craig Topper498875f2018-04-04 17:54:19 +00001273def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>;
1274
1275def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> {
1276 let Latency = 1;
1277 let NumMicroOps = 1;
1278 let ResourceCycles = [1];
1279}
1280def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001281
1282def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> {
1283 let Latency = 2;
1284 let NumMicroOps = 2;
1285 let ResourceCycles = [1,1];
1286}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001287def: InstRW<[HWWriteResGroup35], (instrs CWD, JCXZ, JECXZ, JRCXZ)>;
1288def: InstRW<[HWWriteResGroup35], (instregex "ADC(8|16|32|64)ri",
1289 "ADC(8|16|32|64)rr",
1290 "ADC(8|16|32|64)i",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001291 "SBB(8|16|32|64)ri",
1292 "SBB(8|16|32|64)rr",
1293 "SBB(8|16|32|64)i",
1294 "SET(A|BE)r")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001295
1296def HWWriteResGroup36 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001297 let Latency = 8;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001298 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001299 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001300}
Simon Pilgrim96855ec2018-04-22 14:43:12 +00001301def: InstRW<[HWWriteResGroup36], (instregex "VMASKMOVPDrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001302 "VMASKMOVPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001303 "VPMASKMOVDrm",
1304 "VPMASKMOVQrm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001305
Gadi Haber2cf601f2017-12-08 09:48:44 +00001306def HWWriteResGroup36_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1307 let Latency = 9;
1308 let NumMicroOps = 3;
1309 let ResourceCycles = [2,1];
1310}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001311def: InstRW<[HWWriteResGroup36_1], (instregex "VBLENDVPDYrm",
1312 "VBLENDVPSYrm",
1313 "VMASKMOVPDYrm",
1314 "VMASKMOVPSYrm",
1315 "VPBLENDVBYrm",
1316 "VPMASKMOVDYrm",
1317 "VPMASKMOVQYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001318
1319def HWWriteResGroup36_2 : SchedWriteRes<[HWPort5,HWPort23]> {
1320 let Latency = 7;
1321 let NumMicroOps = 3;
1322 let ResourceCycles = [2,1];
1323}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001324def: InstRW<[HWWriteResGroup36_2], (instregex "MMX_PACKSSDWirm",
1325 "MMX_PACKSSWBirm",
1326 "MMX_PACKUSWBirm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001327
Gadi Haberd76f7b82017-08-28 10:04:16 +00001328def HWWriteResGroup37 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001329 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001330 let NumMicroOps = 3;
1331 let ResourceCycles = [1,2];
1332}
Craig Topper3b0b96c2018-04-05 21:16:26 +00001333def: InstRW<[HWWriteResGroup37], (instrs LEAVE, LEAVE64,
1334 SCASB, SCASL, SCASQ, SCASW)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001335
1336def HWWriteResGroup38 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001337 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001338 let NumMicroOps = 3;
1339 let ResourceCycles = [1,1,1];
1340}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001341def: InstRW<[HWWriteResGroup38], (instregex "(V?)PSLLDrm",
1342 "(V?)PSLLQrm",
1343 "(V?)PSLLWrm",
1344 "(V?)PSRADrm",
1345 "(V?)PSRAWrm",
1346 "(V?)PSRLDrm",
1347 "(V?)PSRLQrm",
1348 "(V?)PSRLWrm",
1349 "(V?)PTESTrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001350
1351def HWWriteResGroup39 : SchedWriteRes<[HWPort0,HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001352 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001353 let NumMicroOps = 3;
1354 let ResourceCycles = [1,1,1];
1355}
1356def: InstRW<[HWWriteResGroup39], (instregex "FLDCW16m")>;
1357
Gadi Haberd76f7b82017-08-28 10:04:16 +00001358def HWWriteResGroup41 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001359 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001360 let NumMicroOps = 3;
1361 let ResourceCycles = [1,1,1];
1362}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001363def: InstRW<[HWWriteResGroup41], (instregex "LRETQ",
1364 "RETL",
1365 "RETQ")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001366
Gadi Haberd76f7b82017-08-28 10:04:16 +00001367def HWWriteResGroup43 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001368 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001369 let NumMicroOps = 3;
1370 let ResourceCycles = [1,1,1];
1371}
Craig Topperc50570f2018-04-06 17:12:18 +00001372def: InstRW<[HWWriteResGroup43, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
1373 SBB8rm, SBB16rm, SBB32rm, SBB64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001374
1375def HWWriteResGroup44 : SchedWriteRes<[HWPort4,HWPort6,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001376 let Latency = 3;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001377 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001378 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001379}
Gadi Haberd76f7b82017-08-28 10:04:16 +00001380def: InstRW<[HWWriteResGroup44], (instregex "CALL(16|32|64)r")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001381
Gadi Haberd76f7b82017-08-28 10:04:16 +00001382def HWWriteResGroup45 : SchedWriteRes<[HWPort4,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001383 let Latency = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001384 let NumMicroOps = 4;
1385 let ResourceCycles = [1,1,1,1];
1386}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001387def: InstRW<[HWWriteResGroup45], (instregex "CALL64pcrel32",
1388 "SET(A|BE)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001389
1390def HWWriteResGroup46 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001391 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001392 let NumMicroOps = 5;
1393 let ResourceCycles = [1,1,1,2];
1394}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001395def: InstRW<[HWWriteResGroup46], (instregex "ROL(8|16|32|64)m1",
1396 "ROL(8|16|32|64)mi",
1397 "ROR(8|16|32|64)m1",
1398 "ROR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001399
1400def HWWriteResGroup47 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001401 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001402 let NumMicroOps = 5;
1403 let ResourceCycles = [1,1,1,2];
1404}
Craig Topper13a16502018-03-19 00:56:09 +00001405def: InstRW<[HWWriteResGroup47], (instregex "XADD(8|16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001406
1407def HWWriteResGroup48 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001408 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001409 let NumMicroOps = 5;
1410 let ResourceCycles = [1,1,1,1,1];
1411}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001412def: InstRW<[HWWriteResGroup48], (instregex "CALL(16|32|64)m",
1413 "FARCALL64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001414
Gadi Haberd76f7b82017-08-28 10:04:16 +00001415def HWWriteResGroup50 : SchedWriteRes<[HWPort1]> {
1416 let Latency = 3;
1417 let NumMicroOps = 1;
1418 let ResourceCycles = [1];
1419}
Simon Pilgrimc0f654f2018-04-21 11:25:02 +00001420def: InstRW<[HWWriteResGroup50], (instregex "MMX_CVTPI2PSirr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001421 "PDEP(32|64)rr",
1422 "PEXT(32|64)rr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001423 "SHLD(16|32|64)rri8",
1424 "SHRD(16|32|64)rri8",
Simon Pilgrim920802c2018-04-21 21:16:44 +00001425 "(V?)CVTDQ2PS(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001426
Clement Courbet327fac42018-03-07 08:14:02 +00001427def HWWriteResGroup50_16i : SchedWriteRes<[HWPort1, HWPort0156]> {
Craig Topperf846e2d2018-04-19 05:34:05 +00001428 let Latency = 4;
Clement Courbet327fac42018-03-07 08:14:02 +00001429 let NumMicroOps = 2;
1430 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001431}
Clement Courbet327fac42018-03-07 08:14:02 +00001432def: InstRW<[HWWriteResGroup50_16i], (instrs IMUL16rri, IMUL16rri8)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001433
1434def HWWriteResGroup51 : SchedWriteRes<[HWPort5]> {
1435 let Latency = 3;
1436 let NumMicroOps = 1;
1437 let ResourceCycles = [1];
1438}
Simon Pilgrim825ead92018-04-21 20:45:12 +00001439def: InstRW<[HWWriteResGroup51], (instregex "VPBROADCASTBrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001440 "VPBROADCASTWrr",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001441 "VPMOVSXBDYrr",
1442 "VPMOVSXBQYrr",
1443 "VPMOVSXBWYrr",
1444 "VPMOVSXDQYrr",
1445 "VPMOVSXWDYrr",
1446 "VPMOVSXWQYrr",
1447 "VPMOVZXBDYrr",
1448 "VPMOVZXBQYrr",
1449 "VPMOVZXBWYrr",
1450 "VPMOVZXDQYrr",
1451 "VPMOVZXWDYrr",
1452 "VPMOVZXWQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001453
1454def HWWriteResGroup52 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001455 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001456 let NumMicroOps = 2;
1457 let ResourceCycles = [1,1];
1458}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001459def: InstRW<[HWWriteResGroup52], (instregex "(V?)ADDPDrm",
1460 "(V?)ADDPSrm",
1461 "(V?)ADDSUBPDrm",
1462 "(V?)ADDSUBPSrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001463 "(V?)CVTPS2DQrm",
1464 "(V?)CVTTPS2DQrm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001465 "(V?)SUBPDrm",
1466 "(V?)SUBPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001467
Gadi Haber2cf601f2017-12-08 09:48:44 +00001468def HWWriteResGroup52_1 : SchedWriteRes<[HWPort1,HWPort23]> {
1469 let Latency = 10;
1470 let NumMicroOps = 2;
1471 let ResourceCycles = [1,1];
Gadi Haberd76f7b82017-08-28 10:04:16 +00001472}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001473def: InstRW<[HWWriteResGroup52_1], (instregex "ADD_F32m",
1474 "ADD_F64m",
1475 "ILD_F16m",
1476 "ILD_F32m",
1477 "ILD_F64m",
1478 "SUBR_F32m",
1479 "SUBR_F64m",
1480 "SUB_F32m",
1481 "SUB_F64m",
1482 "VADDPDYrm",
1483 "VADDPSYrm",
1484 "VADDSUBPDYrm",
1485 "VADDSUBPSYrm",
1486 "VCMPPDYrmi",
1487 "VCMPPSYrmi",
1488 "VCVTDQ2PSYrm",
1489 "VCVTPS2DQYrm",
1490 "VCVTTPS2DQYrm",
1491 "VMAX(C?)PDYrm",
1492 "VMAX(C?)PSYrm",
1493 "VMIN(C?)PDYrm",
1494 "VMIN(C?)PSYrm",
1495 "VSUBPDYrm",
1496 "VSUBPSYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001497
1498def HWWriteResGroup53 : SchedWriteRes<[HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001499 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001500 let NumMicroOps = 2;
1501 let ResourceCycles = [1,1];
1502}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001503def: InstRW<[HWWriteResGroup53], (instregex "VPERM2F128rm",
1504 "VPERM2I128rm",
1505 "VPERMDYrm",
1506 "VPERMPDYmi",
1507 "VPERMPSYrm",
1508 "VPERMQYmi",
1509 "VPMOVZXBDYrm",
1510 "VPMOVZXBQYrm",
1511 "VPMOVZXBWYrm",
1512 "VPMOVZXDQYrm",
1513 "VPMOVZXWQYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001514
Gadi Haber2cf601f2017-12-08 09:48:44 +00001515def HWWriteResGroup53_1 : SchedWriteRes<[HWPort5,HWPort23]> {
1516 let Latency = 9;
1517 let NumMicroOps = 2;
1518 let ResourceCycles = [1,1];
1519}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001520def: InstRW<[HWWriteResGroup53_1], (instregex "VPMOVSXBWYrm",
1521 "VPMOVSXDQYrm",
1522 "VPMOVSXWDYrm",
1523 "VPMOVZXWDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001524
Gadi Haberd76f7b82017-08-28 10:04:16 +00001525def HWWriteResGroup54 : SchedWriteRes<[HWPort0156]> {
Craig Topperb5f26592018-04-19 18:00:17 +00001526 let Latency = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001527 let NumMicroOps = 3;
1528 let ResourceCycles = [3];
1529}
Craig Topperb5f26592018-04-19 18:00:17 +00001530def: InstRW<[HWWriteResGroup54], (instrs XADD8rr, XADD16rr, XADD32rr, XADD64rr,
1531 XCHG8rr, XCHG16rr, XCHG32rr, XCHG64rr,
1532 XCHG16ar, XCHG32ar, XCHG64ar)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001533
1534def HWWriteResGroup55 : SchedWriteRes<[HWPort0,HWPort5]> {
1535 let Latency = 3;
1536 let NumMicroOps = 3;
1537 let ResourceCycles = [2,1];
1538}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001539def: InstRW<[HWWriteResGroup55], (instregex "VPSLLVD(Y?)rr",
1540 "VPSRAVD(Y?)rr",
1541 "VPSRLVD(Y?)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001542
Gadi Haberd76f7b82017-08-28 10:04:16 +00001543def HWWriteResGroup57 : SchedWriteRes<[HWPort5,HWPort0156]> {
1544 let Latency = 3;
1545 let NumMicroOps = 3;
1546 let ResourceCycles = [2,1];
1547}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001548def: InstRW<[HWWriteResGroup57], (instregex "MMX_PACKSSDWirr",
1549 "MMX_PACKSSWBirr",
1550 "MMX_PACKUSWBirr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001551
1552def HWWriteResGroup58 : SchedWriteRes<[HWPort6,HWPort0156]> {
1553 let Latency = 3;
1554 let NumMicroOps = 3;
1555 let ResourceCycles = [1,2];
1556}
1557def: InstRW<[HWWriteResGroup58], (instregex "CLD")>;
1558
1559def HWWriteResGroup59 : SchedWriteRes<[HWPort06,HWPort0156]> {
1560 let Latency = 3;
1561 let NumMicroOps = 3;
1562 let ResourceCycles = [1,2];
1563}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001564def: InstRW<[HWWriteResGroup59], (instregex "CMOV(A|BE)(16|32|64)rr",
1565 "RCL(8|16|32|64)r1",
1566 "RCL(8|16|32|64)ri",
1567 "RCR(8|16|32|64)r1",
1568 "RCR(8|16|32|64)ri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001569
1570def HWWriteResGroup60 : SchedWriteRes<[HWPort06,HWPort0156]> {
1571 let Latency = 3;
1572 let NumMicroOps = 3;
1573 let ResourceCycles = [2,1];
1574}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001575def: InstRW<[HWWriteResGroup60], (instregex "ROL(8|16|32|64)rCL",
1576 "ROR(8|16|32|64)rCL",
1577 "SAR(8|16|32|64)rCL",
1578 "SHL(8|16|32|64)rCL",
1579 "SHR(8|16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001580
1581def HWWriteResGroup61 : SchedWriteRes<[HWPort0,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001582 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001583 let NumMicroOps = 3;
1584 let ResourceCycles = [1,1,1];
1585}
1586def: InstRW<[HWWriteResGroup61], (instregex "FNSTSWm")>;
1587
1588def HWWriteResGroup62 : SchedWriteRes<[HWPort1,HWPort4,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001589 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001590 let NumMicroOps = 3;
1591 let ResourceCycles = [1,1,1];
1592}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001593def: InstRW<[HWWriteResGroup62], (instregex "ISTT_FP16m",
1594 "ISTT_FP32m",
1595 "ISTT_FP64m",
1596 "IST_F16m",
1597 "IST_F32m",
1598 "IST_FP16m",
1599 "IST_FP32m",
1600 "IST_FP64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001601
1602def HWWriteResGroup63 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001603 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001604 let NumMicroOps = 4;
1605 let ResourceCycles = [2,1,1];
1606}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001607def: InstRW<[HWWriteResGroup63], (instregex "VPSLLVDYrm",
1608 "VPSRAVDYrm",
1609 "VPSRLVDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001610
1611def HWWriteResGroup63_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1612 let Latency = 9;
1613 let NumMicroOps = 4;
1614 let ResourceCycles = [2,1,1];
1615}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001616def: InstRW<[HWWriteResGroup63_1], (instregex "VPSLLVDrm",
1617 "VPSRAVDrm",
1618 "VPSRLVDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001619
1620def HWWriteResGroup64 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001621 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001622 let NumMicroOps = 4;
1623 let ResourceCycles = [2,1,1];
1624}
Simon Pilgrim5e492d22018-04-19 17:32:10 +00001625def: InstRW<[HWWriteResGroup64], (instregex "MMX_PH(ADD|SUB)(D|SW|W)rm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001626
1627def HWWriteResGroup64_1 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1628 let Latency = 10;
1629 let NumMicroOps = 4;
1630 let ResourceCycles = [2,1,1];
1631}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001632def: InstRW<[HWWriteResGroup64_1], (instregex "VPHADDDYrm",
1633 "VPHADDSWYrm",
1634 "VPHADDWYrm",
1635 "VPHSUBDYrm",
1636 "VPHSUBSWYrm",
1637 "VPHSUBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001638
1639def HWWriteResGroup64_2 : SchedWriteRes<[HWPort5,HWPort23,HWPort15]> {
1640 let Latency = 9;
1641 let NumMicroOps = 4;
1642 let ResourceCycles = [2,1,1];
1643}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001644def: InstRW<[HWWriteResGroup64_2], (instregex "(V?)PHADDDrm",
1645 "(V?)PHADDSWrm",
1646 "(V?)PHADDWrm",
1647 "(V?)PHSUBDrm",
1648 "(V?)PHSUBSWrm",
1649 "(V?)PHSUBWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001650
1651def HWWriteResGroup65 : SchedWriteRes<[HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001652 let Latency = 8;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001653 let NumMicroOps = 4;
1654 let ResourceCycles = [1,1,2];
1655}
Craig Topperf4cd9082018-01-19 05:47:32 +00001656def: InstRW<[HWWriteResGroup65], (instregex "CMOV(A|BE)(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001657
1658def HWWriteResGroup66 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001659 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001660 let NumMicroOps = 5;
1661 let ResourceCycles = [1,1,1,2];
1662}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001663def: InstRW<[HWWriteResGroup66], (instregex "RCL(8|16|32|64)m1",
1664 "RCL(8|16|32|64)mi",
1665 "RCR(8|16|32|64)m1",
1666 "RCR(8|16|32|64)mi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001667
1668def HWWriteResGroup67 : SchedWriteRes<[HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001669 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001670 let NumMicroOps = 5;
1671 let ResourceCycles = [1,1,2,1];
1672}
Craig Topper13a16502018-03-19 00:56:09 +00001673def: InstRW<[HWWriteResGroup67], (instregex "ROR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001674
1675def HWWriteResGroup68 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001676 let Latency = 9;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001677 let NumMicroOps = 6;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001678 let ResourceCycles = [1,1,1,3];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001679}
Craig Topper9f834812018-04-01 21:54:24 +00001680def: InstRW<[HWWriteResGroup68], (instregex "XCHG(8|16|32|64)rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001681
Gadi Haberd76f7b82017-08-28 10:04:16 +00001682def HWWriteResGroup69 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001683 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001684 let NumMicroOps = 6;
1685 let ResourceCycles = [1,1,1,2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001686}
Craig Topper9f834812018-04-01 21:54:24 +00001687def: InstRW<[HWWriteResGroup69], (instregex "ADC(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001688 "CMPXCHG(8|16|32|64)rm",
1689 "ROL(8|16|32|64)mCL",
1690 "SAR(8|16|32|64)mCL",
1691 "SBB(8|16|32|64)mi",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001692 "SHL(8|16|32|64)mCL",
1693 "SHR(8|16|32|64)mCL")>;
Craig Topperc50570f2018-04-06 17:12:18 +00001694def: InstRW<[HWWriteResGroup69, ReadAfterLd], (instrs ADC8mr, ADC16mr, ADC32mr, ADC64mr,
1695 SBB8mr, SBB16mr, SBB32mr, SBB64mr)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001696
Gadi Haberd76f7b82017-08-28 10:04:16 +00001697def HWWriteResGroup70 : SchedWriteRes<[HWPort0,HWPort1]> {
1698 let Latency = 4;
1699 let NumMicroOps = 2;
1700 let ResourceCycles = [1,1];
1701}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001702def: InstRW<[HWWriteResGroup70], (instregex "(V?)CVTSD2SI64rr",
1703 "(V?)CVTSD2SIrr",
1704 "(V?)CVTSS2SI64rr",
1705 "(V?)CVTSS2SIrr",
1706 "(V?)CVTTSD2SI64rr",
1707 "(V?)CVTTSD2SIrr",
1708 "(V?)CVTTSS2SI64rr",
1709 "(V?)CVTTSS2SIrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001710
1711def HWWriteResGroup71 : SchedWriteRes<[HWPort0,HWPort5]> {
1712 let Latency = 4;
1713 let NumMicroOps = 2;
1714 let ResourceCycles = [1,1];
1715}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001716def: InstRW<[HWWriteResGroup71], (instregex "VCVTPS2PDYrr",
1717 "VPSLLDYrr",
1718 "VPSLLQYrr",
1719 "VPSLLWYrr",
1720 "VPSRADYrr",
1721 "VPSRAWYrr",
1722 "VPSRLDYrr",
1723 "VPSRLQYrr",
1724 "VPSRLWYrr",
1725 "VPTESTYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001726
1727def HWWriteResGroup72 : SchedWriteRes<[HWPort0,HWPort0156]> {
1728 let Latency = 4;
1729 let NumMicroOps = 2;
1730 let ResourceCycles = [1,1];
1731}
1732def: InstRW<[HWWriteResGroup72], (instregex "FNSTSW16r")>;
1733
1734def HWWriteResGroup73 : SchedWriteRes<[HWPort1,HWPort5]> {
1735 let Latency = 4;
1736 let NumMicroOps = 2;
1737 let ResourceCycles = [1,1];
1738}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001739def: InstRW<[HWWriteResGroup73], (instregex "MMX_CVTPD2PIirr",
1740 "MMX_CVTPI2PDirr",
1741 "MMX_CVTPS2PIirr",
1742 "MMX_CVTTPD2PIirr",
1743 "MMX_CVTTPS2PIirr",
1744 "(V?)CVTDQ2PDrr",
1745 "(V?)CVTPD2DQrr",
1746 "(V?)CVTPD2PSrr",
1747 "VCVTPS2PHrr",
1748 "(V?)CVTSD2SSrr",
1749 "(V?)CVTSI642SDrr",
1750 "(V?)CVTSI2SDrr",
1751 "(V?)CVTSI2SSrr",
1752 "(V?)CVTTPD2DQrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001753
1754def HWWriteResGroup74 : SchedWriteRes<[HWPort1,HWPort6]> {
1755 let Latency = 4;
1756 let NumMicroOps = 2;
1757 let ResourceCycles = [1,1];
1758}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001759def: InstRW<[HWWriteResGroup74], (instrs IMUL64r, MUL64r, MULX64rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001760
Craig Topperf846e2d2018-04-19 05:34:05 +00001761def HWWriteResGroup74_16 : SchedWriteRes<[HWPort1, HWPort06, HWPort0156]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00001762 let Latency = 4;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001763 let NumMicroOps = 4;
Craig Topperf846e2d2018-04-19 05:34:05 +00001764 let ResourceCycles = [1,1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001765}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001766def: InstRW<[HWWriteResGroup74_16], (instrs IMUL16r, MUL16r)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001767
Gadi Haberd76f7b82017-08-28 10:04:16 +00001768def HWWriteResGroup75 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001769 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001770 let NumMicroOps = 3;
1771 let ResourceCycles = [2,1];
1772}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001773def: InstRW<[HWWriteResGroup75], (instregex "FICOM16m",
1774 "FICOM32m",
1775 "FICOMP16m",
1776 "FICOMP32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001777
1778def HWWriteResGroup76 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001779 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001780 let NumMicroOps = 3;
1781 let ResourceCycles = [1,1,1];
1782}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001783def: InstRW<[HWWriteResGroup76], (instregex "(V?)CVTSD2SI64rm",
1784 "(V?)CVTSD2SIrm",
1785 "(V?)CVTSS2SI64rm",
1786 "(V?)CVTSS2SIrm",
1787 "(V?)CVTTSD2SI64rm",
1788 "(V?)CVTTSD2SIrm",
1789 "VCVTTSS2SI64rm",
1790 "(V?)CVTTSS2SIrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001791
1792def HWWriteResGroup77 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001793 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001794 let NumMicroOps = 3;
1795 let ResourceCycles = [1,1,1];
1796}
1797def: InstRW<[HWWriteResGroup77], (instregex "VCVTPS2PDYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001798
1799def HWWriteResGroup77_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
1800 let Latency = 11;
1801 let NumMicroOps = 3;
1802 let ResourceCycles = [1,1,1];
1803}
1804def: InstRW<[HWWriteResGroup77_1], (instregex "VPTESTYrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001805
1806def HWWriteResGroup78 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001807 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001808 let NumMicroOps = 3;
1809 let ResourceCycles = [1,1,1];
1810}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001811def: InstRW<[HWWriteResGroup78], (instregex "CVTPD2DQrm",
1812 "CVTPD2PSrm",
1813 "CVTTPD2DQrm",
1814 "MMX_CVTPD2PIirm",
1815 "MMX_CVTTPD2PIirm",
1816 "(V?)CVTDQ2PDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001817
1818def HWWriteResGroup78_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
1819 let Latency = 9;
1820 let NumMicroOps = 3;
1821 let ResourceCycles = [1,1,1];
1822}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001823def: InstRW<[HWWriteResGroup78_1], (instregex "MMX_CVTPI2PDirm",
1824 "(V?)CVTSD2SSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001825
1826def HWWriteResGroup79 : SchedWriteRes<[HWPort1,HWPort6,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001827 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001828 let NumMicroOps = 3;
1829 let ResourceCycles = [1,1,1];
1830}
Craig Topper4a3be6e2018-03-22 19:22:51 +00001831def: InstRW<[HWWriteResGroup79], (instrs IMUL64m, MUL64m, MULX64rm)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001832
1833def HWWriteResGroup80 : SchedWriteRes<[HWPort5,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001834 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001835 let NumMicroOps = 3;
1836 let ResourceCycles = [1,1,1];
1837}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001838def: InstRW<[HWWriteResGroup80], (instregex "VPBROADCASTBYrm",
1839 "VPBROADCASTBrm",
1840 "VPBROADCASTWYrm",
1841 "VPBROADCASTWrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001842
1843def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
1844 let Latency = 4;
1845 let NumMicroOps = 4;
1846 let ResourceCycles = [4];
1847}
1848def: InstRW<[HWWriteResGroup81], (instregex "FNCLEX")>;
1849
1850def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
1851 let Latency = 4;
1852 let NumMicroOps = 4;
1853 let ResourceCycles = [1,3];
1854}
1855def: InstRW<[HWWriteResGroup82], (instregex "VZEROUPPER")>;
1856
1857def HWWriteResGroup83 : SchedWriteRes<[HWPort1,HWPort6,HWPort0156]> {
1858 let Latency = 4;
1859 let NumMicroOps = 4;
1860 let ResourceCycles = [1,1,2];
1861}
1862def: InstRW<[HWWriteResGroup83], (instregex "LAR(16|32|64)rr")>;
1863
1864def HWWriteResGroup84 : SchedWriteRes<[HWPort0,HWPort4,HWPort237,HWPort15]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001865 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001866 let NumMicroOps = 4;
1867 let ResourceCycles = [1,1,1,1];
1868}
Simon Pilgrim2b5967f2018-03-24 18:36:01 +00001869def: InstRW<[HWWriteResGroup84], (instregex "VMASKMOVPD(Y?)mr",
1870 "VMASKMOVPS(Y?)mr",
1871 "VPMASKMOVD(Y?)mr",
1872 "VPMASKMOVQ(Y?)mr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001873
1874def HWWriteResGroup85 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001875 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001876 let NumMicroOps = 4;
1877 let ResourceCycles = [1,1,1,1];
1878}
1879def: InstRW<[HWWriteResGroup85], (instregex "VCVTPS2PHmr")>;
1880
1881def HWWriteResGroup86 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001882 let Latency = 10;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001883 let NumMicroOps = 4;
1884 let ResourceCycles = [1,1,1,1];
1885}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001886def: InstRW<[HWWriteResGroup86], (instregex "SHLD(16|32|64)mri8",
1887 "SHRD(16|32|64)mri8")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001888
1889def HWWriteResGroup87 : SchedWriteRes<[HWPort1,HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001890 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001891 let NumMicroOps = 5;
1892 let ResourceCycles = [1,2,1,1];
1893}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001894def: InstRW<[HWWriteResGroup87], (instregex "LAR(16|32|64)rm",
1895 "LSL(16|32|64)rm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001896
1897def HWWriteResGroup88 : SchedWriteRes<[HWPort4,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001898 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001899 let NumMicroOps = 6;
1900 let ResourceCycles = [1,1,4];
1901}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001902def: InstRW<[HWWriteResGroup88], (instregex "PUSHF16",
1903 "PUSHF64")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001904
1905def HWWriteResGroup89 : SchedWriteRes<[HWPort0]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001906 let Latency = 5;
1907 let NumMicroOps = 1;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001908 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001909}
Simon Pilgrim74ccc6a2018-04-21 19:11:55 +00001910def: InstRW<[HWWriteResGroup89], (instregex "(V?)PCMPGTQ(Y?)rr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001911
Gadi Haberd76f7b82017-08-28 10:04:16 +00001912def HWWriteResGroup90 : SchedWriteRes<[HWPort01]> {
Michael Zuckermanf6684002017-06-28 11:23:31 +00001913 let Latency = 5;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001914 let NumMicroOps = 1;
1915 let ResourceCycles = [1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001916}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001917def: InstRW<[HWWriteResGroup90], (instregex "(V?)MULPD(Y?)rr",
1918 "(V?)MULPS(Y?)rr",
1919 "(V?)MULSDrr",
Simon Pilgrim3c066172018-04-19 11:37:26 +00001920 "(V?)MULSSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001921
Gadi Haberd76f7b82017-08-28 10:04:16 +00001922def HWWriteResGroup91 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001923 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001924 let NumMicroOps = 2;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001925 let ResourceCycles = [1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00001926}
Simon Pilgrim0a334a82018-04-23 11:57:15 +00001927def: InstRW<[HWWriteResGroup91], (instregex "(V?)RCPSSm",
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001928 "(V?)RSQRTSSm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00001929
Craig Topper8104f262018-04-02 05:33:28 +00001930def HWWriteResGroup91_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001931 let Latency = 16;
1932 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001933 let ResourceCycles = [1,1,7];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001934}
1935def: InstRW<[HWWriteResGroup91_1], (instregex "(V?)SQRTSSm")>;
1936
Craig Topper8104f262018-04-02 05:33:28 +00001937def HWWriteResGroup91_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001938 let Latency = 18;
1939 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00001940 let ResourceCycles = [1,1,7];
Gadi Haber2cf601f2017-12-08 09:48:44 +00001941}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00001942def: InstRW<[HWWriteResGroup91_4], (instregex "(V?)DIVSSrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001943
1944def HWWriteResGroup91_2 : SchedWriteRes<[HWPort0,HWPort23]> {
1945 let Latency = 11;
1946 let NumMicroOps = 2;
1947 let ResourceCycles = [1,1];
1948}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001949def: InstRW<[HWWriteResGroup91_2], (instregex "(V?)PCMPGTQrm",
1950 "(V?)PHMINPOSUWrm",
1951 "(V?)PMADDUBSWrm",
1952 "(V?)PMADDWDrm",
1953 "(V?)PMULDQrm",
1954 "(V?)PMULHRSWrm",
1955 "(V?)PMULHUWrm",
1956 "(V?)PMULHWrm",
1957 "(V?)PMULLWrm",
1958 "(V?)PMULUDQrm",
1959 "(V?)PSADBWrm",
1960 "(V?)RCPPSm",
1961 "(V?)RSQRTPSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001962
1963def HWWriteResGroup91_3 : SchedWriteRes<[HWPort0,HWPort23]> {
1964 let Latency = 12;
1965 let NumMicroOps = 2;
1966 let ResourceCycles = [1,1];
1967}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001968def: InstRW<[HWWriteResGroup91_3], (instregex "MUL_F32m",
1969 "MUL_F64m",
1970 "VPCMPGTQYrm",
1971 "VPMADDUBSWYrm",
1972 "VPMADDWDYrm",
1973 "VPMULDQYrm",
1974 "VPMULHRSWYrm",
1975 "VPMULHUWYrm",
1976 "VPMULHWYrm",
1977 "VPMULLWYrm",
1978 "VPMULUDQYrm",
1979 "VPSADBWYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001980
Gadi Haberd76f7b82017-08-28 10:04:16 +00001981def HWWriteResGroup92 : SchedWriteRes<[HWPort01,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00001982 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00001983 let NumMicroOps = 2;
1984 let ResourceCycles = [1,1];
1985}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001986def: InstRW<[HWWriteResGroup92], (instregex "(V?)MULPDrm",
1987 "(V?)MULPSrm",
1988 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001989
1990def HWWriteResGroup92_1 : SchedWriteRes<[HWPort01,HWPort23]> {
1991 let Latency = 12;
1992 let NumMicroOps = 2;
1993 let ResourceCycles = [1,1];
1994}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00001995def: InstRW<[HWWriteResGroup92_1], (instregex "VMULPDYrm",
1996 "VMULPSYrm",
1997 "VF(N)?M(ADD|SUB|ADDSUB|SUBADD)(132|213|231)P(D|S)Ym")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00001998
1999def HWWriteResGroup92_2 : SchedWriteRes<[HWPort01,HWPort23]> {
2000 let Latency = 10;
2001 let NumMicroOps = 2;
2002 let ResourceCycles = [1,1];
2003}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002004def: InstRW<[HWWriteResGroup92_2], (instregex "(V?)MULSDrm",
2005 "(V?)MULSSrm",
2006 "VF(N)?M(ADD|SUB)(132|213|231)S(D|S)m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002007
2008def HWWriteResGroup93 : SchedWriteRes<[HWPort1,HWPort5]> {
2009 let Latency = 5;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002010 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002011 let ResourceCycles = [1,2];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002012}
Simon Pilgrim44278f62018-04-21 16:20:28 +00002013def: InstRW<[HWWriteResGroup93], (instregex "(V?)CVTSI642SSrr")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002014
Gadi Haberd76f7b82017-08-28 10:04:16 +00002015def HWWriteResGroup94 : SchedWriteRes<[HWPort1,HWPort6,HWPort06]> {
2016 let Latency = 5;
2017 let NumMicroOps = 3;
2018 let ResourceCycles = [1,1,1];
2019}
2020def: InstRW<[HWWriteResGroup94], (instregex "STR(16|32|64)r")>;
2021
2022def HWWriteResGroup95 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002023 let Latency = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002024 let NumMicroOps = 3;
2025 let ResourceCycles = [1,1,1];
2026}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002027def: InstRW<[HWWriteResGroup95], (instrs IMUL32r, MUL32r, MULX32rr)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002028
Gadi Haber2cf601f2017-12-08 09:48:44 +00002029def HWWriteResGroup96_1 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
2030 let Latency = 12;
2031 let NumMicroOps = 4;
2032 let ResourceCycles = [1,2,1];
2033}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002034def: InstRW<[HWWriteResGroup96_1], (instregex "VHADDPDYrm",
2035 "VHADDPSYrm",
2036 "VHSUBPDYrm",
2037 "VHSUBPSYrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002038
Gadi Haberd76f7b82017-08-28 10:04:16 +00002039def HWWriteResGroup97 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002040 let Latency = 10;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002041 let NumMicroOps = 4;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002042 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002043}
Gadi Haberd76f7b82017-08-28 10:04:16 +00002044def: InstRW<[HWWriteResGroup97], (instregex "CVTTSS2SI64rm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002045
Gadi Haberd76f7b82017-08-28 10:04:16 +00002046def HWWriteResGroup98 : SchedWriteRes<[HWPort1,HWPort23,HWPort06,HWPort0156]> {
Craig Topper4a3be6e2018-03-22 19:22:51 +00002047 let Latency = 9;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002048 let NumMicroOps = 4;
2049 let ResourceCycles = [1,1,1,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002050}
Craig Topper4a3be6e2018-03-22 19:22:51 +00002051def: InstRW<[HWWriteResGroup98], (instrs IMUL32m, MUL32m, MULX32rm)>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002052
Gadi Haberd76f7b82017-08-28 10:04:16 +00002053def HWWriteResGroup99 : SchedWriteRes<[HWPort6,HWPort0156]> {
2054 let Latency = 5;
2055 let NumMicroOps = 5;
2056 let ResourceCycles = [1,4];
2057}
2058def: InstRW<[HWWriteResGroup99], (instregex "PAUSE")>;
2059
2060def HWWriteResGroup100 : SchedWriteRes<[HWPort06,HWPort0156]> {
2061 let Latency = 5;
2062 let NumMicroOps = 5;
2063 let ResourceCycles = [1,4];
2064}
2065def: InstRW<[HWWriteResGroup100], (instregex "XSETBV")>;
2066
2067def HWWriteResGroup101 : SchedWriteRes<[HWPort06,HWPort0156]> {
2068 let Latency = 5;
2069 let NumMicroOps = 5;
2070 let ResourceCycles = [2,3];
2071}
Craig Topper13a16502018-03-19 00:56:09 +00002072def: InstRW<[HWWriteResGroup101], (instregex "CMPXCHG(8|16|32|64)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002073
2074def HWWriteResGroup102 : SchedWriteRes<[HWPort1,HWPort5]> {
2075 let Latency = 6;
2076 let NumMicroOps = 2;
2077 let ResourceCycles = [1,1];
2078}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002079def: InstRW<[HWWriteResGroup102], (instregex "VCVTDQ2PDYrr",
2080 "VCVTPD2DQYrr",
2081 "VCVTPD2PSYrr",
2082 "VCVTPS2PHYrr",
2083 "VCVTTPD2DQYrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002084
2085def HWWriteResGroup103 : SchedWriteRes<[HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002086 let Latency = 13;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002087 let NumMicroOps = 3;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002088 let ResourceCycles = [2,1];
Michael Zuckermanf6684002017-06-28 11:23:31 +00002089}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002090def: InstRW<[HWWriteResGroup103], (instregex "ADD_FI16m",
2091 "ADD_FI32m",
2092 "SUBR_FI16m",
2093 "SUBR_FI32m",
2094 "SUB_FI16m",
2095 "SUB_FI32m",
Craig Topper40d3b322018-03-22 21:55:20 +00002096 "VROUNDPDYm",
2097 "VROUNDPSYm")>;
Michael Zuckermanf6684002017-06-28 11:23:31 +00002098
Gadi Haber2cf601f2017-12-08 09:48:44 +00002099def HWWriteResGroup103_1 : SchedWriteRes<[HWPort1,HWPort23]> {
2100 let Latency = 12;
2101 let NumMicroOps = 3;
2102 let ResourceCycles = [2,1];
2103}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002104def: InstRW<[HWWriteResGroup103_1], (instregex "(V?)ROUNDPDm",
2105 "(V?)ROUNDPSm",
2106 "(V?)ROUNDSDm",
2107 "(V?)ROUNDSSm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002108
Gadi Haberd76f7b82017-08-28 10:04:16 +00002109def HWWriteResGroup104 : SchedWriteRes<[HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002110 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002111 let NumMicroOps = 3;
2112 let ResourceCycles = [1,1,1];
2113}
2114def: InstRW<[HWWriteResGroup104], (instregex "VCVTDQ2PDYrm")>;
2115
2116def HWWriteResGroup105 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2117 let Latency = 6;
2118 let NumMicroOps = 4;
2119 let ResourceCycles = [1,1,2];
2120}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002121def: InstRW<[HWWriteResGroup105], (instregex "SHLD(16|32|64)rrCL",
2122 "SHRD(16|32|64)rrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002123
2124def HWWriteResGroup106 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort237]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002125 let Latency = 7;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002126 let NumMicroOps = 4;
2127 let ResourceCycles = [1,1,1,1];
2128}
2129def: InstRW<[HWWriteResGroup106], (instregex "VCVTPS2PHYmr")>;
2130
2131def HWWriteResGroup107 : SchedWriteRes<[HWPort1,HWPort6,HWPort06,HWPort0156]> {
2132 let Latency = 6;
2133 let NumMicroOps = 4;
2134 let ResourceCycles = [1,1,1,1];
2135}
2136def: InstRW<[HWWriteResGroup107], (instregex "SLDT(16|32|64)r")>;
2137
2138def HWWriteResGroup108 : SchedWriteRes<[HWPort6,HWPort0156]> {
2139 let Latency = 6;
2140 let NumMicroOps = 6;
2141 let ResourceCycles = [1,5];
2142}
2143def: InstRW<[HWWriteResGroup108], (instregex "STD")>;
2144
2145def HWWriteResGroup109 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002146 let Latency = 12;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002147 let NumMicroOps = 6;
2148 let ResourceCycles = [1,1,1,1,2];
2149}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002150def: InstRW<[HWWriteResGroup109], (instregex "SHLD(16|32|64)mrCL",
2151 "SHRD(16|32|64)mrCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002152
Gadi Haber2cf601f2017-12-08 09:48:44 +00002153def HWWriteResGroup113_1 : SchedWriteRes<[HWPort0,HWPort5,HWPort23]> {
2154 let Latency = 14;
2155 let NumMicroOps = 4;
2156 let ResourceCycles = [1,2,1];
2157}
2158def: InstRW<[HWWriteResGroup113_1], (instregex "VMPSADBWYrmi")>;
2159
Gadi Haberd76f7b82017-08-28 10:04:16 +00002160def HWWriteResGroup114 : SchedWriteRes<[HWPort6,HWPort06,HWPort15,HWPort0156]> {
2161 let Latency = 7;
2162 let NumMicroOps = 7;
2163 let ResourceCycles = [2,2,1,2];
2164}
Craig Topper2d451e72018-03-18 08:38:06 +00002165def: InstRW<[HWWriteResGroup114], (instrs LOOP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002166
2167def HWWriteResGroup115 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002168 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002169 let NumMicroOps = 3;
2170 let ResourceCycles = [1,1,1];
2171}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002172def: InstRW<[HWWriteResGroup115], (instregex "MUL_FI16m",
2173 "MUL_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002174
2175def HWWriteResGroup116 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2176 let Latency = 9;
2177 let NumMicroOps = 3;
2178 let ResourceCycles = [1,1,1];
2179}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002180def: InstRW<[HWWriteResGroup116], (instregex "(V?)DPPDrri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002181
2182def HWWriteResGroup117 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002183 let Latency = 15;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002184 let NumMicroOps = 4;
2185 let ResourceCycles = [1,1,1,1];
2186}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002187def: InstRW<[HWWriteResGroup117], (instregex "(V?)DPPDrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002188
Gadi Haber2cf601f2017-12-08 09:48:44 +00002189def HWWriteResGroup119_1 : SchedWriteRes<[HWPort0,HWPort23]> {
2190 let Latency = 17;
2191 let NumMicroOps = 3;
2192 let ResourceCycles = [2,1];
2193}
2194def: InstRW<[HWWriteResGroup119_1], (instregex "VPMULLDYrm")>;
2195
Gadi Haberd76f7b82017-08-28 10:04:16 +00002196def HWWriteResGroup120 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002197 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002198 let NumMicroOps = 10;
2199 let ResourceCycles = [1,1,1,4,1,2];
2200}
Craig Topper13a16502018-03-19 00:56:09 +00002201def: InstRW<[HWWriteResGroup120], (instregex "RCL(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002202
Craig Topper8104f262018-04-02 05:33:28 +00002203def HWWriteResGroup121 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002204 let Latency = 13;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002205 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002206 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002207}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002208def: InstRW<[HWWriteResGroup121], (instregex "(V?)DIVPSrr",
2209 "(V?)DIVSSrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002210
Gadi Haberd76f7b82017-08-28 10:04:16 +00002211def HWWriteResGroup125 : SchedWriteRes<[HWPort0,HWPort015]> {
2212 let Latency = 11;
2213 let NumMicroOps = 3;
2214 let ResourceCycles = [2,1];
2215}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002216def: InstRW<[HWWriteResGroup125], (instregex "VRCPPSYr",
2217 "VRSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002218
Gadi Haberd76f7b82017-08-28 10:04:16 +00002219def HWWriteResGroup128 : SchedWriteRes<[HWPort0,HWPort23,HWPort015]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002220 let Latency = 18;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002221 let NumMicroOps = 4;
2222 let ResourceCycles = [2,1,1];
2223}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002224def: InstRW<[HWWriteResGroup128], (instregex "VRCPPSYm",
2225 "VRSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002226
2227def HWWriteResGroup129 : SchedWriteRes<[HWPort1,HWPort06,HWPort0156]> {
2228 let Latency = 11;
2229 let NumMicroOps = 7;
2230 let ResourceCycles = [2,2,3];
2231}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002232def: InstRW<[HWWriteResGroup129], (instregex "RCL(16|32|64)rCL",
2233 "RCR(16|32|64)rCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002234
2235def HWWriteResGroup130 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2236 let Latency = 11;
2237 let NumMicroOps = 9;
2238 let ResourceCycles = [1,4,1,3];
2239}
2240def: InstRW<[HWWriteResGroup130], (instregex "RCL8rCL")>;
2241
2242def HWWriteResGroup131 : SchedWriteRes<[HWPort06,HWPort0156]> {
2243 let Latency = 11;
2244 let NumMicroOps = 11;
2245 let ResourceCycles = [2,9];
2246}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002247def: InstRW<[HWWriteResGroup131], (instrs LOOPE, LOOPNE)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002248
2249def HWWriteResGroup132 : SchedWriteRes<[HWPort4,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002250 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002251 let NumMicroOps = 14;
2252 let ResourceCycles = [1,1,1,4,2,5];
2253}
2254def: InstRW<[HWWriteResGroup132], (instregex "CMPXCHG8B")>;
2255
Craig Topper8104f262018-04-02 05:33:28 +00002256def HWWriteResGroup133 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002257 let Latency = 11;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002258 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002259 let ResourceCycles = [1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002260}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002261def: InstRW<[HWWriteResGroup133], (instregex "(V?)SQRTPSr",
2262 "(V?)SQRTSSr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002263
Craig Topper8104f262018-04-02 05:33:28 +00002264def HWWriteResGroup134 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002265 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002266 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002267 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002268}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002269def: InstRW<[HWWriteResGroup134], (instregex "(V?)DIVPSrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002270
2271def HWWriteResGroup135 : SchedWriteRes<[HWPort1,HWPort23,HWPort237,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002272 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002273 let NumMicroOps = 11;
2274 let ResourceCycles = [2,1,1,3,1,3];
2275}
Craig Topper13a16502018-03-19 00:56:09 +00002276def: InstRW<[HWWriteResGroup135], (instregex "RCR(8|16|32|64)mCL")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002277
Craig Topper8104f262018-04-02 05:33:28 +00002278def HWWriteResGroup138 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002279 let Latency = 17;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002280 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002281 let ResourceCycles = [1,1,7];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002282}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002283def: InstRW<[HWWriteResGroup138], (instregex "(V?)SQRTPSm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002284
Gadi Haberd76f7b82017-08-28 10:04:16 +00002285def HWWriteResGroup140 : SchedWriteRes<[HWPort0,HWPort1,HWPort5]> {
2286 let Latency = 14;
2287 let NumMicroOps = 4;
2288 let ResourceCycles = [2,1,1];
2289}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002290def: InstRW<[HWWriteResGroup140], (instregex "(V?)DPPS(Y?)rri")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002291
2292def HWWriteResGroup141 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002293 let Latency = 20;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002294 let NumMicroOps = 5;
2295 let ResourceCycles = [2,1,1,1];
2296}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002297def: InstRW<[HWWriteResGroup141], (instregex "(V?)DPPSrmi")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002298
Gadi Haber2cf601f2017-12-08 09:48:44 +00002299def HWWriteResGroup141_1 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort23]> {
2300 let Latency = 21;
2301 let NumMicroOps = 5;
2302 let ResourceCycles = [2,1,1,1];
2303}
2304def: InstRW<[HWWriteResGroup141_1], (instregex "VDPPSYrmi")>;
2305
Gadi Haberd76f7b82017-08-28 10:04:16 +00002306def HWWriteResGroup142 : SchedWriteRes<[HWPort1,HWPort06,HWPort15,HWPort0156]> {
2307 let Latency = 14;
2308 let NumMicroOps = 10;
2309 let ResourceCycles = [2,3,1,4];
2310}
2311def: InstRW<[HWWriteResGroup142], (instregex "RCR8rCL")>;
2312
2313def HWWriteResGroup143 : SchedWriteRes<[HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002314 let Latency = 19;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002315 let NumMicroOps = 15;
2316 let ResourceCycles = [1,14];
2317}
2318def: InstRW<[HWWriteResGroup143], (instregex "POPF16")>;
2319
2320def HWWriteResGroup144 : SchedWriteRes<[HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002321 let Latency = 21;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002322 let NumMicroOps = 8;
2323 let ResourceCycles = [1,1,1,1,1,1,2];
2324}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002325def: InstRW<[HWWriteResGroup144], (instregex "INSB",
2326 "INSL",
2327 "INSW")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002328
2329def HWWriteResGroup145 : SchedWriteRes<[HWPort5]> {
2330 let Latency = 16;
2331 let NumMicroOps = 16;
2332 let ResourceCycles = [16];
2333}
2334def: InstRW<[HWWriteResGroup145], (instregex "VZEROALL")>;
2335
2336def HWWriteResGroup146 : SchedWriteRes<[HWPort0,HWPort4,HWPort5,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002337 let Latency = 22;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002338 let NumMicroOps = 19;
2339 let ResourceCycles = [2,1,4,1,1,4,6];
2340}
2341def: InstRW<[HWWriteResGroup146], (instregex "CMPXCHG16B")>;
2342
2343def HWWriteResGroup147 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2344 let Latency = 17;
2345 let NumMicroOps = 15;
2346 let ResourceCycles = [2,1,2,4,2,4];
2347}
2348def: InstRW<[HWWriteResGroup147], (instregex "XCH_F")>;
2349
Gadi Haberd76f7b82017-08-28 10:04:16 +00002350def HWWriteResGroup149 : SchedWriteRes<[HWPort5,HWPort6,HWPort06,HWPort0156]> {
2351 let Latency = 18;
2352 let NumMicroOps = 8;
2353 let ResourceCycles = [1,1,1,5];
2354}
2355def: InstRW<[HWWriteResGroup149], (instregex "CPUID")>;
Craig Topper2d451e72018-03-18 08:38:06 +00002356def: InstRW<[HWWriteResGroup149], (instrs RDTSC)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002357
Gadi Haberd76f7b82017-08-28 10:04:16 +00002358def HWWriteResGroup151 : SchedWriteRes<[HWPort6,HWPort23,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002359 let Latency = 23;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002360 let NumMicroOps = 19;
2361 let ResourceCycles = [3,1,15];
2362}
Craig Topper391c6f92017-12-10 01:24:08 +00002363def: InstRW<[HWWriteResGroup151], (instregex "XRSTOR(64)?")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002364
Gadi Haberd76f7b82017-08-28 10:04:16 +00002365def HWWriteResGroup154 : SchedWriteRes<[HWPort0]> {
2366 let Latency = 20;
2367 let NumMicroOps = 1;
2368 let ResourceCycles = [1];
2369}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002370def: InstRW<[HWWriteResGroup154], (instregex "DIV_FPrST0",
2371 "DIV_FST0r",
Craig Topper8104f262018-04-02 05:33:28 +00002372 "DIV_FrST0")>;
2373
2374def HWWriteResGroup154_1 : SchedWriteRes<[HWPort0,HWFPDivider]> {
2375 let Latency = 20;
2376 let NumMicroOps = 1;
2377 let ResourceCycles = [1,14];
2378}
2379def: InstRW<[HWWriteResGroup154_1], (instregex "(V?)DIVPDrr",
2380 "(V?)DIVSDrr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002381
2382def HWWriteResGroup155 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002383 let Latency = 27;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002384 let NumMicroOps = 2;
2385 let ResourceCycles = [1,1];
2386}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002387def: InstRW<[HWWriteResGroup155], (instregex "DIVR_F32m",
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002388 "DIVR_F64m")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002389
Craig Topper8104f262018-04-02 05:33:28 +00002390def HWWriteResGroup155_1 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002391 let Latency = 26;
2392 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002393 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002394}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002395def: InstRW<[HWWriteResGroup155_1], (instregex "(V?)DIVPDrm")>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002396
Craig Topper8104f262018-04-02 05:33:28 +00002397def HWWriteResGroup155_2 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002398 let Latency = 21;
2399 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002400 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002401}
2402def: InstRW<[HWWriteResGroup155_2], (instregex "(V?)SQRTSDm")>;
2403
Craig Topper8104f262018-04-02 05:33:28 +00002404def HWWriteResGroup155_3 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002405 let Latency = 22;
2406 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002407 let ResourceCycles = [1,1,14];
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002408}
2409def: InstRW<[HWWriteResGroup155_3], (instregex "(V?)SQRTPDm")>;
2410
Craig Topper8104f262018-04-02 05:33:28 +00002411def HWWriteResGroup155_4 : SchedWriteRes<[HWPort0,HWPort23,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002412 let Latency = 25;
2413 let NumMicroOps = 2;
Craig Topper8104f262018-04-02 05:33:28 +00002414 let ResourceCycles = [1,1,14];
Gadi Haber2cf601f2017-12-08 09:48:44 +00002415}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002416def: InstRW<[HWWriteResGroup155_4], (instregex "(V?)DIVSDrm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002417
2418def HWWriteResGroup156 : SchedWriteRes<[HWPort5,HWPort6,HWPort0156]> {
2419 let Latency = 20;
2420 let NumMicroOps = 10;
2421 let ResourceCycles = [1,2,7];
2422}
2423def: InstRW<[HWWriteResGroup156], (instregex "MWAITrr")>;
2424
Craig Topper8104f262018-04-02 05:33:28 +00002425def HWWriteResGroup157 : SchedWriteRes<[HWPort0,HWFPDivider]> {
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002426 let Latency = 16;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002427 let NumMicroOps = 1;
Craig Topper8104f262018-04-02 05:33:28 +00002428 let ResourceCycles = [1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002429}
Craig Toppercdfcf8e2018-03-26 05:05:10 +00002430def: InstRW<[HWWriteResGroup157], (instregex "(V?)SQRTPDr",
2431 "(V?)SQRTSDr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002432
Craig Topper8104f262018-04-02 05:33:28 +00002433def HWWriteResGroup159 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002434 let Latency = 21;
2435 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002436 let ResourceCycles = [2,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002437}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002438def: InstRW<[HWWriteResGroup159], (instregex "VDIVPSYrr",
2439 "VSQRTPSYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002440
Craig Topper8104f262018-04-02 05:33:28 +00002441def HWWriteResGroup160 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002442 let Latency = 28;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002443 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002444 let ResourceCycles = [2,1,1,14];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002445}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002446def: InstRW<[HWWriteResGroup160], (instregex "VDIVPSYrm",
2447 "VSQRTPSYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002448
2449def HWWriteResGroup161 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002450 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002451 let NumMicroOps = 3;
2452 let ResourceCycles = [1,1,1];
2453}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002454def: InstRW<[HWWriteResGroup161], (instregex "DIVR_FI16m",
2455 "DIVR_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002456
2457def HWWriteResGroup162 : SchedWriteRes<[HWPort0]> {
2458 let Latency = 24;
2459 let NumMicroOps = 1;
2460 let ResourceCycles = [1];
2461}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002462def: InstRW<[HWWriteResGroup162], (instregex "DIVR_FPrST0",
2463 "DIVR_FST0r",
2464 "DIVR_FrST0")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002465
2466def HWWriteResGroup163 : SchedWriteRes<[HWPort0,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002467 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002468 let NumMicroOps = 2;
2469 let ResourceCycles = [1,1];
2470}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002471def: InstRW<[HWWriteResGroup163], (instregex "DIV_F32m",
2472 "DIV_F64m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002473
2474def HWWriteResGroup164 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002475 let Latency = 30;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002476 let NumMicroOps = 27;
2477 let ResourceCycles = [1,5,1,1,19];
2478}
2479def: InstRW<[HWWriteResGroup164], (instregex "XSAVE64")>;
2480
2481def HWWriteResGroup165 : SchedWriteRes<[HWPort4,HWPort6,HWPort23,HWPort237,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002482 let Latency = 31;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002483 let NumMicroOps = 28;
2484 let ResourceCycles = [1,6,1,1,19];
2485}
Craig Topper2d451e72018-03-18 08:38:06 +00002486def: InstRW<[HWWriteResGroup165], (instregex "^XSAVE$", "XSAVEC", "XSAVES", "XSAVEOPT")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002487
2488def HWWriteResGroup166 : SchedWriteRes<[HWPort0,HWPort1,HWPort23]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002489 let Latency = 34;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002490 let NumMicroOps = 3;
2491 let ResourceCycles = [1,1,1];
2492}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002493def: InstRW<[HWWriteResGroup166], (instregex "DIV_FI16m",
2494 "DIV_FI32m")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002495
Gadi Haberd76f7b82017-08-28 10:04:16 +00002496def HWWriteResGroup170 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002497 let Latency = 35;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002498 let NumMicroOps = 23;
2499 let ResourceCycles = [1,5,3,4,10];
2500}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002501def: InstRW<[HWWriteResGroup170], (instregex "IN(8|16|32)ri",
2502 "IN(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002503
2504def HWWriteResGroup171 : SchedWriteRes<[HWPort5,HWPort6,HWPort23,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002505 let Latency = 36;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002506 let NumMicroOps = 23;
2507 let ResourceCycles = [1,5,2,1,4,10];
2508}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002509def: InstRW<[HWWriteResGroup171], (instregex "OUT(8|16|32)ir",
2510 "OUT(8|16|32)rr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002511
2512def HWWriteResGroup172 : SchedWriteRes<[HWPort01,HWPort15,HWPort015,HWPort0156]> {
2513 let Latency = 31;
2514 let NumMicroOps = 31;
2515 let ResourceCycles = [8,1,21,1];
2516}
2517def: InstRW<[HWWriteResGroup172], (instregex "MMX_EMMS")>;
2518
Craig Topper8104f262018-04-02 05:33:28 +00002519def HWWriteResGroup173 : SchedWriteRes<[HWPort0,HWPort15,HWFPDivider]> {
Gadi Haberd76f7b82017-08-28 10:04:16 +00002520 let Latency = 35;
2521 let NumMicroOps = 3;
Craig Topper8104f262018-04-02 05:33:28 +00002522 let ResourceCycles = [2,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002523}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002524def: InstRW<[HWWriteResGroup173], (instregex "VDIVPDYrr",
2525 "VSQRTPDYr")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002526
Craig Topper8104f262018-04-02 05:33:28 +00002527def HWWriteResGroup174 : SchedWriteRes<[HWPort0,HWPort23,HWPort15,HWFPDivider]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002528 let Latency = 42;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002529 let NumMicroOps = 4;
Craig Topper8104f262018-04-02 05:33:28 +00002530 let ResourceCycles = [2,1,1,28];
Gadi Haberd76f7b82017-08-28 10:04:16 +00002531}
Simon Pilgrimec2f8782018-03-21 16:19:03 +00002532def: InstRW<[HWWriteResGroup174], (instregex "VDIVPDYrm",
2533 "VSQRTPDYm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002534
2535def HWWriteResGroup175 : SchedWriteRes<[HWPort1,HWPort4,HWPort5,HWPort6,HWPort23,HWPort237,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002536 let Latency = 41;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002537 let NumMicroOps = 18;
2538 let ResourceCycles = [1,1,2,3,1,1,1,8];
2539}
2540def: InstRW<[HWWriteResGroup175], (instregex "VMCLEARm")>;
2541
2542def HWWriteResGroup176 : SchedWriteRes<[HWPort5,HWPort0156]> {
2543 let Latency = 42;
2544 let NumMicroOps = 22;
2545 let ResourceCycles = [2,20];
2546}
Craig Topper2d451e72018-03-18 08:38:06 +00002547def: InstRW<[HWWriteResGroup176], (instrs RDTSCP)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002548
2549def HWWriteResGroup177 : SchedWriteRes<[HWPort0,HWPort01,HWPort23,HWPort05,HWPort06,HWPort015,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002550 let Latency = 61;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002551 let NumMicroOps = 64;
2552 let ResourceCycles = [2,2,8,1,10,2,39];
2553}
2554def: InstRW<[HWWriteResGroup177], (instregex "FLDENVm")>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002555
2556def HWWriteResGroup178 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002557 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002558 let NumMicroOps = 88;
2559 let ResourceCycles = [4,4,31,1,2,1,45];
2560}
Craig Topper2d451e72018-03-18 08:38:06 +00002561def: InstRW<[HWWriteResGroup178], (instrs FXRSTOR64)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002562
2563def HWWriteResGroup179 : SchedWriteRes<[HWPort0,HWPort6,HWPort23,HWPort05,HWPort06,HWPort15,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002564 let Latency = 64;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002565 let NumMicroOps = 90;
2566 let ResourceCycles = [4,2,33,1,2,1,47];
2567}
Craig Topper2d451e72018-03-18 08:38:06 +00002568def: InstRW<[HWWriteResGroup179], (instrs FXRSTOR)>;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002569
2570def HWWriteResGroup180 : SchedWriteRes<[HWPort5,HWPort01,HWPort0156]> {
2571 let Latency = 75;
2572 let NumMicroOps = 15;
2573 let ResourceCycles = [6,3,6];
2574}
2575def: InstRW<[HWWriteResGroup180], (instregex "FNINIT")>;
2576
2577def HWWriteResGroup181 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort01,HWPort0156]> {
2578 let Latency = 98;
2579 let NumMicroOps = 32;
2580 let ResourceCycles = [7,7,3,3,1,11];
2581}
2582def: InstRW<[HWWriteResGroup181], (instregex "DIV(16|32|64)r")>;
2583
2584def HWWriteResGroup182 : SchedWriteRes<[HWPort0,HWPort1,HWPort5,HWPort6,HWPort06,HWPort0156]> {
2585 let Latency = 112;
2586 let NumMicroOps = 66;
2587 let ResourceCycles = [4,2,4,8,14,34];
2588}
2589def: InstRW<[HWWriteResGroup182], (instregex "IDIV(16|32|64)r")>;
2590
2591def HWWriteResGroup183 : SchedWriteRes<[HWPort0,HWPort1,HWPort4,HWPort5,HWPort6,HWPort237,HWPort06,HWPort0156]> {
Gadi Haber2cf601f2017-12-08 09:48:44 +00002592 let Latency = 115;
Gadi Haberd76f7b82017-08-28 10:04:16 +00002593 let NumMicroOps = 100;
2594 let ResourceCycles = [9,9,11,8,1,11,21,30];
2595}
2596def: InstRW<[HWWriteResGroup183], (instregex "FSTENVm")>;
Quentin Colombet95e05312014-08-18 17:55:59 +00002597
Gadi Haber2cf601f2017-12-08 09:48:44 +00002598def HWWriteResGroup184 : SchedWriteRes<[HWPort0, HWPort5, HWPort15, HWPort015, HWPort06, HWPort23]> {
2599 let Latency = 26;
2600 let NumMicroOps = 12;
2601 let ResourceCycles = [2,2,1,3,2,2];
2602}
Craig Topper17a31182017-12-16 18:35:29 +00002603def: InstRW<[HWWriteResGroup184], (instrs VGATHERDPDrm,
2604 VPGATHERDQrm,
2605 VPGATHERDDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002606
2607def HWWriteResGroup185 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2608 let Latency = 24;
2609 let NumMicroOps = 22;
2610 let ResourceCycles = [5,3,4,1,5,4];
2611}
Craig Topper17a31182017-12-16 18:35:29 +00002612def: InstRW<[HWWriteResGroup185], (instrs VGATHERQPDYrm,
2613 VPGATHERQQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002614
2615def HWWriteResGroup186 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2616 let Latency = 28;
2617 let NumMicroOps = 22;
2618 let ResourceCycles = [5,3,4,1,5,4];
2619}
Craig Topper17a31182017-12-16 18:35:29 +00002620def: InstRW<[HWWriteResGroup186], (instrs VPGATHERQDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002621
2622def HWWriteResGroup187 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2623 let Latency = 25;
2624 let NumMicroOps = 22;
2625 let ResourceCycles = [5,3,4,1,5,4];
2626}
Craig Topper17a31182017-12-16 18:35:29 +00002627def: InstRW<[HWWriteResGroup187], (instrs VPGATHERQDrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002628
2629def HWWriteResGroup188 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2630 let Latency = 27;
2631 let NumMicroOps = 20;
2632 let ResourceCycles = [3,3,4,1,5,4];
2633}
Craig Topper17a31182017-12-16 18:35:29 +00002634def: InstRW<[HWWriteResGroup188], (instrs VGATHERDPDYrm,
2635 VPGATHERDQYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002636
2637def HWWriteResGroup189 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2638 let Latency = 27;
2639 let NumMicroOps = 34;
2640 let ResourceCycles = [5,3,8,1,9,8];
2641}
Craig Topper17a31182017-12-16 18:35:29 +00002642def: InstRW<[HWWriteResGroup189], (instrs VGATHERDPSYrm,
2643 VPGATHERDDYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002644
2645def HWWriteResGroup190 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2646 let Latency = 23;
2647 let NumMicroOps = 14;
2648 let ResourceCycles = [3,3,2,1,3,2];
2649}
Craig Topper17a31182017-12-16 18:35:29 +00002650def: InstRW<[HWWriteResGroup190], (instrs VGATHERQPDrm,
2651 VPGATHERQQrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002652
2653def HWWriteResGroup191 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2654 let Latency = 28;
2655 let NumMicroOps = 15;
2656 let ResourceCycles = [3,3,2,1,4,2];
2657}
Craig Topper17a31182017-12-16 18:35:29 +00002658def: InstRW<[HWWriteResGroup191], (instrs VGATHERQPSYrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002659
2660def HWWriteResGroup192 : SchedWriteRes<[HWPort0, HWPort5, HWPort06, HWPort15, HWPort015, HWPort23]> {
2661 let Latency = 25;
2662 let NumMicroOps = 15;
2663 let ResourceCycles = [3,3,2,1,4,2];
2664}
Craig Topper17a31182017-12-16 18:35:29 +00002665def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm,
2666 VGATHERDPSrm)>;
Gadi Haber2cf601f2017-12-08 09:48:44 +00002667
Nadav Roteme7b6a8a2013-03-28 22:34:46 +00002668} // SchedModel